/* Portal do Profissional — feedback de espera estável e carregado no primeiro paint */
@keyframes admin-global-spin{to{transform:rotate(360deg)}}
@keyframes admin-global-progress{0%{transform:translateX(-115%)}55%{transform:translateX(45%)}100%{transform:translateX(190%)}}

/* O spinner de botões existe antes do JavaScript de feedback iniciar. */
body.professional-admin-page .action-feedback-pending{cursor:wait!important;pointer-events:none}
body.professional-admin-page .action-feedback-pending::before{
  content:"";
  display:inline-block;
  width:.82em;
  height:.82em;
  margin-right:.55em;
  border:2px solid currentColor;
  border-right-color:transparent;
  border-radius:50%;
  vertical-align:-.1em;
  animation:admin-global-spin .7s linear infinite;
}

/* Indicador global: aparece apenas para pedidos ao backend que realmente demoram. */
.admin-network-progress{
  position:fixed;
  z-index:1500;
  top:0;
  left:0;
  right:0;
  height:3px;
  overflow:hidden;
  pointer-events:none;
  opacity:0;
  transition:opacity .14s ease;
}
.admin-network-progress::before{
  content:"";
  position:absolute;
  inset:0 auto 0 0;
  width:46%;
  background:#b87961;
  transform:translateX(-115%);
}
.admin-network-progress.is-visible{opacity:1}
.admin-network-progress.is-visible::before{animation:admin-global-progress 1.05s ease-in-out infinite}

.admin-global-loader{
  position:fixed;
  z-index:1490;
  left:50%;
  bottom:max(16px,env(safe-area-inset-bottom));
  transform:translate(-50%,8px);
  display:flex;
  align-items:center;
  gap:9px;
  max-width:calc(100vw - 28px);
  padding:10px 13px;
  border:1px solid rgba(255,255,255,.13);
  border-radius:3px;
  background:rgba(51,33,35,.96);
  color:#fff;
  box-shadow:0 18px 46px rgba(39,25,24,.2);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .14s ease,transform .14s ease,visibility .14s linear;
}
.admin-global-loader.is-visible{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0);
}
.admin-global-loader-spinner{
  width:15px;
  height:15px;
  flex:0 0 auto;
  border:2px solid rgba(255,255,255,.28);
  border-top-color:#fff;
  border-radius:50%;
  animation:admin-global-spin .72s linear infinite;
}
.admin-global-loader strong{
  overflow:hidden;
  max-width:280px;
  font-size:11px;
  font-weight:780;
  letter-spacing:.015em;
  text-overflow:ellipsis;
  white-space:nowrap;
}

/* Nem toda state-message é loading. Evita spinner em vazio, erro e mensagens informativas. */
body.professional-admin-page .state-message::before{display:none!important}
body.professional-admin-page #loading-state:not([hidden])::before,
body.professional-admin-page #content-loading:not([hidden])::before,
body.professional-admin-page #workshops-loading:not([hidden])::before,
body.professional-admin-page #cohorts-loading:not([hidden])::before,
body.professional-admin-page #events-loading:not([hidden])::before{
  content:"";
  display:block!important;
  width:15px;
  height:15px;
  flex:0 0 auto;
  border:2px solid rgba(87,56,52,.15);
  border-top-color:#573834;
  border-radius:50%;
  animation:admin-global-spin .72s linear infinite;
}

/* A barra interna só corre quando existe um estado de carregamento real visível. */
body.professional-admin-page .content-panel[aria-busy="true"]::before,
body.professional-admin-page .panel[aria-busy="true"]::before{display:none!important}
body.professional-admin-page .content-panel:has(#content-loading:not([hidden]))::before,
body.professional-admin-page .content-panel:has(#workshops-loading:not([hidden]))::before,
body.professional-admin-page .content-panel:has(#cohorts-loading:not([hidden]))::before,
body.professional-admin-page .content-panel:has(#events-loading:not([hidden]))::before,
body.professional-admin-page .panel:has(#loading-state:not([hidden]))::before{
  content:"";
  position:absolute;
  z-index:8;
  top:0;
  left:0;
  display:block!important;
  width:42%;
  height:3px;
  background:#573834;
  animation:admin-global-progress 1.05s ease-in-out infinite;
}

/* No login, a própria mensagem do formulário já explica o estado; evitamos duplicação. */
body.professional-admin-page .login-card>.editor-feedback,
body.professional-admin-page .login-card form>.editor-feedback{display:none!important}

@media(min-width:900px){
  .admin-global-loader{bottom:22px}
}

@media(prefers-reduced-motion:reduce){
  body.professional-admin-page .action-feedback-pending::before,
  .admin-network-progress.is-visible::before,
  .admin-global-loader-spinner,
  body.professional-admin-page #loading-state:not([hidden])::before,
  body.professional-admin-page #content-loading:not([hidden])::before,
  body.professional-admin-page #workshops-loading:not([hidden])::before,
  body.professional-admin-page #cohorts-loading:not([hidden])::before,
  body.professional-admin-page #events-loading:not([hidden])::before{animation:none}
}
