/* JR OS 2026.149 — remake visual.
 *
 * Não é uma reescrita: é a mesma identidade (fundo escuro, gradiente
 * rosa/violeta, Cormorant Garamond nos títulos) só que agora com UMA escala
 * de raio, UMA sombra, UM jeito de botão e UM jeito de campo — em vez de
 * cada tela ter inventado o próprio valor ao longo dos anos.
 *
 * Carregado por último (depois de jr-refino-2026-148.css) então ganha os
 * empates de especificidade sem precisar de !important em tudo.
 *
 * Nasceu do projeto "JR OS — Design System" em claude.ai/design — as
 * fundações, botões, cards, campos e badges de lá viraram estas regras.
 */
:root{
  --jr149-bg:#07060a;--jr149-bg-elevated:#121014;--jr149-bg-panel:#17141b;--jr149-bg-input:#0d0b0f;
  --jr149-border:rgba(255,255,255,.10);--jr149-border-strong:rgba(255,255,255,.20);
  --jr149-text:#F5F3F7;--jr149-text-muted:#9A93A3;--jr149-text-dim:#6B6472;
  --jr149-pink:#E91E8C;--jr149-violet:#7C3AED;--jr149-gold:#C9A24B;
  --jr149-gradient:linear-gradient(135deg,#E91E8C,#7C3AED);
  --jr149-success:#34D399;--jr149-warning:#F6B84A;--jr149-danger:#FF7682;--jr149-info:#38BDF8;
  --jr149-r-sm:8px;--jr149-r-md:12px;--jr149-r-lg:16px;--jr149-r-xl:24px;--jr149-r-pill:999px;
  --jr149-sh-sm:0 4px 14px rgba(0,0,0,.28);--jr149-sh-md:0 14px 34px rgba(0,0,0,.36);
}

/* ── Botões ────────────────────────────────────────────────────────────
   Base geométrica única: pill, transição suave, leve elevação no hover.
   Cada tela mantém sua própria lógica de cor por modificador (.p/.primary/
   .danger/.gh/...); aqui só se unifica forma e comportamento. */
.btn,.btn-p,.btn-s,.nav-cta,.nav-btn,.jr-btn-pro,.jr-glow-btn,.jr-soft-btn,.jr-danger-btn{
  border-radius:var(--jr149-r-pill);
  transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease,background-color .15s ease,color .15s ease;
}
.btn:hover:not(:disabled):not(.disabled),.btn-p:hover,.btn-s:hover,.nav-cta:hover,
.jr-btn-pro:hover:not(:disabled),.jr-glow-btn:hover:not(:disabled){
  transform:translateY(-1px);
}
.btn:active:not(:disabled),.btn-p:active,.jr-btn-pro:active:not(:disabled){transform:translateY(0)}
.nav-btn{border-radius:var(--jr149-r-md)!important} /* sidebar interna: item de lista, não pílula solta */
.nav-btn.ativo{background:var(--jr149-gradient)!important;color:#fff!important}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{
  outline:2px solid var(--jr149-pink);outline-offset:2px;
}

/* ── Cards e painéis ───────────────────────────────────────────────────
   O raio de ".card" varia de 13px a 22px dependendo da tela — cada uma
   copiou de um lugar diferente ao longo dos anos. Aqui fecha numa escala
   só: conteúdo comum (r-lg) e hero de abertura de seção (r-xl).
   Sem !important nos cards comuns (nenhuma tela usa !important nesse
   valor hoje, então a ordem de carregamento já resolve). Com !important
   nos heroes: cliente.html chegou a acumular três regras de
   ".jr-hero-obra" brigando pelo mesmo raio (22px, 22px!important e
   15px!important) — sobrar uma só, sempre, é a correção, não só o
   remake. */
.card,.jr-card,.jr-portal-panel,.jr-arq-work,.jr147-form-section{
  border-radius:var(--jr149-r-lg);
}
.jr-hero-admin,.jr-hero-obra,.jr-arq-hero{
  border-radius:var(--jr149-r-xl)!important;
}

/* ── Status e badges ───────────────────────────────────────────────────
   A cor semântica (ok/warn/bad/info) já existe em cada tela — só se
   reforça o formato de pílula e a leitura em maiúsculas, sem brigar com
   as regras de cor que cada tela já define para .ok/.warn/.bad. */
.status,.pill,.jr-pill,.demo-status{
  border-radius:var(--jr149-r-pill);
  letter-spacing:.4px;
}

/* ── Campos de formulário ─────────────────────────────────────────────
   O mesmo bug em todo lugar: min-height com padding vertical zero deixa o
   texto flutuando sem centro garantido, e às vezes encostando na borda.
   Troca por padding simétrico — a altura final continua ~44px, mas agora
   por soma de padding igual dos dois lados, nunca por sobra decidida pelo
   navegador.
   SEM !important de propósito: a intenção é ficar do lado de baixo da
   especificidade — perde de propósito para qualquer regra mais específica
   já existente (ex.: linhas densas de orçamento em .servline input), então
   só se aplica em quem ainda não tinha padding vertical próprio definido.
   Por isso os :not() de exclusão vão dentro de :where(), que zera a
   especificidade deles — sem isso, cada :not() soma pontos e a regra
   passaria a vencer até de rótulos com classe, o oposto do que se quer. */
input:where(:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"])),
select,
textarea{
  padding-top:13px;padding-bottom:13px;
  box-sizing:border-box;
}
select{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  padding-right:38px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%239A93A3' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;
}
