/*
 * Stable, release-independent paint guard.
 *
 * Nuxt's page styles are content-addressed.  This tiny stylesheet is loaded
 * before them and keeps prerendered markup out of view until every blocking
 * stylesheet has settled.  It intentionally contains no application layout.
 */
html.app-booting {
  background: #f7f9f6;
}

html.app-booting body {
  visibility: hidden;
}

html.app-booting::before {
  position: fixed;
  z-index: 2147483647;
  top: 50%;
  left: 50%;
  width: 34px;
  height: 34px;
  border: 1px solid rgb(6 47 32 / 22%);
  border-bottom: 4px solid #f5d20a;
  background: #083d29;
  content: '';
  transform: translate(-50%, -50%);
}

html.app-boot-failed::before {
  width: min(28rem, calc(100vw - 2rem));
  height: auto;
  box-sizing: border-box;
  border: 1px solid rgb(6 47 32 / 20%);
  border-top: 4px solid #f5d20a;
  padding: 1.25rem 1.25rem 4.5rem;
  background: #fff;
  color: #062f20;
  content: 'Não foi possível carregar a interface.';
  font: 700 1rem/1.4 Archivo, Manrope, system-ui, sans-serif;
  text-align: center;
}

.app-boot-retry {
  position: fixed;
  z-index: 2147483647;
  top: calc(50% + 1.4rem);
  left: 50%;
  min-width: 10rem;
  min-height: 44px;
  border: 1px solid #d5b800;
  border-radius: 7px;
  padding: 0.65rem 1rem;
  background: #f5d20a;
  color: #062f20;
  font: 700 0.875rem/1 Manrope, system-ui, sans-serif;
  cursor: pointer;
  transform: translateX(-50%);
  visibility: visible;
}

.app-boot-retry:focus-visible {
  outline: 3px solid rgb(10 128 70 / 35%);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: no-preference) {
  html.app-booting:not(.app-boot-failed)::before {
    animation: app-boot-pulse 700ms ease-in-out infinite alternate;
  }
}

@keyframes app-boot-pulse {
  from { opacity: 0.62; }
  to { opacity: 1; }
}
