/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* ==========================================================================
   SGI PRO — MainLayout (scoped) — F2
   Shell em grid: sidebar fixa + coluna principal (topbar + breadcrumb + main).
   Desktop: sidebar full / rail. Mobile (<= 768px): sidebar vira off-canvas.
   ========================================================================== */

.sgsi-shell[b-0fnceszpby] {
    display: grid;
    grid-template-columns: var(--sgsi-sidebar-width) 1fr;
    grid-template-areas: "sidebar main";
    min-height: 100vh;
    background: var(--sgsi-color-bg);
    transition: grid-template-columns var(--sgsi-transition);
}

.sgsi-shell--rail[b-0fnceszpby] {
    grid-template-columns: var(--sgsi-sidebar-width-collapsed) 1fr;
}

/* ============================ SIDEBAR ============================ */
.sgsi-shell__sidebar[b-0fnceszpby] {
    grid-area: sidebar;
    display: flex;
    flex-direction: column;
    background: var(--sgsi-color-sidebar-bg);
    color: var(--sgsi-color-sidebar-fg);
    border-right: 1px solid color-mix(in srgb, var(--sgsi-color-sidebar-bg) 70%, #000);
    position: sticky;
    top: 0;
    height: 100vh;
    overflow: hidden;
    z-index: var(--sgsi-z-sidebar);
}

.sgsi-shell__brand[b-0fnceszpby] {
    flex: 0 0 var(--sgsi-topbar-height);
    display: flex;
    align-items: center;
    padding: 0 var(--sgsi-space-3);
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}

.sgsi-brand[b-0fnceszpby] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    color: var(--sgsi-color-sidebar-active-fg);
    text-decoration: none;
    overflow: hidden;
}

.sgsi-brand:hover[b-0fnceszpby] { text-decoration: none; }

.sgsi-brand__mark[b-0fnceszpby] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 2rem;
    height: 2rem;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-brand);
    color: var(--sgsi-color-on-brand);
}

.sgsi-brand__text[b-0fnceszpby] { display: flex; flex-direction: column; line-height: 1.1; overflow: hidden; }
.sgsi-brand__name[b-0fnceszpby] { font-size: var(--sgsi-font-size-lg); letter-spacing: 0.02em; white-space: nowrap; }
.sgsi-brand__name strong[b-0fnceszpby] { color: var(--sgsi-color-brand); }
.sgsi-brand__tag[b-0fnceszpby] {
    font-size: var(--sgsi-font-size-xs);
    color: var(--sgsi-color-sidebar-fg-muted);
    white-space: nowrap;
}

.sgsi-shell--rail .sgsi-brand__text[b-0fnceszpby] { display: none; }

/* ---------------------- MODO RAIL — rótulos da navegação ----------------------
   Estas regras vieram de NavMenu.razor.css, onde estavam escritas com
   `:host-context(.sgsi-shell--rail)` e por isso NUNCA se aplicaram: `:host-context`
   é seletor de Shadow DOM, e o isolamento de CSS do Blazor é reescrita de seletor.
   O resultado medido em 28/08 era a sidebar em 64px com os rótulos ainda visíveis,
   vazando para fora do trilho.

   Aqui funcionam porque `.sgsi-shell--rail` é ESTE componente (carrega o atributo de
   escopo deste arquivo) e `::deep` desliga o escopo para os descendentes — que é
   exatamente o que o comentário de lá já dizia ser a intenção.

   GATEADAS PELO DESKTOP, e não desfeitas no mobile: o trilho é preferência de
   desktop, mas mora no localStorage e portanto CHEGA no celular, onde a sidebar já
   virou gaveta de largura cheia — ali amputar rótulo seria defeito. A contrapartida
   "desfaz no mobile" que o `.sgsi-brand__text` usa não serve aqui: desfazer um
   `display: none` exige saber o display BASE de cada rótulo, e `revert`/`initial`
   devolvem o valor do user-agent (`inline`), não a regra do autor — o rótulo de
   grupo é `block`. Gatear pela largura não precisa saber nenhum deles.
   O 769px é o complemento exato do `max-width: 768px` usado no bloco RESPONSIVO. */
@media (min-width: 769px) {
    .sgsi-shell--rail[b-0fnceszpby]  .sgsi-nav-group__label,
    .sgsi-shell--rail[b-0fnceszpby]  .sgsi-nav-group__chevron,
    .sgsi-shell--rail[b-0fnceszpby]  .sgsi-nav-link__label {
        display: none;
    }

    .sgsi-shell--rail[b-0fnceszpby]  .sgsi-nav-group__head,
    .sgsi-shell--rail[b-0fnceszpby]  .sgsi-nav-link {
        justify-content: center;
        padding-left: var(--sgsi-space-3);
    }

    .sgsi-shell--rail[b-0fnceszpby]  .sgsi-nav-group__items {
        margin: 0;
    }
}

.sgsi-shell__nav[b-0fnceszpby] {
    flex: 1 1 auto;
    overflow-y: auto;
    overflow-x: hidden;
}

/* ============================ BACKDROP (mobile) ============================ */
.sgsi-shell__backdrop[b-0fnceszpby] {
    display: none;
    position: fixed;
    inset: 0;
    border: 0;
    padding: 0;
    background: var(--sgsi-color-backdrop);
    z-index: var(--sgsi-z-backdrop);
    cursor: pointer;
}

/* ============================ COLUNA PRINCIPAL ============================ */
.sgsi-shell__main[b-0fnceszpby] {
    grid-area: main;
    display: flex;
    flex-direction: column;
    min-width: 0; /* permite truncamento dentro do grid */
}

/* ------------------------- TOPBAR ------------------------- */
.sgsi-topbar[b-0fnceszpby] {
    position: sticky;
    top: 0;
    z-index: var(--sgsi-z-topbar);
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-2);
    height: var(--sgsi-topbar-height);
    padding: 0 var(--sgsi-space-4);
    background: var(--sgsi-color-topbar-bg);
    border-bottom: 1px solid var(--sgsi-color-border);
    box-shadow: var(--sgsi-shadow-xs);
}

.sgsi-topbar__spacer[b-0fnceszpby] { flex: 1 1 auto; }

.sgsi-topbar__search[b-0fnceszpby] {
    position: relative;
    flex: 0 1 26rem;
    min-width: 0;
}

.sgsi-topbar__search-icon[b-0fnceszpby] {
    position: absolute;
    left: var(--sgsi-space-3);
    top: 50%;
    transform: translateY(-50%);
    color: var(--sgsi-color-text-subtle);
    pointer-events: none;
    display: inline-flex;
}

.sgsi-topbar__search-input[b-0fnceszpby] {
    width: 100%;
    height: 2.25rem;
    padding: 0 var(--sgsi-space-3) 0 calc(var(--sgsi-space-6) + 2px);
    border: 1px solid var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-pill);
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text);
    font-size: var(--sgsi-font-size-sm);
}

.sgsi-topbar__search-input[b-0fnceszpby]::placeholder { color: var(--sgsi-color-text-subtle); }
.sgsi-topbar__search-input:focus-visible[b-0fnceszpby] {
    outline: var(--sgsi-focus-ring-width) solid var(--sgsi-color-focus-ring);
    outline-offset: var(--sgsi-focus-ring-offset);
    background: var(--sgsi-color-surface);
}

.sgsi-topbar__tenant[b-0fnceszpby] { display: flex; align-items: center; }
/* As regras de visibilidade do toggle de tema dependem de [data-bs-theme] no
   <html> (ancestral fora do escopo do componente) e por isso vivem no app.css. */

/* ------------------------- USER MENU ------------------------- */
.sgsi-usermenu[b-0fnceszpby] { position: relative; }

.sgsi-usermenu__btn[b-0fnceszpby] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-2);
    height: 2.5rem;
    padding: 0 var(--sgsi-space-2);
    border: 1px solid transparent;
    border-radius: var(--sgsi-radius-md);
    background: transparent;
    color: var(--sgsi-color-text);
    cursor: pointer;
    /* ── 12rem CORTAVA O NOME DE QUEM ESTÁ LOGADO (03/09) ──
       MEDIDO no app a 1600x900: `.sgsi-usermenu__name` com scrollWidth 186px e clientWidth 120px
       — 66px de texto fora da vista, com o botão travado nos 192px deste max-width. O usuário lê
       "Owner Descartável 58…", e no print do admin de plataforma "Administrador d…". O nome da
       conta é o que diz EM QUAL identidade a pessoa está agindo; num produto onde o mesmo
       consultor troca de tenant, cortá-lo é caro.
       Havia espaço de sobra: o `.sgsi-topbar__spacer` media 296px vazios na mesma medição. 20rem
       é TETO, não largura — o botão continua dimensionado pelo conteúdo (186px + o cromo), e
       continua sendo item flexível da topbar, então encolhe antes de empurrar qualquer vizinho
       quando a barra aperta. Abaixo de 769px o nome já sai por `display: none` (bloco
       RESPONSIVO), então telas estreitas não são afetadas por este número. */
    max-width: 20rem;
}

.sgsi-usermenu__btn:hover[b-0fnceszpby] { background: var(--sgsi-color-surface-2); }
.sgsi-usermenu__avatar[b-0fnceszpby] { display: inline-flex; color: var(--sgsi-color-text-muted); }
.sgsi-usermenu__name[b-0fnceszpby] {
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-medium);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.sgsi-usermenu__caret[b-0fnceszpby] { color: var(--sgsi-color-text-subtle); display: inline-flex; }

.sgsi-usermenu__panel[b-0fnceszpby] {
    position: absolute;
    right: 0;
    top: calc(100% + var(--sgsi-space-2));
    min-width: 14rem;
    padding: var(--sgsi-space-1);
    background: var(--sgsi-color-surface);
    border: 1px solid var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-md);
    box-shadow: var(--sgsi-shadow-md);
    z-index: var(--sgsi-z-toast);
}

.sgsi-usermenu__panel form[b-0fnceszpby] { margin: 0; }

.sgsi-usermenu__item[b-0fnceszpby] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    width: 100%;
    padding: var(--sgsi-space-2) var(--sgsi-space-3);
    border: 0;
    border-radius: var(--sgsi-radius-sm);
    background: transparent;
    color: var(--sgsi-color-text);
    font-size: var(--sgsi-font-size-sm);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
}

.sgsi-usermenu__item:hover[b-0fnceszpby] { background: var(--sgsi-color-surface-2); text-decoration: none; }
.sgsi-usermenu__item--danger[b-0fnceszpby] { color: var(--sgsi-color-danger); }
.sgsi-usermenu__sep[b-0fnceszpby] {
    height: 1px;
    margin: var(--sgsi-space-1) 0;
    background: var(--sgsi-color-border);
}

/* ------------------------- BREADCRUMB ------------------------- */
.sgsi-breadcrumb[b-0fnceszpby] {
    padding: var(--sgsi-space-3) var(--sgsi-space-5) 0;
}

.sgsi-breadcrumb ol[b-0fnceszpby] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--sgsi-space-2);
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

.sgsi-breadcrumb li + li[b-0fnceszpby]::before {
    content: "/";
    margin-right: var(--sgsi-space-2);
    color: var(--sgsi-color-text-subtle);
}

.sgsi-breadcrumb a[b-0fnceszpby] { color: var(--sgsi-color-text-muted); }
.sgsi-breadcrumb a:hover[b-0fnceszpby] { color: var(--sgsi-color-accent); }
.sgsi-breadcrumb [aria-current="page"][b-0fnceszpby] {
    color: var(--sgsi-color-text);
    font-weight: var(--sgsi-font-weight-medium);
}

/* ------------------------- CONTEÚDO ------------------------- */
.sgsi-content[b-0fnceszpby] {
    flex: 1 1 auto;
    padding: var(--sgsi-space-5);
    outline: none; /* alvo do skip-link; foco gerenciado pelo FocusOnNavigate */
}

.sgsi-content__inner[b-0fnceszpby] {
    max-width: var(--sgsi-content-max-width);
    margin: 0 auto;
}

/* O MODO COMPACTO PARAVA NA PORTA DO SHELL (30/08). A onda que levou
   [data-sgsi-densidade="compacto"] ao cromo dos CONTAINERS (cartão, corpo de página, modal,
   formulário) mora em sgsi-componentes.css — e por isso não alcançou a moldura que envolve
   TODOS eles, que é esta e vive num .razor.css isolado. O irmão de fora, de novo.

   O que isso custava: 24px em cima + 24px embaixo em toda tela, do dashboard ao registro de
   riscos, sem mudar um pixel quando o usuário liga a densidade compacta no topbar. Numa
   viewport real de 1366x768 com abas do Chrome (~657px úteis), 16px valem uma linha inteira
   da grade — a diferença entre abrir mostrando dado e abrir mostrando só cabeçalho.

   Reduz para space-4 (16px) SÓ sob o atributo: o modo cômodo, que é o padrão, fica intocado —
   mudar o respiro default do shell é decisão de desenho para as ~200 telas de uma vez, não
   conserto. A alavanca é que tinha de alcançar o que ela promete. */
[data-sgsi-densidade="compacto"] .sgsi-content[b-0fnceszpby] {
    padding: var(--sgsi-space-4);
}

/* ============================ RESPONSIVO ============================ */
@media (max-width: 768px) {
    .sgsi-shell[b-0fnceszpby],
    .sgsi-shell--rail[b-0fnceszpby] {
        grid-template-columns: 1fr;
        grid-template-areas: "main";
    }

    .sgsi-shell__sidebar[b-0fnceszpby] {
        position: fixed;
        top: 0;
        left: 0;
        width: var(--sgsi-sidebar-width);
        height: 100vh;
        transform: translateX(-100%);
        transition: transform var(--sgsi-transition);
        box-shadow: var(--sgsi-shadow-lg);
    }

    /* No mobile a sidebar nunca é rail; mostra os rótulos. */
    .sgsi-shell--rail .sgsi-brand__text[b-0fnceszpby] { display: flex; }


    .sgsi-shell--mobile-open .sgsi-shell__sidebar[b-0fnceszpby] {
        transform: translateX(0);
    }

    .sgsi-shell--mobile-open .sgsi-shell__backdrop[b-0fnceszpby] {
        display: block;
    }

    .sgsi-topbar__search[b-0fnceszpby] { flex: 1 1 auto; }
    .sgsi-usermenu__name[b-0fnceszpby] { display: none; }
    .sgsi-content[b-0fnceszpby] { padding: var(--sgsi-space-4); }
    .sgsi-breadcrumb[b-0fnceszpby] { padding: var(--sgsi-space-3) var(--sgsi-space-4) 0; }
}

/* No desktop o backdrop nunca aparece. */
@media (min-width: 769px) {
    .sgsi-shell__backdrop[b-0fnceszpby] { display: none !important; }
}

/* ============================ BLAZOR ERROR UI ============================ */
#blazor-error-ui[b-0fnceszpby] {
    color-scheme: light only;
    background: var(--sgsi-color-warning-bg);
    color: var(--sgsi-color-text);
    bottom: 0;
    box-shadow: var(--sgsi-shadow-lg);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.75rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: var(--sgsi-z-toast);
}

#blazor-error-ui .dismiss[b-0fnceszpby] {
    cursor: pointer;
    position: absolute;
    right: 0.75rem;
    top: 0.5rem;
}
/* /Components/Layout/NavMenu.razor.rz.scp.css */
/* ==========================================================================
   SGI PRO — NavMenu (scoped) — F2
   Navegação da sidebar (navy escuro). Grupos colapsáveis; no modo
   sidebar-colapsada (.sgsi-shell--rail) só os ícones ficam visíveis.
   ========================================================================== */

.sgsi-nav[b-fmwyamd1ro] {
    display: flex;
    flex-direction: column;
    padding: var(--sgsi-space-2);
    gap: var(--sgsi-space-1);
}

/* ---- Grupo ---- */
.sgsi-nav-group__head[b-fmwyamd1ro] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    width: 100%;
    padding: var(--sgsi-space-2) var(--sgsi-space-3);
    border: 0;
    border-radius: var(--sgsi-radius-md);
    background: transparent;
    color: var(--sgsi-color-sidebar-fg-muted);
    font-size: var(--sgsi-font-size-xs);
    font-weight: var(--sgsi-font-weight-semibold);
    letter-spacing: var(--sgsi-letter-spacing-caps);
    text-transform: uppercase;
    text-align: left;
    cursor: pointer;
    transition: color var(--sgsi-transition-fast), background var(--sgsi-transition-fast);
}

.sgsi-nav-group__head:hover[b-fmwyamd1ro] {
    color: var(--sgsi-color-sidebar-active-fg);
    background: var(--sgsi-color-sidebar-active-bg);
}

/* "VOCÊ ESTÁ AQUI" — cabeçalho do grupo que contém a rota atual (01/09).

   O menu é longo e dobrado em grupos por fase do SGI, e o único sinal de posição era o
   `.sgsi-nav-link.active` lá DENTRO do painel: invisível com o grupo recolhido, e some de vez no
   modo rail, onde os rótulos não aparecem. Marcar o cabeçalho dá o nível que faltava — a pessoa
   lê a fase do SGI em que está antes de ler o item.

   SEM CONTAGEM ESCRITA À MÃO (01/09): esta prosa dizia "76 itens em 11 grupos" e a de
   `.sgsi-nav-link__label`, lá embaixo, dizia "72 itens" — dois números decorativos no MESMO
   arquivo, nenhum dos dois preso ao catálogo, um deles já mentindo. Nenhuma das duas regras
   depende da quantidade; quem quiser o número lê `CatalogoNavegacao.Grupos`, que é quem o
   define.

   POR QUE fg + bg e NÃO a barrinha de marca que o item ativo usa: MEDIDO na página, com a
   cadeia de folhas do App.razor e o valor COMPUTADO (não o token de fábrica), o
   --sgsi-color-brand dá 1,05:1 contra o fundo já tingido deste cabeçalho no tema claro. No item
   ativo ela é reforço decorativo sobre um estado que já se lê; aqui seria o sinal PRINCIPAL, e
   1,05:1 é uma barra que ninguém enxerga. O par que sustenta é o de sempre — o rótulo sai do
   fg-muted para o active-fg: 5,93:1 → 10,59:1 no claro, 5,84:1 → 14,28:1 no escuro, com o fundo
   tingido delimitando a faixa. Nenhuma cor nova: os mesmos dois tokens do :hover e do item ativo.

   Que o estado igual ao :hover não é ambiguidade: hover é transitório e segue o ponteiro; este
   fica, e o item aceso dentro do painel confirma qual é. */
.sgsi-nav-group.is-atual .sgsi-nav-group__head[b-fmwyamd1ro] {
    color: var(--sgsi-color-sidebar-active-fg);
    background: var(--sgsi-color-sidebar-active-bg);
}

.sgsi-nav-group__icon[b-fmwyamd1ro] {
    display: inline-flex;
    flex: 0 0 auto;
}

/* min-width:0 é o que FAZ a reticência funcionar dentro de um flex container. Sem ele o item
   flex herda min-width:auto, que o proíbe de encolher abaixo do próprio conteúdo — e com
   white-space:nowrap esse conteúdo é a largura do rótulo inteiro. Resultado: o texto não corta,
   ele TRANSBORDA a barra. Ver a nota gêmea em .sgsi-nav-link__label (E2E-999). */
.sgsi-nav-group__label[b-fmwyamd1ro] {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.sgsi-nav-group__chevron[b-fmwyamd1ro] {
    display: inline-flex;
    flex: 0 0 auto;
    transition: transform var(--sgsi-transition);
}

.sgsi-nav-group.is-open .sgsi-nav-group__chevron[b-fmwyamd1ro] {
    transform: rotate(180deg);
}

/* ---- Itens ---- */
.sgsi-nav-group__items[b-fmwyamd1ro] {
    list-style: none;
    margin: var(--sgsi-space-1) 0 var(--sgsi-space-2);
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

/* ── O `<a>` DO ITEM É RENDERIZADO PELO NavLink, QUE É COMPONENTE — E COMPONENTE NÃO RECEBE O
   ATRIBUTO DE ESCOPO (20/09). O isolamento de CSS do Blazor reescreve `.sgsi-nav-link` para
   `.sgsi-nav-link[b-xxx]` e só carimba `b-xxx` nos ELEMENTOS escritos no markup deste arquivo. A
   classe está no `<a>` que o `NavLink` gera (NavMenu.razor), então as quatro regras abaixo eram
   CSS morto — a mesma armadilha já documentada para o SgsiCard e para o `:host-context` do rail.
   Visto na varredura de 20/09 em 100% das capturas: sem `display:flex` o `<a>` fica inline, o
   ícone sobra numa linha e o rótulo (com `nowrap` inerte) desce para a seguinte, colado na borda,
   sem padding, hover nem estado ativo. `::deep` a partir do `<ul>` (markup DESTE componente, que
   recebe o carimbo) é o que faz o seletor alcançar o filho gerado. */
.sgsi-nav-group__items[b-fmwyamd1ro]  .sgsi-nav-link {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    padding: var(--sgsi-space-2) var(--sgsi-space-3);
    padding-left: var(--sgsi-space-5);
    border-radius: var(--sgsi-radius-md);
    color: var(--sgsi-color-sidebar-fg);
    font-size: var(--sgsi-font-size-sm);
    text-decoration: none;
    transition: color var(--sgsi-transition-fast), background var(--sgsi-transition-fast);
}

.sgsi-nav-group__items[b-fmwyamd1ro]  .sgsi-nav-link:hover {
    color: var(--sgsi-color-sidebar-active-fg);
    background: var(--sgsi-color-sidebar-active-bg);
    text-decoration: none;
}

.sgsi-nav-group__items[b-fmwyamd1ro]  .sgsi-nav-link.active {
    color: var(--sgsi-color-sidebar-active-fg);
    background: var(--sgsi-color-sidebar-active-bg);
    font-weight: var(--sgsi-font-weight-medium);
    box-shadow: inset 3px 0 0 0 var(--sgsi-color-brand);
}

.sgsi-nav-link__icon[b-fmwyamd1ro] {
    display: inline-flex;
    flex: 0 0 auto;
    opacity: 0.85;
}

/* E2E-999 — O RÓTULO LONGO TRANSBORDAVA A BARRA EM VEZ DE CORTAR. As três declarações abaixo já
   estavam aqui e não bastavam: o rótulo é item de um flex container (.sgsi-nav-link) e, sem
   `min-width: 0`, o min-width:auto padrão o impede de encolher abaixo do conteúdo — com nowrap,
   o conteúdo mede a frase inteira, então `overflow:hidden`/`text-overflow:ellipsis` nunca têm o
   que cortar. Medido em 930px de viewport: "Papéis e responsabilidades (RASCI)" pedia 245px numa
   barra de 256px e quebrava o ritmo vertical do menu. O conserto é da REGRA, não do rótulo: vale
   para todo item de nome comprido, o de hoje e o próximo, e o texto completo continua acessível
   pelo title/aria-label que o NavMenu já põe em cada link. */
.sgsi-nav-link__label[b-fmwyamd1ro] {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Foco visível dentro da sidebar escura (contraste com o anel claro). */
.sgsi-nav-group__head:focus-visible[b-fmwyamd1ro],
.sgsi-nav-group__items[b-fmwyamd1ro]  .sgsi-nav-link:focus-visible {
    outline: var(--sgsi-focus-ring-width) solid var(--sgsi-color-on-brand);
    outline-offset: -2px;
}

/* ==========================================================================
   MODO RAIL (sidebar colapsada) — as regras NÃO moram aqui.

   Moravam, e eram CSS MORTO: estavam escritas com `:host-context(...)`, que é
   seletor de SHADOW DOM. O isolamento de CSS do Blazor é reescrita de seletor
   (`.x` vira `.x[b-abc]`), não Shadow DOM — `:host-context` nunca casa nada, e o
   navegador descarta a regra inteira. MEDIDO em 28/08 com a sidebar recolhida:
   sidebar em 64px e `.sgsi-nav-group__label` ainda com `display: block`, ou seja,
   os rótulos vazavam para fora do trilho.

   A classe `.sgsi-shell--rail` é do MainLayout, e é lá que as regras funcionam,
   com `::deep` para atravessar até o markup deste componente. Ver o bloco
   "MODO RAIL — rótulos da navegação" em MainLayout.razor.css.
   ========================================================================== */
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-gy9pheor86],
.components-reconnect-repeated-attempt-visible[b-gy9pheor86],
.components-reconnect-failed-visible[b-gy9pheor86],
.components-pause-visible[b-gy9pheor86],
.components-resume-failed-visible[b-gy9pheor86],
.components-rejoining-animation[b-gy9pheor86] {
    display: none;
}

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


#components-reconnect-modal[b-gy9pheor86] {
    background-color: var(--sgsi-color-surface, #fff);
    color: var(--sgsi-color-text, #1a1a1a);
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 1px solid var(--sgsi-color-border, transparent);
    border-radius: var(--sgsi-radius-lg);
    box-shadow: var(--sgsi-shadow-lg);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-gy9pheor86 0.5s both;
    &[open]

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

}

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

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

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

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

    100% {
        opacity: 1;
    }
}

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

    100% {
        opacity: 0;
    }
}

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

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

#components-reconnect-modal button[b-gy9pheor86] {
    border: 0;
    background-color: var(--sgsi-color-brand, #6b9ed2);
    color: var(--sgsi-color-on-brand, #fff);
    padding: 4px 24px;
    border-radius: 4px;
    cursor: pointer;
}

    #components-reconnect-modal button:hover[b-gy9pheor86] {
        background-color: var(--sgsi-color-brand-hover, #3b6ea2);
    }

    #components-reconnect-modal button:active[b-gy9pheor86] {
        background-color: var(--sgsi-color-brand-active, #6b9ed2);
    }

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

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

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

@keyframes components-rejoining-animation-b-gy9pheor86 {
    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/Pages/Assinatura/CartaoPlano.razor.rz.scp.css */
/* SGI PRO — CartaoPlano (CSS isolado): visual do card da vitrine de planos de /minha-assinatura.
   Substitui os estilos inline duplicados dos dois grids antigos; cores/espaços/tipos via tokens
   reais (--sgsi-*, sgsi-tokens.css) — os antigos --cor-* eram fantasmas e caíam sempre no
   fallback Bootstrap (azul errado + dark mode furado). */

/* O nome do plano virou <h3> (era <strong>) para que a vitrine exista na navegação por
   cabeçalhos. O h3 traz margem e tamanho do reboot, que empurrariam o cartão inteiro: estas
   quatro linhas devolvem exatamente a métrica que o <strong> tinha, sem devolver o defeito. */
.cartao-plano__nome[b-rfs7shexfl] {
    margin: 0;
    font-size: var(--sgsi-font-size-md);
    font-weight: var(--sgsi-font-weight-semibold);
    line-height: var(--sgsi-line-height-tight);
}

.cartao-plano__cab[b-rfs7shexfl] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--sgsi-space-2);
    flex-wrap: wrap;
}

/* Destaque do plano vigente: anel interno de 1px sobre a borda de 1px do .sgsi-card equivale ao
   antigo "border 2px" sem deslocar o layout em relação aos cards vizinhos. */
.cartao-plano--atual[b-rfs7shexfl] {
    border-color: var(--sgsi-color-brand);
    box-shadow: inset 0 0 0 1px var(--sgsi-color-brand), var(--sgsi-shadow-sm);
}

.cartao-plano__familia[b-rfs7shexfl] { margin: 0.15rem 0; }

.cartao-plano__preco[b-rfs7shexfl] {
    margin: var(--sgsi-space-2) 0;
    font-size: 1.25rem;
    font-weight: var(--sgsi-font-weight-semibold);
    font-variant-numeric: tabular-nums;
}

.cartao-plano__periodo[b-rfs7shexfl] {
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-normal);
}

.cartao-plano__limites[b-rfs7shexfl] {
    margin: 0 0 var(--sgsi-space-3);
    min-height: 2.5em; /* reserva 2 linhas → botões alinhados entre cards da mesma grade */
}

/* ── A AFORDÂNCIA DE "O CARTÃO INTEIRO CLICA" (03/09) ──
   Só o cartão que TEM ação recebe cursor de mão e realce no hover. O cartão sem ação (plano
   vigente, ou família cuja troca não é self-service) fica exatamente como está: nenhum sinal
   de que se possa clicar nele, porque clicar não faz nada — prometer clique e não entregar é
   o mesmo defeito que a pergunta do dono descreveu, só que ao contrário.

   O par hover/focus-within é DELIBERADO: o mouse vê o cartão realçar sob o ponteiro; o teclado
   vê o MESMO cartão realçar quando o <button> lá dentro recebe foco (o cartão não é focável —
   ver o porquê no cabeçalho do .razor). Sem o :focus-within, quem navega por Tab veria só o
   anel do botão e não teria como saber que a superfície inteira responde ao ponteiro. */
.cartao-plano--acionavel[b-rfs7shexfl] {
    cursor: pointer;
    transition: border-color var(--sgsi-transition-fast), box-shadow var(--sgsi-transition-fast);
}

.cartao-plano--acionavel:hover[b-rfs7shexfl] {
    border-color: var(--sgsi-color-brand);
    box-shadow: var(--sgsi-shadow-md);
}

.cartao-plano--acionavel:focus-within[b-rfs7shexfl] {
    border-color: var(--sgsi-color-brand);
    outline: var(--sgsi-focus-ring-width) solid var(--sgsi-color-focus-ring);
    outline-offset: var(--sgsi-focus-ring-offset);
}

/* Respeita quem pediu menos movimento: a transição é enfeite, o realce não. */
@media (prefers-reduced-motion: reduce) {
    .cartao-plano--acionavel[b-rfs7shexfl] {
        transition: none;
    }
}

.cartao-plano__selo[b-rfs7shexfl] { margin-bottom: var(--sgsi-space-2); }

/* A frase do "por que não há botão" ocupa o lugar do botão: mesma margem superior que o
   .cartao-plano__limites deixa, e um corpo menor — é explicação, não ação. */
.cartao-plano__motivo[b-rfs7shexfl] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
}

.cartao-plano__saida[b-rfs7shexfl] { margin-top: var(--sgsi-space-2); }
/* /Components/Pages/BuscaGlobal/BuscaGlobal.razor.rz.scp.css */
/*
    SGI PRO — BuscaGlobal/BuscaGlobal.razor.css (CSS ESCOPADO)
    Único estilo desta página: o realce (<mark class="busca-realce">) do termo
    buscado dentro de código/título/snippet dos resultados. Usa exclusivamente
    tokens do design system (sgsi-componentes.css) — nenhum valor hard-coded de
    cor — para herdar tema claro/escuro automaticamente.

    Por que ::deep: os <mark> são emitidos no markup desta página, mas vivem
    DENTRO do ChildContent do componente SgsiCard. O atributo de isolamento do
    Blazor fica no elemento-host do SgsiCard, não nos filhos projetados; ::deep
    perfura o limite de escopo para alcançar os <mark> sem vazar para outras
    páginas (o seletor continua prefixado pelo escopo desta página).
*/

[b-fwxmc4mvj6] mark.busca-realce {
    /* Realce tipo "marca-texto": fundo de aviso suave + cor de texto forte.
       padding/raio pequenos para o destaque não quebrar a linha de base. */
    background-color: var(--sgsi-color-warning-bg);
    color: var(--sgsi-color-text);
    padding: 0 0.15em;
    border-radius: var(--sgsi-radius-sm);
    /* Peso um pouco maior reforça o match sem depender só da cor (WCAG: não
       comunicar só por cor) — o fundo + o peso juntos diferenciam o trecho. */
    font-weight: 600;
    /* Anula qualquer text-decoration herdada do link pai no código/título. */
    text-decoration: inherit;
}

/* No snippet (texto-corpo já com cor "muted"), o realce volta a usar a cor de
   texto plena para máximo contraste do trecho casado contra o restante esmaecido. */
[b-fwxmc4mvj6] .sgsi-busca-item__snippet mark.busca-realce {
    color: var(--sgsi-color-text);
}

/* Respeita usuários com preferência de menos contraste/animação: nenhum efeito
   dinâmico aqui, mas garante que o realce continue legível em alto contraste. */
@media (forced-colors: active) {
    [b-fwxmc4mvj6] mark.busca-realce {
        background-color: Highlight;
        color: HighlightText;
        forced-color-adjust: none;
    }
}
/* /Components/Pages/CentroComando/PaginaCentroComando.razor.rz.scp.css */
/* Centro de Comando — grade de grupos + pares rótulo/valor. Tema-agnóstico
   (herda cor/contraste do design system via currentColor/opacity). */

.sgsi-cc-grupos[b-x9mll7q0d7] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(18rem, 100%), 1fr));
    gap: 1rem;
}

.sgsi-cc-kv[b-x9mll7q0d7] {
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.sgsi-cc-linha[b-x9mll7q0d7] {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
}

.sgsi-cc-rotulo[b-x9mll7q0d7] {
    opacity: 0.7;
    font-size: 0.875rem;
}

.sgsi-cc-valor[b-x9mll7q0d7] {
    margin: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    text-align: right;
    white-space: nowrap;
}

.sgsi-cc-rodape[b-x9mll7q0d7] {
    margin-top: 1.25rem;
    opacity: 0.65;
    font-size: 0.8125rem;
}

.sgsi-cc-nota[b-x9mll7q0d7] {
    margin-top: 0.5rem;
    opacity: 0.65;
    font-size: 0.8125rem;
    font-style: italic;
}

/* ---- Índice de gestão (hub God Mode) ------------------------------------
   Era uma grade de SgsiCard: sete molduras com cabeçalho e botão "Abrir"
   próprios, ~110px cada, ANTES do primeiro número da telemetria. Vira uma
   lista de linhas — o cromo por item cai para a borda de uma linha só. */

.sgsi-cc-hub[b-x9mll7q0d7] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(22rem, 100%), 1fr));
    gap: 0.5rem;
}

.sgsi-cc-hub__link[b-x9mll7q0d7] {
    display: flex;
    align-items: flex-start;
    gap: 0.625rem;
    padding: 0.625rem 0.75rem;
    border: 1px solid var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-md, 0.5rem);
    background: var(--sgsi-color-surface);
    color: inherit;
    text-decoration: none;
}

.sgsi-cc-hub__link:hover[b-x9mll7q0d7],
.sgsi-cc-hub__link:focus-visible[b-x9mll7q0d7] {
    border-color: var(--sgsi-color-brand);
    background: var(--sgsi-color-surface-2);
}

.sgsi-cc-hub__icone[b-x9mll7q0d7] {
    color: var(--sgsi-color-brand);
    line-height: 1;
    padding-top: 0.125rem;
}

.sgsi-cc-hub__texto[b-x9mll7q0d7] {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
    min-width: 0;
    flex: 1 1 auto;
}

/* h3 por item: o título continua sendo heading (navegação por leitor de tela)
   sem herdar o tamanho de seção — aqui ele é rótulo de linha, não subtítulo. */
.sgsi-cc-hub__titulo[b-x9mll7q0d7] {
    margin: 0;
    font-size: 0.9375rem;
    font-weight: 600;
    line-height: 1.3;
}

.sgsi-cc-hub__desc[b-x9mll7q0d7] {
    font-size: 0.8125rem;
    opacity: 0.7;
    line-height: 1.35;
}

.sgsi-cc-hub__seta[b-x9mll7q0d7] {
    opacity: 0.5;
    line-height: 1;
    padding-top: 0.125rem;
}
/* /Components/Pages/Clientes/ModalDefinirLogoCliente.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Clientes/ModalDefinirLogoCliente (CSS isolado por componente)
   Pré-visualização do PNG selecionado. Reaproveita os tokens do design-system.

   PREFIXO `sgsi-` (30/08): as classes nasceram como `.logo-preview*`, sem o prefixo que o
   resto da área usa. O escopo do CSS isolado carimba um atributo por componente, então não
   havia colisão a temer — o que havia era um nome genérico o bastante para uma SEGUNDA tela
   de logotipo reusá-lo por conta própria e as duas divergirem em silêncio, cada uma no seu
   escopo. Renomear é barato agora e caro depois da segunda cópia.
   =========================================================================== */

.sgsi-logo-preview[b-b01ru3z6qm] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--sgsi-space-2);
    margin-top: var(--sgsi-space-3);
    padding: var(--sgsi-space-3);
    border: 1px dashed var(--sgsi-color-border-strong);
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-surface-2);
}

.sgsi-logo-preview__rotulo[b-b01ru3z6qm] {
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text-muted);
}

.sgsi-logo-preview__img[b-b01ru3z6qm] {
    max-width: 12rem;
    max-height: 6rem;
    object-fit: contain;
    background: var(--sgsi-color-surface);
    border-radius: var(--sgsi-radius-sm);
    padding: var(--sgsi-space-2);
}
/* /Components/Pages/Compliance/CoberturaPorNorma.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Compliance/CoberturaPorNorma (CSS isolado por componente)

   Só o cartão de NATUREZA da norma alvo vive aqui — o resto da tela usa as
   classes globais .sgsi-risco-stat* e o SgsiDataGrid, que não se redefinem.

   POR QUE ELE TEM BORDA DE DESTAQUE. O cartão responde a pergunta que custava
   uma vaga de plano ao consultor: a norma desta tela é uma LENTE de leitura ou
   uma norma que o produto gerencia (com Declaração de Aplicabilidade própria e
   cota)? Ele precisa ser lido ANTES da tabela — quem só lesse a tabela concluía
   que a ISO/IEC 27018 se resolve pelo Anexo A da ISO/IEC 27001.

   ONDE A BORDA MORA — E POR QUE NÃO É AQUI. Havia neste arquivo um
   `.sgsi-cobertura-natureza { border-left: 4px … }` aplicado ao SgsiCard por
   `Classe="…"`. Ele NUNCA pintou: o compilador Razor carimba o atributo de
   escopo (b-xxxxx) só nos elementos do markup DESTA página, e a section que
   recebe o `Classe` é escrita dentro do SgsiCard, ou seja, no escopo DELE — o
   seletor gerado `.sgsi-cobertura-natureza[b-xjwmu0fedt]` não casava com
   elemento nenhum. `::deep` exigiria um ancestral no markup daqui, e o cartão é
   filho direto do ChildContent do SgsiPagina. A borda passou a ser
   `.sgsi-card--acento-marca` (wwwroot/css/sgsi-componentes.css:415), mesma cor,
   na folha do próprio componente — a mesma correção de BAI-1099/BAI-1100.

   O parágrafo abaixo CONTINUA aqui de direito: ele é escrito no ChildContent, ou
   seja, no markup desta página, e recebe o carimbo de escopo normalmente.

   A cor sai dos tokens do design-system; nada de valor cravado, para o cartão
   acompanhar tema claro/escuro como os irmãos.
   =========================================================================== */

.sgsi-cobertura-natureza__texto[b-l29pfr8xw9] {
    margin: 0 0 var(--sgsi-space-3);
    color: var(--sgsi-color-text-subtle);
}
/* /Components/Pages/Compliance/DetalheCompliance.razor.rz.scp.css */
/* SGI PRO — Compliance/DetalheCompliance (estilos com escopo do componente)
   Tudo via tokens --sgsi-color-* → coerente nos temas claro/escuro. Antes este
   arquivo usava nomes de token INEXISTENTES (--sgsi-borda/--sgsi-marca/--sgsi-texto)
   e caía sempre nos fallbacks literais → a tela IGNORAVA o tema. Corrigido.

   SEM REGRAS DE ABA AQUI (01/09). Este arquivo carregava .sgsi-compliance-abas,
   .sgsi-compliance-aba (+ :hover, .ativa, :focus-visible) e .sgsi-compliance-aba__contagem
   — 45 das 108 linhas — e NENHUMA dessas classes aparecia no markup de
   DetalheCompliance.razor. CSS escopado só alcança o markup do próprio componente e o
   arquivo não usa ::deep, então nem uma aba vinda de componente filho seria atingida: eram
   regras sem elemento nenhum, viajando no SgsiPro.Web.styles.css servido a todo usuário e
   sustentando, em quem lesse o arquivo, a suposição de que a tela tem um sistema de abas que
   ela não tem. O padrão ad-hoc já foi superado: quem quiser abas usa <SgsiTabs>
   (sgsi-componentes.css — "Unifica os padrões ad-hoc (sgsi-recursos-aba /
   sgsi-compliance-aba) num só"), não CSS solto nesta folha. */

.sgsi-compliance-selos[b-q3hy1q033c] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    align-items: center;
}

.sgsi-compliance-mapas[b-q3hy1q033c] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: 0.75rem;
}

.sgsi-compliance-mapa[b-q3hy1q033c] {
    border: 1px solid var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-md);
    padding: 0.75rem 0.9rem;
    background: var(--sgsi-color-surface);
}

.sgsi-compliance-mapa__cab[b-q3hy1q033c] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

.sgsi-compliance-mapa__id[b-q3hy1q033c] {
    font-family: var(--sgsi-font-mono, monospace);
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
}

.sgsi-compliance-mapa__nome[b-q3hy1q033c] {
    margin-top: 0.35rem;
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-compliance-mapa__obs[b-q3hy1q033c] {
    margin: 0.4rem 0 0;
    font-size: 0.85rem;
    color: var(--sgsi-color-text-muted);
}
/* /Components/Pages/Compliance/ListaCompliance.razor.rz.scp.css */
/* SGI PRO — Compliance/ListaCompliance (estilos com escopo do componente) */

.sgsi-compliance-selos[b-a0clo279bf] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.3rem;
    align-items: center;
}

/* ---------------------------------------------------------------------------
   Seção "As suas normas ativas" (30/08).
   Tudo por token --sgsi-* de propósito: literal de cor aqui reapareceria em
   claro/escuro como texto ilegível, que é o defeito que o cabeçalho do
   DetalheCompliance.razor.css já registra ter pago uma vez.
   --------------------------------------------------------------------------- */

.sgsi-conexao-resumo[b-a0clo279bf] {
    margin: 0 0 1rem;
    color: var(--sgsi-color-text);
    font-size: 1rem;
    line-height: 1.5;
}

.sgsi-conexao-nota[b-a0clo279bf] {
    margin: 0.25rem 0 0;
    color: var(--sgsi-color-text-muted);
    font-size: 0.85rem;
    line-height: 1.4;
}

.sgsi-conexao-sub[b-a0clo279bf] {
    margin: 1.5rem 0 0.75rem;
    font-size: 1rem;
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}
/* /Components/Pages/Dashboard/PainelDashboard.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Dashboard/PainelDashboard (CSS isolado por componente)
   Layout específico do painel executivo: grade de cartões por domínio, listas
   de métricas (<dl>), barra de progresso e o banner de integridade da trilha.
   Reaproveita os tokens do design-system (cores/espaçamentos/raio/sombra). Os
   KPIs de topo usam as classes globais .sgsi-risco-stat* (não redefinidas aqui).
   =========================================================================== */

/* ---- Grade de cartões por domínio --------------------------------------- */
/* O `min(20rem, 100%)` NÃO É ENFEITE (dissecação 30/08). Com `minmax(20rem, 1fr)` seco,
   a trilha tem PISO RÍGIDO de 320px: somado ao padding do corpo da página, o painel
   passava a rolar NA HORIZONTAL abaixo de ~352px de viewport — iPhone SE de 1ª geração e
   a tela externa dos dobráveis. Rolagem lateral é o pior sintoma possível numa tela cujo
   único trabalho é ser lida de relance. `min()` deixa a trilha encolher junto com o
   contêiner quando não cabem 20rem, sem uma única @media (a folha não tem nenhuma).
   Os irmãos com o mesmo piso rígido vivem FORA deste arquivo e não foram tocados:
   PaginaCentroComando.razor.css:6, PainelSaude.razor.css:142 e onze grades de
   wwwroot/css/sgsi-componentes.css. */
.sgsi-dash-grid[b-gi4mgjgdet] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(20rem, 100%), 1fr));
    gap: var(--sgsi-space-4);
    margin-top: var(--sgsi-space-5);
}

/* ---- Esqueleto de carregamento ------------------------------------------
   O ramo `_carregando` deixou de ser uma lista solta de blocos para virar UMA região
   (aria-busy) — e a região precisa reproduzir o empilhamento que `.sgsi-pagina__corpo`
   dá aos filhos diretos, senão o esqueleto sai colado e não tem a forma da tela que ele
   representa. Mesmos eixo e gap do corpo da página. */
.sgsi-dash-esqueleto[b-gi4mgjgdet] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-5);
}

/* ---- Listas de métricas (rótulo → valor) -------------------------------- */
.sgsi-dash-metricas[b-gi4mgjgdet] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2);
    margin: 0;
}

.sgsi-dash-metrica[b-gi4mgjgdet] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sgsi-space-3);
    padding-block: var(--sgsi-space-1);
    border-bottom: 1px solid var(--sgsi-color-border);
}

.sgsi-dash-metrica:last-child[b-gi4mgjgdet] {
    border-bottom: 0;
}

.sgsi-dash-metrica__rotulo[b-gi4mgjgdet] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

/* HIERARQUIA INVERTIDA — O DADO SAÍA MENOR QUE A ETIQUETA (dissecação 30/08).
   Trinta e uma das quarenta e cinco linhas de métrica embrulhavam o número num
   <SgsiBadge>, e a pílula roda a 12px (--sgsi-font-size-xs) contra os 14px do <dt> do
   rótulo. Num painel executivo o olho varria primeiro seis etiquetas cinzas ("Total",
   "Abertas", "Em execução"…) e só depois encontrava os números — o conteúdo perdendo a
   disputa para a legenda dele. Aqui o valor volta a ser o elemento maior da linha; a cor
   semântica que a pílula carregava migrou para os modificadores abaixo, no próprio <dd>. */
.sgsi-dash-metrica__valor[b-gi4mgjgdet] {
    margin: 0;
    font-size: 1.125rem;
    line-height: 1.25;
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
    font-variant-numeric: tabular-nums;
}

/* Tons semânticos do valor (mapeados do TipoBadge que a linha já recebia). Todos são
   tokens de TEXTO do design-system, os mesmos que a pílula usava como cor de tinta —
   nenhuma cor nova entrou, e ambos os temas continuam servidos pelos tokens. */
.sgsi-dash-metrica__valor--perigo[b-gi4mgjgdet] {
    color: var(--sgsi-color-danger);
}

.sgsi-dash-metrica__valor--aviso[b-gi4mgjgdet] {
    color: var(--sgsi-color-warning);
}

.sgsi-dash-metrica__valor--sucesso[b-gi4mgjgdet] {
    color: var(--sgsi-color-success);
}

.sgsi-dash-metrica__valor--info[b-gi4mgjgdet] {
    color: var(--sgsi-color-info);
}

.sgsi-dash-metrica__valor--neutro[b-gi4mgjgdet] {
    color: var(--sgsi-color-text);
}

/* ---- Nota de rodapé do cartão ------------------------------------------- */
.sgsi-dash-nota[b-gi4mgjgdet] {
    margin: var(--sgsi-space-3) 0 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-subtle);
}

/* ---- Semáforo de indicadores -------------------------------------------- */
.sgsi-dash-semaforo[b-gi4mgjgdet] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
    margin-top: var(--sgsi-space-3);
}

/* ---- Barra de progresso ------------------------------------------------- */
.sgsi-dash-progresso[b-gi4mgjgdet] {
    margin-bottom: var(--sgsi-space-4);
}

.sgsi-dash-progresso__cab[b-gi4mgjgdet] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--sgsi-space-3);
    margin-bottom: var(--sgsi-space-2);
}

.sgsi-dash-progresso__rotulo[b-gi4mgjgdet] {
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

.sgsi-dash-progresso__pct[b-gi4mgjgdet] {
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
    font-variant-numeric: tabular-nums;
}

.sgsi-dash-progresso__trilho[b-gi4mgjgdet] {
    height: 0.5rem;
    background: var(--sgsi-color-surface-2);
    border-radius: var(--sgsi-radius-pill);
    overflow: hidden;
}

.sgsi-dash-progresso__barra[b-gi4mgjgdet] {
    height: 100%;
    background: var(--sgsi-color-success);
    border-radius: var(--sgsi-radius-pill);
    transition: width var(--sgsi-transition);
}

/* ---- Banner de integridade da trilha ------------------------------------ */
.sgsi-dash-integridade[b-gi4mgjgdet] {
    margin-bottom: var(--sgsi-space-5);
    border-left: 4px solid var(--sgsi-color-border-strong);
}

.sgsi-dash-integridade--ok[b-gi4mgjgdet] {
    border-left-color: var(--sgsi-color-success);
}

.sgsi-dash-integridade--falha[b-gi4mgjgdet] {
    border-left-color: var(--sgsi-color-danger);
}

.sgsi-dash-integridade__linha[b-gi4mgjgdet] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
}

.sgsi-dash-integridade__icone[b-gi4mgjgdet] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text-muted);
    flex-shrink: 0;
}

.sgsi-dash-integridade--ok .sgsi-dash-integridade__icone[b-gi4mgjgdet] {
    background: var(--sgsi-color-success-bg);
    color: var(--sgsi-color-success);
}

.sgsi-dash-integridade--falha .sgsi-dash-integridade__icone[b-gi4mgjgdet] {
    background: var(--sgsi-color-danger-bg);
    color: var(--sgsi-color-danger);
}

.sgsi-dash-integridade__texto[b-gi4mgjgdet] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1);
}

.sgsi-dash-integridade__detalhe[b-gi4mgjgdet] {
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

/* A RESSALVA DO SELO (PT-05, 02/09). Ela só aparece no ramo ÍNTEGRO — quando a cadeia fecha mas
   a testemunha externa NÃO foi lida (sink WORM fora do ar, ou tenant novo antes do primeiro
   checkpoint). Nasce em bloco próprio e não em linha corrida de propósito: colada ao "cadeia HMAC
   consistente" ela vira ressalva que se lê como continuação do elogio, que é o efeito oposto ao
   que ela existe para produzir.

   ÂMBAR e não vermelho: não há indício de adulteração. O que há é uma afirmação incompleta, e o
   par de tokens é o mesmo que o resto do produto usa para "atenção", nunca para "falha". */
.sgsi-dash-integridade__ressalva[b-gi4mgjgdet] {
    display: block;
    margin-top: var(--sgsi-space-1);
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-warning);
}

/* ---- "Precisa da sua atenção" (pendências acionáveis) ------------------- */
.sgsi-dash-pendencias[b-gi4mgjgdet] {
    margin-bottom: var(--sgsi-space-5);
    border-left: 4px solid var(--sgsi-color-brand);
}

.sgsi-dash-pendencias--ok[b-gi4mgjgdet] {
    border-left-color: var(--sgsi-color-success);
}

.sgsi-dash-pendencias__lista[b-gi4mgjgdet] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2);
}

.sgsi-dash-pendencias__item[b-gi4mgjgdet] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    padding-block: var(--sgsi-space-2);
    border-bottom: 1px solid var(--sgsi-color-border);
}

.sgsi-dash-pendencias__item:last-child[b-gi4mgjgdet] {
    border-bottom: 0;
}

.sgsi-dash-pendencias__semaforo[b-gi4mgjgdet] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text-muted);
    flex-shrink: 0;
}

.sgsi-dash-pendencias__semaforo--alerta[b-gi4mgjgdet] {
    background: var(--sgsi-color-danger-bg);
    color: var(--sgsi-color-danger);
}

.sgsi-dash-pendencias__semaforo--pendencia[b-gi4mgjgdet] {
    background: var(--sgsi-color-warning-bg);
    color: var(--sgsi-color-warning);
}

.sgsi-dash-pendencias__semaforo--ok[b-gi4mgjgdet] {
    background: var(--sgsi-color-success-bg);
    color: var(--sgsi-color-success);
}

.sgsi-dash-pendencias__texto[b-gi4mgjgdet] {
    flex: 1;
    color: var(--sgsi-color-text);
    font-size: var(--sgsi-font-size-sm);
}

.sgsi-dash-pendencias__acao[b-gi4mgjgdet] {
    flex-shrink: 0;
}

.sgsi-dash-pendencias__ok[b-gi4mgjgdet] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    color: var(--sgsi-color-text);
}

/* ---- Widget de Saúde do SGI (sinais-vitais) ----------------------------- */
.sgsi-dash-saude[b-gi4mgjgdet] {
    margin-bottom: var(--sgsi-space-5);
    border-left: 4px solid var(--sgsi-color-border-strong);
}

.sgsi-dash-saude--ok[b-gi4mgjgdet] {
    border-left-color: var(--sgsi-color-success);
}

.sgsi-dash-saude--aviso[b-gi4mgjgdet] {
    border-left-color: var(--sgsi-color-warning);
}

.sgsi-dash-saude--critico[b-gi4mgjgdet] {
    border-left-color: var(--sgsi-color-danger);
}

.sgsi-dash-saude__linha[b-gi4mgjgdet] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--sgsi-space-3);
}

.sgsi-dash-saude__score[b-gi4mgjgdet] {
    display: flex;
    align-items: baseline;
    gap: var(--sgsi-space-2);
}

.sgsi-dash-saude__score-num[b-gi4mgjgdet] {
    font-size: var(--sgsi-font-size-xl);
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
    font-variant-numeric: tabular-nums;
}

.sgsi-dash-saude__score-max[b-gi4mgjgdet] {
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-normal);
    color: var(--sgsi-color-text-subtle);
}

.sgsi-dash-saude__semaforos[b-gi4mgjgdet] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
}

/* ---- Faixa de normas ativas do painel -----------------------------------
   Nasceu em 30/08: o painel nunca dizia contra quais normas os números foram apurados,
   enquanto o PDF exportado pelo botão da MESMA tela dizia, na faixa da capa. Uma linha
   fina, acima do bloco de pendências, para não roubar altura da dobra — a grade de
   cartões voltou a caber em 1366x768 há poucos dias e ela continua sendo a prioridade.
   `flex-wrap` porque o consultor multi-norma pode ter cinco rótulos longos ("ISO/IEC
   27701:2025"), e quebrar é melhor do que rolar na horizontal. */
.sgsi-dash-normas[b-gi4mgjgdet] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
    margin-bottom: var(--sgsi-space-3);
}

.sgsi-dash-normas__rotulo[b-gi4mgjgdet] {
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-subtle);
}

.sgsi-dash-normas__lista[b-gi4mgjgdet] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
    list-style: none;
    margin: 0;
    padding: 0;
}

/* ---- Nota da faixa de normas -------------------------------------------
   Segunda linha da faixa, só no tenant multi-norma: anuncia que cada cartão passou a
   declarar a que normas o número dele se refere. Quebra de linha própria (largura 100%
   dentro do flex-wrap do pai) para não disputar a linha com os rótulos das normas. */
.sgsi-dash-normas__nota[b-gi4mgjgdet] {
    flex-basis: 100%;
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-subtle);
}

/* ---- Legenda de EIXO do cartão (31/08) ----------------------------------
   A frase que diz se o número do cartão vale para todas as normas do tenant, se é a soma
   delas, ou se o recorte é por assunto. Fica no pé do cartão, com o mesmo tom das notas de
   rodapé já existentes (.sgsi-dash-nota) — é contexto, não é dado, e não pode competir com
   os números que a dissecação de 30/08 acabou de promover a elemento maior da linha. */
.sgsi-dash-eixo[b-gi4mgjgdet] {
    margin: var(--sgsi-space-3) 0 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-subtle);
}

/* A RESSALVA NÃO É TEXTO COLORIDO, É TEXTO COM MARCA NA LATERAL.
   Pintar a frase inteira de âmbar seria pedir contraste de 4.5:1 a um corpo de 14px sobre o
   fundo do cartão nos DOIS temas — exatamente a aposta que esta casa já perdeu ao medir a cor
   de fábrica em vez da computada. A cor fica na barra (elemento não-textual, 3:1 basta) e o
   texto sobe para o token de corpo, que é o de maior contraste disponível: a ressalva fica
   MAIS legível que a legenda neutra, não menos. */
.sgsi-dash-eixo--ressalva[b-gi4mgjgdet] {
    border-left: 3px solid var(--sgsi-color-warning);
    padding-left: var(--sgsi-space-2);
    color: var(--sgsi-color-text);
}

/* ---- Cartão de SoA: uma leitura por norma -------------------------------
   Só existe com DUAS OU MAIS normas com Anexo ativas. Cada bloco é uma certificação
   independente — barra de progresso, quatro contadores e a própria porta de entrada —, e o
   separador entre eles é o que impede a leitura de escorregar de uma norma para a outra, que
   era justamente o defeito do número somado. O último não leva separador. */
.sgsi-dash-soa-norma + .sgsi-dash-soa-norma[b-gi4mgjgdet] {
    margin-top: var(--sgsi-space-4);
    padding-top: var(--sgsi-space-4);
    border-top: 1px solid var(--sgsi-color-border);
}

.sgsi-dash-soa-norma__titulo[b-gi4mgjgdet] {
    margin: 0 0 var(--sgsi-space-2);
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
}

.sgsi-dash-soa-norma__acao[b-gi4mgjgdet] {
    margin-top: var(--sgsi-space-3);
}
/* /Components/Pages/Documentos/DetalheDocumento.razor.rz.scp.css */
/*
    SGI PRO — Documentos/DetalheDocumento (CSS escopado)

    O CORPO DO DOCUMENTO DIVIDIA A LINHA COM OS METADADOS. O detalhe usa o container
    compartilhado `.sgsi-risco-detalhe`, que é `repeat(auto-fit, minmax(280px, 1fr))`:
    numa janela de notebook isso rende três colunas de ~340px, e nelas cabem, com o
    MESMO peso visual, um cartão de quatro pares chave-valor e a política inteira. O
    texto normativo — que é o que o consultor lê antes de aprovar, e o que o auditor
    pede para ver — ficava espremido a 340px, com as tabelas do markdown rolando no
    eixo X dentro dessa faixa. O histórico de versões (tabela de 5 colunas) sofria o
    mesmo.

    O container é COMPARTILHADO por vários detalhes do produto e a folha dele
    (wwwroot/css/sgsi-componentes.css) não pode mudar por causa de uma tela: o
    modificador vive aqui, escopado a esta página.

    `::deep` é obrigatório e não é estilo: `sgsi-doc-detalhe__largo` é entregue ao
    SgsiCard por `Classe=`, e o markup do cartão é renderizado pelo COMPONENTE FILHO,
    com o escopo dele. Sem ::deep a regra viraria `.sgsi-doc-detalhe__largo[b-xxxxx]`
    e não casaria com elemento nenhum — a classe de defeito que
    CssEscopadoNaoMiraComponenteFilhoArchTests cobre. Com ele, o seletor gerado é
    `[b-xxxxx] .sgsi-doc-detalhe__largo`, e o ancestral escopado existe no markup desta
    página (a <div class="sgsi-risco-detalhe">).
*/

[b-d4913nn6bt] .sgsi-doc-detalhe__largo {
    grid-column: 1 / -1;
}
/* /Components/Pages/Estimativas/ModalGerenciarDependencias.razor.rz.scp.css */
/*
    SGI PRO — Estimativas/ModalGerenciarDependencias (CSS escopado)
    Layout da linha de adição de dependência (select + botão lado a lado).
    O conteúdo é projetado dentro do SgsiModal (componente filho), por isso
    usamos ::deep para alcançá-lo. Espaçamentos consomem as variáveis do
    design system.
*/

[b-0kgbspgm4r] .sgsi-dep-add {
    margin-top: 1rem;
}

[b-0kgbspgm4r] .sgsi-dep-add__linha {
    display: flex;
    gap: 0.5rem;
    align-items: stretch;
}

[b-0kgbspgm4r] .sgsi-dep-add__linha > select {
    flex: 1 1 auto;
}
/* /Components/Pages/GapAnalysis/AvisoReciprocoDoItemDeGap.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — GapAnalysis/AvisoReciprocoDoItemDeGap (CSS ISOLADO)

   A nota que fica DENTRO do modal de avaliação do item, dizendo o que as outras
   normas ativas do cliente pedem naquele mesmo requisito.

   REGRA DE DESENHO, UMA SÓ: NÃO COMPETIR COM O FORMULÁRIO. É informação de
   contexto, não validação — texto pequeno, cor secundária, fundo `bg-subtle`, e
   nunca o âmbar/vermelho dos avisos de campo. Um bloco colorido no meio de um
   formulário treina o olho a lê-lo como erro, e o consultor sairia procurando o
   campo inválido que não existe. É a mesma regra do `SgsiAvisoReciprocoCadastro`.

   O ACENTO É DELIBERADAMENTE O MESMO daquele componente e do
   `SgsiSeloReusoTransversal`: borda esquerda na cor da marca. É o MESMO assunto —
   o reuso multi-norma — em três lugares do produto, e o olho deve reconhecê-lo
   sem precisar ler. Sobrevive ao print em preto e branco porque é POSIÇÃO, não
   cor. O CSS não é COMPARTILHADO (isolamento por componente não deixa), e a
   duplicação é aceita aqui: são quatro declarações de acento, e um seletor global
   compartilhado voltaria a acoplar telas de features diferentes.

   A LISTA É O QUE MUDA em relação ao aviso de cadastro: lá o conteúdo são selos
   curtos; aqui cada linha é uma FRASE ("ISO 14001:2015 — pede auditoria interna
   na cl. 9.2.1…"). Marcador removido e recuo zerado porque o `<strong>` do código
   da norma já é o marcador visual; um bullet à esquerda dele empurraria a frase
   inteira para dentro e roubaria largura num diálogo que já é estreito.
   =========================================================================== */

.sgsi-aviso-gap[b-74mtk3s905] {
    display: flex;
    align-items: flex-start;
    gap: var(--sgsi-space-2);
    padding: var(--sgsi-space-3);
    border-radius: var(--sgsi-radius-md);
    border-left: 3px solid var(--sgsi-color-brand);
    background: var(--sgsi-color-bg-subtle);
}

.sgsi-aviso-gap__icone[b-74mtk3s905] {
    display: inline-flex;
    flex: 0 0 auto;
    /* Alinha o glifo com a PRIMEIRA linha do texto, e não com o bloco inteiro:
       a abertura tem três linhas no mobile e o ícone centralizado flutuaria no
       meio do parágrafo. */
    margin-top: 2px;
    color: var(--sgsi-color-brand);
}

.sgsi-aviso-gap__corpo[b-74mtk3s905] {
    /* `min-width: 0` deixa o texto quebrar dentro do flex — sem ele o item flex
       assume a largura do conteúdo e a frase longa estoura o diálogo. */
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2);
}

.sgsi-aviso-gap__frase[b-74mtk3s905],
.sgsi-aviso-gap__nota[b-74mtk3s905] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    line-height: var(--sgsi-line-height);
    color: var(--sgsi-color-text-muted);
}

.sgsi-aviso-gap__lista[b-74mtk3s905] {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1);
}

.sgsi-aviso-gap__item[b-74mtk3s905] {
    font-size: var(--sgsi-font-size-sm);
    line-height: var(--sgsi-line-height);
    color: var(--sgsi-color-text-muted);
    /* Quebra dentro da referência longa ("A.1.2.2", "art. 18, III") em vez de
       empurrar o diálogo para a rolagem horizontal — num modal isso é pior que
       numa página, porque tira o botão Salvar do campo de visão. */
    overflow-wrap: anywhere;
}

/* O código da norma é o marcador da linha: é por ele que o olho varre a lista
   procurando "e a minha 14001?". Cor de texto normal (não a `muted` da frase)
   para que o contraste faça esse trabalho sem precisar de bullet. */
.sgsi-aviso-gap__item strong[b-74mtk3s905] {
    color: var(--sgsi-color-text);
    margin-right: var(--sgsi-space-1);
}
/* /Components/Pages/Governanca/PainelSaude.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Governanca/PainelSaude (CSS isolado por componente)
   Painel de saúde / sinais-vitais: selo de score com semáforo, grade de cartões
   por categoria/origem. Reaproveita os tokens do design-system (cores/espaços/
   raio/sombra). Os KPIs de topo usam as classes globais .sgsi-risco-stat* (não
   redefinidas aqui). Sem cores cravadas — semáforo mapeia success/warning/danger.
   =========================================================================== */

/* ---- Selo de saúde (score + semáforo) ----------------------------------- */
.sgsi-saude-selo[b-8qxkqx7nbx] {
    margin-bottom: var(--sgsi-space-5);
    border-left: 4px solid var(--sgsi-color-border-strong);
}

.sgsi-saude-selo--ok[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-success);
}

.sgsi-saude-selo--aviso[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-warning);
}

.sgsi-saude-selo--critico[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-danger);
}

/* NÃO APURADO (ALT-300) — o quarto estado do selo, e o único que não é um veredito.
   Um cliente cujo motor de governança nunca rodou não tem alerta nenhum, então o score dava 100
   e o selo saía VERDE. Aqui ele não pode pegar emprestada NENHUMA das três cores do semáforo:
   verde mente, e amarelo/vermelho acusariam um problema que ninguém mediu. Fica na borda neutra
   herdada da base — ausência de cor para ausência de medição. */
.sgsi-saude-selo--neutro[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-border-strong);
}

.sgsi-saude-selo__linha[b-8qxkqx7nbx] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
}

.sgsi-saude-selo__icone[b-8qxkqx7nbx] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text-muted);
    flex-shrink: 0;
}

.sgsi-saude-selo--ok .sgsi-saude-selo__icone[b-8qxkqx7nbx] {
    background: var(--sgsi-color-success-bg);
    color: var(--sgsi-color-success);
}

.sgsi-saude-selo--aviso .sgsi-saude-selo__icone[b-8qxkqx7nbx] {
    background: var(--sgsi-color-warning-bg);
    color: var(--sgsi-color-warning);
}

.sgsi-saude-selo--critico .sgsi-saude-selo__icone[b-8qxkqx7nbx] {
    background: var(--sgsi-color-danger-bg);
    color: var(--sgsi-color-danger);
}

.sgsi-saude-selo__texto[b-8qxkqx7nbx] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1);
}

.sgsi-saude-selo__cab[b-8qxkqx7nbx] {
    display: flex;
    align-items: baseline;
    gap: var(--sgsi-space-3);
    flex-wrap: wrap;
}

.sgsi-saude-selo__score[b-8qxkqx7nbx] {
    font-size: var(--sgsi-font-size-xl);
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
    font-variant-numeric: tabular-nums;
}

.sgsi-saude-selo__score-max[b-8qxkqx7nbx] {
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-normal);
    color: var(--sgsi-color-text-subtle);
}

.sgsi-saude-selo__detalhe[b-8qxkqx7nbx] {
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1);
}

.sgsi-saude-selo__varredura[b-8qxkqx7nbx] {
    color: var(--sgsi-color-text-subtle);
    font-size: var(--sgsi-font-size-xs);
}

/* Linha das dispensadas ainda vencidas: explica a diferença entre "caixa de entrada
   limpa" e "SGI em dia". Herda tokens (nunca hex literal) para acompanhar o dark mode. */
.sgsi-saude-selo__dispensadas[b-8qxkqx7nbx] {
    color: var(--sgsi-color-danger);
    font-size: var(--sgsi-font-size-xs);
    font-weight: var(--sgsi-font-weight-medium);
}

/* E2E-1007 — a varredura velha demais para sustentar o selo ao lado dela. Cor de AVISO (não de
   perigo): o dado não está errado, está datado, e a ação é reapurar. */
.sgsi-saude-selo__alerta[b-8qxkqx7nbx] {
    color: var(--sgsi-color-warning);
    font-size: var(--sgsi-font-size-xs);
    font-weight: var(--sgsi-font-weight-medium);
}

/* E2E-991 — carimbo de "recarregado em": é o único retorno visível do botão que só re-lê. */
.sgsi-saude-selo__recarga[b-8qxkqx7nbx] {
    display: block;
    color: var(--sgsi-color-text-subtle);
    font-size: var(--sgsi-font-size-xs);
}

/* ---- Seção ("Por origem") ----------------------------------------------- */
.sgsi-saude-secao[b-8qxkqx7nbx] {
    margin: var(--sgsi-space-5) 0 var(--sgsi-space-3);
    font-size: var(--sgsi-font-size-lg);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

/* ---- Grade de cartões por categoria ------------------------------------- */
.sgsi-saude-grid[b-8qxkqx7nbx] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(18rem, 100%), 1fr));
    gap: var(--sgsi-space-4);
}

.sgsi-saude-cat[b-8qxkqx7nbx] {
    border-left: 4px solid var(--sgsi-color-border-strong);
}

.sgsi-saude-cat--ok[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-success);
}

.sgsi-saude-cat--aviso[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-warning);
}

.sgsi-saude-cat--critico[b-8qxkqx7nbx] {
    border-left-color: var(--sgsi-color-danger);
}

.sgsi-saude-cat__cab[b-8qxkqx7nbx] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-2);
}

.sgsi-saude-cat__icone[b-8qxkqx7nbx] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text-muted);
    flex-shrink: 0;
}

.sgsi-saude-cat__nome[b-8qxkqx7nbx] {
    flex: 1;
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-saude-cat__total[b-8qxkqx7nbx] {
    font-size: var(--sgsi-font-size-lg);
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-text);
    font-variant-numeric: tabular-nums;
}

.sgsi-saude-cat__semaforos[b-8qxkqx7nbx] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
    margin-top: var(--sgsi-space-3);
}

/* ---- Empty state: tudo em dia ------------------------------------------- */
.sgsi-saude-emdia[b-8qxkqx7nbx] {
    border-left: 4px solid var(--sgsi-color-success);
}

.sgsi-saude-emdia__conteudo[b-8qxkqx7nbx] {
    display: flex;
    align-items: flex-start;
    gap: var(--sgsi-space-3);
}

.sgsi-saude-emdia__icone[b-8qxkqx7nbx] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3rem;
    height: 3rem;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-success-bg);
    color: var(--sgsi-color-success);
    flex-shrink: 0;
}

.sgsi-saude-emdia__titulo[b-8qxkqx7nbx] {
    margin: 0 0 var(--sgsi-space-1);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-saude-emdia__sub[b-8qxkqx7nbx] {
    margin: 0 0 var(--sgsi-space-3);
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

.sgsi-saude-emdia__acoes[b-8qxkqx7nbx] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
}
/* /Components/Pages/ManualSgsi/SecoesManual.razor.rz.scp.css */
/* ============================================================================
   SGI PRO — ManualSgsi/SecoesManual (CSS escopado)

   ── A CLASSE EXISTIA E NÃO PINTAVA NADA (02/09) ──
   `sgsi-manual-linha--pendente` era aplicada no <li> desde que o viewer nasceu e
   não tinha UMA regra em lugar nenhum do repositório: nem em wwwroot/css/
   sgsi-componentes.css (onde vivem as irmãs sgsi-manual-secoes/-linhas/-codigo,
   linhas 2097-2104), nem em CSS escopado — este diretório não tinha .razor.css.
   Resultado medido: linha com "[PENDENTE]" saía IDÊNTICA à linha completa. O badge
   por SEÇÃO funciona, e é isso que escondia o defeito — a sinalização parecia
   existir, e as lacunas do SGI (contexto/riscos/SoA/objetivos não preenchidos) não
   apareciam onde o leitor procura, que é a linha.

   Escopado e não global: o <li> é markup DESTE componente, então recebe o atributo
   de escopo e a regra casa. A folha global fica para o que mais de um componente
   usa — as três irmãs acima, que ManualSgsi.razor também emite.

   Família visual do SgsiBadge Aviso (sgsi-componentes.css:60), para a pendência da
   LINHA e a da SEÇÃO falarem a mesma língua. Cores sem fallback hex: os tokens
   sempre carregam e um hex cravado quebraria o tema escuro, onde
   --sgsi-color-warning troca de #8a5a00 para #f2c14e.
   ============================================================================ */

.sgsi-manual-linha--pendente[b-9wcvybgpn4] {
    border-left: 3px solid var(--sgsi-color-warning);
    padding-left: var(--sgsi-space-2, 0.5rem);
    font-weight: var(--sgsi-font-weight-semibold, 600);
}
/* /Components/Pages/MatrizMaturidade/ComparativoMaturidade.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — MatrizMaturidade/ComparativoMaturidade (CSS isolado por componente)
   Layout dos dois seletores de avaliação (anterior → atual) + botão Comparar.
   Reaproveita os tokens do design-system; as classes globais .sgsi-risco-stat*,
   .sgsi-risco-filtro e .sgsi-tabela são compartilhadas (não redefinidas aqui).
   =========================================================================== */

.sgsi-mat-comp-seletores[b-pp8i8093u7] {
    display: grid;
    grid-template-columns: 1fr auto 1fr auto;
    gap: var(--sgsi-space-4);
    align-items: end;
}

.sgsi-mat-comp-seta[b-pp8i8093u7] {
    display: flex;
    align-items: center;
    justify-content: center;
    padding-bottom: var(--sgsi-space-2);
    color: var(--sgsi-color-text-muted);
}

.sgsi-mat-comp-acao[b-pp8i8093u7] {
    display: flex;
    align-items: end;
}

/* Empilha em telas estreitas: cada seletor/botão em sua própria linha e a seta
   recolhida (a ordem "anterior → atual" já é evidente pelos rótulos). */
@media (max-width: 768px) { /* tablet — breakpoint canônico (#49) */
    .sgsi-mat-comp-seletores[b-pp8i8093u7] {
        grid-template-columns: 1fr;
    }

    .sgsi-mat-comp-seta[b-pp8i8093u7] {
        display: none;
    }
}
/* /Components/Pages/Notificacoes/CalendarioNotificacoes.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Notificacoes/CalendarioNotificacoes (CSS isolado por componente)
   Grade de calendário mensal (7 colunas seg–dom) + chips de evento por
   severidade. Reaproveita os tokens do design-system (cores/espaçamentos/raio).
   Sem cores cravadas: severidade mapeia em info / warning / danger.
   =========================================================================== */

/* ---- Barra de navegação do mês ------------------------------------------ */
.cal-nav[b-sxlnt4a05w] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3);
    padding: var(--sgsi-space-3) var(--sgsi-space-4);
}

.cal-nav__titulo[b-sxlnt4a05w] {
    margin: 0;
    font-size: var(--sgsi-font-size-lg);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
    min-width: 14rem;
    text-align: center;
}

.cal-nav__hoje[b-sxlnt4a05w] {
    margin-left: auto;
}

/* Reaproveita o glifo chevron-down rotacionado p/ setas anterior/próximo.
   ::deep porque a classe vai no <svg> do componente filho Icone, fora do escopo. */
[b-sxlnt4a05w] .cal-nav__prev {
    transform: rotate(90deg);
}

[b-sxlnt4a05w] .cal-nav__next {
    transform: rotate(-90deg);
}

/* ---- Grade do calendário ------------------------------------------------ */
.cal-grade[b-sxlnt4a05w] {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 1px;
    background: var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-md);
    overflow: hidden;
}

.cal-dow[b-sxlnt4a05w] {
    background: var(--sgsi-color-surface-2);
    padding: var(--sgsi-space-2) var(--sgsi-space-3);
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text-muted);
    text-align: center;
}

.cal-cel[b-sxlnt4a05w] {
    background: var(--sgsi-color-surface);
    min-height: 6.5rem;
    padding: var(--sgsi-space-2);
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1);
}

.cal-cel--fora[b-sxlnt4a05w] {
    background: var(--sgsi-color-surface-2);
}

.cal-cel--fora .cal-cel__num[b-sxlnt4a05w] {
    color: var(--sgsi-color-text-subtle);
}

.cal-cel--hoje[b-sxlnt4a05w] {
    outline: 2px solid var(--sgsi-color-info);
    outline-offset: -2px;
}

.cal-cel__num[b-sxlnt4a05w] {
    font-size: var(--sgsi-font-size-sm);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
    font-variant-numeric: tabular-nums;
}

.cal-cel--hoje .cal-cel__num[b-sxlnt4a05w] {
    color: var(--sgsi-color-info);
}

.cal-cel__eventos[b-sxlnt4a05w] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1);
    overflow: hidden;
}

/* ---- Chip de evento ----------------------------------------------------- */
.cal-chip[b-sxlnt4a05w] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-1);
    width: 100%;
    border: 0;
    border-radius: var(--sgsi-radius-sm);
    padding: 0.125rem var(--sgsi-space-2);
    font-size: var(--sgsi-font-size-xs);
    text-align: left;
    cursor: pointer;
    color: var(--sgsi-color-text);
    background: var(--sgsi-color-surface-2);
    transition: filter var(--sgsi-transition);
}

.cal-chip:hover[b-sxlnt4a05w],
.cal-chip:focus-visible[b-sxlnt4a05w] {
    filter: brightness(0.96);
}

.cal-chip__ponto[b-sxlnt4a05w] {
    flex-shrink: 0;
    width: 0.5rem;
    height: 0.5rem;
    border-radius: var(--sgsi-radius-pill);
    background: currentColor;
}

.cal-chip__txt[b-sxlnt4a05w] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cal-chip--info[b-sxlnt4a05w] {
    background: var(--sgsi-color-info-bg);
    color: var(--sgsi-color-info);
}

.cal-chip--aviso[b-sxlnt4a05w] {
    background: var(--sgsi-color-warning-bg);
    color: var(--sgsi-color-warning);
}

.cal-chip--critica[b-sxlnt4a05w] {
    background: var(--sgsi-color-danger-bg);
    color: var(--sgsi-color-danger);
}

/* BAI-1388 — severidade NAO CLASSIFICADA (o zero do enum, e qualquer membro futuro) tem cor
   propria. Antes ela caia no ramo `_ => "info"` e era pintada como "Informativa — sem acao
   requerida": a escala inteira mentia por omissao. Neutro nao alarma nem tranquiliza. */
.cal-chip--neutro[b-sxlnt4a05w] {
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text-muted);
}

/* ---- Responsivo: em telas estreitas, oculta o texto, mantém o ponto ----- */
@media (max-width: 768px) { /* tablet — breakpoint canônico (#49) */
    .cal-cel[b-sxlnt4a05w] {
        min-height: 4.5rem;
    }

    .cal-chip__txt[b-sxlnt4a05w] {
        display: none;
    }

    .cal-nav__titulo[b-sxlnt4a05w] {
        min-width: 0;
        font-size: var(--sgsi-font-size-md);
    }
}
/* /Components/Pages/PaginaInicial.razor.rz.scp.css */
/* ============================================================================
   SGI PRO — PaginaInicial (a landing pública) — CSS ISOLADO

   O que é COMPARTILHADO com as outras páginas públicas (tokens da vitrine,
   cabeçalho, rodapé, botões, seções, cartões, faixa de números, moldura de
   captura, papel do PDF, revelação) vive em wwwroot/css/sgsi-vitrine.css, que o
   LayoutLanding carrega. Aqui fica só o que é desta página: o herói, as abas
   "por dentro", a demonstração do PDF, a jornada, a comparação, cartórios, os
   planos com o seletor de porte e o alternador anual, e a recomendação.

   TUDO O QUE ALTERNA AQUI É CSS PURO (radio/checkbox + :checked + irmão geral ~).
   A página é SSR estático: as abas, o porte e o mensal/anual funcionam sem uma
   linha de JavaScript; o js/sgsi-vitrine.js só acrescenta movimento e a conta
   da recomendação por cliente.

   Tokens: os --lp-* vêm do .lp do layout (sgsi-vitrine.css). Os --sgsi-* usados
   aqui existem em sgsi-tokens.css (DesignSystemTokensGuardrailTests cobra).
   Tinta sobre cor de marca sempre em token (TintaSobreCorDeMarcaGuardrailTests).
   ============================================================================ */

/* ---------------------------------------------------------------- herói */
.lp-hero[b-rt3mn6y49t] {
    position: relative;
    overflow: hidden;
    padding-block: clamp(3.5rem, 8vw, 6.5rem);
    background:
        radial-gradient(900px 420px at 85% -10%, var(--lp-marca-bg), transparent 60%),
        linear-gradient(180deg, var(--lp-fundo), var(--lp-superficie));
}

.lp-hero[b-rt3mn6y49t]::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: radial-gradient(var(--lp-borda) 1px, transparent 1px);
    background-size: 26px 26px;
    opacity: 0.35;
    mask-image: linear-gradient(180deg, #000, transparent 85%);
    pointer-events: none;
}

/* 1.05/1 e não 1/1: a coluna de texto é a que converte; a captura do produto
   ao lado é a prova, e prova não precisa ser maior que a promessa. */
.lp-hero__grade[b-rt3mn6y49t] {
    position: relative;
    display: grid;
    grid-template-columns: 1.05fr 1fr;
    gap: clamp(2rem, 5vw, 4rem);
    align-items: center;
}

.lp-hero h1[b-rt3mn6y49t] { font-size: clamp(2.2rem, 4.6vw, 3.5rem); font-weight: 800; }
.lp-hero__apoio[b-rt3mn6y49t] { font-size: 1.2rem; color: var(--lp-suave); margin-top: 1.2rem; max-width: 34rem; }
.lp-hero__ctas[b-rt3mn6y49t] { display: flex; flex-wrap: wrap; gap: 0.8rem; margin-top: 1.8rem; }
.lp-hero__micro[b-rt3mn6y49t] { margin-top: 1.1rem; font-size: 0.92rem; color: var(--lp-suave); max-width: 36rem; }
.lp-hero__micro a[b-rt3mn6y49t] { font-weight: 650; }
.lp-hero__provas[b-rt3mn6y49t] { display: flex; flex-wrap: wrap; gap: 0.5rem 1.2rem; margin-top: 1.6rem; padding: 0; list-style: none; font-size: 0.9rem; color: var(--lp-suave); }
.lp-hero__provas li[b-rt3mn6y49t] { display: flex; align-items: center; gap: 0.4rem; }
.lp-hero__provas li[b-rt3mn6y49t]::before { content: "✓"; color: var(--lp-ok); font-weight: 800; }

/* ---------------------------------------------------------------- abas "por dentro" */
/* Os radios ficam fora da tela mas NAVEGÁVEIS pelo teclado: display:none os
   tiraria da ordem de foco e as abas virariam controle só de mouse. */
.lp-tela[b-rt3mn6y49t] { position: absolute; opacity: 0; pointer-events: none; }

.lp-abas[b-rt3mn6y49t] { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 1.8rem 0 1.2rem; }

.lp-abas label[b-rt3mn6y49t] {
    border: 1px solid var(--lp-borda);
    background: var(--lp-superficie);
    color: var(--lp-suave);
    border-radius: 999px;
    padding: 0.5rem 1rem;
    font-weight: 650;
    font-size: 0.92rem;
    cursor: pointer;
}

.lp-abas label:hover[b-rt3mn6y49t] { border-color: var(--lp-aco); color: var(--lp-navy); }

/* Foco visível no rótulo quando o radio (invisível) recebe o teclado. */
.lp-tela:focus-visible ~ .lp-abas label[b-rt3mn6y49t] { outline: 2px solid var(--lp-aco); outline-offset: 2px; }

.lp-painel[b-rt3mn6y49t] { display: none; grid-template-columns: 1.25fr 0.75fr; gap: 2rem; align-items: center; }
.lp-painel__texto h3[b-rt3mn6y49t] { font-size: 1.35rem; color: var(--lp-navy); margin-bottom: 0.6rem; }
.lp-painel__texto p[b-rt3mn6y49t] { color: var(--lp-suave); }
.lp-painel__texto ul[b-rt3mn6y49t] { margin: 0.8rem 0 0; padding-left: 1.1rem; color: var(--lp-tinta); }
.lp-painel__texto li[b-rt3mn6y49t] { margin-bottom: 0.35rem; }

/* O irmão geral (~) alcança as abas e os painéis porque os radios vêm ANTES no DOM. */
.lp-tela--1:checked ~ .lp-abas label[for="lp-t1"][b-rt3mn6y49t],
.lp-tela--2:checked ~ .lp-abas label[for="lp-t2"][b-rt3mn6y49t],
.lp-tela--3:checked ~ .lp-abas label[for="lp-t3"][b-rt3mn6y49t],
.lp-tela--4:checked ~ .lp-abas label[for="lp-t4"][b-rt3mn6y49t],
.lp-tela--5:checked ~ .lp-abas label[for="lp-t5"][b-rt3mn6y49t] {
    background: var(--lp-navy);
    border-color: var(--lp-navy);
    /* A marca inverte de escuridão no tema escuro; o branco cravado reprovava o contraste. */
    color: var(--sgsi-color-on-brand, #fff);
}

.lp-tela--1:checked ~ .lp-paineis .lp-painel--1[b-rt3mn6y49t],
.lp-tela--2:checked ~ .lp-paineis .lp-painel--2[b-rt3mn6y49t],
.lp-tela--3:checked ~ .lp-paineis .lp-painel--3[b-rt3mn6y49t],
.lp-tela--4:checked ~ .lp-paineis .lp-painel--4[b-rt3mn6y49t],
.lp-tela--5:checked ~ .lp-paineis .lp-painel--5[b-rt3mn6y49t] { display: grid; }

/* ---------------------------------------------------------------- prova do PDF */
.lp-prova[b-rt3mn6y49t] { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: center; margin-top: 2rem; }
.lp-prova__destaque[b-rt3mn6y49t] { border-left: 3px solid #5aa9f0; padding-left: 1rem; color: #c7d3e0; margin-top: 1.4rem; max-width: 60ch; }
.lp-demo__acoes[b-rt3mn6y49t] { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-top: 1rem; }

.lp-demo__btn[b-rt3mn6y49t] {
    border: 1.5px solid #5aa9f0;
    background: transparent;
    color: #e8eef5;
    border-radius: 9px;
    padding: 0.6rem 1rem;
    font-weight: 650;
    cursor: pointer;
    font-family: inherit;
    font-size: 0.95rem;
}

.lp-demo__btn:hover[b-rt3mn6y49t], .lp-demo__btn[aria-pressed="true"][b-rt3mn6y49t] { background: #5aa9f0; color: #07172a; }
.lp-demo__btn:focus-visible[b-rt3mn6y49t] { outline: 2px solid #fff; outline-offset: 2px; }

.lp-veredito[b-rt3mn6y49t] {
    margin-top: 1rem;
    border-radius: 10px;
    padding: 0.9rem 1rem;
    font-weight: 650;
    display: flex;
    gap: 0.7rem;
    align-items: flex-start;
    min-height: 3.6rem;
    border: 1px solid rgba(255, 255, 255, 0.18);
    color: #c7d3e0;
}

.lp-veredito small[b-rt3mn6y49t] { display: block; font-weight: 400; opacity: 0.9; }
/* Verde e vermelho literais sobre a seção escura: são cores de VEREDITO, não de marca. */
.lp-veredito--ok[b-rt3mn6y49t] { background: #1b7a3e; color: #fff; border-color: transparent; }
.lp-veredito--erro[b-rt3mn6y49t] { background: #b3261e; color: #fff; border-color: transparent; }
.lp-demo__nota[b-rt3mn6y49t] { font-size: 0.82rem; color: #a4b4c4; margin-top: 0.8rem; }

/* ---------------------------------------------------------------- jornada */
.lp-jornada[b-rt3mn6y49t] { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.2rem; margin-top: 2rem; counter-reset: j; }
.lp-passo[b-rt3mn6y49t] { counter-increment: j; }
.lp-passo[b-rt3mn6y49t]::before { content: counter(j, decimal-leading-zero); font-size: 0.8rem; font-weight: 800; color: var(--lp-aco); letter-spacing: 0.1em; }
.lp-passo h3[b-rt3mn6y49t] { margin: 0.4rem 0 0.5rem; font-size: 1.1rem; }

/* ---------------------------------------------------------------- comparação */
/* Grade com papéis ARIA de tabela: a informação é tabular, mas a página pública
   não usa <table> cru (o design system reserva a tabela ao componente da Ui). */
.lp-comp[b-rt3mn6y49t] { margin-top: 2rem; border: 1px solid var(--lp-borda); border-radius: var(--lp-raio); overflow: hidden; background: var(--lp-superficie); }
.lp-comp__rolagem[b-rt3mn6y49t] { overflow-x: auto; }
.lp-comp__linha[b-rt3mn6y49t] { display: grid; grid-template-columns: 1.1fr 1fr 1fr 1.3fr; border-bottom: 1px solid var(--lp-borda); min-width: 760px; }
.lp-comp__linha:last-child[b-rt3mn6y49t] { border-bottom: 0; }
.lp-comp__linha > div[b-rt3mn6y49t] { padding: 0.9rem 1rem; font-size: 0.95rem; color: var(--lp-suave); }
.lp-comp__linha > div:first-child[b-rt3mn6y49t] { font-weight: 650; color: var(--lp-tinta); }
.lp-comp__linha > div:last-child[b-rt3mn6y49t] { background: var(--lp-marca-bg); color: var(--lp-tinta); }
.lp-comp__cabecalho > div[b-rt3mn6y49t] { background: var(--lp-fundo); color: var(--lp-navy); font-weight: 700; }
.lp-comp__cabecalho > div:last-child[b-rt3mn6y49t] { background: var(--lp-marca-bg); }
.lp-comp__sim[b-rt3mn6y49t] { color: var(--lp-ok); font-weight: 800; margin-right: 0.35rem; }
.lp-comp__nao[b-rt3mn6y49t] { color: var(--lp-erro); font-weight: 800; margin-right: 0.35rem; }

/* ---------------------------------------------------------------- cartórios */
.lp-duas[b-rt3mn6y49t] { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 2.5rem; align-items: center; margin-top: 1.6rem; }

/* ---------------------------------------------------------------- planos */
/* O checkbox do anual e os radios de porte ficam fora da tela mas navegáveis. */
.lp-anual[b-rt3mn6y49t], .lp-porte[b-rt3mn6y49t] { position: absolute; opacity: 0; pointer-events: none; }

.lp-alterna[b-rt3mn6y49t] {
    display: inline-flex;
    border: 1px solid var(--lp-borda);
    border-radius: 999px;
    padding: 0.25rem;
    background: var(--lp-superficie);
    margin-top: 1.4rem;
    cursor: pointer;
    user-select: none;
}

.lp-alterna span[b-rt3mn6y49t] { color: var(--lp-suave); font-weight: 650; border-radius: 999px; padding: 0.45rem 1rem; font-size: 0.95rem; }
.lp-alterna .lp-alterna__brinde[b-rt3mn6y49t] { font-size: 0.78rem; font-weight: 700; color: var(--lp-ok); padding-left: 0.2rem; }
.lp-anual:not(:checked) ~ .lp-alterna .lp-alterna__mensal[b-rt3mn6y49t],
.lp-anual:checked ~ .lp-alterna .lp-alterna__anual[b-rt3mn6y49t] { background: var(--lp-navy); color: var(--sgsi-color-on-brand, #fff); }
.lp-anual:checked ~ .lp-alterna .lp-alterna__anual .lp-alterna__brinde[b-rt3mn6y49t] { color: var(--sgsi-color-on-brand, #fff); }
.lp-anual:focus-visible ~ .lp-alterna[b-rt3mn6y49t] { outline: 2px solid var(--lp-aco); outline-offset: 2px; }

.lp-precos[b-rt3mn6y49t] { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.2rem; align-items: start; margin-top: 1.6rem; }

.lp-plano[b-rt3mn6y49t] { position: relative; }
.lp-plano--destaque[b-rt3mn6y49t] { border: 2px solid var(--lp-navy); box-shadow: var(--lp-sombra); }

.lp-plano__etiqueta[b-rt3mn6y49t] {
    position: absolute;
    top: -0.8rem;
    left: 1.2rem;
    background: var(--lp-navy);
    color: var(--sgsi-color-on-brand, #fff);
    font-size: 0.72rem;
    font-weight: 700;
    border-radius: 999px;
    padding: 0.2rem 0.7rem;
}

.lp-plano h3[b-rt3mn6y49t] { font-size: 1.2rem; font-weight: 700; margin-bottom: 0.2rem; }
.lp-plano__sub[b-rt3mn6y49t] { font-size: 0.9rem; color: var(--lp-suave); margin: 0 0 1rem; }

.lp-plano__portes[b-rt3mn6y49t] { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-bottom: 1rem; }

.lp-plano__portes label[b-rt3mn6y49t] {
    font-size: 0.8rem;
    padding: 0.3rem 0.7rem;
    border: 1px solid var(--lp-borda);
    border-radius: 999px;
    cursor: pointer;
    color: var(--lp-suave);
}

.lp-plano__portes label:hover[b-rt3mn6y49t] { border-color: var(--lp-aco); color: var(--lp-navy); }
.lp-porte:focus-visible ~ .lp-plano__portes label[b-rt3mn6y49t] { outline: 2px solid var(--lp-aco); outline-offset: 2px; }

.lp-porte--1:checked ~ .lp-plano__portes label[for$="1"][b-rt3mn6y49t],
.lp-porte--2:checked ~ .lp-plano__portes label[for$="2"][b-rt3mn6y49t],
.lp-porte--3:checked ~ .lp-plano__portes label[for$="3"][b-rt3mn6y49t],
.lp-porte--4:checked ~ .lp-plano__portes label[for$="4"][b-rt3mn6y49t] {
    background: var(--lp-navy);
    border-color: var(--lp-navy);
    color: var(--sgsi-color-on-brand, #fff);
}

.lp-preco[b-rt3mn6y49t] { margin: 0; font-size: 0.95rem; color: var(--lp-suave); }
.lp-preco b[b-rt3mn6y49t] { display: block; font-size: 2.2rem; line-height: 1.1; color: var(--lp-navy); font-weight: 800; font-variant-numeric: tabular-nums; }
.lp-preco span[b-rt3mn6y49t] { display: block; font-size: 0.88rem; margin-top: 0.3rem; }
.lp-preco .lp-preco__cliente[b-rt3mn6y49t] { color: var(--lp-ok); font-weight: 700; }
.lp-preco .lp-preco__equivale[b-rt3mn6y49t] { color: var(--lp-suave); }

.lp-plano__precos[b-rt3mn6y49t] { min-height: 7rem; margin-bottom: 0.4rem; }
.lp-plano__precos .lp-preco--1[b-rt3mn6y49t], .lp-plano__precos .lp-preco--2[b-rt3mn6y49t],
.lp-plano__precos .lp-preco--3[b-rt3mn6y49t], .lp-plano__precos .lp-preco--4[b-rt3mn6y49t] { display: none; }
.lp-plano__precos--fixos .lp-preco[b-rt3mn6y49t] { margin-bottom: 0.75rem; }

.lp-porte--1:checked ~ .lp-plano__precos .lp-preco--1[b-rt3mn6y49t],
.lp-porte--2:checked ~ .lp-plano__precos .lp-preco--2[b-rt3mn6y49t],
.lp-porte--3:checked ~ .lp-plano__precos .lp-preco--3[b-rt3mn6y49t],
.lp-porte--4:checked ~ .lp-plano__precos .lp-preco--4[b-rt3mn6y49t] { display: block; }

/* Mensal ↔ anual: o checkbox #lp-anual precede a grade de planos no DOM. Estas
   regras vêm DEPOIS das de porte, de propósito: a mesma especificidade, e a
   última vence — o anual esconde a linha mensal do porte escolhido, e vice-versa. */
.lp-anual:not(:checked) ~ .lp-precos .lp-preco--anual[b-rt3mn6y49t] { display: none; }
.lp-anual:checked ~ .lp-precos .lp-preco--mensal[b-rt3mn6y49t] { display: none; }

.lp-plano__fixo[b-rt3mn6y49t] { font-size: 0.86rem; color: var(--lp-suave); margin: 0.6rem 0 1.1rem; border-top: 1px solid var(--lp-borda); padding-top: 0.7rem; }
.lp-plano .lp-btn[b-rt3mn6y49t] { width: 100%; }

/* Recomendação por carteira */
.lp-recomenda[b-rt3mn6y49t] {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 1.5rem;
    align-items: center;
    margin-top: 1.6rem;
}

.lp-recomenda label[b-rt3mn6y49t] { font-weight: 650; display: block; margin-bottom: 0.4rem; }
.lp-recomenda input[type="range"][b-rt3mn6y49t] { width: 100%; accent-color: var(--lp-aco); }
.lp-recomenda output[b-rt3mn6y49t] { display: block; font-size: 1.05rem; }
.lp-recomenda output b[b-rt3mn6y49t] { color: var(--lp-navy); }
.lp-recomenda small[b-rt3mn6y49t] { color: var(--lp-suave); }

/* ---------------------------------------------------------------- responsivo */
@media (max-width: 980px) {
    .lp-hero__grade[b-rt3mn6y49t], .lp-painel[b-rt3mn6y49t], .lp-prova[b-rt3mn6y49t], .lp-duas[b-rt3mn6y49t], .lp-recomenda[b-rt3mn6y49t] { grid-template-columns: 1fr; }
    .lp-jornada[b-rt3mn6y49t] { grid-template-columns: 1fr 1fr; }
    .lp-precos[b-rt3mn6y49t] { grid-template-columns: 1fr; }
    /* A captura vem DEPOIS do texto no telefone: a promessa antes da prova. */
    .lp-hero__visual[b-rt3mn6y49t] { order: 2; }
}

@media (max-width: 640px) {
    .lp-jornada[b-rt3mn6y49t] { grid-template-columns: 1fr; }
}
/* /Components/Pages/PlanosImplementacao/DetalhePlanoImplementacao.razor.rz.scp.css */
/*
    SGI PRO — PlanosImplementacao/DetalhePlanoImplementacao (CSS escopado)
    Estilo dos chips de "item de estimativa" vinculados a cada marco. Os chips
    são renderizados dentro do SgsiCard (componente filho), por isso usamos
    ::deep para alcançá-los a partir do escopo desta página. Cores e raios
    consomem as variáveis do design system (sem hex hardcoded).
*/

[b-yyk0ur9vh3] .sgsi-plano-marco__itens {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
    margin-top: 0.35rem;
}

[b-yyk0ur9vh3] .sgsi-plano-item-chip {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.1rem 0.45rem;
    font-size: 0.72rem;
    line-height: 1.4;
    border: 1px solid var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-sm);
    background: var(--sgsi-color-surface-2);
    color: var(--sgsi-color-text-muted);
    white-space: nowrap;
}

[b-yyk0ur9vh3] .sgsi-plano-item-chip__x {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1rem;
    height: 1rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--sgsi-color-danger);
    font-size: 0.9rem;
    line-height: 1;
    cursor: pointer;
}

[b-yyk0ur9vh3] .sgsi-plano-item-chip__x:hover,
[b-yyk0ur9vh3] .sgsi-plano-item-chip__x:focus-visible {
    background: color-mix(in srgb, var(--sgsi-color-danger) 10%, transparent);
    outline: none;
}
/* /Components/Pages/RecursosSgsi/ListaRecursosSgsi.razor.rz.scp.css */
/* ============================================================================
   SGI PRO — RecursosSgsi/ListaRecursosSgsi (CSS escopado)
   Estiliza apenas as classes próprias desta página (sgsi-recursos-*): seletor
   de ano, abas, toolbar de cada aba, barra de filtros de status/tipo, lista de
   alertas e destaque de vencimento. Reusa os design tokens globais (--sgsi-*);
   não redefine classes compartilhadas (sgsi-risco-*, sgsi-kv, form-select).
   Cores SEM fallback hex: os tokens sempre carregam (sgsi-tokens.css vem no
   <link> do App.razor antes de tudo) e um hex cravado divergiria do token real
   e quebraria o dark theme se algum dia ativasse.
   ============================================================================ */

/* ---- Seletor de ano de referência (na faixa de Ações) -------------------- */
.sgsi-recursos-ano[b-r3hscgkt16] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1, 0.25rem);
    min-width: 9rem;
}

.sgsi-recursos-ano .form-select[b-r3hscgkt16] {
    min-width: 8rem;
}

/* ---- Abas (tablist) ------------------------------------------------------ */
.sgsi-recursos-abas[b-r3hscgkt16] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-1, 0.25rem);
    padding: var(--sgsi-space-2, 0.5rem) var(--sgsi-space-3, 0.75rem);
}

.sgsi-recursos-aba[b-r3hscgkt16] {
    appearance: none;
    border: 1px solid transparent;
    background: transparent;
    color: var(--sgsi-color-text-muted);
    font-weight: var(--sgsi-font-weight-medium, 500);
    font-size: var(--sgsi-font-size-sm, 0.875rem);
    padding: var(--sgsi-space-2, 0.5rem) var(--sgsi-space-4, 1rem);
    border-radius: var(--sgsi-radius-md, 0.5rem);
    cursor: pointer;
    transition: background-color var(--sgsi-transition-fast, 120ms) ease,
                color var(--sgsi-transition-fast, 120ms) ease;
}

.sgsi-recursos-aba:hover[b-r3hscgkt16] {
    background: var(--sgsi-color-surface-hover);
    color: var(--sgsi-color-text);
}

.sgsi-recursos-aba--ativa[b-r3hscgkt16] {
    background: var(--sgsi-color-brand);
    color: var(--sgsi-color-on-brand);
}

.sgsi-recursos-aba--ativa:hover[b-r3hscgkt16] {
    background: var(--sgsi-color-brand-hover);
    color: var(--sgsi-color-on-brand);
}

.sgsi-recursos-aba:focus-visible[b-r3hscgkt16] {
    outline: var(--sgsi-focus-ring-width, 2px) solid var(--sgsi-color-focus-ring);
    outline-offset: var(--sgsi-focus-ring-offset, 2px);
}

/* ---- Toolbar de cada aba (botão de cadastro + filtros) ------------------- */
.sgsi-recursos-toolbar[b-r3hscgkt16] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--sgsi-space-3, 0.75rem);
    padding: var(--sgsi-space-3, 0.75rem) var(--sgsi-space-4, 1rem);
    border-bottom: 1px solid var(--sgsi-color-border);
}

/* ---- Barra de filtros de status/tipo ------------------------------------- */
.sgsi-recursos-filtros[b-r3hscgkt16] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--sgsi-space-2, 0.5rem);
}

.sgsi-recursos-filtros .sgsi-field__label[b-r3hscgkt16] {
    margin: 0;
    white-space: nowrap;
    color: var(--sgsi-color-text-muted);
    font-size: var(--sgsi-font-size-sm, 0.875rem);
}

.sgsi-recursos-filtros .form-select[b-r3hscgkt16] {
    min-width: 11rem;
}

/* ---- Lista de pontos de atenção ------------------------------------------ */
.sgsi-recursos-alertas-lista[b-r3hscgkt16] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2, 0.5rem);
}

.sgsi-recursos-alertas-lista li[b-r3hscgkt16] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-2, 0.5rem);
}

/* ---- Destaque de licença/vigência vencendo ------------------------------- */
.sgsi-recursos-vencendo[b-r3hscgkt16] {
    color: var(--sgsi-color-warning);
    font-weight: var(--sgsi-font-weight-semibold, 600);
}

/* ---- Orçamento consolidado por categoria (barras de proporção) ----------- */
.sgsi-recursos-orcamento[b-r3hscgkt16] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-4, 1rem);
}

.sgsi-recursos-orcamento-item[b-r3hscgkt16] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-1, 0.25rem);
}

.sgsi-recursos-orcamento-cabecalho[b-r3hscgkt16] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--sgsi-space-3, 0.75rem);
}

.sgsi-recursos-orcamento-rotulo[b-r3hscgkt16] {
    font-weight: var(--sgsi-font-weight-medium, 500);
    color: var(--sgsi-color-text);
}

.sgsi-recursos-orcamento-valor[b-r3hscgkt16] {
    font-variant-numeric: tabular-nums;
    text-align: right;
    white-space: nowrap;
}

.sgsi-recursos-orcamento-barra[b-r3hscgkt16] {
    position: relative;
    height: 0.5rem;
    width: 100%;
    background: var(--sgsi-color-bg-subtle);
    border-radius: var(--sgsi-radius-pill, 999px);
    overflow: hidden;
}

.sgsi-recursos-orcamento-preenchimento[b-r3hscgkt16] {
    display: block;
    height: 100%;
    border-radius: inherit;
    transition: width var(--sgsi-transition, 240ms) ease;
    min-width: 2px;
}

.sgsi-recursos-orcamento-preenchimento--rh[b-r3hscgkt16] {
    background: var(--sgsi-color-brand);
}

.sgsi-recursos-orcamento-preenchimento--fer[b-r3hscgkt16] {
    background: var(--sgsi-color-info);
}

.sgsi-recursos-orcamento-preenchimento--svc[b-r3hscgkt16] {
    background: var(--sgsi-color-success);
}

.sgsi-recursos-orcamento-preenchimento--infra[b-r3hscgkt16] {
    background: var(--sgsi-color-warning);
}

/* ---- Responsivo: filtros descem para baixo do botão em telas estreitas --- */
@media (max-width: 640px) {
    .sgsi-recursos-toolbar[b-r3hscgkt16] {
        flex-direction: column;
        align-items: stretch;
    }

    .sgsi-recursos-filtros .form-select[b-r3hscgkt16] {
        min-width: 0;
        flex: 1 1 auto;
    }
}
/* /Components/Pages/SnapshotCliente/ComeceAqui.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — SnapshotCliente/ComeceAqui (CSS isolado)
   Jornada guiada de onboarding: barra de progresso, cartões de passo numerados
   e chips de módulos concluídos. Reaproveita os tokens do design system.
   =========================================================================== */

/* ---- Progresso da jornada ----------------------------------------------
   BAI-1099: `.sgsi-comece-progresso-card` VIVIA AQUI e nunca pintou. A classe é aplicada
   ao SgsiCard por `Classe="…"`, e o CSS isolado desta página carimba o escopo dela
   (b-xxxxx) só nos elementos do markup daqui — o <section class="sgsi-card @Classe"> é do
   escopo do SgsiCard. A borda de acento virou `.sgsi-card--acento-marca`, na folha do
   próprio componente (wwwroot/css/sgsi-componentes.css), onde ela alcança o elemento.
   O `margin-bottom` NÃO foi junto: `.sgsi-pagina__corpo` é flex-column com
   `gap: var(--sgsi-space-5)`, então o respiro entre os cartões já existe — e como esta
   regra nunca chegou a valer, repô-la agora MUDARIA o espaçamento em vez de restaurá-lo. */

.sgsi-comece-progresso__topo[b-m9fcomcsjz] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sgsi-space-4);
    margin-bottom: var(--sgsi-space-3);
}

.sgsi-comece-progresso__titulo[b-m9fcomcsjz] {
    margin: 0;
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-comece-progresso__sub[b-m9fcomcsjz] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

.sgsi-comece-progresso__pct[b-m9fcomcsjz] {
    font-size: var(--sgsi-font-size-xl);
    font-weight: var(--sgsi-font-weight-bold);
    color: var(--sgsi-color-brand);
    font-variant-numeric: tabular-nums;
}

.sgsi-comece-progresso__barra[b-m9fcomcsjz] {
    height: 0.6rem;
    background: var(--sgsi-color-surface-2);
    border-radius: var(--sgsi-radius-pill);
    overflow: hidden;
}

.sgsi-comece-progresso__preenchido[b-m9fcomcsjz] {
    display: block;
    height: 100%;
    background: var(--sgsi-color-brand);
    border-radius: var(--sgsi-radius-pill);
    transition: width var(--sgsi-transition);
}

/* ---- Seção ------------------------------------------------------------- */
.sgsi-comece-secao[b-m9fcomcsjz] {
    font-size: var(--sgsi-font-size-md);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
    margin: var(--sgsi-space-5) 0 var(--sgsi-space-3);
}

/* ---- Sugestão para começar (04/09) --------------------------------------
   O cartão do primeiro passo sugerido. As regras ficam AQUI porque todos os
   elementos abaixo são do markup desta página (recebem o atributo de escopo);
   o acento da borda continua no modificador do componente
   (`.sgsi-card--acento-marca`, folha global), pelo motivo já registrado no topo
   deste arquivo: o <section> do SgsiCard é de outro escopo. */
.sgsi-comece-sugerido[b-m9fcomcsjz] {
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2);
}

.sgsi-comece-sugerido__titulo[b-m9fcomcsjz] {
    margin: 0;
    font-size: var(--sgsi-font-size-md);
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-comece-sugerido__desc[b-m9fcomcsjz] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

.sgsi-comece-sugerido__acoes[b-m9fcomcsjz] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
    margin-top: var(--sgsi-space-2);
}

/* ---- Passos (cartões numerados) ---------------------------------------- */
.sgsi-comece-passos[b-m9fcomcsjz] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-3);
}

.sgsi-comece-passo[b-m9fcomcsjz] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-4);
    padding: var(--sgsi-space-4);
    background: var(--sgsi-color-surface);
    border: 1px solid var(--sgsi-color-border);
    border-radius: var(--sgsi-radius-md);
}

.sgsi-comece-passo--critico[b-m9fcomcsjz] {
    border-left: 4px solid var(--sgsi-color-brand);
}

.sgsi-comece-passo__num[b-m9fcomcsjz] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    flex-shrink: 0;
    border-radius: var(--sgsi-radius-pill);
    background: var(--sgsi-color-brand-bg);
    color: var(--sgsi-color-brand);
    font-weight: var(--sgsi-font-weight-bold);
    font-variant-numeric: tabular-nums;
}

.sgsi-comece-passo__corpo[b-m9fcomcsjz] {
    flex: 1;
    min-width: 0;
}

.sgsi-comece-passo__cab[b-m9fcomcsjz] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
}

.sgsi-comece-passo__nome[b-m9fcomcsjz] {
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-comece-passo__clausula[b-m9fcomcsjz] {
    font-size: var(--sgsi-font-size-xs);
    color: var(--sgsi-color-text-subtle);
}

.sgsi-comece-passo__desc[b-m9fcomcsjz] {
    margin: var(--sgsi-space-2) 0 0;
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

/* A dica do caminho barato: menor que a descrição e recuada, para ler como
   nota de rodapé do passo e não competir com o texto de status. */
.sgsi-comece-passo__dica[b-m9fcomcsjz] {
    margin: var(--sgsi-space-2) 0 0;
    padding-inline-start: var(--sgsi-space-3);
    border-inline-start: 2px solid var(--sgsi-color-brand);
    font-size: var(--sgsi-font-size-xs);
    color: var(--sgsi-color-text-subtle);
}

.sgsi-comece-passo__dica a[b-m9fcomcsjz] {
    color: var(--sgsi-color-brand);
}

.sgsi-comece-passo__cta[b-m9fcomcsjz] {
    flex-shrink: 0;
}

/* ---- Concluídos (chips) ------------------------------------------------ */
.sgsi-comece-feitos[b-m9fcomcsjz] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
}

.sgsi-comece-feito-chip[b-m9fcomcsjz] {
    display: inline-flex;
    align-items: center;
    gap: var(--sgsi-space-1);
    padding: var(--sgsi-space-1) var(--sgsi-space-3);
    border-radius: var(--sgsi-radius-pill);
    background: var(--sgsi-color-success-bg);
    color: var(--sgsi-color-success);
    font-size: var(--sgsi-font-size-sm);
}

/* ---- Tudo pronto -------------------------------------------------------
   BAI-1099 (segunda instância): a borda verde de `.sgsi-comece-feito` virou
   `.sgsi-card--acento-sucesso` pela mesma razão do cartão de progresso acima. As regras
   DESCENDENTES desta família continuam aqui e funcionam: `.sgsi-comece-feito__conteudo`,
   `__icone` e `__titulo` estão no markup DESTA página e recebem o escopo. */

.sgsi-comece-feito__conteudo[b-m9fcomcsjz] {
    display: flex;
    align-items: flex-start;
    gap: var(--sgsi-space-4);
}

.sgsi-comece-feito__icone[b-m9fcomcsjz] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3rem;
    height: 3rem;
    flex-shrink: 0;
    border-radius: var(--sgsi-radius-md);
    background: var(--sgsi-color-success-bg);
    color: var(--sgsi-color-success);
}

.sgsi-comece-feito__titulo[b-m9fcomcsjz] {
    margin: 0;
    font-weight: var(--sgsi-font-weight-semibold);
    color: var(--sgsi-color-text);
}

.sgsi-comece-feito__sub[b-m9fcomcsjz] {
    margin: var(--sgsi-space-1) 0 var(--sgsi-space-3);
    font-size: var(--sgsi-font-size-sm);
    color: var(--sgsi-color-text-muted);
}

.sgsi-comece-feito__acoes[b-m9fcomcsjz] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-2);
}

/* ---- Responsivo -------------------------------------------------------- */
@media (max-width: 640px) { /* mobile — breakpoint canônico (#49) */
    .sgsi-comece-passo[b-m9fcomcsjz] {
        flex-wrap: wrap;
    }

    .sgsi-comece-passo__cta[b-m9fcomcsjz] {
        width: 100%;
        justify-content: center;
    }
}
/* /Components/Pages/SnapshotCliente/PainelProntidao.razor.rz.scp.css */
/*
    SGI PRO — SnapshotCliente/PainelProntidao (scoped CSS)
    Estilos do painel de prontidão (read-only). Reusa os tokens semânticos do
    design system (--sgsi-color-*, --sgsi-space-*, --sgsi-radius-*) e segue o
    visual dos demais cards/tabelas. WCAG: contraste de semáforo + foco visível.
    Cores SEM fallback hex: os tokens sempre carregam (sgsi-tokens.css vem no
    <link> do App.razor antes de tudo) e um hex cravado divergiria do token real
    e quebraria o dark theme se algum dia ativasse.
*/

/* ---------------- Barra de progresso global ---------------- */
.sgsi-prontidao-progresso[b-h6dzcngz4d] {
    display: flex;
    align-items: center;
    gap: var(--sgsi-space-3, 0.75rem);
}

.sgsi-prontidao-progresso__barra[b-h6dzcngz4d] {
    position: relative;
    flex: 1 1 auto;
    height: 0.75rem;
    background: var(--sgsi-color-surface-2);
    border-radius: 999px;
    overflow: hidden;
}

.sgsi-prontidao-progresso__preenchido[b-h6dzcngz4d] {
    display: block;
    height: 100%;
    background: var(--sgsi-color-brand);
    border-radius: 999px;
    transition: width 0.4s ease;
}

.sgsi-prontidao-progresso__rotulo[b-h6dzcngz4d] {
    flex: 0 0 auto;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    min-width: 3rem;
    text-align: right;
}

/* A faixa perdeu o <SgsiCard> em volta (a mesma % aparecia duas vezes, e o cartão custava
   ~130px só de cromo) — o rótulo que era o Titulo do cartão passa a viver aqui, como
   primeiro item da linha. Sem ele a barra ficaria órfã entre a faixa de KPIs e o banner. */
.sgsi-prontidao-progresso__legenda[b-h6dzcngz4d] {
    flex: 0 0 auto;
    font-weight: 600;
    color: var(--sgsi-color-text-muted);
}

/* ---------------- Banner de exportação ---------------- */
.sgsi-prontidao-banner__conteudo[b-h6dzcngz4d] {
    display: flex;
    align-items: flex-start;
    gap: var(--sgsi-space-3, 0.75rem);
}

.sgsi-prontidao-banner__icone[b-h6dzcngz4d] {
    flex: 0 0 auto;
    display: inline-flex;
}

.sgsi-prontidao-banner__titulo[b-h6dzcngz4d] {
    margin: 0 0 0.25rem;
    font-weight: 600;
}

.sgsi-prontidao-banner__msg[b-h6dzcngz4d] {
    margin: 0;
    color: var(--sgsi-color-text-muted);
}

.sgsi-prontidao-banner--ok .sgsi-prontidao-banner__icone[b-h6dzcngz4d] {
    color: var(--sgsi-color-success);
}

.sgsi-prontidao-banner--bloqueado .sgsi-prontidao-banner__icone[b-h6dzcngz4d] {
    color: var(--sgsi-color-danger);
}

/* BAI-1100: as bordas de `--ok`/`--bloqueado` VIVIAM AQUI e nunca pintaram — a classe é
   aplicada ao SgsiCard por `Classe="…"`, e o escopo desta folha (b-xxxxx) só marca elementos
   do markup DESTA página, não o <section> do componente filho. Elas viraram
   `.sgsi-card--acento-sucesso`/`--acento-perigo`, na folha do próprio componente.
   As duas regras DESCENDENTES logo acima continuam aqui e FUNCIONAM: o escopo cai no último
   seletor, e o <span class="sgsi-prontidao-banner__icone"> está no markup desta página — é por
   isso que a cor do ÍCONE sempre apareceu enquanto a borda do cartão não. */

/* ---------------- Tabela-radar ----------------
   ESTA FOLHA ERA UMA QUARTA FAMÍLIA DE TABELA (30/08). Com `VarianteTabela.Livre` a <table>
   saía sem classe-base nenhuma e o que a desenhava era este bloco: largura, margem,
   border-collapse, bordas de célula, padding de célula e um `font-size: 0.925rem` que não
   aparece em nenhum outro lugar do produto. O preço não era estético — o toggle de densidade
   do topbar mira `.sgsi-tabela`/`.sgsi-grid__tabela`/`.sgsi-est-tabela`, e a tela mais densa
   da área ficava de fora dele; e o thead sticky do DS também.
   A página passou a `VarianteTabela.Detalhe`: largura, bordas, padding, tipografia, hover e
   sticky vêm de `.sgsi-tabela` (sgsi-componentes.css), e a densidade alcança a tabela. Aqui
   ficam SÓ os modificadores que o DS não tem: coluna numérica, coluna de ação, semáforo,
   linha crítica — e as duas colunas de texto longo, que precisam alinhar pelo topo.
   O `.sgsi-prontidao-tabela-wrap` (overflow-x: auto em toda largura) saiu: o SgsiTabela já
   entrega o `.sgsi-tabela-wrap`, que rola no mobile e é inerte no desktop de propósito. */

/* O `<th scope="row">` da 1ª coluna é o irmão que o DS deixa de fora: `.sgsi-tabela` estiliza
   `> thead > tr > th` e `> tbody > tr > td`, e a célula-cabeçalho de LINHA não casa com
   nenhum dos dois — sem esta regra ela cairia no padding do `.table` do Bootstrap e
   desalinharia da linha inteira. Mesmos tokens do DS, e a densidade compacta a alcança
   logo abaixo (o seletor de densidade do DS também para nos dois casos acima). */
.sgsi-prontidao-tabela > tbody > tr > th[b-h6dzcngz4d] {
    padding: var(--sgsi-space-3) var(--sgsi-space-4);
    text-align: left;
    border-bottom: 1px solid var(--sgsi-color-border);
    color: var(--sgsi-color-text);
}

.sgsi-prontidao-tabela > tbody > tr:last-child > th[b-h6dzcngz4d] {
    border-bottom: 0;
}

[data-sgsi-densidade="compacto"] .sgsi-prontidao-tabela > tbody > tr > th[b-h6dzcngz4d] {
    padding-top: 0.3rem;
    padding-bottom: 0.3rem;
}

/* "Observação" e "Módulo" quebram em várias linhas; alinhar pelo meio (o padrão do DS)
   descolava o semáforo e o número da primeira linha do texto. Vence
   `.sgsi-tabela > tbody > tr > td` (0,1,3) sem depender da ORDEM das folhas: a <td> é markup
   desta página, então o compilador carimba o atributo de escopo no último seletor e a regra
   sai como (0,2,3). */
.sgsi-prontidao-tabela > tbody > tr > td[b-h6dzcngz4d],
.sgsi-prontidao-tabela > tbody > tr > th[b-h6dzcngz4d] {
    vertical-align: top;
}

.sgsi-prontidao-tabela__num[b-h6dzcngz4d] {
    text-align: right;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.sgsi-prontidao-tabela__acao[b-h6dzcngz4d] {
    text-align: right;
    white-space: nowrap;
}

.sgsi-prontidao-linha--critico th[scope="row"][b-h6dzcngz4d] {
    box-shadow: inset 3px 0 0 0 var(--sgsi-color-brand);
}

/* ---------------- Célula módulo + semáforo ---------------- */
.sgsi-prontidao-modulo[b-h6dzcngz4d] {
    font-weight: 500;
}

.sgsi-prontidao-modulo > span[b-h6dzcngz4d] {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.sgsi-prontidao-semaforo[b-h6dzcngz4d] {
    display: inline-block;
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    margin-right: 0.5rem;
    flex: 0 0 auto;
    vertical-align: middle;
}

.sgsi-prontidao-semaforo--verde[b-h6dzcngz4d] {
    background: var(--sgsi-color-success);
}

.sgsi-prontidao-semaforo--amarelo[b-h6dzcngz4d] {
    background: var(--sgsi-color-warning);
}

.sgsi-prontidao-semaforo--vermelho[b-h6dzcngz4d] {
    background: var(--sgsi-color-danger);
}

.sgsi-prontidao-semaforo--neutro[b-h6dzcngz4d] {
    background: var(--sgsi-color-border);
}

/* `::deep` porque a classe vai no <SgsiBadge>, componente FILHO: o <span> dele carrega o escopo
   DELE, não o desta folha. O ancestral que o `::deep` precisa existe — é a célula da tabela,
   markup desta página. (Era o mesmo motivo do antigo `::deep .sgsi-prontidao-tabela`, que saiu
   quando a tabela voltou para a classe-base do design system.) */
[b-h6dzcngz4d] .sgsi-prontidao-tag-critico {
    font-size: 0.7rem;
}

.sgsi-prontidao-clausula[b-h6dzcngz4d] {
    color: var(--sgsi-color-text-muted);
    white-space: nowrap;
}

.sgsi-prontidao-obs[b-h6dzcngz4d] {
    color: var(--sgsi-color-text-muted);
    max-width: 28rem;
}
/* /Components/Ui/SgsiAvisoReciprocoCadastro.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Ui/SgsiAvisoReciprocoCadastro (CSS ISOLADO)

   A nota que fica DENTRO do modal de cadastro, entre os campos, dizendo a quais
   normas do cliente aquele item vai servir.

   REGRA DE DESENHO, UMA SÓ: NÃO COMPETIR COM O FORMULÁRIO. É informação de
   contexto, não validação — por isso texto pequeno, cor secundária e fundo
   `bg-subtle`, e nunca o âmbar/vermelho dos avisos de campo. Um bloco colorido
   no meio de um formulário treina o olho a lê-lo como erro, e o consultor
   procuraria o campo inválido que não existe.

   O acento é a borda esquerda na cor da marca — a mesma que o
   `SgsiSeloReusoTransversal` usa no cabeçalho das telas de risco/ativo/incidente,
   de propósito: é o MESMO assunto (o reuso multi-norma) em dois lugares do
   produto, e o olho deve reconhecê-lo. E sobrevive ao print em preto e branco
   porque é POSIÇÃO, não cor.

   O `flex-wrap` das listas de selo não é zelo: um tenant de cinco normas rende
   cinco rótulos "ISO/IEC 27001:2022" — e, no bloco do ciclo, cinco rótulos AINDA
   MAIORES, com a cláusula entre parênteses. Sem quebra eles empurram o modal
   para a rolagem horizontal, que num diálogo é pior que numa página: o botão
   Salvar sai do campo de visão.
   =========================================================================== */

.sgsi-aviso-cadastro[b-ieno3dinwj] {
    display: flex;
    align-items: flex-start;
    gap: var(--sgsi-space-2);
    padding: var(--sgsi-space-3);
    border-radius: var(--sgsi-radius-md);
    border-left: 3px solid var(--sgsi-color-brand);
    background: var(--sgsi-color-bg-subtle);
}

.sgsi-aviso-cadastro__icone[b-ieno3dinwj] {
    display: inline-flex;
    flex: 0 0 auto;
    /* Alinha o glifo com a PRIMEIRA linha do texto, e não com o bloco inteiro:
       a frase transversal tem três linhas no mobile e o ícone centralizado
       flutuava no meio do parágrafo. */
    margin-top: 2px;
    color: var(--sgsi-color-brand);
}

.sgsi-aviso-cadastro__corpo[b-ieno3dinwj] {
    /* `min-width: 0` deixa o texto quebrar dentro do flex — sem ele o item flex
       assume a largura do conteúdo e a frase longa estoura o diálogo. */
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2);
}

.sgsi-aviso-cadastro__frase[b-ieno3dinwj],
.sgsi-aviso-cadastro__nota[b-ieno3dinwj] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    line-height: var(--sgsi-line-height);
    color: var(--sgsi-color-text-muted);
}

.sgsi-aviso-cadastro__normas[b-ieno3dinwj] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-1);
}
/* /Components/Ui/SgsiNormasQueServem.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Ui/SgsiNormasQueServem (CSS isolado por componente)

   POR QUE O WRAP EXISTE. Num tenant multi-norma a resposta é mais de um selo na
   mesma célula: um KPI de privacidade serve à LGPD E à ISO/IEC 27701 quando as
   duas estão ativas. Sem o wrap, dois rótulos longos alargam a coluna e empurram
   a grade inteira para a rolagem horizontal — que numa tela-índice é o pior
   desfecho possível.

   POR QUE ELE MORA AQUI E NÃO EM TRÊS ARQUIVOS. Em 30/08 esta mesma regra de
   quatro linhas existia três vezes — .sgsi-ind-normas, .sgsi-comp-normas e
   .sgsi-com-normas —, com nomes diferentes de propósito: o CSS isolado do Blazor
   carimba um atributo de escopo POR COMPONENTE, então reaproveitar o nome de
   outro .razor.css não reaproveita a regra. Com o markup num componente só, o
   escopo passa a ser um só e a duplicação some pela raiz, em vez de ser
   contornada por convenção de nome.
   =========================================================================== */

/* O BLOCO — ele FALTAVA, e a catraca de CSS pegou (31/08). O markup usa
   .sgsi-normas-servem como invólucro desde que o componente nasceu, e este arquivo
   só definia os três modificadores: o wrapper renderizava sem regra nenhuma.
   Nada acusava — nem o compilador, nem o analyzer, nem o navegador —, e é
   exatamente o buraco que `Nenhuma_classe_sgsi_usada_no_razor_fica_sem_regra_css`
   existe para fechar.

   `display: contents` é a regra CERTA, e não um `display: block` de fachada: o
   invólucro precisa existir no DOM (é ele que carrega o atributo de escopo do CSS
   isolado, sem o qual os modificadores abaixo não casam), mas NÃO pode criar uma
   caixa própria. Numa célula de grade ou dentro de um <dd>, uma caixa a mais
   quebraria o alinhamento que os três modificadores foram escritos para manter. */
.sgsi-normas-servem[b-u9tmqhutn2] {
    display: contents;
}

.sgsi-normas-servem__selos[b-u9tmqhutn2] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-1);
}

/* A frase da FICHA (ComExplicacao). Tom secundário e sem margem inferior: ela
   fecha um <dd> e a margem do parágrafo abriria um buraco dentro da lista de
   definição, desalinhando a linha seguinte. */
.sgsi-normas-servem__nota[b-u9tmqhutn2] {
    margin-top: var(--sgsi-space-1);
    margin-bottom: 0;
    color: var(--sgsi-color-text-muted);
    font-size: var(--sgsi-font-size-sm);
}

/* "Há assunto, mas nenhuma norma ativa o trata" — mesmo tom da nota, porque é
   informação de contexto e não um estado de erro. É o mesmo par de tokens da
   .sgsi-kv__sub global que as três grades usavam aqui antes de 31/08. */
.sgsi-normas-servem__vazio[b-u9tmqhutn2] {
    color: var(--sgsi-color-text-muted);
    font-size: var(--sgsi-font-size-sm);
}
/* /Components/Ui/SgsiPagina.razor.rz.scp.css */
/* ============================================================================
   SGI PRO — Ui/SgsiPagina (CSS ISOLADO)

   O GRUPO ROTULADO NÃO EXISTE MAIS QUANDO ESTÁ VAZIO (30/08).

   O SgsiPagina decide pela EXISTÊNCIA do fragmento `Acoes`, não pelo que ele
   renderiza — e não há como saber, do lado do servidor, se um RenderFragment
   vai produzir algum nó. Nas 71 chamadas em que o corpo inteiro de <Acoes> é um
   único `@if (podeEscrever)` / `@if (PodeEditar && ...)`, o papel somente-leitura
   (auditor externo é o caso central, e ele é justamente quem mais depende de
   navegação por regiões) recebia um `role="group"` com `aria-label="Ações da
   página"` e NENHUM controle dentro: o leitor de tela anunciava um grupo de ações
   e entregava um grupo vazio.

   `display: none` é o que remove o elemento da árvore de acessibilidade — não
   basta ele não ter tamanho. Como o container é `display: flex` com `gap`, isto
   também tira o espaço morto que ele deixava no cabeçalho.

   POR QUE `:empty` FUNCIONA AQUI: o compilador Razor descarta os nós de texto
   feitos só de espaço em branco dentro de componentes (não há @preservewhitespace
   em lugar nenhum deste projeto), então o `@if` falso não deixa nem um nó de
   texto para trás — a <div> fica literalmente sem filhos. E o pior caso é
   inofensivo: se algum nó sobrasse, a regra simplesmente não casaria e o
   comportamento voltaria a ser o de hoje, sem nada quebrar.

   POR QUE CSS ISOLADO E NÃO O sgsi-componentes.css: a <div> é emitida por ESTE
   componente, então ela carrega o atributo de escopo e a regra não pode alcançar
   as outras seis telas que reaproveitam a classe `sgsi-pagina__acoes` à mão em
   contextos onde o vazio pode ter outro significado.
   ============================================================================ */

.sgsi-pagina__acoes:empty[b-aeh6mmt6m4] {
    display: none;
}
/* /Components/Ui/SgsiSeloReusoTransversal.razor.rz.scp.css */
/* ===========================================================================
   SGI PRO — Ui/SgsiSeloReusoTransversal (CSS ISOLADO)

   A faixa fina que diz ao consultor que aquele registro já vale para várias
   normas dele. Ela mora entre o cabeçalho da página e o conteúdo, e o desenho
   tem uma regra só: NÃO COMPETIR COM O CONTEÚDO. É informação de contexto, não
   alerta — por isso texto pequeno, cor de texto secundária e fundo `bg-subtle`
   em vez do amarelo/vermelho dos avisos, que treinariam o olho a ignorá-la
   junto com os alertas reais da tela (a /riscos já tem o cartão de revisão de
   classificação de dado logo abaixo, e ele PRECISA ganhar essa disputa).

   A borda esquerda na cor da marca é o único acento: é o mesmo recurso que o
   olho já usa para separar "nota sobre a tela" de "linha de dados" nas telas do
   produto, e sobrevive ao print em preto e branco porque é POSIÇÃO, não cor.

   O `flex-wrap` da lista de selos não é zelo: o tenant de cinco normas rende
   cinco rótulos "ISO/IEC 27001:2022" na mesma linha, e sem quebra eles empurram
   a página para a rolagem horizontal — que num cabeçalho é o pior desfecho.
   =========================================================================== */

.sgsi-selo-reuso[b-kr7jidwame] {
    display: flex;
    align-items: flex-start;
    gap: var(--sgsi-space-2);
    margin-bottom: var(--sgsi-space-4);
    padding: var(--sgsi-space-3);
    border-radius: var(--sgsi-radius-md);
    border-left: 3px solid var(--sgsi-color-brand);
    background: var(--sgsi-color-bg-subtle);
}

.sgsi-selo-reuso__icone[b-kr7jidwame] {
    display: inline-flex;
    flex: 0 0 auto;
    /* Alinha o glifo com a PRIMEIRA linha do texto, e não com o bloco inteiro:
       com a frase de norma única (três linhas no mobile) o ícone centralizado
       flutuava no meio do parágrafo. */
    margin-top: 1px;
    color: var(--sgsi-color-brand);
}

.sgsi-selo-reuso__corpo[b-kr7jidwame] {
    /* `min-width: 0` deixa o texto quebrar dentro do flex — sem ele o item flex
       assume a largura do conteúdo e a frase longa estoura o container. */
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--sgsi-space-2);
}

.sgsi-selo-reuso__frase[b-kr7jidwame] {
    margin: 0;
    font-size: var(--sgsi-font-size-sm);
    line-height: var(--sgsi-line-height);
    color: var(--sgsi-color-text-muted);
}

.sgsi-selo-reuso__normas[b-kr7jidwame] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sgsi-space-1);
}
