/* MedScribes.AI — shell da área logada v2 (chrome escuro + conteúdo claro).
   Incluído DEPOIS de custom.css no base.html.

   O rail recolhido (68px) e o "peek" ao passar o mouse NÃO vivem aqui — a
   máquina de recolhimento animada (largura, retração de rótulos, gutter do
   conteúdo, reduced-motion) fica em custom.css, seção "Desktop collapsible
   sidebar", e já usa as classes novas (.nav-item / .btn-accent / .rail-hide). */

/* ─── Shell ───────────────────────────────────────────────────────────── */
/* A largura do sidebar DEVE ser 16rem = ml-64 (288px com o html{font-size:18px}
   do custom.css): o gutter das páginas é a classe Tailwind `md:ml-64`, e o CDN
   pode vencer o custom.css na cascata — qualquer valor em px fixo deixa uma
   fresta clara entre sidebar e topbar. */
.app-shell        { background: #f6f8fb; }
.app-sidebar      { width: 16rem; background: #0b1220; color: #e2e8f0;
                    border-right: 1px solid rgba(148,163,184,.12); }
.app-sidebar__head{ padding: 20px 18px 18px; border-bottom: 1px solid rgba(148,163,184,.1); }
.app-topbar       { height: 60px; background: #0b1220;
                    border-bottom: 1px solid rgba(148,163,184,.12); }

/* O nav rola sozinho, mas SEM scrollbar visível: com "sempre mostrar barras"
   do macOS uma scrollbar clássica consome largura do layout (desalinha os
   ícones do rail) e pinta um bastão claro no chrome escuro. Ocultar não
   desliga o scroll — roda/trackpad/toque continuam funcionando. */
.app-sidebar nav  { scrollbar-width: none; }
.app-sidebar nav::-webkit-scrollbar { display: none; }
/* O nav é flex-column rolável: sem isto, itens com overflow:hidden são
   COMPRIMIDOS pelo flexbox quando o menu não cabe (rótulos de seção cortados
   ao meio). Rolagem sim, esmagamento não. */
.app-sidebar nav > * { flex-shrink: 0; }

/* Sombra de rolagem — a barra está oculta (acima), então sem isto NADA indica
   que o menu continua. Numa conta com muitos itens (proprietária de clínica:
   Início, Pacientes, Agenda, Compartilhamentos, Modo Teste, Relatórios, FHIR,
   Financeiro, Plano, Equipe) o último item ficava fatiado exatamente na borda
   do clip, encostado no widget de uso, e lia como sobreposição quebrada.

   Técnica só-CSS (sem JS): dois gradientes `local` cobrem a sombra quando o
   conteúdo está no topo/fim, e dois radiais `scroll` desenham a sombra. A
   sombra aparece SOMENTE quando há o que rolar, e some ao chegar na ponta.
   O #0b1220 é o mesmo `.app-sidebar` acima — se aquele mudar, este muda. */
.app-sidebar nav {
    background:
        linear-gradient(#0b1220 30%, rgba(11,18,32,0)) top    / 100% 16px no-repeat local,
        linear-gradient(rgba(11,18,32,0), #0b1220 70%) bottom / 100% 16px no-repeat local,
        radial-gradient(farthest-side at 50% 0,
            rgba(148,163,184,.22), rgba(148,163,184,0)) top    / 100% 7px no-repeat scroll,
        radial-gradient(farthest-side at 50% 100%,
            rgba(148,163,184,.22), rgba(148,163,184,0)) bottom / 100% 7px no-repeat scroll;
}
/* E uma folga no fim, para o último item nunca encostar no clip. */
.app-sidebar nav { padding-bottom: 10px; }

/* MEDIDO, não suposto: o menu de um proprietário de organização soma ~713px de
   conteúdo, e a altura disponível é `viewport - ~400px` (cabeçalho, CTA,
   seletor de contexto, widget de uso e rodapé). Ou seja: ele só caberia inteiro
   acima de ~1115px de viewport, e esconder o widget em telas baixas NÃO resolve
   (a 800px sobram 482px para 713px de menu) — só custaria o sinal de crédito.
   Por isso a correção aqui é a AFORDÂNCIA (a sombra acima), não esconder coisas.
   Encurtar o menu de verdade — por exemplo dobrar "Conta" dentro do rodapé do
   usuário — é decisão de design, registrada na initiative. */

/* rótulo mono — o tipo de letra mais usado do sistema */
.label-mono       { font-family: 'IBM Plex Mono', monospace; font-size: 12px;
                    letter-spacing: .18em; text-transform: uppercase; color: #64748b; }
.label-mono--dark { color: #475569; }
.num-display      { font-family: 'Newsreader', Georgia, serif; font-weight: 400;
                    line-height: 1; color: #0f172a; }

/* ─── Navegação ───────────────────────────────────────────────────────── */
/* Legibilidade dos títulos de grupo: 11.5px + slate-500 (o antigo #475569 a
   10.5px sobre #0b1220 dava ~2.8:1 de contraste — quase ilegível). */
.nav-section  { font-family: 'IBM Plex Mono', monospace; font-size: 11.5px;
                letter-spacing: .18em; text-transform: uppercase; color: #64748b;
                padding: 18px 10px 7px; position: relative;
                transition: color .18s ease;
                /* A seção de trabalho agora carrega o NOME do contexto ativo
                   ("CLÍNICA SÃO LUCAS") — um nome longo precisa cortar com
                   reticências, nunca quebrar em duas linhas no menu. */
                overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Ponto de cor antes do título da seção de trabalho — o MESMO par de cores do
   monograma do cartão de contexto (accent = organização, neutro = Particular).
   É o que amarra visualmente "esta seção pertence àquele contexto lá de cima".
   Ele é .rail-hide no markup: no rail o título já vira uma hairline (::after)
   e um ponto colorido órfão leria como um pixel morto. */
.nav-section__dot { display: inline-block; width: 5px; height: 5px;
                    border-radius: 999px; margin-right: 7px;
                    vertical-align: 1.5px; }
.nav-item     { display: flex; align-items: center; gap: 10px; width: 100%;
                padding: 9px 10px; border-radius: 8px; font-size: 15px;
                letter-spacing: -0.01em;
                font-weight: 500; color: #94a3b8; background: none; border: 0;
                cursor: pointer; text-align: left; font-family: inherit;
                transition: background-color .15s, color .15s; }
.nav-item:hover        { color: #f1f5f9; background: rgba(148,163,184,.08); }
.nav-item svg          { width: 18px; height: 18px; flex-shrink: 0; }
.nav-item.active       { color: #e2e8f0; background: rgba(34,211,238,.09);
                         box-shadow: inset 2px 0 0 #22d3ee; }
.nav-item.active svg   { color: #22d3ee; }
.nav-item.is-disabled  { color: #475569; cursor: not-allowed; user-select: none; }
.nav-item.is-disabled:hover { background: none; color: #475569; }

/* ─── Seletor de contexto de trabalho ─────────────────────────────────────
   Deliberadamente construído sobre a MESMA caixa do .nav-item (padding 9px
   10px, gap 10px, raio 8px). Não é cosmético: é o que põe o monograma na
   mesma coluna de 35px de todos os ícones do menu.

   Antes ele usava utilitários Tailwind (px-3 py-2.5) e, no rail de 68px,
   MEDIA 58px de altura por 36 de largura com o monograma em x=30 — ou seja,
   um retângulo vazio 17px mais alto que as linhas vizinhas, com a insígnia
   9px fora do eixo dos ícones. Era exatamente o "menu quebrado" relatado: no
   estado recolhido o seletor de organização não parecia um controle.

   O rótulo de duas linhas é quem carrega essa altura, então no rail ele
   colapsa em altura E largura (o `.rail-hide` só apaga a opacidade). */
/* padding 9px + a 1px border = the .nav-item's 10px inset, so the monogram
   lands on the SAME icon column (x=26, centre 35 in the 68px rail) as every
   nav icon. Measured, not eyeballed — with `padding: 9px 10px` the border
   pushed it 1px off and the rail read as misaligned. */
.ctx-switch       { display: flex; align-items: center; gap: 10px; width: 100%;
                    padding: 9px; border-radius: 8px; text-align: left;
                    border: 1px solid rgba(148,163,184,.14);
                    background: rgba(148,163,184,.05);
                    transition: background-color .15s, border-color .15s,
                                gap .3s cubic-bezier(.4,0,.2,1); }
.ctx-switch:hover { background: rgba(148,163,184,.1); }
/* Dentro de uma organização o cartão inteiro puxa um fio de accent — o mesmo
   código de cor do monograma e do chip da topbar (organização = ciano,
   Particular = neutro), agora na moldura que o olho encontra primeiro. */
.ctx-switch--org       { border-color: rgba(34,211,238,.28);
                         background: rgba(34,211,238,.06); }
.ctx-switch--org:hover { background: rgba(34,211,238,.1);
                         border-color: rgba(34,211,238,.4); }
.ctx-switch__mono { width: 18px; height: 18px; flex-shrink: 0; border-radius: 5px;
                    display: flex; align-items: center; justify-content: center;
                    font-family: 'IBM Plex Mono', monospace; font-size: 9.5px;
                    font-weight: 600; line-height: 1; border: 1px solid; }

/* O menu do seletor — linhas com o mesmo monograma do cartão, papel da pessoa
   em cada contexto e check no ativo. Classes em vez de utilitários pela mesma
   razão do .ctx-switch: as linhas reutilizam .ctx-switch__mono e precisam da
   mesma caixa nos dois lugares. */
.ctx-menu        { position: absolute; left: 0; right: 0; margin-top: 4px;
                   z-index: 20; border-radius: 10px;
                   border: 1px solid rgba(148,163,184,.16);
                   background: #080e1a;
                   box-shadow: 0 18px 40px -18px rgba(2,6,23,.9);
                   overflow: hidden; }
.ctx-menu__head  { font-family: 'IBM Plex Mono', monospace; font-size: 9.5px;
                   letter-spacing: .16em; text-transform: uppercase;
                   color: #64748b; padding: 10px 12px 4px; }
.ctx-menu__item  { display: flex; align-items: center; gap: 10px; width: 100%;
                   padding: 8px 12px; text-align: left; border: 0;
                   background: none; cursor: pointer; font-family: inherit;
                   transition: background-color .15s; }
.ctx-menu__item:hover      { background: rgba(148,163,184,.08); }
.ctx-menu__item:disabled   { opacity: .5; }
.ctx-menu__item.is-active  { background: rgba(34,211,238,.07); }
.ctx-menu__item.is-blocked { opacity: .6; cursor: not-allowed; }
.ctx-menu__item.is-blocked:hover { background: none; }
.ctx-menu__foot  { display: flex; align-items: center; justify-content: space-between;
                   gap: 8px; padding: 9px 12px; font-size: 12.5px; font-weight: 500;
                   color: #94a3b8; border-top: 1px solid rgba(148,163,184,.12);
                   transition: color .15s, background-color .15s; }
.ctx-menu__foot:hover { color: #f1f5f9; background: rgba(148,163,184,.06); }

/* Submenu recolhível — grid 0fr↔1fr anima a altura REAL (sem max-height com
   zona morta, sem x-show que salta). O estado inicial pode vir renderizado do
   servidor (classe estática .is-open) e o Alpine alterna via :class objeto. */
.nav-sub-wrap { display: grid; grid-template-rows: 0fr; opacity: 0; visibility: hidden;
                transition: grid-template-rows .24s cubic-bezier(.4,0,.2,1),
                            opacity .18s ease, visibility 0s linear .24s; }
.nav-sub-wrap.is-open { grid-template-rows: 1fr; opacity: 1; visibility: visible;
                transition: grid-template-rows .24s cubic-bezier(.4,0,.2,1),
                            opacity .18s ease .05s, visibility 0s; }
.nav-sub-clip { overflow: hidden; min-height: 0; }

.nav-sub      { margin: 2px 0 2px 26px; padding-left: 12px;
                border-left: 1px solid rgba(148,163,184,.14);
                display: flex; flex-direction: column; gap: 1px; }
.nav-sub__item{ display: flex; align-items: center; gap: 8px; padding: 6px 10px;
                border-radius: 6px; font-size: 14px; font-weight: 500; color: #94a3b8;
                transition: background-color .15s, color .15s; }
.nav-sub__item:hover  { color: #f1f5f9; background: rgba(148,163,184,.08); }
.nav-sub__item.active { color: #e2e8f0; background: rgba(148,163,184,.1); }
.nav-sub__item svg    { width: 14px; height: 14px; flex-shrink: 0; }
/* `.nav-item svg` (0,2,1) outspecifies a bare `.nav-chevron` (0,1,0), so the
   14px never applied and every submenu chevron rendered at 18px — as big as the
   destination icon it points away from. Qualified to win. */
.nav-item > .nav-chevron,
.nav-chevron  { width: 14px; height: 14px; flex-shrink: 0; transition: transform .2s ease; }
.nav-chevron.is-open { transform: rotate(90deg); }

/* Rodapé do usuário — a classe existia no markup e não estava definida em
   lugar nenhum. Importa por espaço, não por estética: o bloco de rótulo é
   `.rail-hide` (só opacidade), então as três linhas (nome, função, contexto)
   mantinham ~52px de altura no rail para um avatar de 34px. Colapsar isso
   devolve ~50px ao <nav>, que é justamente quem não cabe. */
.sidebar-footer-row__id { min-width: 0; }

/* ─── Botões e pílulas ────────────────────────────────────────────────── */
.btn-accent   { display: flex; align-items: center; justify-content: center; gap: 8px;
                padding: 11px 14px; border-radius: 9px; background: #22d3ee;
                color: #06121e; font-size: 14.5px; font-weight: 600;
                transition: background-color .15s; }
.btn-accent:hover { background: #67e8f9; }
.btn-dark     { padding: 8px 14px; border-radius: 8px; background: #0b1220;
                color: #f1f5f9; font-size: 14px; font-weight: 600; }
.btn-quiet    { display: block; text-align: center; padding: 10px; border-radius: 8px;
                border: 1px solid #cbd5e1; font-size: 14.5px; font-weight: 500;
                color: #0f172a; transition: border-color .15s, color .15s; }
.btn-quiet:hover { border-color: #0891b2; color: #0891b2; }

.pill-soon    { font-family: 'IBM Plex Mono', monospace; font-size: 10px;
                letter-spacing: .12em; text-transform: uppercase; color: #94a3b8;
                border: 1px solid rgba(148,163,184,.22); border-radius: 4px;
                padding: 2px 5px; white-space: nowrap; }
.pill-super   { font-family: 'IBM Plex Mono', monospace; font-size: 10px;
                letter-spacing: .12em; text-transform: uppercase; color: #fcd34d;
                border: 1px solid rgba(251,191,36,.32); border-radius: 4px; padding: 2px 5px; }
.badge-count  { font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; font-weight: 600;
                color: #06121e; background: #22d3ee; border-radius: 999px;
                min-width: 18px; height: 18px; display: inline-flex; align-items: center;
                justify-content: center; padding: 0 5px; }

/* ─── Cards e conteúdo claro ──────────────────────────────────────────── */
.card         { background: #fff; border: 1px solid var(--hairline, #e2e8f0); border-radius: 12px; }

/* ─── Sinal ambiente de contexto ────────────────────────────────────────
   Dentro de uma ORGANIZAÇÃO as hairlines do conteúdo ganham um viés ciano
   (mesma família do accent). É deliberadamente quase imperceptível item a
   item e inconfundível de relance: o profissional que trabalha em dois
   lugares reconhece "não estou no meu Particular" sem ler um rótulo — que é
   a única defesa real contra gravar uma consulta no contexto errado.

   Não substitui o chip da topbar nem o monograma da sidebar (esses dizem QUAL
   organização); complementa. Cor, não forma: nada muda de posição ao trocar de
   contexto, então a memória muscular da interface fica intacta.

   Só o CONTEÚDO muda — o chrome escuro já é o mesmo nos dois contextos. */
:root       { --hairline: #e2e8f0; --hairline-soft: #f1f5f9; }
body.ctx-org{ --hairline: #cfe1e8; --hairline-soft: #e9f1f4; }

body.ctx-org .border-hairline        { border-color: var(--hairline); }
body.ctx-org .border-hairline-soft   { border-color: var(--hairline-soft); }
body.ctx-org .divide-hairline > * + *      { border-color: var(--hairline); }
body.ctx-org .divide-hairline-soft > * + * { border-color: var(--hairline-soft); }
body.ctx-org .bg-hairline            { background-color: var(--hairline); }
/* O grid de métricas pinta as divisórias com o próprio background. */
body.ctx-org .metric-grid { background: var(--hairline); border-color: var(--hairline); }
.metric-grid  { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
                background: #e2e8f0; border: 1px solid #e2e8f0; border-radius: 12px;
                overflow: hidden; }
/* staff dashboards render only two metrics — without this the two spare
   grid tracks show as dead gray cells */
.metric-grid--duo { grid-template-columns: repeat(2, 1fr); }
/* Para um grid dentro de uma COLUNA estreita (o painel de Profissionais tem a
   trilha `lg:grid-cols-[320px_minmax(0,1fr)]`): o `repeat(4, 1fr)` fixo só
   respira abaixo de 768px, então entre ~1024px e ~1300px as quatro células
   ficavam com ~80px e os números do Newsreader a 32px estouravam. `auto-fit`
   reage à trilha real, não à largura da janela. */
.metric-grid--fit { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }
@media (max-width: 767.98px) {
    .metric-grid { grid-template-columns: repeat(2, 1fr); }
}
.metric-cell  { background: #fff; padding: 18px 18px 16px; }
.metric-cell__num { font-family: 'Newsreader', Georgia, serif; font-size: 32px;
                    color: #0f172a; margin-top: 8px; line-height: 1; }
.metric-cell__hint{ font-size: 13px; color: #64748b; margin-top: 7px; }

.row-list__row      { display: flex; align-items: center; gap: 16px; padding: 11px 0;
                      border-bottom: 1px solid #f1f5f9; }
.row-list__row:last-child { border-bottom: 0; }
.row-list__row.is-current { background: #f8fafc; margin: 0 -20px; padding: 11px 20px; }
.row-list__time     { font-family: 'IBM Plex Mono', monospace; font-size: 13.5px;
                      color: #64748b; width: 50px; flex-shrink: 0; }
.status-mono        { font-family: 'IBM Plex Mono', monospace; font-size: 11.5px;
                      letter-spacing: .12em; text-transform: uppercase; }
/* `.status-mono` é só tipografia — os irmãos abaixo são só cor. Quem quer a
   PÍLULA (borda + respiro) precisa desta classe: sem ela, um
   `:class="'!bg-red-50 !border-red-200'"` pintava o fundo colado nos glifos com
   uma borda de largura zero — texto marca-texto, não status. */
.status-chip        { display: inline-flex; align-items: center;
                      border: 1px solid transparent; border-radius: 999px;
                      padding: 2px 8px; white-space: nowrap; }
.status-done        { color: #64748b; }
.status-scheduled   { color: #475569; }
.status-live        { color: #0891b2; display: inline-flex; align-items: center; gap: 6px; }
.status-live::before{ content: ''; width: 5px; height: 5px; border-radius: 999px;
                      background: #22d3ee; }

/* faixa escura dentro do conteúdo claro (consulta em andamento) */
.banner-live  { display: flex; align-items: center; gap: 16px; padding: 16px 18px;
                border-radius: 12px; background: #0b1220; }
.banner-live__dot { width: 7px; height: 7px; border-radius: 999px; background: #22d3ee;
                    box-shadow: 0 0 0 4px rgba(34,211,238,.18); flex-shrink: 0; }

/* campo de busca — o foco vive no wrapper (o input interno tem outline: 0),
   então o :focus-within é o ÚNICO indicador de foco de teclado. Não remover. */
.field        { display: flex; align-items: center; gap: 8px; background: #fff;
                border: 1px solid #e2e8f0; border-radius: 10px; padding: 9px 12px;
                transition: border-color .15s, box-shadow .15s; }
.field:focus-within { border-color: #0891b2;
                      box-shadow: 0 0 0 2px rgba(8,145,178,.15); }
.field input  { border: 0; outline: 0; flex: 1; font-family: 'IBM Plex Mono', monospace;
                font-size: 13.5px; color: #0f172a; background: none; min-width: 0; }
.field input::placeholder { color: #94a3b8; }
.kbd          { font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #94a3b8;
                border: 1px solid #e2e8f0; border-radius: 4px; padding: 1px 5px; }

/* ─── Widget de uso ───────────────────────────────────────────────────── */
.usage-card   { display: block; margin: 0 14px 12px; padding: 10px 11px; border-radius: 9px;
                border: 1px solid rgba(148,163,184,.12); transition: border-color .15s; }
.usage-card:hover { border-color: rgba(34,211,238,.3); }
.usage-bar    { height: 3px; border-radius: 999px; background: rgba(148,163,184,.15);
                overflow: hidden; }
.usage-bar__fill      { height: 100%; background: #22d3ee; transition: width .5s; }
.usage-bar__fill.is-warning  { background: #f59e0b; }
.usage-bar__fill.is-exhausted{ background: #ef4444; }
