/* TIME DE APOIO — vitrine e página de cada profissional.
 *
 * Tudo sob .apoio, como a página de personal faz: o site inteiro divide o mesmo
 * style.css, e um seletor solto daqui apareceria na landing sem ninguém pedir.
 *
 * A linguagem é mais clara e menos "arena" que o resto do site, de propósito: quem entra
 * aqui está com dor no joelho ou preocupado com peso, não empolgado pra bater. Vermelho
 * só nos botões e nos detalhes; o resto é aço e respiro.
 */

/* section.apoio, e nao .apoio: a classe tambem vai no <body> (é ela que marca a pagina
   pro resto do CSS), e um seletor solto dava ao BODY o padding que era da secao — abrindo
   uma faixa vazia acima do header, que parecia defeito de layout. */
section.apoio { padding: 64px 0 96px; }
/* SEM CLAMP DE LARGURA AQUI, e por dois motivos.
   Primeiro: a classe 'apoio' vai no <body>, entao '.apoio .container' pegava TODO container
   da pagina — inclusive o do header, que ficava mais estreito que no resto do site. A
   topbar pede max-width:none, mas este arquivo carrega depois e, com a mesma
   especificidade, vencia na cascata.
   Segundo: a pagina usa a largura cheia de proposito, como as outras. O container padrao
   (1440px) ja da o respiro necessario. */

.ap-label {
  font-family: 'JetBrains Mono', monospace; font-size: 12px; letter-spacing: 5px;
  color: var(--red); text-transform: uppercase; margin-bottom: 10px;
}
.ap-h1 {
  font-family: 'Oswald', sans-serif; font-size: clamp(30px, 5vw, 52px);
  text-transform: uppercase; letter-spacing: 1px; margin: 0 0 14px;
}
.ap-h2 {
  font-family: 'Oswald', sans-serif; font-size: 20px; text-transform: uppercase;
  letter-spacing: 1px; margin: 28px 0 12px;
}
.ap-lead { color: var(--steel); max-width: 640px; font-size: 16px; margin: 0 0 10px; }
.ap-nota { color: var(--muted); font-size: 13px; max-width: 640px; margin: 0; }
.ap-topo { margin-bottom: 34px; }

/* ---------------------------------------------------------------- filtros */
.ap-filtros { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 24px; }
.ap-filtros-sep { width: 1px; height: 22px; background: var(--line); margin: 0 4px; }
.ap-chip {
  display: inline-flex; align-items: center; gap: 6px; font-size: 13px;
  padding: 8px 14px; border-radius: 999px; background: var(--panel);
  border: 1px solid var(--line); color: var(--steel); transition: border-color .2s, color .2s, background .2s;
}
.ap-chip:hover { border-color: var(--steel-2); color: #fff; }
.ap-chip.on { background: rgba(var(--red-rgb), .14); border-color: var(--red); color: #fff; }
.ap-chip-ico { font-size: 14px; }

/* ------------------------------------------------------------------ cards */
.ap-grid {
  display: grid; gap: 18px;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}
.ap-card {
  position: relative; background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column;
  transition: transform .25s cubic-bezier(.2,.7,.2,1), border-color .25s, box-shadow .25s;
}
.ap-card:hover { transform: translateY(-4px); border-color: var(--steel-2); box-shadow: var(--shadow); }
/* o card inteiro é clicável, mas o link fica por baixo do conteúdo — assim o texto
   continua selecionável e nada vira um <a> gigante cheio de coisa dentro */
.ap-card-link { position: absolute; inset: 0; z-index: 3; }
.ap-card-foto { position: relative; aspect-ratio: 4 / 3; background: var(--panel-2); overflow: hidden; }
.ap-card-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ap-card:hover .ap-card-foto img { transform: scale(1.04); }
.ap-card-foto img { transition: transform .5s cubic-bezier(.2,.7,.2,1); }
.ap-sem-foto {
  display: grid; place-items: center;
  background: radial-gradient(140px 100px at 50% 30%, rgba(var(--red-rgb), .22), var(--panel-2) 70%);
}
.ap-inicial {
  font-family: 'Oswald', sans-serif; font-size: 64px; color: var(--steel-2);
  opacity: .55; line-height: 1;
}
.ap-selo {
  position: absolute; left: 10px; bottom: 10px; z-index: 2;
  display: inline-flex; align-items: center; gap: 6px; font-size: 12px;
  padding: 5px 10px; border-radius: 999px;
  background: rgba(10, 10, 11, .82); border: 1px solid var(--line); color: var(--steel);
  backdrop-filter: blur(4px);
}
.ap-destaque {
  position: absolute; right: 10px; top: 10px; z-index: 2; font-size: 11px;
  text-transform: uppercase; letter-spacing: 1px; padding: 5px 10px; border-radius: 999px;
  background: var(--red); color: #fff;
}
.ap-card-corpo { padding: 16px 16px 14px; display: flex; flex-direction: column; flex: 1; }
.ap-card-corpo h2 { font-family: 'Oswald', sans-serif; font-size: 20px; margin: 0 0 4px; letter-spacing: .5px; }
.ap-cargo { color: var(--muted); font-size: 13px; margin-bottom: 10px; }
.ap-reg { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--steel-2); }
.ap-chamada { color: var(--steel); font-size: 14px; margin: 0 0 12px; }
.ap-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; }
.ap-tag {
  font-size: 11px; padding: 4px 9px; border-radius: 999px;
  background: var(--panel-2); border: 1px solid var(--line); color: var(--steel-2);
}
.ap-tag-ok { color: var(--ok); border-color: rgba(52, 199, 89, .35); }
.ap-card-pe {
  margin-top: auto; padding-top: 12px; border-top: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.ap-preco { font-size: 13px; color: var(--muted); }
.ap-preco b { color: #fff; font-size: 15px; }
.ap-ver { font-size: 13px; color: var(--red); white-space: nowrap; }

/* ------------------------------------------------------------------ vazio */
.ap-vazio {
  text-align: center; padding: 56px 24px; background: var(--panel);
  border: 1px dashed var(--line); border-radius: var(--radius);
}
.ap-vazio-ico { font-size: 40px; display: block; margin-bottom: 12px; }
.ap-vazio h2 { font-family: 'Oswald', sans-serif; font-size: 22px; margin: 0 0 8px; text-transform: uppercase; }
.ap-vazio p { color: var(--muted); max-width: 460px; margin: 0 auto 18px; }
.ap-vazio-filtro { padding: 36px 24px; margin-bottom: 18px; }

/* ---------------------------------------------------------------- botões */
.ap-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border-radius: 10px; border: 1px solid var(--line);
  background: var(--panel-2); color: var(--steel); font-weight: 600; font-size: 14px;
  transition: border-color .2s, color .2s, background .2s, box-shadow .2s;
}
.ap-btn:hover { border-color: var(--steel-2); color: #fff; }
.ap-btn-red { background: var(--red); border-color: var(--red); color: #fff; }
.ap-btn-red:hover { background: var(--red-bright); border-color: var(--red-bright); box-shadow: 0 8px 24px rgba(var(--red-rgb), .4); }
.ap-btn-bloco { width: 100%; margin-top: 4px; }

/* --------------------------------------------------------------- convite */
.ap-convite {
  margin-top: 44px; padding: 26px; border-radius: var(--radius);
  background: linear-gradient(120deg, rgba(var(--red-rgb), .14), var(--panel) 60%);
  border: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap;
}
.ap-convite h2 { font-family: 'Oswald', sans-serif; font-size: 20px; margin: 0 0 6px; text-transform: uppercase; }
.ap-convite p { color: var(--muted); margin: 0; max-width: 560px; font-size: 14px; }

/* ================================================================= perfil */
.ap-voltar { display: inline-block; color: var(--muted); font-size: 13px; margin-bottom: 20px; }
.ap-voltar:hover { color: #fff; }

.ap-cab { display: grid; grid-template-columns: 260px 1fr; gap: 28px; align-items: start; }
.ap-cab-foto {
  aspect-ratio: 1; border-radius: var(--radius); overflow: hidden;
  background: var(--panel-2); border: 1px solid var(--line);
}
.ap-cab-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ap-cab-txt .ap-h1 { margin-bottom: 6px; }
.ap-cab-acoes { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }

.ap-colunas { display: grid; grid-template-columns: 1fr 400px; gap: 36px; margin-top: 40px; align-items: start; }
.ap-bio p { color: var(--steel); margin: 0 0 12px; }
.ap-passos { color: var(--steel); padding-left: 20px; margin: 0; }
.ap-passos li { margin-bottom: 10px; }
.ap-passos b { color: #fff; }
.ap-end { color: var(--steel); }

/* ----------------------------------------------------------------- form */
.ap-form-col { position: sticky; top: 92px; }
.ap-form {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 22px;
}
.ap-form .ap-h2 { margin-top: 0; }
.ap-form label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 12px; }
.ap-form input, .ap-form select, .ap-form textarea {
  width: 100%; margin-top: 6px; padding: 11px 12px; border-radius: 9px;
  background: var(--bg-2); border: 1px solid var(--line); color: var(--text);
  font-family: inherit; font-size: 14px;
}
.ap-form input:focus, .ap-form select:focus, .ap-form textarea:focus {
  outline: none; border-color: var(--red); box-shadow: 0 0 0 3px rgba(var(--red-rgb), .16);
}
.ap-form textarea { resize: vertical; }
.ap-op { color: var(--steel-2); font-weight: 400; }
.ap-ajuda { color: var(--muted); font-size: 12px; margin: -6px 0 14px; }
.ap-ajuda-fim { margin: 12px 0 0; text-align: center; }
.ap-eu {
  background: var(--panel-2); border: 1px solid var(--line); border-radius: 9px;
  padding: 10px 12px; font-size: 13px; color: var(--steel); margin-bottom: 14px;
}
.ap-eu b { color: #fff; }
.ap-erro {
  background: rgba(255, 69, 58, .12); border: 1px solid rgba(255, 69, 58, .4);
  color: #ffb4ae; border-radius: 9px; padding: 10px 12px; font-size: 13px; margin-bottom: 14px;
}

/* ------------------------------------------------------------ autorização
   Bloco com peso visual próprio: é a única parte do formulário em que a pessoa
   decide algo sobre dados dela, e não pode passar como "mais um campo". */
.ap-consent {
  border: 1px solid rgba(var(--red-rgb), .35); border-radius: 10px;
  background: rgba(var(--red-rgb), .06); padding: 14px 14px 10px; margin: 4px 0 16px;
}
.ap-consent legend {
  font-family: 'Oswald', sans-serif; text-transform: uppercase; letter-spacing: .8px;
  font-size: 14px; color: #fff; padding: 0 6px;
}
.ap-consent-lead { color: var(--steel); font-size: 13px; margin: 0 0 12px; }
/* O <label> global do site e `display:block; text-transform:uppercase`, e `.ap-form label`
   tem especificidade maior que `.ap-check` sozinho — sem os seletores compostos abaixo, a
   caixa de autorizacao saia empilhada e GRITANDO EM MAIUSCULAS, que e o oposto do tom que
   uma pergunta sobre dado pessoal pede. */
.ap-check,
.ap-form .ap-check,
.pp-box .ap-check {
  display: flex; gap: 10px; align-items: flex-start; margin-bottom: 12px;
  color: var(--steel); text-transform: none; letter-spacing: normal;
}
.ap-check input { width: auto; margin: 3px 0 0; accent-color: var(--red); flex: none; }
.ap-check span { text-transform: none; letter-spacing: normal; }
.ap-check b { display: block; color: #fff; font-size: 14px; text-transform: none; letter-spacing: normal; }
.ap-check i {
  display: block; color: var(--muted); font-size: 12px; font-style: normal; line-height: 1.45;
  text-transform: none; letter-spacing: normal;
}
.ap-consent legend + .ap-consent-lead { margin-top: 4px; }
.ap-consent-pe { color: var(--muted); font-size: 12px; margin: 0; }
.ap-consent-menor {
  border: 1px solid var(--line); border-radius: 10px; background: var(--panel-2);
  padding: 12px; font-size: 13px; color: var(--steel); margin: 4px 0 16px;
}
.ap-consent-menor b { color: #fff; }

/* --------------------------------------------------------------- enviado */
.ap-ok {
  background: var(--panel); border: 1px solid rgba(52, 199, 89, .4);
  border-radius: var(--radius); padding: 28px 22px; text-align: center;
}
.ap-ok-ico {
  display: grid; place-items: center; width: 46px; height: 46px; margin: 0 auto 12px;
  border-radius: 50%; background: rgba(52, 199, 89, .16); color: var(--ok); font-size: 22px;
}
.ap-ok h2 { font-family: 'Oswald', sans-serif; text-transform: uppercase; font-size: 20px; margin: 0 0 8px; }
.ap-ok p { color: var(--muted); margin: 0 0 18px; }
.ap-zap { display: block; text-align: center; margin-top: 14px; font-size: 13px; color: var(--muted); }
.ap-zap:hover { color: #fff; }

/* ---------------------------------------------------------------- outros */
.ap-outros { margin-top: 56px; }
.ap-outros-lista { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.ap-mini {
  display: flex; gap: 12px; align-items: center; padding: 14px;
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  transition: border-color .2s, transform .2s;
}
.ap-mini:hover { border-color: var(--steel-2); transform: translateY(-2px); }
.ap-mini-ico { font-size: 22px; }
.ap-mini b { display: block; color: #fff; font-size: 15px; }
.ap-mini i { display: block; color: var(--muted); font-size: 12px; font-style: normal; }

/* ----------------------------------------------------------------- telas */
@media (max-width: 900px) {
  .ap-colunas { grid-template-columns: 1fr; gap: 28px; }
  .ap-form-col { position: static; }
  .ap-cab { grid-template-columns: 1fr; gap: 20px; }
  .ap-cab-foto { max-width: 220px; }
}
@media (max-width: 560px) {
  section.apoio { padding: 44px 0 72px; }
  .ap-convite { flex-direction: column; align-items: flex-start; }
  .ap-convite .ap-btn { width: 100%; }
}

/* ================================================================= PORTAL DO PARCEIRO
   A area dele. Mesma linguagem da vitrine, sem a sidebar da casa: ele nao e da equipe,
   e um menu com Alunos, Financeiro e Chamada ao lado nao diria a verdade sobre o que
   ele alcanca aqui dentro. */
.pp-topo { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 24px; }
.pp-estreito { max-width: 760px; }
.pp-cols { display: grid; grid-template-columns: 1fr 340px; gap: 28px; align-items: start; }
.pp-lado { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 92px; }
.pp-box { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; margin-bottom: 16px; }
.pp-nota { color: var(--muted); font-size: 12px; margin: 0 0 12px; }
.pp-nota b { color: var(--steel); }
.pp-vazio-mini { color: var(--muted); font-size: 13px; margin: 0; }
.pp-badge { display: inline-block; margin-left: 8px; font-size: 11px; padding: 3px 9px; border-radius: 999px; background: var(--red); color: #fff; vertical-align: middle; }
.pp-aviso {
  border: 1px solid var(--line); border-left: 3px solid var(--red); border-radius: 8px;
  background: var(--panel-2); padding: 10px 14px; color: var(--steel); font-size: 13px; margin-bottom: 18px;
}

/* pedidos */
.pp-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px; margin-bottom: 14px; }
.pp-card.pp-st-novo { border-left: 3px solid var(--red); }
.pp-card.pp-st-convertido { border-left: 3px solid var(--ok); }
.pp-card.pp-st-arquivado { opacity: .6; }
.pp-card-topo { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.pp-card h3 { font-family: 'Oswald', sans-serif; font-size: 18px; margin: 0 0 4px; letter-spacing: .5px; }
.pp-meta { color: var(--muted); font-size: 12px; }
.pp-status { font-size: 11px; text-transform: uppercase; letter-spacing: 1px; padding: 4px 10px; border-radius: 999px; background: var(--panel-2); border: 1px solid var(--line); color: var(--steel-2); white-space: nowrap; }
.pp-status-novo { color: var(--warn); border-color: rgba(255, 159, 10, .4); }
.pp-status-convertido { color: var(--ok); border-color: rgba(52, 199, 89, .4); }
.pp-objetivo { color: #fff; font-size: 15px; margin: 12px 0 6px; }
.pp-msg { color: var(--steel); font-size: 14px; margin: 0 0 12px; white-space: pre-line; }
.pp-contatos { display: flex; flex-wrap: wrap; gap: 14px; font-size: 13px; padding-top: 10px; border-top: 1px solid var(--line); }
.pp-acoes { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.pp-mini { background: none; border: 1px solid var(--line); color: var(--muted); font: inherit; font-size: 12px; padding: 5px 11px; border-radius: 999px; cursor: pointer; }
.pp-mini:hover { border-color: var(--steel-2); color: #fff; }

/* quem autorizou */
.pp-atendido { display: block; padding: 10px 0; border-bottom: 1px solid var(--line); }
.pp-atendido:last-child { border-bottom: none; }
.pp-atendido b { display: block; color: #fff; font-size: 14px; margin-bottom: 4px; }

/* a tela do atendido */
.pp-nums { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 12px; margin-bottom: 18px; }
.pp-nums > div { background: var(--panel-2); border: 1px solid var(--line); border-radius: 10px; padding: 12px; text-align: center; }
.pp-nums b { display: block; font-family: 'Oswald', sans-serif; font-size: 24px; color: #fff; }
.pp-nums i { display: block; font-style: normal; font-size: 11px; color: var(--muted); margin-top: 2px; }
.pp-sub { font-family: 'Oswald', sans-serif; font-size: 15px; text-transform: uppercase; letter-spacing: 1px; margin: 18px 0 8px; color: var(--steel); }
.pp-artes { list-style: none; padding: 0; margin: 0 0 10px; }
.pp-artes li { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--line); }
.pp-grad { color: var(--steel); font-size: 13px; }
.pp-ficha { display: grid; grid-template-columns: 150px 1fr; gap: 8px 16px; margin: 0 0 14px; }
.pp-ficha dt { color: var(--muted); font-size: 13px; }
.pp-ficha dd { margin: 0; color: #fff; font-size: 14px; }
.pp-hist { padding: 10px 0; border-bottom: 1px solid var(--line); }
.pp-hist:last-child { border-bottom: none; }

/* perfil */
.pp-box label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 14px; }
.pp-box input, .pp-box select, .pp-box textarea {
  width: 100%; margin-top: 6px; padding: 11px 12px; border-radius: 9px;
  background: var(--bg-2); border: 1px solid var(--line); color: var(--text);
  font-family: inherit; font-size: 14px;
}
.pp-box input:focus, .pp-box textarea:focus { outline: none; border-color: var(--red); box-shadow: 0 0 0 3px rgba(var(--red-rgb), .16); }
.pp-box textarea { resize: vertical; }
.pp-box .ap-check input { width: auto; margin-top: 3px; }
.pp-checks { display: flex; gap: 24px; flex-wrap: wrap; margin-bottom: 6px; }
.pp-fixo { background: var(--panel-2); border: 1px solid var(--line); border-radius: 9px; padding: 12px; margin-bottom: 16px; }
.pp-fixo b { display: block; color: #fff; font-size: 14px; margin-bottom: 4px; }
.pp-fixo i { color: var(--muted); font-size: 12px; font-style: normal; line-height: 1.5; }
.pp-foto-atual { display: flex; align-items: center; gap: 12px; margin: -6px 0 16px; }
.pp-foto-atual img { width: 64px; height: 64px; object-fit: cover; border-radius: 9px; border: 1px solid var(--line); }
.pp-foto-atual span { color: var(--muted); font-size: 12px; }

@media (max-width: 900px) {
  .pp-cols { grid-template-columns: 1fr; }
  .pp-lado { position: static; }
}

/* a conta do parceiro com a academia (so quem combinou mensalidade ve isto) */
.pp-conta { margin: 0 0 12px; }
.pp-conta b { display: block; font-family: 'Oswald', sans-serif; font-size: 26px; color: #fff; }
.pp-conta i { color: var(--muted); font-size: 12px; font-style: normal; }
.pp-qr { display: block; width: 180px; max-width: 100%; margin: 0 auto 12px; border-radius: 10px; background: #fff; padding: 6px; }
.pp-hist-conta { margin-top: 12px; }
.pp-hist-conta summary { cursor: pointer; color: var(--muted); font-size: 13px; }

/* a conta do mes em formacao — numeros grandes, conta na cara: N x taxa = total */
.pp-conta-mes {
  display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 18px 22px; margin-bottom: 12px;
}
.pp-conta-mes > div b { display: block; font-family: 'Oswald', sans-serif; font-size: 26px; color: #fff; line-height: 1.1; }
.pp-conta-mes > div i { display: block; font-style: normal; font-size: 12px; color: var(--muted); margin-top: 2px; }
.pp-conta-x { color: var(--steel-2); font-size: 20px; }
.pp-conta-total b { color: var(--red) !important; }
.pp-linha { display: flex; gap: 12px; flex-wrap: wrap; }
.pp-acoes-form { display: flex; gap: 10px; margin-top: 6px; }

/* ============================================ LANDING "SEJA UM PARCEIRO"
   Pagina de venda pro PROFISSIONAL. Mais respiro e numeros maiores que a vitrine:
   quem le aqui esta decidindo se confia a propria agenda a academia, e a decisao
   se toma em cima de tres numeros e de nenhuma letra miuda. */
.sp-hero { max-width: 780px; margin: 0 auto 56px; text-align: center; }
.sp-hero .ap-label { text-align: center; }
.sp-h1 {
  font-family: 'Oswald', sans-serif; font-size: clamp(32px, 6vw, 62px); line-height: 1.05;
  text-transform: uppercase; letter-spacing: 1px; margin: 0 0 18px;
}
.sp-lead { color: var(--steel); font-size: 17px; margin: 0 auto 28px; max-width: 640px; }
.sp-numeros {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px;
  margin: 0 0 26px;
}
.sp-numeros > div {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px 14px;
}
.sp-numeros b {
  display: block; font-family: 'Oswald', sans-serif; font-size: 34px; color: #fff; line-height: 1;
}
.sp-numeros > div:first-child b { color: var(--red); }
.sp-numeros i { display: block; font-style: normal; font-size: 12px; color: var(--muted); margin-top: 6px; }
.sp-cta { font-size: 16px; padding: 16px 34px; }
.sp-mini { color: var(--muted); font-size: 12px; margin: 12px 0 0; }

.sp-bloco { max-width: 900px; margin: 0 auto 56px; }
.sp-bloco > .ap-h2 { text-align: center; }
.sp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px; }
.sp-card {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 22px;
}
.sp-card-dest { border-color: var(--red); background: linear-gradient(160deg, rgba(var(--red-rgb), .12), var(--panel) 70%); }
.sp-ico { font-size: 26px; display: block; margin-bottom: 10px; }
.sp-card h3 { font-family: 'Oswald', sans-serif; font-size: 18px; margin: 0 0 8px; letter-spacing: .5px; }
.sp-card p { color: var(--muted); font-size: 14px; margin: 0; }
.sp-conta {
  text-align: center; color: var(--steel); margin: 20px 0 0; font-size: 15px;
}
.sp-conta b { color: #fff; }

.sp-lista { list-style: none; padding: 0; margin: 0; display: grid; gap: 12px; }
.sp-lista li {
  background: var(--panel); border: 1px solid var(--line); border-left: 3px solid var(--red);
  border-radius: 10px; padding: 14px 16px; color: var(--steel); font-size: 15px;
}
.sp-lista b { color: #fff; }

.sp-lgpd {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px;
}
.sp-lgpd p { color: var(--steel); margin: 0 0 10px; }

.sp-profs { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
.sp-prof {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 18px; text-align: center;
}
.sp-prof-ico { font-size: 30px; display: block; margin-bottom: 8px; }
.sp-prof b { display: block; color: #fff; font-size: 15px; margin-bottom: 4px; }
.sp-prof i { display: block; font-style: normal; color: var(--muted); font-size: 12px; margin-bottom: 10px; }

/* ---- os campos ----
   Caixas com borda de 1px em volta sao o formulario padrao de qualquer site. Aqui o campo
   e uma REGUA: rotulo pequeno em mono, o valor grande, e uma linha embaixo que acende
   quando o campo esta em uso. E o registro visual de quem preenche uma ficha de cadastro
   profissional — mais perto de um instrumento que de um formulario de contato.

   A caixa sumiu, mas o alvo de toque NAO: o padding continua ali, so nao tem borda
   desenhada em volta dele. */
.sp-form { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px 24px; }
.sp-form label {
  display: block; position: relative; margin-bottom: 22px;
  font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: 2px;
  text-transform: uppercase; color: var(--muted);
  transition: color .18s;
}
.sp-form label:focus-within { color: var(--red-bright, #f55); }

/* FONTE EXPLICITA, nao `inherit`. O input mora DENTRO do label, e o label e mono
   maiusculo — herdar dali fazia o nome da pessoa, o e-mail e todos os placeholders
   sairem em monoespacada. O mono e do rotulo; o valor e texto normal. */
.sp-form input, .sp-form textarea {
  width: 100%; margin-top: 6px; padding: 7px 2px 9px; border-radius: 0;
  background: transparent; border: none; border-bottom: 1px solid var(--line);
  color: var(--text); font-family: 'Inter', -apple-system, 'Segoe UI', Roboto, sans-serif;
  font-size: 16px; letter-spacing: 0; line-height: 1.45;
  transition: border-color .18s;
}
.sp-form input:focus, .sp-form textarea:focus {
  outline: none; border-bottom-color: rgba(var(--red-rgb), .45);
}
.sp-form ::placeholder { color: var(--steel-2); opacity: .55; }
/* A LINHA QUE ACENDE. Cresce da esquerda pra direita quando o campo recebe foco — o
   movimento diz onde voce esta sem precisar de cor de fundo nem de contorno grosso. */
.sp-form label::after {
  content: ""; position: absolute; left: 0; bottom: 0; height: 2px; width: 100%;
  background: var(--red); transform: scaleX(0); transform-origin: left;
  transition: transform .28s cubic-bezier(.2,.8,.2,1); pointer-events: none;
}
.sp-form label:focus-within::after { transform: scaleX(1); }
.sp-form textarea { resize: vertical; min-height: 84px; }

/* AS CAIXAS DE MARCAR NAO SAO CAMPOS DE TEXTO. Sem isto elas herdavam o rotulo mono
   maiusculo (viravam "ATENDO ONLINE" em monoespacada) e ganhavam a regua vermelha
   correndo por baixo do texto no foco. */
.sp-form .ap-check {
  position: static; margin-bottom: 0;
  font-family: 'Inter', sans-serif; font-size: 14px; letter-spacing: 0;
  text-transform: none; color: var(--text);
}
.sp-form .ap-check::after { display: none; }
.sp-form .ap-check input { width: auto; margin: 0; accent-color: var(--red); }
/* campo preenchido pelo navegador nao pode virar bloco azul sobre fundo preto */
.sp-form input:-webkit-autofill {
  -webkit-text-fill-color: var(--text);
  -webkit-box-shadow: 0 0 0 40px var(--panel) inset;
}
@media (prefers-reduced-motion: reduce) {
  .sp-form label::after { transition: none; }
}

/* ---- o carimbo do conselho ----
   O campo de registro dizia "CRN / CREFITO / CRP / CREF" — um placeholder que serve pras
   quatro areas e nao ajuda nenhuma. Escolhida a area, ele passa a pedir o conselho CERTO,
   e o carimbo aparece ao lado. Cada profissao tem o seu, e quem preenche reconhece o
   proprio antes de ler a frase. */
.sp-conselho {
  position: absolute; right: 0; top: 0;
  font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: 2px;
  color: var(--red-bright, #f55);
  opacity: 0; transform: translateY(-3px);
  transition: opacity .25s, transform .25s;
}
.sp-conselho.on { opacity: .9; transform: none; }
/* ---- a area, em fichas ----
   Era um <select>. Menu nativo abre BRANCO com faixa azul de sistema — um retangulo de
   Windows no meio de uma pagina preta, e nao ha CSS que conserte a lista aberta. Sao
   quatro areas: cabem na tela como fichas, e ai a escolha e um toque em vez de dois.

   Cada ficha traz a sigla do conselho porque e assim que o profissional se reconhece:
   quem tem CREF sabe que tem CREF antes de decidir se "preparacao fisica" e o nome
   certo do que faz. */
/* fieldset traz borda e padding proprios do navegador; aqui ele so agrupa os radios */
.sp-campo-area { border: none; padding: 0; margin: 0 0 22px; }
.sp-campo-area legend {
  padding: 0; font-family: 'JetBrains Mono', monospace; font-size: 10.5px;
  letter-spacing: 2px; text-transform: uppercase; color: var(--muted);
}
.sp-areas { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 8px; margin-top: 8px; }
.sp-area { position: relative; display: block; cursor: pointer; }
.sp-area input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.sp-area span {
  display: block; padding: 11px 12px 10px; border: 1px solid var(--line); border-radius: 10px;
  background: rgba(255,255,255,.02); transition: border-color .18s, background .18s;
}
.sp-area b {
  display: block; font-family: 'Inter', sans-serif; font-size: 14px; font-weight: 600;
  text-transform: none; letter-spacing: 0; color: var(--text);
}
.sp-area i {
  display: block; margin-top: 3px; font-style: normal;
  font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 2px;
  color: var(--steel-2);
}
.sp-area:hover span { border-color: rgba(var(--red-rgb), .45); }
.sp-area input:checked + span { border-color: var(--red); background: rgba(var(--red-rgb), .1); }
.sp-area input:checked + span i { color: var(--red-bright, #f55); }
/* o teclado precisa ver onde esta: o input e invisivel, entao o anel vai na ficha */
.sp-area input:focus-visible + span { outline: 2px solid var(--red-bright, #f55); outline-offset: 2px; }

.sp-linha { display: flex; gap: 18px; flex-wrap: wrap; }
.sp-checks { display: flex; gap: 22px; flex-wrap: wrap; margin: 4px 0 20px; }

@media (max-width: 560px) {
  .sp-numeros b { font-size: 28px; }
  .sp-linha { flex-direction: column; gap: 0; }
}

/* ================================================ GRAFICOS E ACOMPANHAMENTO
   Marcas finas, grade recessiva, texto sempre em tinta de texto (nunca na cor da
   serie) e um grafico por metrica — duas escalas no mesmo eixo e a mentira mais
   comum de dashboard. */
.gr { width: 100%; height: auto; display: block; overflow: visible; }
.gr-grid { stroke: var(--line); stroke-width: 1; }
.gr-eixo { fill: var(--muted); font-size: 13px; font-family: 'JetBrains Mono', monospace; }
.gr-alvo { stroke: var(--steel-2); stroke-width: 1.5; stroke-dasharray: 5 4; opacity: .8; }
.gr-alvo-txt { fill: var(--steel-2); font-size: 11px; font-family: 'JetBrains Mono', monospace; }
.gr-vazio { color: var(--muted); font-size: 13px; padding: 26px 0; text-align: center; }
.gr-unico { text-align: center; padding: 18px 0; }
.gr-unico b { font-family: 'Oswald', sans-serif; font-size: 30px; color: #fff; display: block; }
.gr-unico span { color: var(--muted); font-size: 12px; }

.gr-grid-cards, .gr-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.gr-card {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 16px 16px 10px; margin: 0;
}
.gr-card figcaption { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; margin-bottom: 10px; }
.gr-card figcaption b { font-family: 'Oswald', sans-serif; font-size: 15px; letter-spacing: .5px; color: #fff; }
.gr-card figcaption span { color: var(--muted); font-size: 12px; }

/* tiles: o numero grande com a curva miuda ao lado — sem eixo, so a forma */
.gr-tiles { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); margin-bottom: 22px; }
.gr-tile { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; }
.gr-tile-nome { display: block; color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: .8px; }
.gr-tile b { display: block; font-family: 'Oswald', sans-serif; font-size: 32px; color: #fff; line-height: 1.1; margin: 4px 0 2px; }
.gr-tile b i { font-style: normal; font-size: 14px; color: var(--muted); margin-left: 3px; }
.gr-tile-delta { display: block; font-size: 12px; color: var(--muted); }
.gr-tile-per { display: block; font-size: 11px; color: var(--steel-2); opacity: .75; }
/* o rumo veste cor de STATUS, nao a cor da serie: bom/ruim e estado, nao identidade */
.gr-bom { color: var(--ok); }
.gr-ruim { color: var(--warn); }
.gr-neutro { color: var(--muted); }
.gr-spark { width: 100%; height: 28px; margin-top: 8px; display: block; }

.gr-filtros { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.gr-filtro-lbl { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: 1px; }

.gr-obj { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; margin-bottom: 12px; }
.gr-obj b { color: #fff; }
.gr-barra { height: 8px; border-radius: 999px; background: var(--panel-2); overflow: hidden; margin: 10px 0 6px; }
.gr-barra span { display: block; height: 100%; border-radius: 999px; }
.gr-sessao { background: var(--panel); border: 1px solid var(--line); border-left: 3px solid var(--line); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 10px; }
.gr-sessao b { color: #fff; }

/* o registro diario do atleta: grade de campos curtos, um toque por metrica */
.ap-dia { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.ap-dia-campo { display: block; margin: 0; }
.ap-dia-nome { display: block; font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: .6px; }
.ap-dia-nome i { font-style: normal; color: var(--steel-2); }
.ap-dia-campo input { width: 100%; margin-top: 4px; }
.ap-dia-campo small { display: block; color: var(--steel-2); font-size: 11px; margin-top: 3px; text-transform: none; }
.pp-atencao { border-left: 3px solid var(--warn); }

/* a tabela por tras do grafico: numeros alinhados a direita, cabecalho fixo na rolagem */
.gr-tabela-wrap { max-height: 340px; overflow: auto; margin-top: 12px; }
.gr-tabela { width: 100%; border-collapse: collapse; font-size: 13px; }
.gr-tabela th {
  position: sticky; top: 0; background: var(--panel); text-align: left; color: var(--muted);
  font-size: 11px; text-transform: uppercase; letter-spacing: .8px; font-weight: 600;
  padding: 8px 10px; border-bottom: 1px solid var(--line);
}
.gr-tabela td { padding: 7px 10px; border-bottom: 1px solid var(--line); color: var(--steel); }
.gr-tabela .num { text-align: right; font-family: 'JetBrains Mono', monospace; color: #fff; }
.gr-tabela th.num { text-align: right; }
.gr-tabela .obs { color: var(--muted); font-size: 12px; }
.gr-tabela tr:hover td { background: var(--panel-2); }

/* ==================================================================== quero fazer parte
   A parte de recrutamento. Antes era um convite de tres linhas; agora cada especialidade
   explica o que ganha e mostra o desenho do painel dela. */
.ap-parte { margin-top: 72px; }
.ap-parte-topo { max-width: 620px; margin-bottom: 26px; }
.ap-parte-topo h2 { font-family: Oswald, sans-serif; font-size: 30px; margin: 6px 0 10px; }
.ap-parte-topo p { color: var(--muted); line-height: 1.6; margin: 0; }

.ap-parte-grid { display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.ap-parte-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; }
.ap-parte-cab { display: flex; align-items: center; gap: 12px; }
.ap-parte-ico { font-size: 26px; line-height: 1; }
.ap-parte-cab h3 { font-family: Oswald, sans-serif; font-size: 19px; margin: 0; }
.ap-parte-frase { color: var(--muted); font-size: 14px; margin: 12px 0 0; }

@media (max-width: 560px) {
  .ap-parte { margin-top: 48px; }
  .ap-parte-topo h2 { font-size: 25px; }
}

/* Estado vazio do filtro ao vivo: aparece quando nenhum cartao passa no recorte. */
.ap-vazio { margin: 8px 0 0; padding: 26px; text-align: center; color: var(--muted);
  border: 1px dashed var(--line); border-radius: var(--radius); }
/* o cartao entra suave quando o filtro o traz de volta — sem isso a grade "salta" */
.ap-card { animation: apEntra .28s ease both; }
@keyframes apEntra { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* ---- o cartao de especialidade ----
   Sem imagem e sem grafico: e um painel de instrumento feito de tipografia. A primeira
   versao tinha sete barras vermelhas que nao eram dado nenhum, e era isso que fazia a
   secao parecer modelo pronto. */
.ap-esp { position: relative; background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 22px 20px 20px; overflow: hidden; }
/* fio vermelho no topo, que corre ao passar o mouse: o unico movimento do cartao */
.ap-esp::before { content: ""; position: absolute; inset: 0 auto auto 0; height: 2px; width: 100%;
  background: linear-gradient(90deg, var(--red), transparent 62%); transform: scaleX(.18);
  transform-origin: left; transition: transform .45s cubic-bezier(.2,.8,.2,1); }
.ap-esp:hover::before, .ap-esp:focus-within::before { transform: scaleX(1); }

/* A SIGLA DO CONSELHO e o marcador. Grande, em mono, meio apagada: quem e da area
   reconhece antes de ler o nome, e quem nao e passa reto sem tropecar nela. */
.ap-esp-sigla { font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 600;
  letter-spacing: 3px; color: var(--red-bright, #f55); opacity: .85; margin-bottom: 10px; }
.ap-esp h3 { font-family: Oswald, sans-serif; font-size: 21px; margin: 0; letter-spacing: .3px; }
.ap-esp-frase { color: var(--muted); font-size: 14px; line-height: 1.55; margin: 8px 0 0; }

/* ---- os canais ---- */
.ap-canais { margin-top: 16px; display: grid; gap: 12px; }
.ap-canal-cab { display: block; font-family: 'JetBrains Mono', monospace; font-size: 10px;
  letter-spacing: 2px; text-transform: uppercase; color: var(--muted); opacity: .7; margin-bottom: 7px; }
.ap-canal { display: inline-flex; align-items: baseline; gap: 4px; margin: 0 5px 5px 0;
  padding: 4px 9px; border-radius: 6px; font-size: 12.5px; color: var(--text);
  background: rgba(var(--red-rgb), .10); border: 1px solid rgba(var(--red-rgb), .22);
  /* entram em cascata quando o cartao aparece: uma leitura ligando, nao um cartao piscando */
  opacity: 0; transform: translateY(4px);
  animation: apCanal .34s cubic-bezier(.2,.8,.2,1) forwards; animation-delay: calc(var(--i) * 45ms); }
.ap-canal i { font-family: 'JetBrains Mono', monospace; font-style: normal; font-size: 10.5px; color: var(--muted); }
.ap-canal b { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--red-bright, #f55); font-weight: 400; }
/* o que o aluno informa fica em cinza: a diferenca entre medir e receber e a informacao */
.ap-canal-aluno { background: rgba(255,255,255,.04); border-color: var(--line); color: var(--muted); }
.ap-canal-aluno b { color: var(--muted); }
@keyframes apCanal { to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .ap-canal { animation: none; opacity: 1; transform: none; }
  .ap-esp::before { transition: none; }
}

.ap-esp-extras { list-style: none; padding: 14px 0 0; margin: 14px 0 0; display: grid; gap: 7px;
  border-top: 1px solid var(--line); }
.ap-esp-extras li { font-size: 13.5px; line-height: 1.5; }
.ap-esp-extras b { color: #fff; }
.ap-esp-extras span { color: var(--muted); }

.ap-parte-comum { margin: 18px 0 0; padding: 16px 18px; border-radius: var(--radius);
  border: 1px dashed var(--line); color: var(--muted); font-size: 13.5px; line-height: 1.7; }
.ap-parte-comum b { color: var(--text); }

@media (max-width: 560px) { .ap-esp { padding: 18px 16px 16px; } }


/* ================================================ A FICHA: ANAMNESE, ORIENTACOES,
   ANOTACOES E LINHA DO TEMPO
   A ficha so tinha o que se MEDE. Estes quatro blocos sao o que se SABE. */

/* ---- anamnese ----
   Fecha depois de respondida: e leitura de antes da primeira consulta, nao de todo dia. */
.pp-anam {
  margin-top: 26px; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--panel);
}
.pp-anam > summary {
  display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap;
  padding: 15px 18px; cursor: pointer; list-style: none;
}
.pp-anam > summary::-webkit-details-marker { display: none; }
.pp-anam > summary::before { content: "\25B8"; color: var(--red-bright, #f55); }
.pp-anam[open] > summary::before { content: "\25BE"; }
.pp-anam-tit {
  font-family: 'Oswald', sans-serif; font-size: 18px; text-transform: uppercase;
  letter-spacing: .8px;
}
.pp-anam-cnt {
  font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: 1.6px;
  text-transform: uppercase; color: var(--red-bright, #f55);
}
.pp-anam-cnt.cheia { color: #4ad07a; }

/* Duas colunas: a anamnese tem dez campos, e em coluna unica ela vira um rolo. Os campos
   longos (`largo`) atravessam as duas. */
.pp-anam-form {
  display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
  padding: 4px 18px 20px;
}
.pp-anam-form label { display: block; font-size: 13px; color: var(--muted); }
.pp-anam-form label.largo { grid-column: 1 / -1; }
.pp-anam-form input, .pp-anam-form textarea {
  width: 100%; margin-top: 6px; padding: 9px 11px; border-radius: 9px;
  background: var(--bg-2); border: 1px solid var(--line); color: var(--text);
  font-family: 'Inter', sans-serif; font-size: 14px; line-height: 1.5;
}
.pp-anam-form input:focus, .pp-anam-form textarea:focus {
  outline: none; border-color: rgba(var(--red-rgb), .55);
}
.pp-anam-form textarea { resize: vertical; }
.pp-anam-form input:disabled, .pp-anam-form textarea:disabled { opacity: .55; cursor: not-allowed; }
.pp-ajuda {
  display: block; margin-top: 4px; font-style: normal; font-size: 11.5px;
  color: var(--steel-2); line-height: 1.45;
}
.pp-anam-fim { grid-column: 1 / -1; display: flex; align-items: center; gap: 12px; }
@media (max-width: 760px) { .pp-anam-form { grid-template-columns: 1fr; } }

/* ---- orientacoes ---- */
.pp-ori { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 6px; }
.pp-ori li {
  display: flex; align-items: center; gap: 10px; padding: 9px 12px;
  border: 1px solid var(--line); border-radius: 10px; background: rgba(255,255,255,.02);
}
.pp-ori-txt { flex: 1; font-size: 14px; line-height: 1.45; min-width: 0; }
/* riscado E apagado: so riscar deixa a linha com o mesmo peso visual da que falta fazer */
.pp-ori li.feita .pp-ori-txt { text-decoration: line-through; color: var(--muted); }
.pp-ori li.feita { border-color: rgba(74,208,122,.3); background: rgba(74,208,122,.05); }
.pp-tick {
  width: 22px; height: 22px; flex: none; border-radius: 6px; cursor: pointer;
  border: 1px solid var(--line); background: transparent; color: #4ad07a;
  font-size: 13px; line-height: 1; padding: 0;
}
.pp-tick:hover { border-color: rgba(var(--red-rgb), .6); }
.pp-ori li.feita .pp-tick { border-color: #4ad07a; background: rgba(74,208,122,.15); }

/* ---- anotacoes ---- */
.pp-notas { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 10px; }
.pp-notas li { position: relative; padding: 10px 30px 10px 12px; border-radius: 10px;
  background: rgba(255,255,255,.02); border-left: 2px solid var(--line); }
.pp-notas p { margin: 4px 0 0; font-size: 13.5px; line-height: 1.5; white-space: pre-wrap; }
.pp-notas .inline-form { position: absolute; top: 6px; right: 6px; }

/* ---- linha do tempo ----
   A data a esquerda em mono e a coluna que alinha tudo: e por ela que se le a ordem. */
.pp-lt { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 2px; }
.pp-lt li { display: flex; gap: 12px; padding: 8px 0 8px 12px; border-left: 2px solid var(--line); }
.pp-lt .lt-data {
  flex: 0 0 74px; font-family: 'JetBrains Mono', monospace; font-size: 10.5px;
  letter-spacing: 1px; color: var(--muted); padding-top: 3px;
}
.pp-lt .lt-corpo { min-width: 0; }
.pp-lt .lt-corpo b { font-size: 13.5px; font-weight: 600; }
.pp-lt .lt-corpo p { margin: 3px 0 0; font-size: 12.5px; color: var(--muted); line-height: 1.5; }
/* a cor da borda diz o TIPO sem precisar de rotulo repetido em toda linha */
.pp-lt li.lt-sessao { border-left-color: var(--red); }
.pp-lt li.lt-objetivo { border-left-color: #d8a13a; }
.pp-lt li.lt-nota { border-left-color: #3987e5; }
.pp-lt li.lt-medida .lt-corpo b { font-weight: 400; color: var(--muted); font-size: 12.5px; }


/* ================================================ A CONVERSA, na ficha do parceiro
   Balao e nao lista de linhas: a mesma tela mostra dois autores, e a diferenca precisa ser
   lida sem rotulo em cada mensagem. */
.pp-novas {
  font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: 1.4px;
  color: var(--red-bright, #f55);
}
.pp-chat {
  display: grid; gap: 9px; max-height: 340px; overflow-y: auto;
  padding: 4px 2px 8px; margin-bottom: 12px;
}
.pp-msgbox { max-width: 86%; padding: 9px 12px; border-radius: 12px; }
.pp-msgbox p { margin: 0; font-size: 13.5px; line-height: 1.5; white-space: pre-wrap; }
/* a minha encostada a direita, a dela a esquerda — a posicao ja diz quem falou */
.pp-msgbox.minha { justify-self: end; background: rgba(var(--red-rgb), .16); }
.pp-msgbox.dela { justify-self: start; background: rgba(255,255,255,.05); }
.pp-msg-pe {
  display: flex; align-items: center; gap: 8px; margin-top: 4px;
  font-family: 'JetBrains Mono', monospace; font-size: 9.5px; letter-spacing: .8px;
  color: var(--muted);
}
.pp-chat-form textarea { width: 100%; }


/* ############################################################################
   O PORTAL DO PROFISSIONAL — camada de desenho
   ############################################################################

   O DIAGNOSTICO. As cinco telas do portal tinham o mesmo defeito, e nao era
   falta de conteudo: TUDO ERA UMA CAIXA. Grafico, formulario, lista, conversa,
   aviso — todos com a mesma borda de 1px, o mesmo raio e o mesmo fundo. Numa
   tela com dez blocos, dez retangulos iguais nao formam hierarquia nenhuma: o
   olho nao sabe onde comecar, e a pagina inteira le como ruido cinza.

   Junto disso, os campos eram os do navegador (o <select> abrindo BRANCO sobre
   fundo preto), e a escala tipografica tinha dois degraus: titulo enorme e
   texto de 13px. Nada no meio.

   A IDEIA: A REGUA.

   O oficio aqui e medir. Peso, dor, amplitude, adesao, dias sem sessao — o
   profissional passa o dia registrando numero e comparando com o de antes. Por
   isso a pagina deixa de ser uma pilha de caixas e vira uma REGUA: cada secao e
   anunciada por uma MARCA DE MEDIDA — um traco vermelho curto, o nome em
   monoespacada, e um fio que corre ate a borda direita. O conteudo pendura
   embaixo, sem moldura.

   A regra que segura tudo: CAIXA SO ONDE SE TOCA. Formulario, linha clicavel e
   conversa ganham superficie, porque superficie e o convite pra interagir. O que
   e so leitura — grafico, tabela, lista — fica direto no fundo, separado por
   espaco e pela marca. Isso sozinho resolve o "wall of boxes", porque passa a
   existir uma diferenca visivel entre o que responde ao toque e o que nao
   responde.

   A marca tambem herda a lingua que ja existia nos campos de /seja-parceiro,
   onde a regua vermelha acende no foco. O portal inteiro passa a falar isso.
*/

.portal {
  /* Fundo MAIS FUNDO que o do site. Aqui e preciso: com o preto de antes
     (#0e0e10) e a superficie em #151519, a diferenca era de tres pontos de
     luminancia e as caixas nao se descolavam do fundo. Afundando a pagina, a
     superficie passa a ser lida como superficie. */
  --ink: #08080a;
  --sup: #131318;        /* so pro que se toca */
  --sup-2: #1b1b22;      /* campo, hover */
  --fio: #23232b;
  --quente: #ff3b3f;     /* vivo e urgente, so isso */

  --passo: 8px;          /* a escala de espaco, em multiplos */
  background: var(--ink);
}
.portal main { background: var(--ink); }

/* ---------------------------------------------------------- a tipografia
   Tres vozes, e cada uma com UM trabalho:
     Oswald   — titulo de pagina e NUMERO. Condensada, e o numero e o que se
                procura primeiro em toda tela daqui.
     Inter    — texto corrido.
     Mono     — rotulo, marca de secao, data e hora. E a voz de instrumento.
   O que faltava era o MEIO: entre o titulo de 52px e o texto de 13px nao havia
   degrau nenhum, e sem degrau nao ha hierarquia. */
.portal .ap-h1 {
  font-size: clamp(28px, 3.4vw, 40px);
  letter-spacing: .5px;
  line-height: 1.04;
  margin-bottom: 10px;
}
.portal .ap-lead { font-size: 15px; line-height: 1.55; color: var(--steel); }

/* ------------------------------------------------------ A MARCA DE SECAO
   O traco, o nome, e o fio ate a borda. Substitui o <h2> em caixa. */
.portal .ap-h2,
.portal .pn-h2,
.portal .section-title {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: calc(var(--passo) * 5) 0 calc(var(--passo) * 2);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 2.6px;
  text-transform: uppercase;
  color: var(--muted);
  border: none;
  padding: 0;
}
/* o traco vermelho: e a marca da regua, e o unico enfeite que sobra */
.portal .ap-h2::before,
.portal .pn-h2::before,
.portal .section-title::before {
  content: "";
  flex: none;
  width: 14px;
  height: 2px;
  background: var(--red);
}
/* o fio corre ate a borda e diz onde a secao comeca sem desenhar uma caixa */
.portal .ap-h2::after,
.portal .pn-h2::after,
.portal .section-title::after {
  content: "";
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, var(--fio), transparent);
}
.portal .pn-h2-solo { margin-top: calc(var(--passo) * 5); }

/* ------------------------------------------------- CAIXA SO ONDE SE TOCA
   O que e leitura perde a moldura; o que responde ao toque mantem. */
.portal .pp-box {
  background: transparent;
  border: none;
  border-radius: 0;
  padding: 0;
}
/* forms, conversa e a caixa de acao voltam a ter superficie */
/* `:has(form)` sozinho era largo demais: pegava tambem o bloco de ALERTAS, que
   e leitura com um botao no fim de cada linha, e ai ele ganhava moldura enquanto
   a agenda ao lado nao ganhava — duas colunas irmas com pesos diferentes. A
   superficie vai so onde o formulario E o conteudo do bloco. */
.portal .pp-box:has(> form),
.portal .pp-box:has(.pp-chat),
.portal .pn-pagina,
.portal .pp-anam {
  background: var(--sup);
  border: 1px solid var(--fio);
  border-radius: 14px;
  padding: calc(var(--passo) * 2.5);
}
/* o details de "registrar X" e um toque: fica com superficie mesmo fechado */
.portal details.pp-box {
  background: var(--sup);
  border: 1px solid var(--fio);
  border-radius: 14px;
  padding: calc(var(--passo) * 1.75) calc(var(--passo) * 2);
}
.portal details.pp-box[open] { padding-bottom: calc(var(--passo) * 2.5); }

/* os blocos de leitura do painel perdem a moldura e ganham ar */
.portal .pn-bloco {
  background: transparent;
  border: none;
  padding: 0;
}

/* --------------------------------------------------------------- numeros
   O numero e Oswald e GRANDE; o rotulo e mono e pequeno. A distancia entre os
   dois e a hierarquia — sem ela os dois competem. */
.portal .pn-num {
  background: var(--sup);
  border: 1px solid var(--fio);
  border-top-width: 1px;
  border-radius: 14px;
  padding: 13px 16px 14px;
}
.portal .pn-num b { font-size: 30px; letter-spacing: -.5px; }
.portal .pn-num span { font-size: 9px; letter-spacing: 1.6px; }
.portal .pn-num.grave { border-color: color-mix(in srgb, var(--red) 55%, transparent); }
.portal .pn-num:hover, .portal .pn-num:focus-visible {
  background: var(--sup-2);
  border-color: color-mix(in srgb, var(--red) 70%, transparent);
}

/* --------------------------------------------------------------- a tabela
   Sem moldura em volta, so os fios entre as linhas. A tabela ja e uma grade —
   por-la dentro de uma caixa e desenhar a mesma coisa duas vezes. */
.portal .pn-tabela-rolo {
  background: transparent;
  border: none;
  border-radius: 0;
  border-top: 1px solid var(--fio);
}
.portal .pn-tabela th {
  padding-inline: 0;
  padding-block: 14px 10px;
  letter-spacing: 2px;
}
.portal .pn-tabela th:not(:first-child) { padding-left: 16px; }
.portal .pn-tabela td { padding-inline: 0; }
.portal .pn-tabela td:not(:first-child) { padding-left: 16px; }
.portal .pn-tabela tbody tr:hover { background: color-mix(in srgb, #fff 3%, transparent); }

/* --------------------------------------------------------------- botoes */
.portal .ap-btn, .portal .pn-btn, .portal .btn {
  border-radius: 10px;
  font-weight: 600;
  letter-spacing: .1px;
  transition: background .16s, border-color .16s, color .16s;
}
.portal .ap-btn-red, .portal .pn-btn-red, .portal .btn-red {
  background: var(--red);
  border-color: var(--red);
  color: #fff;
}
.portal .ap-btn-red:hover, .portal .pn-btn-red:hover, .portal .btn-red:hover {
  background: var(--quente);
  border-color: var(--quente);
}

/* --------------------------------------------------------- OS CAMPOS
   A mesma regua de /seja-parceiro, promovida pro portal inteiro: rotulo em mono
   maiusculo, valor grande, e uma linha embaixo que acende no foco.

   `color-scheme: dark` e o conserto do <select>: sem ele o menu NATIVO abre
   branco com faixa azul de sistema, e nao ha CSS que alcance a lista aberta. E a
   unica forma de a lista do navegador nascer escura. */
.portal { color-scheme: dark; }

.portal form label {
  display: block;
  position: relative;
  margin-bottom: 20px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--muted);
  transition: color .18s;
}
.portal form label:focus-within { color: var(--quente); }

.portal form input:not([type=checkbox]):not([type=radio]):not([type=file]),
.portal form select,
.portal form textarea {
  width: 100%;
  margin-top: 7px;
  padding: 8px 2px 9px;
  border: none;
  border-bottom: 1px solid var(--fio);
  border-radius: 0;
  background: transparent;
  color: var(--text);
  font-family: 'Inter', -apple-system, 'Segoe UI', Roboto, sans-serif;
  font-size: 16px;
  line-height: 1.45;
  transition: border-color .18s;
}
.portal form textarea { resize: vertical; }
.portal form select {
  appearance: none;
  cursor: pointer;
  /* a seta desenhada, porque a nativa vem com o fundo do sistema junto */
  background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%),
                    linear-gradient(135deg, var(--muted) 50%, transparent 50%);
  background-position: calc(100% - 12px) 55%, calc(100% - 7px) 55%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  padding-right: 26px;
}
.portal form input:focus, .portal form select:focus, .portal form textarea:focus {
  outline: none;
  border-bottom-color: color-mix(in srgb, var(--red) 55%, transparent);
}
/* A LINHA QUE ACENDE: cresce da esquerda pra direita quando o campo recebe foco.
   O movimento diz onde voce esta sem cor de fundo nem contorno grosso. */
.portal form label::after {
  content: "";
  position: absolute;
  left: 0; bottom: 0;
  height: 2px; width: 100%;
  background: var(--red);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .28s cubic-bezier(.2,.8,.2,1);
  pointer-events: none;
}
.portal form label:focus-within::after { transform: scaleX(1); }
.portal form ::placeholder { color: var(--steel-2); opacity: .5; }
/* autofill do navegador nao pode virar bloco azul sobre fundo preto */
.portal form input:-webkit-autofill {
  -webkit-text-fill-color: var(--text);
  -webkit-box-shadow: 0 0 0 40px var(--sup) inset;
}

/* caixa de marcar nao e campo de texto: perde o rotulo mono e a regua */
.portal form label.ap-check,
.portal .ap-check {
  position: static;
  margin-bottom: 0;
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  letter-spacing: 0;
  text-transform: none;
  color: var(--text);
}
.portal .ap-check::after { display: none; }
.portal .ap-check input { width: auto; margin: 3px 0 0; accent-color: var(--red); }

/* ------------------------------------------------------------ as fichinhas
   Status, tag e pilula falavam tres linguas diferentes. Uma so: mono pequena,
   fundo de 12% da propria cor, sem contorno. */
/* MONO MAIUSCULA E PRA ROTULO CURTO, nao pra frase. `.pn-tag` da tabela carrega
   o motivo inteiro ("Objetivo X passou do prazo"): em mono espacada ela virava um
   bloco vermelho de tres linhas que dominava a linha do paciente. Rotulo curto
   (ativa, ela ve, em dia) fica em mono; frase fica em Inter, caixa normal. */
.portal .ap-tag, .portal .badge {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  border: none;
  border-radius: 6px;
  padding: 4px 8px;
}
.portal .pn-tag {
  font-family: 'Inter', sans-serif;
  font-size: 12px;
  letter-spacing: 0;
  text-transform: none;
  border-radius: 7px;
  padding: 5px 9px;
}

/* --------------------------------------------------------------- a conversa
   Bolha com o canto de tras quadrado: e o que faz o balao apontar pra quem
   falou sem precisar de rabinho desenhado. */
.portal .pp-msgbox { border-radius: 14px; }
.portal .pp-msgbox.minha { border-bottom-right-radius: 4px; }
.portal .pp-msgbox.dela { border-bottom-left-radius: 4px; }

/* ---------------------------------------------------------------- o topo
   O nome da pessoa e o titulo da tela; a profissao e o rotulo acima dele. */
.portal .ap-label {
  font-size: 10px;
  letter-spacing: 4px;
  margin-bottom: 12px;
}
.portal .ap-voltar {
  display: inline-block;
  margin-bottom: calc(var(--passo) * 3);
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  letter-spacing: 1.4px;
  color: var(--muted);
  text-decoration: none;
}
.portal .ap-voltar:hover { color: var(--text); }

/* ------------------------------------------------------------ a entrada
   As marcas de secao desenham uma vez, de cima pra baixo, quando a pagina abre.
   E o unico movimento da tela, e dura menos de meio segundo: uma regua sendo
   assentada, nao uma animacao de apresentacao. */
@keyframes portal-marca { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.portal .ap-h2::after,
.portal .pn-h2::after,
.portal .section-title::after {
  transform-origin: left;
  animation: portal-marca .5s cubic-bezier(.2,.8,.2,1) both;
}
.portal .ap-h2::before,
.portal .pn-h2::before,
.portal .section-title::before {
  transform-origin: left;
  animation: portal-marca .3s ease-out both;
}

@media (prefers-reduced-motion: reduce) {
  .portal .ap-h2::before, .portal .ap-h2::after,
  .portal .pn-h2::before, .portal .pn-h2::after,
  .portal .section-title::before, .portal .section-title::after { animation: none; }
  .portal form label::after { transition: none; }
}


/* ---------------------------------------------------- o polimento que faltava
   Tres coisas ainda falavam outra lingua depois da primeira passada. */

/* 1. OS GRAFICOS. Cada um estava numa caixa, e grafico e leitura pura: a moldura
      so repetia a borda que a grade ja desenha. O que fica e o fio de cima, que
      separa um do outro sem cercar nenhum. */
.portal .gr-card,
.portal .gr-tabela-wrap {
  background: transparent;
  border: none;
  border-radius: 0;
  border-top: 1px solid var(--fio);
  padding: 16px 0 20px;
}
.portal .gr-grid { gap: 0 28px; }

/* 2. O CHIP DE STATUS. Contorno verde de 1px era a quarta linguagem de rotulo na
      mesma tela (tinha tag, badge, pilula e este). Vira a mesma coisa que as
      outras: mono curta, fundo da propria cor a 14%, sem contorno. */
.portal .pp-status {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  border: none;
  border-radius: 6px;
  padding: 4px 8px;
  background: color-mix(in srgb, currentColor 14%, transparent);
}

/* 3. A CONTA DO MES e o numero mais importante desta tela, e estava num retangulo
      cinza com o mesmo peso de todo o resto. Os numeros passam pra Oswald e os
      rotulos pra mono — a mesma dupla que o painel usa. O total fica em vermelho
      porque e o que ela procura. */
.portal .pp-conta-mes {
  background: var(--sup);
  border: 1px solid var(--fio);
  border-radius: 14px;
  padding: 18px 20px;
}
.portal .pp-conta-mes b,
.portal .pp-conta-mes strong {
  font-family: 'Oswald', sans-serif;
  font-size: 26px;
  font-weight: 500;
  letter-spacing: -.3px;
}
/* O ROTULO e o <i>, nao qualquer <span>: a primeira versao pegou junto o "x" e o
   "=" entre as parcelas, e os dois viraram pontinhos de 9,5px. Operador nao e
   rotulo — e o que faz a conta ser lida como conta. */
.portal .pp-conta-mes i,
.portal .pp-conta-mes small {
  display: block;
  margin-top: 3px;
  font-style: normal;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9.5px;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--muted);
}
.portal .pp-conta-x {
  font-family: 'Oswald', sans-serif;
  font-size: 20px;
  color: var(--steel-2);
  align-self: center;
}
.portal .pp-conta-total b { color: var(--quente); }

/* o cartao do atendido: superficie porque tem acao dentro, e a borda esquerda
   vermelha some — ela repetia o que o chip de status ja diz */
.portal .pp-assin {
  background: var(--sup);
  border: 1px solid var(--fio);
  border-radius: 14px;
  transition: border-color .16s;
}
.portal .pp-assin:hover { border-color: color-mix(in srgb, var(--red) 45%, transparent); }

/* O BOTAO DE ESCOLHER ARQUIVO e desenhado pelo sistema operacional e sai claro
   mesmo com color-scheme: dark. `::file-selector-button` e a unica forma de
   alcanca-lo — sem isso sobra um retangulo cinza-claro no meio de um formulario
   preto, e e o unico controle da tela que nao parece nosso. */
.portal form input[type=file] {
  width: 100%;
  padding: 9px 11px;
  border: 1px solid var(--fio);
  border-radius: 10px;
  background: var(--sup-2);
  color: var(--muted);
  font-family: 'Inter', sans-serif;
  font-size: 13.5px;
}
.portal form input[type=file]::file-selector-button {
  margin-right: 12px;
  padding: 6px 12px;
  border: 1px solid var(--fio);
  border-radius: 8px;
  background: var(--sup);
  color: var(--text);
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.portal form input[type=file]::file-selector-button:hover {
  border-color: color-mix(in srgb, var(--red) 60%, transparent);
}
/* o campo de arquivo nao tem regua: nao ha o que "acender" num seletor de arquivo */
.portal form label:has(input[type=file])::after { display: none; }
