/* =====================================================================
   Unique · tela de carregamento da marca (16/10/2026)
   Peça única para tudo da marca: painel da VPS (primeiro), depois CRM,
   landing pages e sites. Não depende de nenhum outro CSS da página.
   Markup (copiar igual):
   <div class="unq-loader" role="status" aria-label="Carregando">
     <svg class="unq-loader__escudo" viewBox="30 18 40 64" aria-hidden="true">
       <path class="unq-loader__coroa" d="..."/>
       <path class="unq-loader__u" d="..."/>
     </svg>
     <span class="unq-loader__linha" aria-hidden="true"></span>
   </div>
   Entrada: o escudo se desenha (1,3 s) e pulsa leve ENQUANTO a página carrega; sem tempo mínimo.
   Sair: classe .is-out (fade de 0,3 s, já sem bloquear clique) e depois hidden. Trava: some sozinha em 8 s pelo CSS.
   Tema: segue [data-theme="dark"|"light"] no <html>; sem isso, o sistema.
   Cores por variável, se a página quiser: --unq-loader-fundo, --unq-loader-ouro.
   ===================================================================== */
.unq-loader{
  --unq-loader-fundo:#F6F7F9;
  --unq-loader-ouro:#A58546;
  --unq-loader-trilho:rgba(165,133,70,.16);
  position:fixed;inset:0;z-index:2147483000;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:30px;
  background:var(--unq-loader-fundo);
  transition:opacity .3s ease,visibility .3s ease;
  /* trava de segurança: mesmo se o JS da página falhar, a tela some sozinha (8 s no painel; páginas públicas usam 4 s) */
  animation:unq-loader-seguranca .3s ease var(--unq-loader-trava,8s) forwards;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .unq-loader{--unq-loader-fundo:#0E0E0E;--unq-loader-trilho:rgba(197,165,114,.14)}
}
:root[data-theme="dark"] .unq-loader{--unq-loader-fundo:#0E0E0E;--unq-loader-trilho:rgba(197,165,114,.14)}
.unq-loader[hidden]{display:none!important}
.unq-loader.is-out{opacity:0;visibility:hidden;pointer-events:none}
@keyframes unq-loader-seguranca{to{opacity:0;visibility:hidden;pointer-events:none}}

.unq-loader__escudo{
  width:52px;height:auto;display:block;overflow:visible;
  transform-origin:50% 55%;
  /* depois de desenhado, fica respirando até a página ficar pronta */
  animation:unq-loader-pulso 2.6s ease-in-out 1.3s infinite;
}
.unq-loader__u,.unq-loader__coroa{
  fill:var(--unq-loader-ouro);fill-opacity:0;
  stroke:var(--unq-loader-ouro);stroke-width:.7;stroke-linejoin:round;
}
/* entrada (uma vez): o U se desenha em traço fino e ganha cor; a coroa pousa por cima */
.unq-loader__u{
  stroke-dasharray:100;stroke-dashoffset:100;
  animation:unq-loader-traco 1.3s cubic-bezier(.65,0,.35,1) forwards;
}
.unq-loader__coroa{
  stroke-dasharray:100;stroke-dashoffset:100;
  transform-box:fill-box;transform-origin:50% 100%;
  animation:unq-loader-coroa 1.3s cubic-bezier(.65,0,.35,1) forwards;
}
.unq-loader__linha{
  position:relative;display:block;width:88px;height:1px;overflow:hidden;
  background:var(--unq-loader-trilho);border-radius:1px;
}
.unq-loader__linha::after{
  content:"";position:absolute;top:0;bottom:0;left:0;width:36%;
  background:linear-gradient(90deg,transparent,var(--unq-loader-ouro),transparent);
  animation:unq-loader-corre 1.3s cubic-bezier(.65,0,.35,1) infinite;
}

@keyframes unq-loader-traco{
  0%{stroke-dashoffset:100;fill-opacity:0}
  62%{stroke-dashoffset:0;fill-opacity:0}
  100%{stroke-dashoffset:0;fill-opacity:1}
}
@keyframes unq-loader-coroa{
  0%,25%{stroke-dashoffset:100;fill-opacity:0;opacity:0;transform:translateY(-3px)}
  72%{stroke-dashoffset:0;fill-opacity:0;opacity:1;transform:translateY(0)}
  100%{stroke-dashoffset:0;fill-opacity:1;opacity:1;transform:translateY(0)}
}
@keyframes unq-loader-pulso{
  0%,100%{transform:scale(1);opacity:1}
  50%{transform:scale(1.035);opacity:.8}
}
@keyframes unq-loader-corre{from{transform:translateX(-100%)}to{transform:translateX(280%)}}

/* quem pede menos movimento: escudo cheio, só respira */
@media (prefers-reduced-motion:reduce){
  .unq-loader__u,.unq-loader__coroa{stroke-dashoffset:0;fill-opacity:1;opacity:1;transform:none;animation:none}
  .unq-loader__escudo{animation:unq-loader-respira 2.4s ease-in-out infinite}
  .unq-loader__linha::after{animation-duration:2.6s}
}
@keyframes unq-loader-respira{0%,100%{opacity:.55}50%{opacity:1}}
