/* =============================================================================
   Tema do CMS da instituição
   =============================================================================
   Referência visual: SDD E MVP/cms UI-UX (as duas capturas do painel Medonix).

   Anatomia que estamos a reproduzir:
     · sidebar como CARTÃO FLUTUANTE arredondado, com margem à volta
     · pesquisa DENTRO da sidebar, não na barra de topo
     · rótulos de secção em caixa normal ("Menu", "Outros"), não em maiúsculas
     · itens com ícone, ~44px, e o activo como PÍLULA sólida com seta à direita
     · cartão de utilizador no fundo da sidebar
     · barra de topo sem fundo nem contorno — as acções são pílulas
     · cartões brancos, raio 20px, contorno subtil, sem sombra
     · cabeçalho de tabela numa banda tingida com cantos arredondados

   Ficheiro estático, registado por FilamentAsset::register() no AppServiceProvider.
   NÃO é compilado por Tailwind — de propósito: um segundo build de Tailwind a
   competir com o do Inertia é uma fonte garantida de conflitos.

   As cores vêm todas de --cms-*, injectadas a partir da base de dados. Mudar
   a cor principal em /cms/aparencia/gerir-cores repinta o painel e o site ao
   mesmo tempo. Nenhum hexadecimal aqui é decisão de design — são neutros de
   estrutura e recuos para quando as definições ainda não existem.
   ========================================================================== */

:root {
    /* Raios generosos, como na referência. */
    --cms-radius-cartao: 20px;
    --cms-radius: var(--cms-radius-md, 14px);
    --cms-radius-sm: 12px;
    --cms-radius-pilula: 999px;

    --cms-bg: var(--cms-color-bg-soft, #f8f8f8);
    --cms-sidebar: #f5f4f7;
    --cms-surface: var(--cms-color-surface, #ffffff);
    --cms-border: var(--cms-color-border, #e6eaea);
    --cms-text: var(--cms-color-text, #111827);
    --cms-muted: var(--cms-color-text-muted, #6b7280);
    --cms-primary: var(--cms-color-primary, #0a7f4c);
    --cms-primary-fg: var(--cms-color-primary-fg, #ffffff);

    /* Margem à volta do cartão da sidebar. É o que a faz "flutuar". */
    --cms-sidebar-margem: 0.75rem;
}

/* ---------------------------------------------------------------- estrutura */

.fi-body {
    background-color: var(--cms-bg);
}

.fi-main {
    max-width: none;
}

.fi-main-content {
    padding-top: 0.5rem;
    padding-bottom: 2rem;
}

/* =============================================================================
   SIDEBAR — cartão flutuante
   ========================================================================== */

.fi-sidebar {
    background-color: transparent;
    border: 0;
}

/* Recolher a sidebar.

   O Filament declara --collapsed-sidebar-width no <html> mas nunca a aplica em
   CSS: recolhido, a barra ficava com a largura do seu conteúdo (265px) e o
   conteúdo nunca recuperava o espaço. Aqui fechamo-la mesmo, num carril de
   ícones. */
@media (min-width: 64rem) {
    .fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open) {
        width: var(--collapsed-sidebar-width);
        overflow-x: hidden;
    }

    /* Recolhida não há espaço para o rótulo de secção nem para a pesquisa. */
    .fi-sidebar:not(.fi-sidebar-open) .fi-sidebar-group-label,
    .fi-sidebar:not(.fi-sidebar-open) .cms-sidebar-pesquisa {
        display: none;
    }

    .fi-sidebar:not(.fi-sidebar-open) .fi-sidebar-item-btn {
        justify-content: center;
        padding-inline: 0;
    }

    /* A seta do item activo só faz sentido quando há rótulo ao lado dela. */
    .fi-sidebar:not(.fi-sidebar-open) .fi-sidebar-item.fi-active > .fi-sidebar-item-btn::after {
        display: none;
    }

    /* Recolhida sobra o avatar; nome e e-mail não cabem em 76px. */
    .fi-sidebar:not(.fi-sidebar-open) .cms-sidebar-perfil-texto,
    .fi-sidebar:not(.fi-sidebar-open) .cms-sidebar-perfil-seta {
        display: none;
    }

    .fi-sidebar:not(.fi-sidebar-open) .cms-sidebar-perfil-link {
        justify-content: center;
    }
}

/* O cartão propriamente dito. `inset` em vez de `height: 100%` para a margem
   ser igual em cima e em baixo sem contas com a altura da barra de topo. */
@media (min-width: 64rem) {
    .fi-sidebar.fi-sidebar-open {
        padding: var(--cms-sidebar-margem);
    }

    /* A navegação e o cartão de perfil são irmãos no DOM, mas têm de ler-se
       como UM cartão só: mesma cor, e o raio dividido entre os dois. */
    .fi-sidebar.fi-sidebar-open .fi-sidebar-nav {
        background-color: var(--cms-sidebar);
        border-radius: var(--cms-radius-cartao) var(--cms-radius-cartao) 0 0;
        /* Contorno obrigatório: o fundo da página (#f6f8f8) e o do cartão
           (#f5f4f7) estão a três pontos um do outro. Sem traço, o cartão não
           se lê como cartão — lê-se como uma coluna sem forma. */
        border: 1px solid var(--cms-border);
        border-bottom: 0;
    }

    .fi-sidebar.fi-sidebar-open .cms-sidebar-perfil {
        background-color: var(--cms-sidebar);
        border-radius: 0 0 var(--cms-radius-cartao) var(--cms-radius-cartao);
        border: 1px solid var(--cms-border);
        border-top: 1px solid color-mix(in oklab, var(--cms-text) 8%, transparent);
    }

    /* Sem perfil (sessão sem utilizador) o cartão fecha-se sozinho. */
    .fi-sidebar.fi-sidebar-open .fi-sidebar-nav:last-child {
        border-radius: var(--cms-radius-cartao);
    }
}

.fi-sidebar-header {
    background-color: var(--cms-sidebar);
    border-bottom: 0;
    box-shadow: none;
    padding-inline: 1rem;
}

.fi-sidebar-nav {
    padding: 0.5rem 0.75rem 1rem;
    gap: 0.125rem;
}

/* O Filament põe `gap: 28px` neste contentor flex, que somaria ao espaçamento
   que definimos abaixo. O intervalo entre grupos vive num sítio só. */
.fi-sidebar-nav-groups {
    gap: 0;
}

/* --- rótulos de secção: "Menu", "Outros" — caixa normal, discretos -------- */

.fi-sidebar-group-label {
    font-size: 0.875rem;
    font-weight: 400;
    letter-spacing: 0;
    text-transform: none;
    /* --cms-muted puro dava 4.41:1 sobre o cartão da sidebar — abaixo dos 4.5
       exigidos a 14px. Escurecido a partir do MESMO token, não de um valor
       novo, para continuar a seguir a cor definida no CMS. */
    color: color-mix(in oklab, var(--cms-muted) 82%, var(--cms-text));
    opacity: 1;
    padding-inline: 0.75rem;
    margin-bottom: 0.375rem;
}

.fi-sidebar-group + .fi-sidebar-group {
    margin-top: 1.25rem;
    padding-top: 1.125rem;
    border-top: 1px solid color-mix(in oklab, var(--cms-text) 8%, transparent);
}

/* A guia vertical com pontos dos itens agrupados não existe na referência. */
.fi-sidebar-item-grouped-border,
.fi-sidebar-item-grouped-border-part {
    display: none;
}

/* --- itens ---------------------------------------------------------------- */

.fi-sidebar-item-btn {
    position: relative;
    border-radius: var(--cms-radius-sm);
    padding-block: 0.625rem;
    padding-inline: 0.75rem;
    gap: 0.75rem;
    font-size: 0.9375rem;
    font-weight: 400;
    color: var(--cms-text);
}

.fi-sidebar-item-btn .fi-icon,
.fi-sidebar-item-btn svg {
    width: 1.25rem;
    height: 1.25rem;
    flex-shrink: 0;
    /* Contorno fino, como os ícones da referência. */
    stroke-width: 1.6;
}

.fi-sidebar-item:not(.fi-active) .fi-sidebar-item-btn:hover {
    background-color: color-mix(in oklab, var(--cms-primary) 8%, transparent);
    color: var(--cms-primary);
}

/* --- item activo: pílula sólida com seta ---------------------------------- */

.fi-sidebar-item.fi-active > .fi-sidebar-item-btn,
.fi-sidebar-item.fi-active > a.fi-sidebar-item-btn {
    background-color: var(--cms-primary);
    border-radius: var(--cms-radius-pilula);
    font-weight: 500;
    padding-inline: 1rem;
}

/* O `*` é necessário: o Filament põe o rótulo num <span> com cor própria, e
   sem isto o texto ficava da mesma cor do fundo — literalmente ilegível. */
.fi-sidebar-item.fi-active > .fi-sidebar-item-btn,
.fi-sidebar-item.fi-active > .fi-sidebar-item-btn * {
    color: var(--cms-primary-fg) !important;
}

/* A seta à direita do item activo, como na referência. Desenhada em CSS para
   não depender de nenhum ficheiro nem de markup extra. */
.fi-sidebar-item.fi-active > .fi-sidebar-item-btn::after {
    content: '';
    position: absolute;
    inset-inline-end: 1rem;
    width: 0.4375rem;
    height: 0.4375rem;
    border-top: 1.75px solid currentColor;
    border-inline-end: 1.75px solid currentColor;
    transform: rotate(45deg);
    opacity: 0.85;
}

.fi-sidebar-item-badge-ctn {
    inset-inline-end: 2rem;
}

/* --- pesquisa dentro da sidebar ------------------------------------------- */

/* Fica colada ao topo: a navegação rola sozinha para mostrar o item activo, e
   sem isto a pesquisa desaparecia de vista logo ao entrar. */
.cms-sidebar-pesquisa {
    position: sticky;
    top: 0;
    z-index: 1;
    margin: 0 0 1.25rem;
    padding-block: 0.5rem;
    background-color: var(--cms-sidebar);
}

.cms-sidebar-pesquisa-btn {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    width: 100%;
    padding: 0.6875rem 0.875rem;
    border-radius: var(--cms-radius-sm);
    background-color: var(--cms-surface);
    border: 1px solid color-mix(in oklab, var(--cms-text) 8%, transparent);
    color: var(--cms-muted);
    font-size: 0.9375rem;
    text-align: start;
    cursor: pointer;
    transition: border-color 0.2s ease;
}

.cms-sidebar-pesquisa-btn:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 40%, transparent);
}

.cms-sidebar-pesquisa-btn svg {
    width: 1.125rem;
    height: 1.125rem;
    flex-shrink: 0;
}

.cms-sidebar-pesquisa-texto {
    flex: 1;
}

/* As teclas do atalho, como na referência. */
.cms-sidebar-pesquisa-tecla {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.375rem;
    height: 1.375rem;
    padding-inline: 0.25rem;
    border-radius: 0.375rem;
    background-color: color-mix(in oklab, var(--cms-text) 6%, transparent);
    font-size: 0.6875rem;
    font-weight: 500;
    color: var(--cms-muted);
}

/* --- cartão do utilizador, no fundo --------------------------------------- */

.cms-sidebar-perfil {
    padding: 0.75rem;
    border-top: 1px solid color-mix(in oklab, var(--cms-text) 8%, transparent);
}

.cms-sidebar-perfil-link {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.5rem;
    border-radius: var(--cms-radius-sm);
    transition: background-color var(--cms-dur-rapido, 220ms) ease;
}

.cms-sidebar-perfil-link:hover {
    background-color: color-mix(in oklab, var(--cms-text) 5%, transparent);
}

.cms-sidebar-perfil-foto,
.cms-sidebar-perfil-iniciais {
    width: 2.25rem;
    height: 2.25rem;
    flex-shrink: 0;
    border-radius: var(--cms-radius-pilula);
    object-fit: cover;
}

.cms-sidebar-perfil-iniciais {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background-color: color-mix(in oklab, var(--cms-primary) 14%, transparent);
    color: var(--cms-primary);
    font-size: 0.75rem;
    font-weight: 600;
}

/* `min-width: 0` para o e-mail longo poder ser cortado em vez de esticar a
   caixa e empurrar a seta para fora do cartão. */
.cms-sidebar-perfil-texto {
    display: grid;
    flex: 1;
    min-width: 0;
}

.cms-sidebar-perfil-nome,
.cms-sidebar-perfil-email {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cms-sidebar-perfil-nome {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--cms-text);
}

.cms-sidebar-perfil-email {
    font-size: 0.75rem;
    color: var(--cms-muted);
}

.cms-sidebar-perfil-seta {
    width: 1rem;
    height: 1rem;
    flex-shrink: 0;
    color: var(--cms-muted);
}

/* =============================================================================
   BARRA DE TOPO — sem fundo, acções em pílula
   ========================================================================== */

/* Na referência não há barra de topo desenhada: o cabeçalho da página e as
   suas acções assentam directamente sobre o fundo. `.fi-topbar` é o próprio
   elemento pintado — não um `> nav` lá dentro. */
.fi-topbar,
.fi-topbar > nav {
    background-color: transparent;
    border-bottom: 0;
    box-shadow: none;
}

/* A pesquisa global passou para a sidebar; no topo ficaria repetida. */
@media (min-width: 64rem) {
    .fi-topbar .fi-global-search {
        display: none;
    }
}

.fi-topbar-item-btn,
.fi-topbar .fi-icon-btn {
    border-radius: var(--cms-radius-pilula);
}

/* ------------------------------------------------------- cabeçalho da página */

.fi-header {
    padding-bottom: 1.25rem;
}

.fi-header-heading {
    font-size: 1.875rem;
    font-weight: 600;
    letter-spacing: -0.025em;
    color: var(--cms-text);
}

.fi-header-subheading {
    margin-top: 0.375rem;
    font-size: 0.9375rem;
    color: var(--cms-muted);
}

/* =============================================================================
   BOTÕES — pílulas
   ========================================================================== */

.fi-btn,
.fi-dropdown-trigger > .fi-btn {
    border-radius: var(--cms-radius-pilula);
    font-weight: 500;
    box-shadow: none;
}

.fi-btn.fi-size-md {
    padding-inline: 1.25rem;
    padding-block: 0.625rem;
}

/* Botão de contorno: traço na cor da marca, como o "Last Week" da referência. */
.fi-btn.fi-btn-outlined {
    border-color: color-mix(in oklab, var(--cms-primary) 45%, transparent);
    color: var(--cms-primary);
}

.fi-ta-actions .fi-btn,
.fi-ac .fi-btn.fi-size-sm {
    border-radius: var(--cms-radius-pilula);
}

/* =============================================================================
   CARTÕES E SECÇÕES
   ========================================================================== */

.fi-section,
.fi-wi-stats-overview-stat,
.fi-ta-ctn,
.fi-fo-component-ctn > .fi-fieldset {
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
    box-shadow: none;
}

.fi-section-content-ctn,
.fi-section-header {
    padding-inline: 1.5rem;
}

.fi-section-header {
    padding-top: 1.375rem;
    padding-bottom: 0.875rem;
}

.fi-section-header-heading {
    font-size: 1.0625rem;
    font-weight: 600;
    letter-spacing: -0.015em;
}

.fi-section-header-description {
    font-size: 0.8125rem;
    color: var(--cms-muted);
}

/* =============================================================================
   ACÇÕES RÁPIDAS
   =============================================================================
   Os três cartões do topo da referência ("Organize A Visit", "Ask For A Home
   Healthcare Visit", "Routine Yearly Health Inspection"): cartão branco, ícone
   num disco de cor, título e uma linha de apoio.
   ========================================================================== */

.cms-accoes {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
    margin-bottom: 0.5rem;
}

.cms-accao {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 1.125rem 1.25rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
    transition:
        border-color var(--cms-dur-rapido, 220ms) ease,
        transform var(--cms-dur-rapido, 220ms) ease;
}

.cms-accao:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 40%, var(--cms-border));
    transform: translateY(-2px);
}

/* O disco de cor. O tom vem do estado da acção, não da estética: `aviso`
   significa que há trabalho à espera. */
.cms-accao-icone {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.75rem;
    height: 2.75rem;
    flex-shrink: 0;
    border-radius: var(--cms-radius-pilula);
    background-color: color-mix(in oklab, var(--cms-primary) 12%, transparent);
    color: var(--cms-primary);
}

.cms-accao-icone svg {
    width: 1.375rem;
    height: 1.375rem;
}

.cms-accao[data-tom='principal'] .cms-accao-icone {
    background-color: var(--cms-primary);
    color: var(--cms-primary-fg);
}

.cms-accao[data-tom='aviso'] .cms-accao-icone {
    background-color: color-mix(in oklab, var(--cms-color-warning, #d97706) 18%, transparent);
    color: var(--cms-color-warning, #b45309);
}

.cms-accao[data-tom='destaque'] .cms-accao-icone {
    background-color: color-mix(in oklab, var(--cms-color-info, #4f46e5) 15%, transparent);
    color: var(--cms-color-info, #4338ca);
}

.cms-accao[data-tom='neutro'] .cms-accao-icone {
    background-color: color-mix(in oklab, var(--cms-text) 7%, transparent);
    color: var(--cms-text);
}

/* `min-width: 0` para o texto longo ser cortado em vez de esticar o cartão. */
.cms-accao-texto {
    display: grid;
    flex: 1;
    min-width: 0;
    gap: 0.125rem;
}

.cms-accao-titulo {
    font-size: 0.9375rem;
    font-weight: 500;
    color: var(--cms-text);
}

.cms-accao-descricao {
    font-size: 0.8125rem;
    color: var(--cms-muted);
}

.cms-accao-badge {
    flex-shrink: 0;
    min-width: 1.5rem;
    padding: 0.1875rem 0.5rem;
    border-radius: var(--cms-radius-pilula);
    background-color: color-mix(in oklab, var(--cms-color-warning, #d97706) 18%, transparent);
    color: var(--cms-color-warning, #b45309);
    font-size: 0.75rem;
    font-weight: 600;
    text-align: center;
}

/* ------------------------------------------------------- indicadores (widgets) */

.fi-wi-stats-overview-stat {
    padding: 1.5rem;
    transition: border-color 0.25s ease;
    /* O gráfico de fundo do indicador é desenhado à largura toda e transbordava
       pelo canto arredondado. */
    overflow: hidden;
}

.fi-wi-stats-overview-stat:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 35%, var(--cms-border));
}

.fi-wi-stats-overview-stat-label {
    font-size: 0.9375rem;
    font-weight: 500;
    color: var(--cms-text);
}

/* O número grande é o herói do cartão. */
.fi-wi-stats-overview-stat-value {
    margin-top: 0.75rem;
    font-size: 2.25rem;
    font-weight: 600;
    letter-spacing: -0.035em;
    color: var(--cms-text);
    font-variant-numeric: tabular-nums;
}

.fi-wi-stats-overview-stat-description {
    margin-top: 0.75rem;
    font-size: 0.8125rem;
}

/* =============================================================================
   TABELAS
   ========================================================================== */

/* Densidade das linhas.
   O espaço vertical NÃO vem da célula (padding 0), vem do `.fi-ta-text` lá
   dentro, com 16px. Mexer na célula apenas soma ao que já lá está. */
.fi-ta-cell {
    padding-block: 0;
}

.fi-ta-text,
.fi-ta-actions,
.fi-ta-image,
.fi-ta-icon {
    padding-block: 0.625rem;
}

.fi-ta-text-item-label {
    font-size: 0.9375rem;
}

.fi-ta-text-description {
    font-size: 0.8125rem;
}

/* O cabeçalho da referência é uma banda tingida com cantos arredondados,
   destacada do corpo da tabela. */
.fi-ta-header-row {
    background-color: var(--cms-bg);
}

.fi-ta-header-cell {
    font-size: 0.875rem;
    font-weight: 400;
    letter-spacing: 0;
    text-transform: none;
    color: var(--cms-muted);
    padding-block: 0.875rem;
    border-bottom: 0;
}

.fi-ta-header-row > :first-child {
    border-start-start-radius: var(--cms-radius-sm);
    border-end-start-radius: var(--cms-radius-sm);
}

.fi-ta-header-row > :last-child {
    border-start-end-radius: var(--cms-radius-sm);
    border-end-end-radius: var(--cms-radius-sm);
}

.fi-ta-row:hover {
    background-color: color-mix(in oklab, var(--cms-primary) 3%, transparent);
}

.fi-ta-header-ctn,
.fi-ta-content-ctn {
    padding-inline: 1rem;
}

/* --- distintivos: pílulas em tons suaves ---------------------------------- */

.fi-badge {
    border-radius: var(--cms-radius-pilula);
    padding-inline: 0.75rem;
    padding-block: 0.3125rem;
    font-size: 0.75rem;
    font-weight: 500;
    border: 0;
}

/* =============================================================================
   FORMULÁRIOS
   ========================================================================== */

.fi-input,
.fi-select-input,
.fi-fo-rich-editor .fi-fo-rich-editor-content {
    border-radius: var(--cms-radius-sm);
}

.fi-fo-field-wrp-label {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--cms-text);
}

.fi-fo-field-wrp-hint,
.fi-fo-field-wrp-helper-text {
    font-size: 0.8125rem;
    color: var(--cms-muted);
}

/* =============================================================================
   PERFIS INTERNOS, no login do painel
   =============================================================================
   Substitui a antiga página /area-restrita do site público: quem trabalha com
   a a plataforma entra pelo CMS, não por um painel dentro do webfront.
   ========================================================================== */

.cms-perfis-internos {
    margin-top: 2rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--cms-border);
}

.cms-perfis-internos-titulo {
    font-size: 0.6875rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--cms-muted);
}

.cms-perfis-internos-lista {
    margin-top: 0.875rem;
    display: grid;
    gap: 0.625rem;
}

.cms-perfis-internos-item {
    display: flex;
    align-items: flex-start;
    gap: 0.625rem;
}

.cms-perfis-internos-icone {
    width: 1rem;
    height: 1rem;
    margin-top: 0.125rem;
    flex-shrink: 0;
    color: var(--cms-primary);
}

.cms-perfis-internos-nome {
    font-size: 0.8125rem;
    font-weight: 500;
    line-height: 1.3;
}

.cms-perfis-internos-acesso {
    font-size: 0.75rem;
    line-height: 1.45;
    color: var(--cms-muted);
}

.cms-perfis-internos-nota {
    margin-top: 1.25rem;
    font-size: 0.75rem;
    line-height: 1.5;
    color: var(--cms-muted);
}

.cms-perfis-internos-nota a {
    color: var(--cms-primary);
    text-decoration: underline;
    text-underline-offset: 2px;
}

@media (max-width: 40rem) {
    .cms-perfis-internos {
        margin-top: 1.5rem;
        padding-top: 1.25rem;
    }

    .cms-perfis-internos-acesso {
        display: none;
    }

    .cms-perfis-internos-lista {
        gap: 0.5rem;
    }
}

/* =============================================================================
   MODO ESCURO
   ========================================================================== */

/* O Filament põe `dark` no <html>. Ancorar em `.fi-body` deixava de fora as
   páginas de layout simples (login, recuperação de palavra-passe), onde os
   tokens recaíam nos valores claros e o texto secundário descia a 3.2:1. */
html.dark,
.fi-body.dark,
.dark .fi-body {
    --cms-surface: #16211f;
    --cms-bg: #0d1614;
    --cms-sidebar: #131e1c;
    --cms-border: #24332f;
    --cms-text: #e8edec;
    --cms-muted: #94a6a2;
}

/* O Filament usa o tom 600 da cor da marca com texto branco, o que dá 3.38:1 —
   abaixo dos 4.5:1 exigidos para texto de 14px. O tom 700 da MESMA escala
   (derivada da cor definida no CMS) sobe para ~5.4:1. */
html.dark .fi-btn.fi-color-primary:not(.fi-btn-outlined):not(.fi-link) {
    background-color: var(--primary-700);
}

html.dark .fi-btn.fi-color-primary:not(.fi-btn-outlined):not(.fi-link):hover {
    background-color: var(--primary-800);
}

/* =============================================================================
   MOBILE — a referência é de secretária; o painel tem de servir o telemóvel
   =============================================================================
   SDD §2: mobile-first em TODO o sistema, CMS incluído. Em ecrã pequeno a
   sidebar deixa de ser cartão flutuante e volta a gaveta de largura total,
   que é o padrão que a mão espera.
   ========================================================================== */

@media (max-width: 63.99rem) {
    .fi-sidebar {
        --cms-sidebar-margem: 0;
    }

    .fi-sidebar-nav,
    .fi-sidebar-header {
        background-color: var(--cms-sidebar);
        border-radius: 0;
    }

    .fi-topbar > nav {
        background-color: var(--cms-bg);
    }

    .fi-header-heading {
        font-size: 1.5rem;
    }

    .fi-main-content {
        padding-inline: 1rem;
    }
}

/* =============================================================================
   ACESSIBILIDADE E MOVIMENTO
   =============================================================================
   A mesma assinatura do site público. Um painel que se move com curvas
   diferentes do site parece outro produto.
   ========================================================================== */

:root {
    --cms-ease-saida: cubic-bezier(0.16, 1, 0.3, 1);
    --cms-ease-mola: cubic-bezier(0.34, 1.56, 0.64, 1);
    --cms-dur-instante: 120ms;
    --cms-dur-rapido: 220ms;
    --cms-dur-medio: 400ms;
}

.fi-sidebar-item-btn {
    transition:
        background-color var(--cms-dur-rapido) var(--cms-ease-saida),
        color var(--cms-dur-rapido) var(--cms-ease-saida),
        transform var(--cms-dur-instante) var(--cms-ease-saida);
}

/* Resposta ao toque: o item afunda um pouco. */
.fi-sidebar-item-btn:active {
    transform: scale(0.985);
}

.fi-btn {
    transition:
        background-color var(--cms-dur-rapido) var(--cms-ease-saida),
        transform var(--cms-dur-instante) var(--cms-ease-saida);
}

.fi-btn:active {
    transform: scale(0.97);
}

.fi-sidebar-item-btn:focus-visible,
.fi-btn:focus-visible,
.cms-sidebar-pesquisa-btn:focus-visible {
    outline: 2px solid var(--cms-primary);
    outline-offset: 2px;
}

/* Quem pediu menos movimento não leva transições nenhumas. */
@media (prefers-reduced-motion: reduce) {
    .fi-sidebar-item-btn,
    .fi-wi-stats-overview-stat,
    .fi-ta-row,
    .fi-btn {
        transition: none;
    }

    .fi-sidebar-item-btn:active,
    .fi-btn:active {
        transform: none;
    }
}

/* =============================================================================
   CARREGAMENTO DE FICHEIROS — rótulo em pt-AO
   =============================================================================
   O Filament passa `app()->getLocale()` ao FilePond, e o nosso locale é
   `pt_AO`. O FilePond traz `pt` e `pt_BR` no pacote, mas não `pt_AO`, por isso
   recaía no inglês: "Drag & Drop your files or Browse".

   Não dá para corrigir na origem — a chamada está dentro de uma classe do
   vendor, não numa vista publicável. Colapsamos o texto de origem e escrevemos
   o nosso por cima. O <label> continua lá, por isso o clique que abre o
   selector de ficheiros mantém-se intacto.
   ========================================================================== */

.filepond--drop-label label {
    font-size: 0;
}

.filepond--drop-label label::before {
    content: 'Arraste para aqui ou clique para escolher';
    font-size: 0.8125rem;
    line-height: 1.4;
    color: var(--cms-muted);
}

/* =============================================================================
   ÁREA DO PACIENTE
   =============================================================================
   Mesma linguagem do CMS — o paciente e a operação vêem o mesmo produto.
   ========================================================================== */

/* A próxima marcação. É a pergunta que traz o paciente aqui, por isso é o
   único bloco com fundo na cor da marca: não se perde na página. */
.cms-proxima {
    margin-top: 1.25rem;
    padding: 1.75rem;
    border-radius: var(--cms-radius-cartao);
    background-color: var(--cms-primary);
    color: var(--cms-primary-fg);
}

.cms-proxima-etiqueta {
    font-size: 0.75rem;
    font-weight: 500;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    opacity: 0.75;
}

.cms-proxima-quando {
    margin-top: 0.5rem;
    font-size: 1.5rem;
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1.2;
}

.cms-proxima-onde {
    margin-top: 0.5rem;
    font-size: 0.9375rem;
    opacity: 0.9;
}

.cms-proxima-estado {
    margin-top: 1rem;
    font-size: 0.875rem;
    opacity: 0.85;
}

.cms-proxima-ref {
    margin-top: 0.75rem;
    font-size: 0.75rem;
    font-variant-numeric: tabular-nums;
    opacity: 0.7;
}

/* Sem marcações não há nada a celebrar — o bloco fica neutro. */
.cms-proxima-vazia {
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    color: var(--cms-text);
}

.cms-proxima-vazia .cms-proxima-onde {
    color: var(--cms-muted);
    opacity: 1;
}

.cms-resumo {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
    margin-top: 1.25rem;
}

.cms-resumo-item {
    display: block;
    padding: 1.375rem 1.5rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
    transition: border-color var(--cms-dur-rapido, 220ms) ease;
}

a.cms-resumo-item:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 40%, var(--cms-border));
}

.cms-resumo-valor {
    display: block;
    font-size: 2.25rem;
    font-weight: 600;
    letter-spacing: -0.035em;
    color: var(--cms-text);
    font-variant-numeric: tabular-nums;
}

.cms-resumo-rotulo {
    display: block;
    margin-top: 0.25rem;
    font-size: 0.875rem;
    color: var(--cms-muted);
}

/* =============================================================================
   SELECTOR DE ÍCONE
   =============================================================================
   Grelha visual em vez de uma caixa onde se escrevia "heart" de cabeça.
   ========================================================================== */

/* --- barra de procura ------------------------------------------------------ */
.cms-icones-barra { position: relative; display: flex; align-items: center; }

.cms-icones-lupa {
    position: absolute;
    inset-inline-start: 0.75rem;
    display: inline-flex;
    color: var(--cms-muted);
    pointer-events: none;
}

.cms-icones-lupa svg { width: 1rem; height: 1rem; }

/* A contagem fica FORA do campo: dentro, sobrepunha-se ao texto de ajuda em
   qualquer largura abaixo dos 600px. */
.cms-icones-conta {
    margin: 0.375rem 0 0;
    padding-inline-start: 0.875rem;
    font-size: 0.75rem;
    color: var(--cms-muted);
}

.cms-icones-procura {
    width: 100%;
    padding: 0.625rem 0.875rem 0.625rem 2.25rem;
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-sm);
    background-color: var(--cms-surface);
    color: var(--cms-text);
    font-size: 0.875rem;
}

.cms-icones-procura:focus {
    outline: 2px solid var(--cms-primary);
    outline-offset: -1px;
}

.cms-icones-aviso {
    margin-top: 0.625rem;
    padding: 0.625rem 0.75rem;
    border-radius: var(--cms-radius-sm);
    background-color: color-mix(in oklab, var(--cms-color-warning, #d97706) 12%, transparent);
    color: var(--cms-text);
    font-size: 0.8125rem;
}

/* Altura limitada: a galeria não pode empurrar o resto do formulário para fora
   do ecrã. Rola dentro de si própria — e a rolagem é da GALERIA, não de cada
   grelha, senão cada grupo ganhava a sua própria barra. */
.cms-icones-galeria {
    margin-top: 0.75rem;
    display: grid;
    gap: 1.125rem;
    max-height: 24rem;
    overflow-y: auto;
    padding: 0.875rem;
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
    background-color: var(--cms-bg);
    overscroll-behavior: contain;
}

.cms-icones-grupo-titulo {
    margin: 0 0 0.625rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--cms-muted);
}

/* `auto-fill` e não `auto-fit`: com poucos resultados, o `auto-fit` estica cada
   ícone até ocupar a largura toda e a grelha deixa de se ler. */
.cms-icones-grelha {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(5.25rem, 1fr));
    gap: 0.5rem;
}

.cms-icone-opcao {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.375rem;
    padding: 0.75rem 0.375rem;
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-sm);
    background-color: var(--cms-surface);
    color: var(--cms-text);
    cursor: pointer;
    transition:
        border-color var(--cms-dur-rapido, 220ms) ease,
        background-color var(--cms-dur-rapido, 220ms) ease;
}

.cms-icone-opcao:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 45%, transparent);
    background-color: color-mix(in oklab, var(--cms-primary) 5%, transparent);
}

/* Sólido, não contorno: a olhar de longe para uma grelha de 90 caixas, um
   contorno de 1px não se encontra. */
.cms-icone-opcao-activo,
.cms-icone-opcao-activo:hover {
    border-color: var(--cms-primary);
    background-color: var(--cms-primary);
    color: var(--cms-primary-fg);
}

.cms-icone-svg {
    width: 1.5rem;
    height: 1.5rem;
}

/* O nome fica pequeno mas presente: é ele que se guarda, e ver qual é evita
   surpresas quando o mesmo desenho serve dois conceitos. */
.cms-icone-nome {
    max-width: 100%;
    font-size: 0.6875rem;
    line-height: 1.2;
    text-align: center;
    color: var(--cms-muted);
    /* Duas linhas no máximo: "Estetoscópio" não cabe numa, e cortá-la a meio
       tirava-lhe o sentido. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.cms-icone-opcao-activo .cms-icone-nome {
    color: inherit;
}

.cms-icones-vazio,
.cms-icones-estado {
    margin-top: 0.625rem;
    font-size: 0.8125rem;
    color: var(--cms-muted);
}

.cms-icones-limpar {
    margin-inline-start: 0.5rem;
    color: var(--cms-color-danger, #b91c1c);
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}

[x-cloak] {
    display: none !important;
}

/* =============================================================================
   MODAIS DE FORMULÁRIO
   =============================================================================
   Um formulário de duas colunas dentro de um modal estreito parte os rótulos
   ("Botão de destaque" em três linhas) e desalinha os campos. Damos-lhes
   largura, mantendo o limite abaixo da largura do ecrã.
   ========================================================================== */

@media (min-width: 64rem) {
    .fi-modal-window:has(.fi-fo-component-ctn),
    .fi-modal-window:has(form) {
        max-width: min(64rem, 92vw);
    }
}

/* O corpo do modal rola sozinho: um formulário longo não pode empurrar os
   botões de gravar para fora do ecrã. */
.fi-modal-content {
    max-height: min(72vh, 48rem);
    overflow-y: auto;
}

/* Botão que atravessa para o outro ecrã de entrada. */
.cms-troca-login {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-top: 1.5rem;
    padding: 0.875rem 1rem;
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-sm);
    background-color: var(--cms-surface);
    transition:
        border-color var(--cms-dur-rapido, 220ms) ease,
        background-color var(--cms-dur-rapido, 220ms) ease;
}

.cms-troca-login:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 45%, transparent);
    background-color: color-mix(in oklab, var(--cms-primary) 5%, transparent);
}

.cms-troca-login-icone {
    width: 1.25rem;
    height: 1.25rem;
    flex-shrink: 0;
    color: var(--cms-primary);
}

.cms-troca-login-titulo {
    display: block;
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--cms-text);
}

.cms-troca-login-nota {
    display: block;
    font-size: 0.75rem;
    color: var(--cms-muted);
}

.cms-troca-login-seta {
    width: 1rem;
    height: 1rem;
    margin-inline-start: auto;
    flex-shrink: 0;
    color: var(--cms-muted);
}

/* --- videoconsulta, na área do paciente ---------------------------------- */

/* Botão branco sobre o cartão verde da próxima marcação: é a acção mais
   importante do ecrã e tem de se ver de relance. */
.cms-sala-botao {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    margin-top: 1.25rem;
    padding: 0.875rem 1.5rem;
    border-radius: var(--cms-radius-pilula);
    background-color: #fff;
    color: var(--cms-primary);
    font-size: 0.9375rem;
    font-weight: 600;
    transition: transform var(--cms-dur-instante, 120ms) ease;
}

.cms-sala-botao:active {
    transform: scale(0.97);
}

.cms-sala-espera {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    margin-top: 1rem;
    padding: 0.625rem 1rem;
    border-radius: var(--cms-radius-sm);
    background-color: rgb(255 255 255 / 0.15);
    font-size: 0.875rem;
}

.cms-sala-icone {
    width: 1.125rem;
    height: 1.125rem;
    flex-shrink: 0;
}

/* --- sala de videoconsulta embebida -------------------------------------- */

.cms-consulta-info {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    padding: 1rem 1.25rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
}

.cms-consulta-servico {
    font-size: 1rem;
    font-weight: 600;
    color: var(--cms-text);
}

.cms-consulta-meta {
    margin-top: 0.125rem;
    font-size: 0.8125rem;
    color: var(--cms-muted);
}

.cms-consulta-estado {
    padding: 0.3125rem 0.75rem;
    border-radius: var(--cms-radius-pilula);
    background-color: color-mix(in oklab, var(--cms-primary) 12%, transparent);
    color: var(--cms-primary);
    font-size: 0.75rem;
    font-weight: 500;
}

/* Altura generosa: uma consulta não se faz numa janela de selo.
   `min-height` em vez de rácio fixo para o telemóvel em pé não ficar com uma
   faixa fina. */
.cms-consulta-sala {
    margin-top: 1rem;
    overflow: hidden;
    border-radius: var(--cms-radius-cartao);
    border: 1px solid var(--cms-border);
    background-color: #000;
}

.cms-consulta-sala iframe {
    display: block;
    width: 100%;
    height: min(72vh, 46rem);
    min-height: 26rem;
    border: 0;
}

.cms-consulta-ajuda {
    margin-top: 0.75rem;
    font-size: 0.8125rem;
    color: var(--cms-muted);
}

.cms-consulta-ajuda a {
    color: var(--cms-primary);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.cms-consulta-fechada {
    margin-top: 1rem;
    padding: 3rem 1.5rem;
    text-align: center;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
}

.cms-consulta-fechada-icone {
    width: 2.5rem;
    height: 2.5rem;
    margin: 0 auto 0.875rem;
    color: var(--cms-muted);
}

.cms-consulta-fechada-titulo {
    font-size: 1.0625rem;
    font-weight: 600;
    color: var(--cms-text);
}

.cms-consulta-fechada-nota {
    margin-top: 0.375rem;
    font-size: 0.875rem;
    color: var(--cms-muted);
}

@media (max-width: 40rem) {
    .cms-consulta-sala iframe {
        height: 68vh;
        min-height: 22rem;
    }
}

/* =============================================================================
   RELATÓRIOS
   =============================================================================
   Gráficos em CSS puro. Oito pontos de dados não justificam carregar uma
   biblioteca de gráficos dentro do painel — e uma barra desenhada com `height`
   percentual é legível, imprimível e não parte quando o JS falha.
   ========================================================================== */

.cms-rel-periodo {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1rem 1.25rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
}

.cms-rel-atalhos { display: flex; flex-wrap: wrap; gap: 0.5rem; }

.cms-rel-atalho {
    padding: 0.4375rem 0.875rem;
    border-radius: var(--cms-radius-pilula);
    border: 1px solid var(--cms-border);
    background-color: transparent;
    color: var(--cms-text);
    font-size: 0.875rem;
    cursor: pointer;
    transition: border-color var(--cms-dur-rapido, 220ms) ease, background-color var(--cms-dur-rapido, 220ms) ease;
}

.cms-rel-atalho:hover { border-color: color-mix(in oklab, var(--cms-primary) 45%, transparent); }

.cms-rel-atalho-activo {
    background-color: var(--cms-primary);
    border-color: var(--cms-primary);
    color: var(--cms-primary-fg);
}

.cms-rel-datas { display: flex; align-items: center; gap: 0.5rem; }

.cms-rel-data {
    padding: 0.4375rem 0.75rem;
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-sm);
    background-color: var(--cms-surface);
    color: var(--cms-text);
    font-size: 0.875rem;
}

.cms-rel-ate, .cms-rel-legenda { color: var(--cms-muted); font-size: 0.875rem; }
.cms-rel-legenda { margin-top: 0.75rem; }

.cms-rel-grelha {
    margin-top: 1rem;
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
}

.cms-rel-ind {
    padding: 1.25rem 1.375rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
}

/* O alerta é um traço lateral, não a cor do número: pintar o valor de
   vermelho dificulta lê-lo, que é o contrário do que se quer. */
.cms-rel-ind-alerta {
    border-inline-start: 3px solid var(--cms-color-warning, #d97706);
}

.cms-rel-ind-rotulo { font-size: 0.8125rem; color: var(--cms-muted); }

.cms-rel-ind-valor {
    margin-top: 0.375rem;
    font-size: 2rem;
    font-weight: 600;
    letter-spacing: -0.03em;
    color: var(--cms-text);
    font-variant-numeric: tabular-nums;
}

.cms-rel-ind-nota { margin-top: 0.25rem; font-size: 0.75rem; color: var(--cms-muted); }

.cms-rel-cartao {
    margin-top: 1rem;
    padding: 1.375rem 1.5rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
}

.cms-rel-titulo { font-size: 1rem; font-weight: 600; color: var(--cms-text); }

.cms-rel-vazio { margin-top: 0.75rem; font-size: 0.875rem; color: var(--cms-muted); font-style: italic; }

.cms-rel-duas {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
}

/* --- barras por dia ------------------------------------------------------- */

.cms-rel-barras {
    margin-top: 1.25rem;
    display: flex;
    align-items: flex-end;
    gap: 0.375rem;
    height: 11rem;
    overflow-x: auto;
    padding-bottom: 0.25rem;
}

.cms-rel-barra-col {
    display: flex;
    flex: 1 0 1.75rem;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    height: 100%;
    gap: 0.25rem;
}

.cms-rel-barra {
    display: block;
    width: 100%;
    max-width: 2.5rem;
    border-radius: 6px 6px 2px 2px;
    background-color: var(--cms-primary);
    transition: opacity var(--cms-dur-rapido, 220ms) ease;
}

.cms-rel-barra-col:hover .cms-rel-barra { opacity: 0.75; }

.cms-rel-barra-valor { font-size: 0.6875rem; font-weight: 600; color: var(--cms-text); font-variant-numeric: tabular-nums; }
.cms-rel-barra-dia { font-size: 0.625rem; color: var(--cms-muted); white-space: nowrap; }

/* --- lista com barra ------------------------------------------------------ */

.cms-rel-lista { margin-top: 1rem; display: grid; gap: 0.625rem; }

.cms-rel-linha { display: grid; grid-template-columns: minmax(6rem, 10rem) 1fr auto; align-items: center; gap: 0.75rem; }

.cms-rel-linha-nome { font-size: 0.875rem; color: var(--cms-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.cms-rel-linha-barra { height: 0.5rem; border-radius: 999px; background-color: color-mix(in oklab, var(--cms-text) 6%, transparent); overflow: hidden; }
.cms-rel-linha-barra > span { display: block; height: 100%; border-radius: 999px; background-color: var(--cms-primary); }

.cms-rel-linha-total { font-size: 0.875rem; font-weight: 600; color: var(--cms-text); font-variant-numeric: tabular-nums; }

.cms-rel-dados { width: 100%; margin-top: 1rem; }
.cms-rel-dados td { padding: 0.5rem 0; border-bottom: 1px solid var(--cms-border); font-size: 0.875rem; }
.cms-rel-valor { text-align: end; font-weight: 600; font-variant-numeric: tabular-nums; }

.cms-rel-nota { margin-top: 0.875rem; font-size: 0.75rem; line-height: 1.5; color: var(--cms-muted); }

@media (max-width: 40rem) {
    .cms-rel-periodo { flex-direction: column; align-items: stretch; }
    .cms-rel-linha { grid-template-columns: 1fr auto; }
    .cms-rel-linha-barra { display: none; }
}

/* --- detalhe de auditoria: antes → depois -------------------------------- */

.cms-aud-tabela { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
.cms-aud-tabela td { padding: 0.5rem 0.5rem; border-bottom: 1px solid var(--cms-border); vertical-align: top; }
.cms-aud-campo { color: var(--cms-muted); width: 30%; }
.cms-aud-antes { color: var(--cms-color-danger, #b91c1c); text-decoration: line-through; opacity: 0.75; }
.cms-aud-seta { color: var(--cms-muted); width: 1.5rem; text-align: center; }
.cms-aud-depois { font-weight: 500; color: var(--cms-text); }
.cms-aud-vazio { font-size: 0.875rem; color: var(--cms-muted); font-style: italic; }

/* =============================================================================
   PAINEL — organização da referência (SDD E MVP/cms UI-UX/NOVAS VIEWS)
   =============================================================================
   Quatro indicadores em cima, agenda do dia à esquerda, coluna de apoio à
   direita. As COTAS de cor vêm da referência; a cor da marca continua a vir do
   CMS — copiámos a estrutura, não o azul deles.
   ========================================================================== */

/* --- indicadores ---------------------------------------------------------- */

.cms-p-indicadores {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.cms-p-ind {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 1.125rem 1.25rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
    transition:
        border-color var(--cms-dur-rapido, 220ms) ease,
        transform var(--cms-dur-rapido, 220ms) ease;
}

.cms-p-ind:hover {
    border-color: color-mix(in oklab, var(--cms-primary) 40%, var(--cms-border));
    transform: translateY(-2px);
}

/* Bloco de ícone em tom suave. Cada indicador tem o seu, para se distinguirem
   de relance sem se lerem os rótulos. */
.cms-p-ind-icone,
.cms-p-tarefa-icone {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.75rem;
    height: 2.75rem;
    flex-shrink: 0;
    border-radius: 14px;
}

.cms-p-ind-icone svg,
.cms-p-tarefa-icone svg { width: 1.375rem; height: 1.375rem; }

[data-tom='azul']    .cms-p-ind-icone, .cms-p-tarefa-icone[data-tom='azul']    { background: #e9f2ff; color: #2563eb; }
[data-tom='verde']   .cms-p-ind-icone, .cms-p-tarefa-icone[data-tom='verde']   { background: #e9f7f0; color: #0a7f4c; }
[data-tom='roxo']    .cms-p-ind-icone, .cms-p-tarefa-icone[data-tom='roxo']    { background: #f1ecff; color: #6d28d9; }
[data-tom='ambar']   .cms-p-ind-icone, .cms-p-tarefa-icone[data-tom='ambar']   { background: #fef5e4; color: #b45309; }
[data-tom='vermelho'].cms-p-ind-icone, .cms-p-tarefa-icone[data-tom='vermelho']{ background: #fdecec; color: #b91c1c; }

.cms-p-ind-corpo { display: grid; flex: 1; min-width: 0; }
.cms-p-ind-rotulo { font-size: 0.8125rem; color: var(--cms-muted); }

.cms-p-ind-valor {
    margin-top: 0.125rem;
    font-size: 1.75rem;
    font-weight: 600;
    letter-spacing: -0.03em;
    color: var(--cms-text);
    font-variant-numeric: tabular-nums;
}

.cms-p-ind-var {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    margin-top: 0.25rem;
    font-size: 0.75rem;
    font-weight: 600;
}

.cms-p-ind-var svg { width: 0.875rem; height: 0.875rem; }
.cms-p-ind-var[data-sentido='subiu']  { color: #0a7f4c; }
.cms-p-ind-var[data-sentido='desceu'] { color: #b91c1c; }
.cms-p-ind-var[data-sentido='igual']  { color: var(--cms-muted); }

.cms-p-ind-ctx { font-weight: 400; color: var(--cms-muted); }
.cms-p-ind-seta { width: 1.125rem; height: 1.125rem; flex-shrink: 0; color: var(--cms-muted); }

/* --- grelha principal ----------------------------------------------------- */

.cms-p-grelha {
    margin-top: 1rem;
    display: grid;
    gap: 1rem;
    grid-template-columns: minmax(0, 1fr);
}

/* A coluna de apoio só aparece ao lado quando há largura para as duas. Abaixo
   disso empilha, e a agenda fica primeiro. */
@media (min-width: 80rem) {
    .cms-p-grelha { grid-template-columns: minmax(0, 1fr) 22rem; }
}

.cms-p-lado { display: grid; gap: 1rem; align-content: start; }

.cms-p-cartao {
    padding: 1.375rem 1.5rem;
    background-color: var(--cms-surface);
    border: 1px solid var(--cms-border);
    border-radius: var(--cms-radius-cartao);
}

.cms-p-centro { text-align: center; }

.cms-p-titulo { font-size: 1rem; font-weight: 600; color: var(--cms-text); }

.cms-p-cabec {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.75rem;
}

/* --- navegador de dia ----------------------------------------------------- */

.cms-p-nav { display: flex; align-items: center; gap: 0.375rem; }

.cms-p-nav-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    border-radius: var(--cms-radius-pilula);
    border: 1px solid var(--cms-border);
    color: var(--cms-text);
    cursor: pointer;
    transition: border-color var(--cms-dur-rapido, 220ms) ease;
}

.cms-p-nav-btn:hover { border-color: color-mix(in oklab, var(--cms-primary) 45%, transparent); }
.cms-p-nav-btn svg { width: 1rem; height: 1rem; }

.cms-p-nav-dia {
    display: inline-flex;
    align-items: center;
    gap: 0.4375rem;
    padding-inline: 0.5rem;
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--cms-text);
    white-space: nowrap;
}

.cms-p-nav-icone { width: 1rem; height: 1rem; color: var(--cms-muted); }

.cms-p-hoje {
    margin-inline-start: 0.25rem;
    padding: 0.375rem 0.875rem;
    border-radius: var(--cms-radius-pilula);
    border: 1px solid var(--cms-border);
    font-size: 0.8125rem;
    color: var(--cms-text);
    cursor: pointer;
}

.cms-p-hoje:hover { border-color: color-mix(in oklab, var(--cms-primary) 45%, transparent); }

/* --- agenda --------------------------------------------------------------- */

.cms-p-agenda { margin-top: 1.25rem; }

/* A etiqueta da hora fica numa coluna estreita e a faixa ocupa o resto. Cada
   hora tem sempre altura, mesmo vazia — é isso que dá a sensação de tempo a
   passar em vez de uma lista de itens. */
.cms-p-hora {
    display: grid;
    grid-template-columns: 3.5rem minmax(0, 1fr);
    gap: 0.75rem;
    min-height: 3.25rem;
    padding-top: 0.5rem;
    border-top: 1px solid var(--cms-border);
}

.cms-p-hora-etiqueta { font-size: 0.75rem; color: var(--cms-muted); font-variant-numeric: tabular-nums; }

.cms-p-hora-faixa {
    display: grid;
    gap: 0.5rem;
    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
    padding-bottom: 0.5rem;
}

.cms-p-consulta {
    display: grid;
    gap: 0.25rem;
    padding: 0.625rem 0.875rem;
    border-radius: var(--cms-radius-sm);
    border-inline-start: 3px solid transparent;
    transition: transform var(--cms-dur-instante, 120ms) ease;
}

.cms-p-consulta:hover { transform: translateX(2px); }

/* Estado por cor de fundo, como na referência — e a barra lateral repete a
   informação, porque cor sozinha não serve quem não a distingue. */
.cms-p-consulta[data-tom='confirmada'] { background: #eef6f2; border-inline-start-color: #0a7f4c; }
.cms-p-consulta[data-tom='pendente']   { background: #fef9ed; border-inline-start-color: #d97706; }
.cms-p-consulta[data-tom='final']      { background: #f3f4f6; border-inline-start-color: #9ca3af; }

.cms-p-consulta-topo,
.cms-p-consulta-baixo { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }

.cms-p-consulta-nome { font-size: 0.875rem; font-weight: 600; color: #111827; }
.cms-p-consulta-hora { font-size: 0.75rem; color: #4b5563; font-variant-numeric: tabular-nums; white-space: nowrap; }
.cms-p-consulta-servico { font-size: 0.75rem; color: #4b5563; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.cms-p-consulta-estado {
    display: inline-flex;
    align-items: center;
    gap: 0.3125rem;
    font-size: 0.6875rem;
    color: #374151;
    white-space: nowrap;
}

.cms-p-ponto { width: 0.375rem; height: 0.375rem; border-radius: 999px; background: currentColor; }

/* --- vazios --------------------------------------------------------------- */

.cms-p-vazio { padding: 3rem 1rem; text-align: center; }
.cms-p-vazio-icone { width: 2.5rem; height: 2.5rem; margin: 0 auto 0.75rem; color: var(--cms-muted); }
.cms-p-vazio-titulo { font-size: 1rem; font-weight: 500; color: var(--cms-text); }
.cms-p-vazio-nota { margin-top: 0.25rem; font-size: 0.875rem; color: var(--cms-muted); }

/* --- tarefas -------------------------------------------------------------- */

.cms-p-tarefas { margin-top: 1rem; display: grid; gap: 0.25rem; }

.cms-p-tarefa {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.625rem;
    border-radius: var(--cms-radius-sm);
    transition: background-color var(--cms-dur-rapido, 220ms) ease;
}

.cms-p-tarefa:hover { background-color: color-mix(in oklab, var(--cms-text) 4%, transparent); }
.cms-p-tarefa-icone { width: 2.25rem; height: 2.25rem; border-radius: 11px; }
.cms-p-tarefa-icone svg { width: 1.125rem; height: 1.125rem; }
.cms-p-tarefa-corpo { display: grid; flex: 1; min-width: 0; }
.cms-p-tarefa-titulo { font-size: 0.875rem; font-weight: 500; color: var(--cms-text); }
.cms-p-tarefa-nota { font-size: 0.75rem; color: var(--cms-muted); }

.cms-p-tudo-feito {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-top: 1rem;
    font-size: 0.875rem;
    color: var(--cms-muted);
}

.cms-p-tudo-icone { width: 1.25rem; height: 1.25rem; color: #0a7f4c; }

/* --- anel de progresso ---------------------------------------------------- */

/* `conic-gradient` desenha o anel sem biblioteca nenhuma. A máscara abre o
   centro, e o texto assenta lá dentro. */
.cms-p-anel {
    position: relative;
    width: 9.5rem;
    height: 9.5rem;
    margin: 1.25rem auto 0;
    border-radius: 999px;
    background: conic-gradient(
        var(--cms-primary) calc(var(--pct) * 1%),
        color-mix(in oklab, var(--cms-text) 8%, transparent) 0
    );
}

.cms-p-anel::after {
    content: '';
    position: absolute;
    inset: 0.875rem;
    border-radius: 999px;
    background: var(--cms-surface);
}

.cms-p-anel-centro {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: grid;
    place-content: center;
}

.cms-p-anel-valor {
    font-size: 1.875rem;
    font-weight: 600;
    letter-spacing: -0.03em;
    color: var(--cms-text);
    font-variant-numeric: tabular-nums;
}

.cms-p-anel-leitura { font-size: 0.8125rem; color: var(--cms-primary); font-weight: 500; }
.cms-p-anel-base { margin-top: 0.875rem; font-size: 0.75rem; color: var(--cms-muted); }

/* --- linha de evolução ---------------------------------------------------- */

.cms-p-linha {
    display: block;
    width: 100%;
    height: 4.5rem;
    margin-top: 1rem;
    color: var(--cms-primary);
    overflow: visible;
}

.cms-p-linha-total { margin-top: 0.625rem; font-size: 0.75rem; color: var(--cms-muted); }

/* --- modo escuro: os tons suaves não servem em fundo escuro --------------- */

html.dark [data-tom='azul']     .cms-p-ind-icone, html.dark .cms-p-tarefa-icone[data-tom='azul']     { background: #16243d; color: #93b4fd; }
html.dark [data-tom='verde']    .cms-p-ind-icone, html.dark .cms-p-tarefa-icone[data-tom='verde']    { background: #12291f; color: #6ee7b7; }
html.dark [data-tom='roxo']     .cms-p-ind-icone, html.dark .cms-p-tarefa-icone[data-tom='roxo']     { background: #221a3d; color: #c4b5fd; }
html.dark [data-tom='ambar']    .cms-p-ind-icone, html.dark .cms-p-tarefa-icone[data-tom='ambar']    { background: #2e2411; color: #fcd34d; }
html.dark [data-tom='vermelho'] .cms-p-ind-icone, html.dark .cms-p-tarefa-icone[data-tom='vermelho'] { background: #2f1717; color: #fca5a5; }

html.dark .cms-p-consulta[data-tom='confirmada'] { background: #12291f; }
html.dark .cms-p-consulta[data-tom='pendente']   { background: #2e2411; }
html.dark .cms-p-consulta[data-tom='final']      { background: #1c2027; }

html.dark .cms-p-consulta-nome    { color: #e8edec; }
html.dark .cms-p-consulta-hora,
html.dark .cms-p-consulta-servico { color: #98a7a3; }
html.dark .cms-p-consulta-estado  { color: #b7c2bf; }

/* =========================================================
   FICHA DO PACIENTE
   Arrumação da referência em SDD E MVP/cms UI-UX/NOVAS VIEWS.

   Sem sinais vitais: a referência mostra tensão, pulso e temperatura, e o
   SDD é explícito em que a a plataforma não mantém prontuário clínico. O lugar
   dessas caixas é ocupado por dados que a a plataforma guarda mesmo.

   As cores saem das variáveis do tema (`--cms-*` / `--primary-*`): mudar
   a cor no CMS repinta isto sem build.
   ========================================================= */

/* --- tons das pastilhas de ícone ------------------------------------------ */
.cms-fp-medida-icone,
.cms-fp-cabec-icone {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    border-radius: 10px;
}

.cms-fp-medida-icone { width: 2rem; height: 2rem; }
.cms-fp-cabec-icone  { width: 2.125rem; height: 2.125rem; border-radius: 11px; }

.cms-fp-medida-icone svg { width: 1rem; height: 1rem; }
.cms-fp-cabec-icone svg  { width: 1.0625rem; height: 1.0625rem; }

.cms-fp-medida-icone[data-tom='azul'],
.cms-fp-cabec-icone[data-tom='azul']      { background: #eaf1fe; color: #2563eb; }
.cms-fp-medida-icone[data-tom='verde'],
.cms-fp-cabec-icone[data-tom='verde']     { background: #e7f5ee; color: #0f8b57; }
.cms-fp-medida-icone[data-tom='roxo'],
.cms-fp-cabec-icone[data-tom='roxo']      { background: #f0ecfd; color: #6d46d6; }
.cms-fp-medida-icone[data-tom='ambar'],
.cms-fp-cabec-icone[data-tom='ambar']     { background: #fdf1e0; color: #b7690b; }
.cms-fp-medida-icone[data-tom='vermelho'],
.cms-fp-cabec-icone[data-tom='vermelho']  { background: #fdecec; color: #c62f2f; }
.cms-fp-medida-icone[data-tom='rosa'],
.cms-fp-cabec-icone[data-tom='rosa']      { background: #fdecf4; color: #bf2f77; }
.cms-fp-medida-icone[data-tom='cinza']    { background: #f0f2f1; color: #64716d; }

/* --- cartão de topo ------------------------------------------------------- */
.cms-fp-topo {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 2rem;
    flex-wrap: wrap;
    padding: 1.5rem 1.75rem;
    background: var(--cms-superficie, #fff);
    border: 1px solid var(--cms-linha, #e8ecea);
    border-radius: 18px;
}

.cms-fp-identidade { display: flex; align-items: center; gap: 1.25rem; min-width: 0; }

.cms-fp-foto,
.cms-fp-iniciais {
    width: 5.5rem;
    height: 5.5rem;
    flex: none;
    border-radius: 999px;
    object-fit: cover;
}

.cms-fp-iniciais {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: color-mix(in srgb, var(--primary-500, #12a06a) 14%, transparent);
    color: var(--primary-700, #0d7a51);
    font-size: 1.5rem;
    font-weight: 600;
    letter-spacing: -0.01em;
}

.cms-fp-dados { min-width: 0; }

.cms-fp-nome {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    flex-wrap: wrap;
    margin: 0 0 0.75rem;
    font-size: 1.5rem;
    font-weight: 650;
    letter-spacing: -0.02em;
    line-height: 1.15;
    color: var(--cms-texto, #101917);
}

.cms-fp-estado {
    padding: 0.1875rem 0.625rem;
    border-radius: 999px;
    background: #e7f5ee;
    color: #0d6b45;
    font-size: 0.75rem;
    font-weight: 550;
    letter-spacing: 0;
}

.cms-fp-estado-off { background: #f0f2f1; color: #64716d; }

.cms-fp-contactos {
    display: grid;
    gap: 0.4375rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.cms-fp-contactos li {
    display: flex;
    align-items: center;
    gap: 0.5625rem;
    font-size: 0.875rem;
    color: var(--cms-texto-2, #4b5854);
}

.cms-fp-contacto-icone { width: 1rem; height: 1rem; flex: none; color: var(--cms-texto-3, #8a9793); }

/* Os três críticos numa caixa própria, separados por régua — como na
   referência. Juntos e emoldurados lêem-se como um bloco só; soltos ao lado
   do nome perdiam-se entre os contactos. */
.cms-fp-criticos {
    display: flex;
    align-items: stretch;
    border: 1px solid var(--cms-linha, #e8ecea);
    border-radius: 14px;
    overflow: hidden;
}

.cms-fp-critico {
    display: flex;
    flex-direction: column;
    gap: 0.375rem;
    padding: 0.9375rem 1.25rem;
    min-width: 8.5rem;
}

.cms-fp-critico + .cms-fp-critico { border-left: 1px solid var(--cms-linha, #e8ecea); }

.cms-fp-critico-rotulo {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    font-size: 0.75rem;
    /* #7d8b87 dava 3,55:1 sobre branco — abaixo do mínimo legível. */
    color: #5c6a66;
}

.cms-fp-critico-icone { width: 0.875rem; height: 0.875rem; flex: none; }
.cms-fp-critico-icone[data-tom='vermelho'] { color: #d94a4a; }
.cms-fp-critico-icone[data-tom='ambar']    { color: #d98b1a; }
.cms-fp-critico-icone[data-tom='azul']     { color: #4a7fd9; }

.cms-fp-critico-valor {
    font-size: 1.0625rem;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--cms-texto, #101917);
}

.cms-fp-critico-nota { font-size: 0.75rem; color: #5c6a66; }

/* Alergias com fundo: é a única das três que pode travar um atendimento. */
.cms-fp-critico-alerta { background: #fdf3f0; }
.cms-fp-critico-alerta .cms-fp-critico-valor { color: #a83a20; }

/* --- separadores ---------------------------------------------------------- */
.cms-fp-abas {
    display: flex;
    gap: 0.25rem;
    overflow-x: auto;
    scrollbar-width: none;
    border-bottom: 1px solid var(--cms-linha, #e8ecea);
}

.cms-fp-abas::-webkit-scrollbar { display: none; }

.cms-fp-aba {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 0.4375rem;
    padding: 0.75rem 0.9375rem;
    border: 0;
    background: none;
    font-size: 0.875rem;
    font-weight: 500;
    white-space: nowrap;
    color: var(--cms-texto-2, #5a6763);
    cursor: pointer;
    transition: color 140ms ease;
}

.cms-fp-aba:hover { color: var(--cms-texto, #101917); }

.cms-fp-aba::after {
    content: '';
    position: absolute;
    inset-inline: 0.5rem;
    bottom: -1px;
    height: 2px;
    border-radius: 2px 2px 0 0;
    background: transparent;
    transition: background 140ms ease;
}

/* `--primary-600` dava 3,35:1 sobre o fundo da página — o rótulo da aba
   activa é texto normal e precisa de 4,5:1. O sublinhado fica no 600, que é
   forma e não texto. */
.cms-fp-aba-activa { color: var(--primary-700, #0d7a51); font-weight: 600; }
.cms-fp-aba-activa::after { background: var(--primary-600, #0f8b57); }

.cms-fp-aba-conta {
    padding: 0.0625rem 0.375rem;
    border-radius: 999px;
    background: #f0f2f1;
    font-size: 0.6875rem;
    font-weight: 600;
    color: var(--cms-texto-2, #5a6763);
}

.cms-fp-aba-activa .cms-fp-aba-conta {
    background: color-mix(in srgb, var(--primary-500, #12a06a) 13%, transparent);
    color: var(--primary-700, #0d7a51);
}

/* --- grelha de duas colunas ----------------------------------------------- */
.cms-fp-grelha {
    display: grid;
    grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
    gap: 1.25rem;
    align-items: start;
}

.cms-fp-principal,
.cms-fp-lado { display: grid; gap: 1.25rem; align-content: start; }

@media (max-width: 1100px) {
    .cms-fp-grelha { grid-template-columns: minmax(0, 1fr); }
}

/* --- cabeçalho de cartão -------------------------------------------------- */
.cms-fp-cabec {
    display: flex;
    align-items: center;
    gap: 0.6875rem;
    margin-bottom: 1.125rem;
}

.cms-fp-cabec .cms-p-titulo { margin: 0; }

.cms-fp-ver {
    margin-inline-start: auto;
    border: 0;
    background: none;
    padding: 0;
    font-size: 0.8125rem;
    font-weight: 550;
    color: var(--primary-600, #0f8b57);
    cursor: pointer;
}

.cms-fp-ver:hover { text-decoration: underline; }

/* --- grelha de medidas ---------------------------------------------------- */
.cms-fp-medidas {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.875rem;
}

@media (max-width: 640px) {
    .cms-fp-medidas { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.cms-fp-medida {
    display: flex;
    flex-direction: column;
    gap: 0.3125rem;
    padding: 0.9375rem 1rem 1rem;
    border: 1px solid var(--cms-linha, #e8ecea);
    border-radius: 14px;
}

.cms-fp-medida-topo { display: flex; align-items: center; gap: 0.5625rem; }

.cms-fp-medida-rotulo {
    font-size: 0.8125rem;
    color: var(--cms-texto-2, #5a6763);
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cms-fp-medida-valor {
    margin-top: 0.1875rem;
    font-size: 1.5rem;
    font-weight: 650;
    letter-spacing: -0.025em;
    line-height: 1.1;
    color: var(--cms-texto, #101917);
    font-variant-numeric: tabular-nums;
}

.cms-fp-medida-unidade {
    margin-inline-start: 0.25rem;
    font-size: 0.8125rem;
    font-weight: 500;
    letter-spacing: 0;
    color: var(--cms-texto-3, #8a9793);
}

.cms-fp-medida-realce { font-size: 0.75rem; font-weight: 600; }
.cms-fp-medida-realce[data-tom='verde']    { color: #0f8b57; }
.cms-fp-medida-realce[data-tom='ambar']    { color: #b7690b; }
.cms-fp-medida-realce[data-tom='vermelho'] { color: #c62f2f; }
.cms-fp-medida-realce[data-tom='cinza']    { color: #7d8b87; }

.cms-fp-medida-nota { font-size: 0.75rem; color: #5c6a66; }

.cms-fp-aviso {
    margin-top: 1rem;
    padding: 0.75rem 0.9375rem;
    border-radius: 12px;
    background: #f6f8f7;
    font-size: 0.8125rem;
    line-height: 1.5;
    color: var(--cms-texto-2, #5a6763);
}

.cms-fp-aviso strong { font-weight: 600; color: var(--cms-texto, #101917); }

/* --- listas --------------------------------------------------------------- */
.cms-fp-lista { margin: 0; padding: 0; list-style: none; }

.cms-fp-lista li {
    display: grid;
    gap: 0.1875rem;
    padding: 0.75rem 0;
}

.cms-fp-lista li + li { border-top: 1px solid var(--cms-linha, #eef1f0); }

.cms-fp-lista-rotulo { font-size: 0.875rem; font-weight: 550; color: var(--cms-texto, #101917); }
.cms-fp-lista-valor  { font-size: 0.8125rem; line-height: 1.5; color: var(--cms-texto-2, #5a6763); }

.cms-fp-antecedentes { margin: 0; display: grid; gap: 1.25rem; }

.cms-fp-antecedentes dt {
    display: flex;
    align-items: center;
    gap: 0.5625rem;
    margin-bottom: 0.5rem;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--cms-texto, #101917);
}

.cms-fp-antecedentes dd {
    margin: 0;
    padding-inline-start: 2.5625rem;
    font-size: 0.875rem;
    line-height: 1.6;
    color: var(--cms-texto-2, #4b5854);
}

/* --- visitas / documentos / pagamentos ------------------------------------ */
.cms-fp-visitas { margin: 0; padding: 0; list-style: none; }

.cms-fp-visita {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 0.8125rem 0;
    text-decoration: none;
    color: inherit;
    border-radius: 10px;
    transition: background 140ms ease;
}

a.cms-fp-visita:hover { background: #f6f8f7; margin-inline: -0.625rem; padding-inline: 0.625rem; }

.cms-fp-visitas li + li .cms-fp-visita { border-top: 1px solid var(--cms-linha, #eef1f0); }

.cms-fp-visita-data { display: grid; gap: 0.0625rem; flex: none; min-width: 5.75rem; }
.cms-fp-visita-dia  { font-size: 0.8125rem; font-weight: 550; color: var(--cms-texto, #101917); }
.cms-fp-visita-hora { font-size: 0.75rem; color: #5c6a66; font-variant-numeric: tabular-nums; }

.cms-fp-visita-corpo { display: grid; gap: 0.0625rem; min-width: 0; flex: 1; }

.cms-fp-visita-servico {
    display: flex;
    align-items: baseline;
    gap: 0.4375rem;
    font-size: 0.875rem;
    font-weight: 550;
    color: var(--cms-texto, #101917);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cms-fp-visita-ref {
    font-size: 0.6875rem;
    font-weight: 500;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    color: var(--cms-texto-3, #8a9793);
}

.cms-fp-visita-medico {
    font-size: 0.8125rem;
    color: var(--cms-texto-2, #5a6763);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cms-fp-visita-estado {
    flex: none;
    padding: 0.1875rem 0.5625rem;
    border-radius: 999px;
    font-size: 0.6875rem;
    font-weight: 550;
    white-space: nowrap;
}

/* Os nomes vêm de `RequestState::color()`, que já existia e é usado nas
   tabelas do Filament. Inventar aqui um segundo vocabulário de cores era
   garantir que um dia os dois discordavam sobre o que é "concluída". */
.cms-fp-visita-estado[data-tom='success'] { background: #e7f5ee; color: #0d6b45; }
.cms-fp-visita-estado[data-tom='warning'] { background: #fdf1e0; color: #96550a; }
.cms-fp-visita-estado[data-tom='info']    { background: #eaf1fe; color: #1e4fa8; }
.cms-fp-visita-estado[data-tom='danger']  { background: #fdecec; color: #a52424; }
.cms-fp-visita-estado[data-tom='gray']    { background: #f0f2f1; color: #5a6763; }

.cms-fp-visita-seta { width: 1rem; height: 1rem; flex: none; color: var(--cms-texto-3, #b3bfbb); }

/* --- blocos de texto ------------------------------------------------------ */
.cms-fp-texto,
.cms-fp-nota {
    font-size: 0.875rem;
    line-height: 1.6;
    color: var(--cms-texto-2, #4b5854);
}

/* Nota da equipa em caixa tingida, como na referência: separa visualmente o
   que é opinião de quem atende do que é dado do registo. */
.cms-fp-nota {
    padding: 0.9375rem 1.0625rem;
    border-radius: 12px;
    background: #f4f8fb;
    border: 1px solid #e4eef5;
}

.cms-fp-declarado {
    margin-top: 0.875rem;
    font-size: 0.75rem;
    line-height: 1.5;
    color: #5c6a66;
}

.cms-fp-plano     { margin: 0; font-size: 1rem; font-weight: 600; color: var(--cms-texto, #101917); }
.cms-fp-plano-num { margin: 0.25rem 0 0; font-size: 0.8125rem; color: var(--cms-texto-2, #5a6763); font-variant-numeric: tabular-nums; }

.cms-fp-vazio {
    margin: 0;
    padding: 1.25rem 0;
    font-size: 0.875rem;
    line-height: 1.6;
    /* Texto de estado vazio continua a ser texto: 3,03:1 não se lê. */
    color: #5c6a66;
}

/* --- tema escuro ---------------------------------------------------------- */
html.dark .cms-fp-topo,
html.dark .cms-fp-criticos { border-color: #26302d; }
html.dark .cms-fp-topo { background: #131a18; }
html.dark .cms-fp-critico + .cms-fp-critico { border-left-color: #26302d; }
html.dark .cms-fp-nome,
html.dark .cms-fp-critico-valor,
html.dark .cms-fp-medida-valor,
html.dark .cms-fp-lista-rotulo,
html.dark .cms-fp-visita-dia,
html.dark .cms-fp-visita-servico,
html.dark .cms-fp-plano,
html.dark .cms-fp-antecedentes dt { color: #e9efec; }
html.dark .cms-fp-contactos li,
html.dark .cms-fp-medida-rotulo,
html.dark .cms-fp-lista-valor,
html.dark .cms-fp-visita-medico,
html.dark .cms-fp-plano-num,
html.dark .cms-fp-texto,
html.dark .cms-fp-nota,
html.dark .cms-fp-antecedentes dd,
html.dark .cms-fp-aviso { color: #b7c2bf; }
/* Os secundários foram escurecidos para passarem no tema claro; no escuro
   têm de subir na direcção oposta ou ficam a 3:1. */
html.dark .cms-fp-critico-rotulo,
html.dark .cms-fp-medida-rotulo,
html.dark .cms-fp-critico-nota,
html.dark .cms-fp-medida-nota,
html.dark .cms-fp-visita-hora,
html.dark .cms-fp-declarado,
html.dark .cms-fp-vazio,
html.dark .cms-fp-visita-ref { color: #8b9995; }
html.dark .cms-fp-medida,
html.dark .cms-fp-abas { border-color: #26302d; }
html.dark .cms-fp-lista li + li,
html.dark .cms-fp-visitas li + li .cms-fp-visita { border-top-color: #222b29; }
html.dark .cms-fp-aviso { background: #171f1d; }
/* O negrito herdava a cor do tema claro e ficava preto sobre preto. */
html.dark .cms-fp-aviso strong { color: #e9efec; }
html.dark .cms-fp-nota  { background: #141c22; border-color: #223038; }
html.dark a.cms-fp-visita:hover { background: #171f1d; }
html.dark .cms-fp-aba { color: #9aa8a4; }
html.dark .cms-fp-aba:hover { color: #e9efec; }
/* A aba activa tem de vencer a regra genérica acima — `html.dark .cms-fp-aba`
   tem mais especificidade do que `.cms-fp-aba-activa` e apagava-lhe o verde. */
html.dark .cms-fp-aba-activa { color: var(--primary-400, #4cc48c); }
html.dark .cms-fp-aba-activa::after { background: var(--primary-400, #4cc48c); }
html.dark .cms-fp-aba-conta { background: #1e2624; color: #9aa8a4; }
html.dark .cms-fp-estado-off { background: #1e2624; color: #9aa8a4; }
html.dark .cms-fp-critico-alerta { background: #241b18; }
html.dark .cms-fp-critico-alerta .cms-fp-critico-valor { color: #e8a88f; }

/* As pastilhas em escuro: fundo mais fundo, texto mais claro. */
html.dark .cms-fp-medida-icone[data-tom='azul'],
html.dark .cms-fp-cabec-icone[data-tom='azul']     { background: #14202f; color: #7aa7f0; }
html.dark .cms-fp-medida-icone[data-tom='verde'],
html.dark .cms-fp-cabec-icone[data-tom='verde']    { background: #12241c; color: #4cc48c; }
html.dark .cms-fp-medida-icone[data-tom='roxo'],
html.dark .cms-fp-cabec-icone[data-tom='roxo']     { background: #1c1830; color: #a58bf0; }
html.dark .cms-fp-medida-icone[data-tom='ambar'],
html.dark .cms-fp-cabec-icone[data-tom='ambar']    { background: #2a1f10; color: #e0a44e; }
html.dark .cms-fp-medida-icone[data-tom='vermelho'],
html.dark .cms-fp-cabec-icone[data-tom='vermelho'] { background: #2b1616; color: #ef8e8e; }
html.dark .cms-fp-medida-icone[data-tom='rosa'],
html.dark .cms-fp-cabec-icone[data-tom='rosa']     { background: #2b1622; color: #f08eb9; }
html.dark .cms-fp-medida-icone[data-tom='cinza']   { background: #1e2624; color: #9aa8a4; }

html.dark .cms-fp-visita-estado[data-tom='success'] { background: #173425; color: #79dcac; }
html.dark .cms-fp-visita-estado[data-tom='warning'] { background: #2a1f10; color: #e7b264; }
html.dark .cms-fp-visita-estado[data-tom='info']    { background: #14202f; color: #8db6f4; }
html.dark .cms-fp-visita-estado[data-tom='danger']  { background: #2b1616; color: #f09b9b; }
html.dark .cms-fp-visita-estado[data-tom='gray']    { background: #262f2d; color: #a8b5b1; }

/* =========================================================
   CONVERSAS INTERNAS
   Duas colunas: a caixa de entrada e o fio. A altura é fixa ao ecrã
   para o campo de escrita ficar sempre à vista — uma caixa de chat que
   obriga a rolar até ao fundo para responder deixa de ser usada.
   ========================================================= */

.cms-cv {
    display: grid;
    grid-template-columns: 19rem minmax(0, 1fr);
    gap: 1rem;
    height: calc(100vh - 15rem);
    min-height: 30rem;
}

@media (max-width: 900px) {
    /* No telemóvel não cabem as duas. Mostra-se a lista por cima do fio,
       que continua utilizável em ecrã inteiro depois de escolher. */
    .cms-cv { grid-template-columns: minmax(0, 1fr); height: auto; }
    .cms-cv-lista { max-height: 16rem; }
    .cms-cv-fio { min-height: 28rem; }
}

/* --- caixa de entrada ----------------------------------------------------- */
.cms-cv-lista {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
    padding: 0.625rem;
    overflow-y: auto;
    background: var(--cms-superficie, #fff);
    border: 1px solid var(--cms-linha, #e8ecea);
    border-radius: 16px;
}

.cms-cv-grupo {
    margin: 0.75rem 0.5rem 0.375rem;
    font-size: 0.6875rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #5c6a66;
}

.cms-cv-grupo:first-child { margin-top: 0.25rem; }

.cms-cv-item {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    width: 100%;
    padding: 0.5625rem 0.625rem;
    border: 0;
    border-radius: 11px;
    background: none;
    text-align: start;
    cursor: pointer;
    transition: background 140ms ease;
}

.cms-cv-item:hover { background: #f4f7f6; }

.cms-cv-item-activa { background: color-mix(in srgb, var(--primary-500, #12a06a) 11%, transparent); }
.cms-cv-item-activa .cms-cv-item-titulo { color: var(--primary-700, #0d7a51); font-weight: 600; }

.cms-cv-item-icone {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 2rem;
    height: 2rem;
    border-radius: 9px;
    background: #f0f2f1;
    color: #5c6a66;
}

.cms-cv-item-icone svg { width: 1rem; height: 1rem; }

.cms-cv-item-icone[data-equipa='operacao']   { background: #eaf1fe; color: #2563eb; }
.cms-cv-item-icone[data-equipa='clinico']    { background: #e7f5ee; color: #0f8b57; }
.cms-cv-item-icone[data-equipa='financeiro'] { background: #fdf1e0; color: #b7690b; }
.cms-cv-item-icone[data-equipa='suporte']    { background: #f0ecfd; color: #6d46d6; }
.cms-cv-item-icone[data-equipa='agentes']    { background: #fdecf4; color: #bf2f77; }

.cms-cv-item-corpo { display: grid; gap: 0.0625rem; min-width: 0; flex: 1; }

.cms-cv-item-titulo {
    font-size: 0.8125rem;
    font-weight: 550;
    color: var(--cms-texto, #101917);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cms-cv-item-nota { font-size: 0.6875rem; color: #5c6a66; }

.cms-cv-item-conta {
    flex: none;
    min-width: 1.25rem;
    padding: 0.0625rem 0.375rem;
    border-radius: 999px;
    background: var(--primary-600, #0f8b57);
    color: #fff;
    font-size: 0.6875rem;
    font-weight: 600;
    text-align: center;
}

.cms-cv-lista-vazia { margin: 1rem 0.5rem; font-size: 0.8125rem; color: #5c6a66; }

/* --- fio ------------------------------------------------------------------ */
.cms-cv-fio {
    display: flex;
    flex-direction: column;
    min-height: 0;
    background: var(--cms-superficie, #fff);
    border: 1px solid var(--cms-linha, #e8ecea);
    border-radius: 16px;
    overflow: hidden;
}

.cms-cv-cabec {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    padding: 0.9375rem 1.25rem;
    border-bottom: 1px solid var(--cms-linha, #eef1f0);
}

.cms-cv-cabec-titulo {
    margin: 0;
    font-size: 0.9375rem;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--cms-texto, #101917);
}

.cms-cv-cabec-nota { margin: 0.125rem 0 0; font-size: 0.75rem; color: #5c6a66; }

.cms-cv-caso {
    display: inline-flex;
    align-items: center;
    gap: 0.4375rem;
    padding: 0.375rem 0.6875rem;
    border: 1px solid var(--cms-linha, #e8ecea);
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 550;
    text-decoration: none;
    color: var(--cms-texto-2, #4b5854);
    transition: background 140ms ease;
}

.cms-cv-caso:hover { background: #f4f7f6; }
.cms-cv-caso-icone { width: 0.875rem; height: 0.875rem; color: var(--primary-600, #0f8b57); }
.cms-cv-caso-seta  { width: 0.75rem; height: 0.75rem; color: #7d8b87; }

/* --- mensagens ------------------------------------------------------------ */
.cms-cv-mensagens {
    display: flex;
    flex-direction: column;
    gap: 0.625rem;
    flex: 1;
    min-height: 0;
    padding: 1.25rem;
    overflow-y: auto;
    /* De baixo para cima: a mensagem mais recente fica à vista sem
       precisar de JavaScript a empurrar o scroll a cada actualização. */
    justify-content: flex-end;
}

.cms-cv-msg { display: flex; align-items: flex-end; gap: 0.5rem; max-width: 78%; }
.cms-cv-msg-minha { margin-inline-start: auto; flex-direction: row-reverse; }

.cms-cv-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 1.75rem;
    height: 1.75rem;
    border-radius: 999px;
    background: #f0f2f1;
    color: #4b5854;
    font-size: 0.625rem;
    font-weight: 600;
}

.cms-cv-balao {
    display: grid;
    gap: 0.1875rem;
    padding: 0.5625rem 0.8125rem 0.4375rem;
    border-radius: 14px;
    background: #f4f7f6;
    min-width: 0;
}

.cms-cv-msg-minha .cms-cv-balao {
    background: color-mix(in srgb, var(--primary-500, #12a06a) 13%, transparent);
}

.cms-cv-autor { font-size: 0.6875rem; font-weight: 600; color: var(--primary-700, #0d7a51); }

.cms-cv-corpo {
    font-size: 0.875rem;
    line-height: 1.5;
    color: var(--cms-texto, #101917);
    overflow-wrap: anywhere;
}

.cms-cv-hora {
    justify-self: end;
    font-size: 0.625rem;
    color: #5c6a66;
    font-variant-numeric: tabular-nums;
}

.cms-cv-anexo {
    display: inline-flex;
    align-items: center;
    gap: 0.4375rem;
    margin-top: 0.25rem;
    padding: 0.375rem 0.5625rem;
    border-radius: 9px;
    background: rgb(255 255 255 / 0.7);
    text-decoration: none;
    font-size: 0.75rem;
    color: var(--cms-texto-2, #4b5854);
}

.cms-cv-anexo:hover { background: #fff; }
.cms-cv-anexo-icone { width: 0.875rem; height: 0.875rem; flex: none; }
.cms-cv-anexo-nome  { font-weight: 550; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cms-cv-anexo-tam   { color: #5c6a66; flex: none; }

/* Nota do sistema: centrada e discreta — informa sem interromper a leitura. */
.cms-cv-sistema {
    align-self: center;
    margin: 0.25rem 0;
    padding: 0.25rem 0.75rem;
    border-radius: 999px;
    background: #f0f2f1;
    font-size: 0.75rem;
    color: #5c6a66;
}

.cms-cv-vazio { margin: auto 0; text-align: center; font-size: 0.875rem; color: #5c6a66; }

/* --- escrever ------------------------------------------------------------- */
.cms-cv-escrever { padding: 0.875rem 1rem 1rem; border-top: 1px solid var(--cms-linha, #eef1f0); }

.cms-cv-escrever-linha { display: flex; align-items: flex-end; gap: 0.5rem; }

.cms-cv-campo {
    flex: 1;
    min-height: 2.5rem;
    max-height: 10rem;
    padding: 0.5625rem 0.875rem;
    border: 1px solid var(--cms-linha, #e0e6e3);
    border-radius: 12px;
    background: var(--cms-superficie, #fff);
    font-size: 0.875rem;
    line-height: 1.5;
    color: var(--cms-texto, #101917);
    resize: none;
}

.cms-cv-campo:focus {
    outline: 2px solid color-mix(in srgb, var(--primary-500, #12a06a) 45%, transparent);
    outline-offset: -1px;
    border-color: transparent;
}

.cms-cv-clipe,
.cms-cv-enviar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    /* 40px: o mínimo aceitável para um alvo de toque. */
    width: 2.5rem;
    height: 2.5rem;
    border: 0;
    border-radius: 11px;
    cursor: pointer;
    transition: background 140ms ease;
}

/* O `sr-only` do Tailwind não existe aqui: este ficheiro é estático, não
   passa pelo compilador. Sem isto, o botão nativo "Escolher ficheiro" ficava
   à vista por cima do campo de escrita. */
.cms-cv-clipe { position: relative; overflow: hidden; background: #f0f2f1; color: #4b5854; }
.cms-cv-clipe input[type='file'] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
}
.cms-cv-clipe:hover { background: #e6eae8; }
.cms-cv-clipe svg { width: 1.125rem; height: 1.125rem; }

.cms-cv-enviar { background: var(--primary-600, #0f8b57); color: #fff; }
.cms-cv-enviar:hover { background: var(--primary-700, #0d7a51); }
.cms-cv-enviar svg { width: 1.0625rem; height: 1.0625rem; }

.cms-cv-anexo-pendente {
    display: flex;
    align-items: center;
    gap: 0.4375rem;
    margin: 0 0 0.5rem;
    font-size: 0.75rem;
    color: var(--cms-texto-2, #4b5854);
}

.cms-cv-anexo-tirar {
    border: 0;
    background: none;
    padding: 0;
    font-size: 0.75rem;
    color: #c62f2f;
    cursor: pointer;
    text-decoration: underline;
}

.cms-cv-erro { margin: 0.375rem 0 0; font-size: 0.75rem; color: #c62f2f; }

.cms-cv-so-leitura {
    margin: 0;
    padding: 0.875rem 1rem;
    border-top: 1px solid var(--cms-linha, #eef1f0);
    font-size: 0.8125rem;
    color: #5c6a66;
}

/* --- estado vazio --------------------------------------------------------- */
.cms-cv-nada { margin: auto; padding: 2rem; text-align: center; }
.cms-cv-nada-icone { width: 2.25rem; height: 2.25rem; margin: 0 auto 0.75rem; color: #b3bfbb; }
.cms-cv-nada-titulo { margin: 0; font-size: 0.9375rem; font-weight: 600; color: var(--cms-texto, #101917); }
.cms-cv-nada-nota { margin: 0.25rem 0 0; font-size: 0.8125rem; color: #5c6a66; }

/* --- tema escuro ---------------------------------------------------------- */
html.dark .cms-cv-lista,
html.dark .cms-cv-fio { background: #131a18; border-color: #26302d; }
html.dark .cms-cv-cabec,
html.dark .cms-cv-escrever,
html.dark .cms-cv-so-leitura { border-color: #222b29; }
html.dark .cms-cv-item:hover { background: #1a2321; }
html.dark .cms-cv-item-icone { background: #1e2624; color: #a8b5b1; }
/* As equipas perdiam a cor no escuro: a regra genérica acima tem mais
   especificidade do que `[data-equipa]`. A cor é o que distingue os canais
   de relance. */
html.dark .cms-cv-item-icone[data-equipa='operacao']   { background: #14202f; color: #7aa7f0; }
html.dark .cms-cv-item-icone[data-equipa='clinico']    { background: #12241c; color: #4cc48c; }
html.dark .cms-cv-item-icone[data-equipa='financeiro'] { background: #2a1f10; color: #e0a44e; }
html.dark .cms-cv-item-icone[data-equipa='suporte']    { background: #1c1830; color: #a58bf0; }
html.dark .cms-cv-item-icone[data-equipa='agentes']    { background: #2b1622; color: #f08eb9; }
html.dark .cms-cv-item-titulo,
html.dark .cms-cv-cabec-titulo,
html.dark .cms-cv-corpo,
html.dark .cms-cv-nada-titulo { color: #e9efec; }
html.dark .cms-cv-grupo,
html.dark .cms-cv-item-nota,
html.dark .cms-cv-cabec-nota,
html.dark .cms-cv-hora,
html.dark .cms-cv-vazio,
html.dark .cms-cv-lista-vazia,
html.dark .cms-cv-nada-nota,
html.dark .cms-cv-sistema,
html.dark .cms-cv-anexo-tam,
html.dark .cms-cv-so-leitura { color: #a8b5b1; }
html.dark .cms-cv-balao { background: #1e2624; }
/* A minha mensagem tinha de se distinguir da dos outros; a 13% de verde
   sobre fundo escuro as duas ficavam do mesmo cinzento. */
html.dark .cms-cv-msg-minha .cms-cv-balao {
    background: color-mix(in srgb, var(--primary-500, #12a06a) 22%, #131a18);
}
html.dark .cms-cv-avatar { background: #1e2624; color: #c3cecb; }
html.dark .cms-cv-sistema { background: #1a2321; }
html.dark .cms-cv-campo { background: #171f1d; border-color: #2b3532; color: #e9efec; }
html.dark .cms-cv-campo::placeholder { color: #8b9995; }
html.dark .cms-cv-clipe { background: #1e2624; color: #c3cecb; }
html.dark .cms-cv-clipe:hover { background: #263230; }
html.dark .cms-cv-caso { border-color: #26302d; color: #c3cecb; }
html.dark .cms-cv-caso:hover { background: #1a2321; }
html.dark .cms-cv-anexo { background: rgb(255 255 255 / 0.06); color: #c3cecb; }
html.dark .cms-cv-anexo:hover { background: rgb(255 255 255 / 0.1); }
html.dark .cms-cv-autor { color: var(--primary-400, #4cc48c); }
html.dark .cms-cv-item-activa .cms-cv-item-titulo { color: var(--primary-400, #4cc48c); }
html.dark .cms-cv-anexo-pendente { color: #c3cecb; }

/* =============================================================================
   ECRÃ DE ENTRADA — dividido (padrão IPPS/Médiko)
   =============================================================================
   Formulário à esquerda, identidade do inquilino à direita. Um cartão centrado
   num fundo vazio parece um formulário administrativo qualquer; o painel da
   marca diz de quem é a plataforma antes da primeira letra escrita.

   O conteúdo do painel vem do blade filament/login-marca (hook
   SIMPLE_LAYOUT_END). Em ecrã pequeno desaparece: num telemóvel, metade do
   ecrã ocupada por decoração é metade do ecrã roubada ao formulário.
   ========================================================================== */

.cms-login-marca {
    display: none;
}

@media (min-width: 64rem) {
    .fi-simple-layout {
        display: grid;
        grid-template-columns: 1fr 1fr;
        /* `1fr` na linha e `stretch` são precisos: sem eles a grelha dimensiona
           pelo conteúdo e o painel da direita ficava uma faixa a meio do ecrã. */
        grid-template-rows: 1fr;
        align-items: stretch;
        min-height: 100dvh;
        background-color: var(--cms-surface);
    }

    /* O formulário ocupa a coluna da esquerda, centrado nela. */
    .fi-simple-layout > .fi-simple-main-ctn,
    .fi-simple-main-ctn {
        grid-column: 1;
        display: flex;
        align-items: center;
        justify-content: center;
        padding-inline: 3rem;
    }

    /* O cartão dissolve-se: a metade esquerda do ecrã É o cartão. */
    .fi-simple-main {
        width: 100%;
        max-width: 24rem;
        background-color: transparent;
        border: 0;
        box-shadow: none;
        padding: 0;
    }

    .cms-login-marca {
        display: flex;
        position: relative;
        grid-column: 2;
        flex-direction: column;
        justify-content: flex-end;
        overflow: hidden;
        padding: 3.5rem;
        background-color: var(--primary-700);
        color: #fff;
    }

    /* Marca de água: grande, cortada pelo canto, opacidade baixa. Dá presença
       sem competir com o formulário. Centrada verticalmente para não competir
       com a frase, que vive em baixo. */
    .cms-login-agua {
        position: absolute;
        top: 50%;
        inset-inline-end: -18%;
        width: 80%;
        max-width: none;
        transform: translateY(-52%);
        opacity: 0.1;
        pointer-events: none;
    }

    /* Sem logótipo carregado, entra o monograma: a inicial da casa em corpo
       gigante. Um recuo digno — nunca um painel vazio. */
    .cms-login-agua-mono {
        position: absolute;
        top: 50%;
        inset-inline-end: -4%;
        transform: translateY(-55%);
        font-size: 42rem;
        font-weight: 700;
        line-height: 1;
        letter-spacing: -0.04em;
        opacity: 0.08;
        pointer-events: none;
        user-select: none;
    }

    .cms-login-texto {
        position: relative;
        max-width: 26rem;
    }

    .cms-login-frase {
        font-size: 1.75rem;
        font-weight: 600;
        line-height: 1.25;
        letter-spacing: -0.02em;
        text-wrap: balance;
    }

    .cms-login-nome {
        margin-top: 1rem;
        font-size: 0.9375rem;
        opacity: 0.8;
    }
}

/* O cartão do login herda os cantos dos restantes cartões em ecrã pequeno,
   onde volta a ser um cartão centrado. */
@media (max-width: 63.99rem) {
    .fi-simple-main {
        border-radius: var(--cms-radius-cartao);
    }
}

/* O Filament pinta o botão primário com o tom 400 da escala e texto escuro:
   sai lavado e não parece um botão de acção. No ecrã de entrada — o primeiro
   contacto com a casa — o botão é sólido, como no IPPS. Tom 700 e não 600:
   é o que garante 4.5:1 com texto branco em qualquer cor de marca razoável. */
.fi-simple-layout .fi-btn.fi-color-primary:not(.fi-btn-outlined):not(.fi-link) {
    background-color: var(--primary-700);
    color: #fff;
}

.fi-simple-layout .fi-btn.fi-color-primary:not(.fi-btn-outlined):not(.fi-link):hover {
    background-color: var(--primary-800);
}

/* A frase por baixo do título, discreta. */
.fi-simple-header-subheading {
    color: var(--cms-muted);
}

/* A marca por cima do título com a presença da referência: o Filament serra o
   logótipo a 1.5rem (estilo inline, daí o !important) e escreve o nome em
   corpo pequeno. Vale para o logótipo carregado E para o nome em texto. */
.fi-simple-layout .fi-logo {
    height: auto !important;
    max-height: 2.75rem;
    font-size: 1.5rem;
    letter-spacing: -0.015em;
}
