/*
 * Sukud design system - gamification
 * Points, streaks, XP level, achievements, leaderboard rows, subject
 * tiles, quiz answers and the celebration burst.
 */

/* ======================================================================
 * Coin and flame artwork (sk-coin / sk-flame icons)
 * ====================================================================== */
.sk-coin__rim { fill: #e8930c; }
.sk-coin__face { fill: #fbbf24; }
.sk-coin__mark { fill: #fff7d6; }
.sk-coin__shine { fill: none; stroke: #fff; stroke-width: 1.6; stroke-linecap: round; opacity: 0.8; }
.sk-flame__outer { fill: #f97316; }
.sk-flame__inner { fill: #fde047; transform-box: fill-box; transform-origin: 50% 100%; animation: sk-flicker 1.2s var(--sk-ease-in-out) infinite; }
.sk-is-cold .sk-flame__outer { fill: var(--sk-ink-7); }
.sk-is-cold .sk-flame__inner { fill: var(--sk-ink-5); animation: none; }

/* ======================================================================
 * Points pill
 * ====================================================================== */
.sk-points {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: var(--sk-control-md);
  padding: 0 13px 0 7px;
  border-radius: 99px;
  background: linear-gradient(180deg, #fff8e6, #ffefc7);
  border: 1px solid #f6d58a;
  color: #7a4a00;
  font-family: var(--sk-font-display);
  font-weight: var(--sk-weight-bold);
  font-size: var(--sk-text-md);
  letter-spacing: -0.01em;
  font-variant-numeric: tabular-nums;
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.8), 0 1px 2px rgb(196 128 0 / 0.18);
  white-space: nowrap;
}
[data-theme="dark"] .sk-points { background: linear-gradient(180deg, #3a2a0b, #2c1f07); border-color: #5c4310; color: #fcd679; box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.06); }
.sk-points > .sk-icon { width: 24px; height: 24px; }
.sk-points:hover > .sk-icon { animation: sk-coin-flip 0.7s var(--sk-ease-out); }
@keyframes sk-coin-flip { 50% { transform: rotateY(180deg) scale(1.1); } }
.sk-points__unit { font-family: var(--sk-font-sans); font-size: var(--sk-text-2xs); font-weight: var(--sk-weight-bold); letter-spacing: 0.04em; opacity: 0.75; }
.sk-points--sm { height: var(--sk-control-sm); font-size: var(--sk-text-sm); padding: 0 10px 0 5px; gap: 5px; }
.sk-points--sm > .sk-icon { width: 20px; height: 20px; }
.sk-points--lg { height: var(--sk-control-lg); font-size: var(--sk-text-xl); padding: 0 18px 0 8px; gap: 8px; }
.sk-points--lg > .sk-icon { width: 30px; height: 30px; }
.sk-points__gain {
  position: absolute;
  right: 4px; top: -4px;
  color: var(--sk-green-11);
  font-size: var(--sk-text-sm);
  font-weight: var(--sk-weight-black);
  pointer-events: none;
  animation: sk-float-up 1.4s var(--sk-ease-out) forwards;
}

/* ======================================================================
 * Streak
 * ====================================================================== */
.sk-streak { display: inline-flex; align-items: center; gap: 12px; }
.sk-streak__flame { position: relative; display: grid; place-items: center; width: 44px; height: 44px; border-radius: var(--sk-radius-full); background: var(--sk-orange-3); }
.sk-streak__flame::after { content: ''; position: absolute; inset: 6px; border-radius: 50%; background: radial-gradient(circle, rgb(249 115 22 / 0.35), transparent 70%); filter: blur(4px); animation: sk-pulse 1.8s var(--sk-ease-in-out) infinite; }
.sk-streak__flame .sk-icon { position: relative; z-index: 1; width: 28px; height: 28px; }
.sk-streak.sk-is-cold .sk-streak__flame { background: var(--sk-surface-hover); }
.sk-streak.sk-is-cold .sk-streak__flame::after { display: none; }
.sk-streak__text { display: flex; flex-direction: column; line-height: 1.1; }
.sk-streak__count { font-family: var(--sk-font-display); font-size: var(--sk-text-2xl); font-weight: var(--sk-weight-black); letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
.sk-streak__label { font-size: var(--sk-text-xs); color: var(--sk-fg-muted); font-weight: var(--sk-weight-medium); }
.sk-streak__week { display: flex; gap: 5px; }
.sk-streak__day { display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; font-weight: var(--sk-weight-bold); color: var(--sk-fg-subtle); }
.sk-streak__dot {
  display: grid; place-items: center;
  width: 24px; height: 24px;
  border-radius: 50%;
  background: var(--sk-surface-active);
  color: transparent;
  transition: transform var(--sk-dur-slow) var(--sk-ease-spring);
}
.sk-streak__dot .sk-icon { width: 13px; height: 13px; stroke-width: 3; }
.sk-streak__day.is-done .sk-streak__dot { background: linear-gradient(160deg, #fb923c, #ea580c); color: #fff; box-shadow: 0 2px 6px -1px rgb(234 88 12 / 0.5); animation: sk-pop 0.5s var(--sk-ease-spring) both; animation-delay: calc(var(--i, 0) * 60ms); }
.sk-streak__day.is-today { color: var(--sk-fg); }
.sk-streak__day.is-today .sk-streak__dot { box-shadow: inset 0 0 0 2px var(--sk-orange-9); }
.sk-streak__day.is-today.is-done .sk-streak__dot { box-shadow: 0 0 0 3px var(--sk-orange-4), 0 2px 6px -1px rgb(234 88 12 / 0.5); }
.sk-streak--chip { gap: 5px; height: var(--sk-control-md); padding: 0 13px 0 9px; border-radius: 99px; background: var(--sk-orange-3); border: 1px solid var(--sk-orange-6); }
.sk-streak--chip .sk-icon { width: 22px; height: 22px; }
.sk-streak--chip .sk-streak__count { font-size: var(--sk-text-md); color: var(--sk-orange-11); }
.sk-streak--chip.sk-is-cold { background: var(--sk-surface-hover); border-color: var(--sk-border); }
.sk-streak--chip.sk-is-cold .sk-streak__count { color: var(--sk-fg-muted); }

/* ======================================================================
 * Level / XP
 * ====================================================================== */
.sk-level { display: flex; align-items: center; gap: 14px; min-width: 0; }
.sk-level .sk-ring__arc { stroke: url(#sk-xp-gradient); }
.sk-level__badge { font-family: var(--sk-font-display); font-weight: var(--sk-weight-black); }
.sk-level__body { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 0; }
.sk-level__title { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.sk-level__name { font-weight: var(--sk-weight-bold); font-size: var(--sk-text-lg); }
.sk-level__xp { font-size: var(--sk-text-xs); color: var(--sk-fg-muted); font-variant-numeric: tabular-nums; }
.sk-level__xp b { color: var(--sk-violet-11); font-weight: var(--sk-weight-bold); }

/* ======================================================================
 * Achievement badge (rarity drives colour and shine)
 * ====================================================================== */
.sk-achievement { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; width: var(--w, 112px); }
.sk-achievement__medal {
  --size: 76px;
  position: relative;
  display: grid; place-items: center;
  width: var(--size); height: var(--size);
  border-radius: 26px;
  background: linear-gradient(150deg, var(--a-from), var(--a-to));
  color: #fff;
  box-shadow: inset 0 2px 0 rgb(255 255 255 / 0.35), inset 0 -3px 0 rgb(0 0 0 / 0.15), 0 8px 20px -8px var(--a-glow);
  overflow: hidden;
  transform: rotate(-4deg);
  transition: transform var(--sk-dur-slow) var(--sk-ease-spring);
}
.sk-achievement:hover .sk-achievement__medal { transform: rotate(3deg) scale(1.06); }
.sk-achievement__medal::before { content: ''; position: absolute; inset: 6px; border-radius: 20px; border: 1.5px dashed rgb(255 255 255 / 0.35); }
.sk-achievement__medal .sk-icon { position: relative; width: 34px; height: 34px; stroke-width: 2; filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2)); }
.sk-achievement--epic .sk-achievement__medal::after,
.sk-achievement--legendary .sk-achievement__medal::after {
  content: '';
  position: absolute; inset: 0;
  width: 40%;
  background: linear-gradient(90deg, transparent, rgb(255 255 255 / 0.55), transparent);
  animation: sk-shine 2.8s var(--sk-ease-in-out) infinite;
}
.sk-achievement--legendary .sk-achievement__medal::after { animation-duration: 2s; }
.sk-achievement--common { --a-from: #9ea3b5; --a-to: #6d7286; --a-glow: rgb(80 84 100 / 0.5); --a-text: var(--sk-fg-muted); }
.sk-achievement--rare { --a-from: #5aa2ff; --a-to: #2a6ae0; --a-glow: rgb(42 106 224 / 0.6); --a-text: var(--sk-blue-11); }
.sk-achievement--epic { --a-from: #b18cff; --a-to: #7c4ee6; --a-glow: rgb(124 78 230 / 0.6); --a-text: var(--sk-violet-11); }
.sk-achievement--legendary { --a-from: #ffd36b; --a-to: #f08c00; --a-glow: rgb(240 140 0 / 0.65); --a-text: var(--sk-amber-11); }
.sk-achievement__name { font-size: var(--sk-text-sm); font-weight: var(--sk-weight-bold); line-height: 1.25; }
.sk-achievement__desc { font-size: var(--sk-text-xs); color: var(--sk-fg-muted); line-height: 1.35; }
.sk-achievement__rarity { font-size: 10px; font-weight: var(--sk-weight-bold); letter-spacing: var(--sk-tracking-caps); text-transform: uppercase; color: var(--a-text); }
.sk-achievement.is-locked .sk-achievement__medal { background: var(--sk-surface-active); box-shadow: inset 0 0 0 1.5px var(--sk-border); transform: none; color: var(--sk-fg-subtle); }
.sk-achievement.is-locked .sk-achievement__medal::before { border-color: var(--sk-border-strong); }
.sk-achievement.is-locked .sk-achievement__medal::after { display: none; }
.sk-achievement.is-locked .sk-achievement__medal .sk-icon { filter: none; opacity: 0.6; }
.sk-achievement.is-locked .sk-achievement__rarity { color: var(--sk-fg-subtle); }
.sk-achievement__lock { position: absolute; right: 6px; bottom: 6px; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--sk-surface); box-shadow: var(--sk-shadow-sm); color: var(--sk-fg-muted); }
.sk-achievement__lock .sk-icon { width: 12px; height: 12px; }
.sk-achievement__progress { width: 100%; }

/* ======================================================================
 * Leaderboard row
 * ====================================================================== */
.sk-rank { display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: 14px; transition: background-color var(--sk-dur-fast); min-width: 0; }
.sk-rank:hover { background: var(--sk-surface-hover); }
.sk-rank__pos {
  display: grid; place-items: center;
  flex-shrink: 0;
  width: 30px; height: 30px;
  border-radius: var(--sk-radius-full);
  font-family: var(--sk-font-display);
  font-weight: var(--sk-weight-black);
  font-size: var(--sk-text-md);
  color: var(--sk-fg-muted);
  font-variant-numeric: tabular-nums;
}
.sk-rank--1 .sk-rank__pos { background: linear-gradient(150deg, #ffd36b, #f08c00); color: #5a3300; box-shadow: 0 3px 8px -3px rgb(240 140 0 / 0.7); }
.sk-rank--2 .sk-rank__pos { background: linear-gradient(150deg, #e3e6ef, #a3a8ba); color: #2f3240; }
.sk-rank--3 .sk-rank__pos { background: linear-gradient(150deg, #f2b98b, #c46a2b); color: #4a2108; }
.sk-rank__score { margin-inline-start: auto; display: flex; align-items: center; gap: 8px; font-weight: var(--sk-weight-bold); font-variant-numeric: tabular-nums; }
.sk-rank.is-you { background: var(--sk-brand-3); box-shadow: inset 0 0 0 1px var(--sk-brand-6); }
.sk-rank.is-you .sk-person__name::after { content: ' (you)'; color: var(--sk-brand-11); font-weight: var(--sk-weight-medium); }

/* ======================================================================
 * Subject tile (custom colour per subject via --subject-rgb)
 * ====================================================================== */
.sk-subject {
  --subject-rgb: var(--t-rgb);
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 14px;
  border-radius: var(--sk-radius-card);
  border: 1px solid rgb(var(--subject-rgb) / 0.22);
  background: linear-gradient(160deg, rgb(var(--subject-rgb) / 0.1), rgb(var(--subject-rgb) / 0.03) 60%), var(--sk-surface);
  color: var(--sk-fg);
  text-decoration: none;
  overflow: hidden;
  min-width: 0;
  transition: transform var(--sk-dur-base) var(--sk-ease-out), box-shadow var(--sk-dur-base), border-color var(--sk-dur-fast);
}
.sk-subject::after { content: ''; position: absolute; right: -22px; top: -22px; width: 84px; height: 84px; border-radius: 50%; background: rgb(var(--subject-rgb) / 0.1); transition: transform var(--sk-dur-slower) var(--sk-ease-out); }
@media (hover: hover) {
  a.sk-subject:hover { transform: translateY(-2px); box-shadow: 0 10px 24px -12px rgb(var(--subject-rgb) / 0.55); border-color: rgb(var(--subject-rgb) / 0.4); }
  a.sk-subject:hover::after { transform: scale(1.35); }
}
.sk-subject.is-active { border-color: rgb(var(--subject-rgb) / 0.9); box-shadow: 0 0 0 1px rgb(var(--subject-rgb) / 0.9); }
.sk-subject__icon { position: relative; z-index: 1; display: grid; place-items: center; width: 36px; height: 36px; border-radius: var(--sk-radius-full); background: rgb(var(--subject-rgb)); color: #fff; box-shadow: 0 4px 10px -4px rgb(var(--subject-rgb) / 0.8); }
.sk-subject__icon .sk-icon { width: 18px; height: 18px; }
.sk-subject__name { position: relative; z-index: 1; font-weight: var(--sk-weight-bold); line-height: 1.25; }
.sk-subject__meta { position: relative; z-index: 1; font-size: var(--sk-text-xs); color: var(--sk-fg-muted); }
.sk-subject .sk-progress__fill { background-color: rgb(var(--subject-rgb)); }
.sk-subject--compact { flex-direction: row; align-items: center; padding: 10px 12px; gap: 10px; }
.sk-subject-wrap { position: relative; min-width: 0; }
.sk-subject-wrap > .sk-subject { height: 100%; padding-right: 52px; }
.sk-subject-wrap__menu { position: absolute; top: 8px; right: 8px; z-index: 2; }
.sk-subject--compact::after { display: none; }
.sk-subject--compact .sk-subject__icon { width: 30px; height: 30px; }

/* ======================================================================
 * Quiz answer option
 * ====================================================================== */
.sk-answer {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 56px;
  padding: 10px 14px 10px 10px;
  border: 1.5px solid var(--sk-border);
  border-bottom-width: 3px;
  border-radius: 14px;
  background: var(--sk-surface);
  color: var(--sk-fg);
  font-size: var(--sk-text-lg);
  font-weight: var(--sk-weight-medium);
  text-align: start;
  cursor: pointer;
  transition: border-color var(--sk-dur-fast), background-color var(--sk-dur-fast), transform var(--sk-dur-base) var(--sk-ease-spring);
}
.sk-answer input { position: absolute; opacity: 0; pointer-events: none; }
.sk-answer:where(:hover) { border-color: var(--sk-border-strong); background: var(--sk-ink-2); }
:where([data-theme="dark"]) .sk-answer:where(:hover) { background: var(--sk-surface-hover); }
.sk-answer:active { transform: translateY(2px); border-bottom-width: 1.5px; margin-bottom: 1.5px; }
.sk-answer:has(input:focus-visible) { outline: 2px solid var(--sk-focus); outline-offset: 2px; }
.sk-answer__key {
  display: grid; place-items: center;
  flex-shrink: 0;
  width: 34px; height: 34px;
  border-radius: 10px;
  border: 1.5px solid var(--sk-border);
  color: var(--sk-fg-muted);
  font-family: var(--sk-font-display);
  font-weight: var(--sk-weight-bold);
  font-size: var(--sk-text-md);
  transition: all var(--sk-dur-base) var(--sk-ease-out);
}
.sk-answer__text { flex: 1; min-width: 0; line-height: 1.4; }
.sk-answer__state { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; color: #fff; transform: scale(0); transition: transform var(--sk-dur-slow) var(--sk-ease-spring); }
.sk-answer__state .sk-icon { width: 15px; height: 15px; stroke-width: 3; }

.sk-answer:where(:has(input:checked), .is-selected) { border-color: var(--sk-brand-8); background: var(--sk-brand-2); color: var(--sk-brand-12); }
.sk-answer:where(:has(input:checked), .is-selected) .sk-answer__key { background: var(--sk-brand-9); border-color: var(--sk-brand-9); color: #fff; animation: sk-pop 0.4s var(--sk-ease-spring); }
.sk-answer.is-correct { border-color: var(--sk-green-8); background: var(--sk-green-3); color: var(--sk-green-12); animation: sk-pop 0.45s var(--sk-ease-spring); }
.sk-answer.is-correct .sk-answer__key { background: var(--sk-green-9); border-color: var(--sk-green-9); color: #fff; }
.sk-answer.is-correct .sk-answer__state { background: var(--sk-green-9); transform: scale(1); }
.sk-answer.is-wrong { border-color: var(--sk-red-8); background: var(--sk-red-3); color: var(--sk-red-12); animation: sk-shake 0.45s var(--sk-ease-in-out); }
.sk-answer.is-wrong .sk-answer__key { background: var(--sk-red-9); border-color: var(--sk-red-9); color: #fff; }
.sk-answer.is-wrong .sk-answer__state { background: var(--sk-red-9); transform: scale(1); }
.sk-answer.is-dimmed { opacity: 0.55; }
.sk-answer:disabled, .sk-answer.is-locked { cursor: default; }
.sk-answer.is-locked:active { transform: none; border-bottom-width: 3px; margin-bottom: 0; }

/* ======================================================================
 * Celebration burst (particles created by SK.celebrate)
 * ====================================================================== */
.sk-confetti { position: fixed; inset: 0; pointer-events: none; z-index: var(--sk-z-tooltip); overflow: hidden; }
.sk-confetti__bit {
  position: absolute;
  left: var(--x); top: var(--y);
  width: var(--s, 8px); height: calc(var(--s, 8px) * 0.45);
  border-radius: 2px;
  background: var(--c);
  animation: sk-confetti var(--d, 1100ms) cubic-bezier(0.15, 0.6, 0.35, 1) forwards;
}
.sk-confetti__bit:nth-child(3n) { border-radius: 50%; height: var(--s, 8px); width: var(--s, 8px); }
@keyframes sk-confetti {
  0% { transform: translate(0, 0) rotate(0) scale(1); opacity: 1; }
  70% { opacity: 1; }
  100% { transform: translate(var(--dx), var(--dy)) rotate(var(--r)) scale(0.6); opacity: 0; }
}

/* A badge that opens its details (student achievements) */
.sk-achievement-pick { display: flex; justify-content: center; padding: 14px 8px; border: 0; border-radius: 20px; background: var(--sk-surface); box-shadow: 0 0 0 1px var(--sk-border-subtle), var(--sk-shadow-xs); font: inherit; color: inherit; cursor: pointer; transition: box-shadow var(--sk-dur-base), transform var(--sk-dur-base) var(--sk-ease-spring); }
.sk-achievement-pick:hover { box-shadow: 0 0 0 1px var(--sk-border), var(--sk-shadow-md); transform: translateY(-2px); }
.sk-achievement-pick:focus-visible { outline: none; box-shadow: var(--sk-focus-ring); }
.sk-achievement-pick .sk-achievement { width: 100%; }
.sk-achievement--lg .sk-achievement__medal { --size: 108px; border-radius: 30px; }
.sk-achievement--lg .sk-achievement__medal .sk-icon { width: 46px; height: 46px; }
.sk-achievement-detail__name { font-family: var(--sk-font-display); font-size: var(--sk-text-2xl); font-weight: var(--sk-weight-bold); letter-spacing: -0.02em; }
