/* =====================================================
   components/loading/loading.css
   Reusable loading component — spinner, skeleton, overlay
   Warna brand SOKKOOL: #F15A24
===================================================== */

/* ---------- SPINNER ---------- */
.loading-spinner-wrap {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
}

.loading-spinner-elm {
  display: inline-block;
  border-radius: 50%;
  border-style: solid;
  border-color: transparent;
  animation: loading-spin .75s linear infinite;
}

/* Sizes */
.loading-spinner-wrap--sm .loading-spinner-elm,
.loading-spinner-wrap--sm.loading-fullpage .loading-spinner-elm {
  width: 16px;
  height: 16px;
  border-width: 2px;
}

.loading-spinner-wrap--md .loading-spinner-elm,
.loading-fullpage .loading-spinner-elm {
  width: 28px;
  height: 28px;
  border-width: 3px;
}

.loading-spinner-wrap--lg .loading-spinner-elm {
  width: 40px;
  height: 40px;
  border-width: 4px;
}

/* Colors — SOKKOOL Orange */
.loading-spinner-wrap--brand .loading-spinner-elm,
.loading-fullpage .loading-spinner-elm {
  border-top-color: #F15A24;
  border-right-color: rgba(241, 90, 36, 0.15);
  border-bottom-color: rgba(241, 90, 36, 0.15);
  border-left-color: rgba(241, 90, 36, 0.15);
}

.loading-spinner-wrap--light .loading-spinner-elm {
  border-top-color: #ffffff;
  border-right-color: rgba(255, 255, 255, 0.20);
  border-bottom-color: rgba(255, 255, 255, 0.20);
  border-left-color: rgba(255, 255, 255, 0.20);
}

.loading-spinner-wrap--dark .loading-spinner-elm {
  border-top-color: #1a1a1a;
  border-right-color: rgba(26, 26, 26, 0.15);
  border-bottom-color: rgba(26, 26, 26, 0.15);
  border-left-color: rgba(26, 26, 26, 0.15);
}

.loading-spinner-label {
  font-size: 11px;
  font-weight: 500;
  color: #7a8a94;
  text-align: center;
}

@keyframes loading-spin {
  to { transform: rotate(360deg); }
}

/* ---------- SKELETON ---------- */
.loading-skeleton {
  background: linear-gradient(
    90deg,
    #eef2f7 0%,
    #f9fbfe 25%,
    #eef2f7 50%,
    #f9fbfe 75%,
    #eef2f7 100%
  );
  background-size: 200% 100%;
  animation: loading-shimmer 1.5s ease-in-out infinite;
}

@keyframes loading-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ---------- SKELETON CARD ---------- */
.loading-skeleton-card {
  background: #ffffff;
  border: 1px solid #e5ecf1;
  border-radius: 12px;
  padding: 20px 22px;
  pointer-events: none;
  margin-bottom: 16px;
}

.loading-skeleton-card-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}

/* ---------- SKELETON ROWS ---------- */
.loading-skeleton-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
  gap: 16px;
  padding: 14px 16px;
  background: #ffffff;
  border: 1px solid #e5ecf1;
  border-radius: 10px;
  margin-bottom: 8px;
}

/* ---------- OVERLAY ---------- */
.loading-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-top: 40px;
  background: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(1px);
  -webkit-backdrop-filter: blur(1px);
  border-radius: inherit;
  z-index: 50;
  pointer-events: none;
  animation: loading-fade-in .15s ease-out;
}

@keyframes loading-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* ---------- FULL PAGE ---------- */
.loading-fullpage {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 300px;
  padding: 60px 20px;
  gap: 14px;
}

.loading-fullpage-label {
  font-size: 12px;
  font-weight: 500;
  color: #7a8a94;
  letter-spacing: .02em;
}