/**
 * Store page loader (logo splash) — shared across storefront pages.
 */
.gn-loader {
  position: fixed;
  inset: 0;
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  background:
    radial-gradient(ellipse 70% 50% at 50% 40%, rgba(255, 255, 255, 0.95) 0%, transparent 60%),
    linear-gradient(165deg, #f8faf9 0%, #eef3f0 45%, #e4ebe7 100%);
  transition: opacity 0.4s ease, visibility 0.4s ease;
}
.gn-loader.is-done {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.gn-loader__card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.85rem;
  padding: 1.5rem;
}
.gn-loader__ring {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 96px;
  height: 96px;
  margin: -72px 0 0 -48px;
  border-radius: 50%;
  border: 1.5px solid rgba(47, 107, 79, 0.12);
  border-top-color: #2f6b4f;
  animation: gn-loader-spin 0.9s linear infinite;
}
.gn-loader__mark {
  width: 72px;
  height: 72px;
  border-radius: 20px;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 12px 32px rgba(28, 36, 32, 0.12);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  z-index: 1;
}
.gn-loader__mark img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.gn-loader__initial {
  font-family: system-ui, -apple-system, sans-serif;
  font-weight: 800;
  font-size: 1.6rem;
  color: #2f6b4f;
}
.gn-loader__name {
  margin: 0.35rem 0 0;
  font-family: system-ui, -apple-system, sans-serif;
  font-size: 0.95rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #1c2420;
  text-align: center;
  max-width: 16rem;
}
.gn-loader__bar {
  width: 72px;
  height: 2px;
  border-radius: 999px;
  background: rgba(47, 107, 79, 0.12);
  overflow: hidden;
  margin-top: 0.15rem;
}
.gn-loader__bar span {
  display: block;
  height: 100%;
  width: 40%;
  border-radius: inherit;
  background: #2f6b4f;
  animation: gn-loader-bar 1.1s ease-in-out infinite;
}
@keyframes gn-loader-spin {
  to { transform: rotate(360deg); }
}
@keyframes gn-loader-bar {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(280%); }
}
@media (prefers-reduced-motion: reduce) {
  .gn-loader__ring,
  .gn-loader__bar span {
    animation: none;
  }
  .gn-loader__ring {
    border-color: rgba(47, 107, 79, 0.35);
  }
}
