.mark__stage { position: relative; }

.mark__art {
  aspect-ratio: 1;
  background: var(--bg);
  overflow: hidden;
}
.mark__art svg { width: 100%; height: 100%; display: block; }

.mark__overlay {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  
  gap: calc(var(--cell) * 0.19);
  text-align: center;
  pointer-events: none;
  
  z-index: 2;
}
.mark__overlay > * { pointer-events: auto; }

.mark__warning {
  margin: 0;
  
  max-width: 100%;
  line-height: 1.45;
}

.mark__cancel {
  margin-top: calc(var(--cell) * 0.06);
  font-size: var(--fs-micro);
  letter-spacing: 0.04em;
  text-decoration: underline;
  text-underline-offset: 0.22em;
  color: var(--ink-body);
}
.mark__cancel:hover { color: var(--hover); }

.mark__spinner { display: flex; gap: 0.45em; }
.mark__spinner span {
  width: 0.5em;
  height: 0.5em;
  border-radius: 50%;
  background: var(--ink-body);
  animation: markPulse 1.15s var(--ease) infinite;
}
.mark__spinner span:nth-child(2) { animation-delay: 0.15s; }
.mark__spinner span:nth-child(3) { animation-delay: 0.30s; }
@keyframes markPulse {
  0%, 80%, 100% { opacity: 0.22; transform: scale(0.8); }
  40%           { opacity: 1;    transform: scale(1); }
}

.mark__overlay .btn--mark,
.mark__warning,
.mark__cancel,
.mark__error,
.mark__spinner { display: none; }

[data-state="ready"] .mark__overlay .btn--mark,
[data-state="ready"] .mark__warning { display: flex; }
[data-state="ready"] .mark__warning { display: block; }

[data-state="committing"] .mark__spinner,
[data-state="waiting"] .mark__spinner { display: flex; }

[data-state="committing"] .mark__cancel:not(.mark__leave) { display: block; }

[data-state="ready"] .mark__leave { display: block; }

[data-state="drawing"] .mark__overlay,
[data-state="done"] .mark__overlay { display: none; }

[data-state="error"] .mark__error { display: block; }

.mark__error {
  max-width: calc(var(--cell) * 3.4);
  text-align: center;
  background: #ffffff;
  border: var(--hairline) solid var(--warn);
  border-top-width: 3px;
  padding: calc(var(--cell) * 0.26) calc(var(--cell) * 0.24);
  box-shadow: 0 2px 18px rgba(1, 54, 47, 0.10);
}
.mark__error-head {
  margin: 0 0 0.5em;
  font-size: var(--fs-ui);
  font-weight: 700;
  letter-spacing: var(--tracking-ui);
  text-transform: uppercase;
  color: var(--warn);
}

[data-error="stranded"] .mark__error { border-color: var(--ink-head); }
[data-error="stranded"] .mark__error-head { color: var(--ink-head); }

.mark__error-body {
  margin: 0;
  font-size: var(--fs-micro);
  line-height: 1.55;
  color: var(--ink-body);
}
.mark__error-actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(var(--cell) * 0.12);
  margin-top: calc(var(--cell) * 0.20);
}
.mark__errleave { display: block; }

[data-error="stranded"] .mark__errleave { display: none; }

.mark__stage::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--bg-modal);
  opacity: 0;
  transition: opacity var(--dur) var(--ease);
  pointer-events: none;
  z-index: 1;
}
[data-state="ready"] .mark__stage::after,
[data-state="committing"] .mark__stage::after,
[data-state="error"] .mark__stage::after,
[data-state="waiting"] .mark__stage::after { opacity: 0.62; }

.mark__note {
  font-size: var(--fs-micro);
  color: var(--ink-body);
  text-align: center;
  max-width: calc(var(--cell) * 4.6);
  margin: calc(var(--cell) * 0.24) auto 0;
}

.mark__traits[hidden],
.mark__downloads[hidden] { display: none; }

.mark__traits {
  display: flex;
  justify-content: center;
  gap: calc(var(--cell) * 0.26);
  margin-top: calc(var(--cell) * 0.30);
}
.mark__traits .trait { min-width: calc(var(--cell) * 1.18); }

.mark__downloads {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: calc(var(--cell) * 0.26);
  margin-top: calc(var(--cell) * 0.34);
}
.download__label {
  display: block;
  font-size: var(--fs-micro);
  color: var(--ink-body);
  margin-bottom: calc(var(--cell) * 0.09);
}
.download__id { font-weight: 700; }

@media (max-width: 620px) {
  .mark__warning { max-width: calc(var(--cell) * 2.5); }
  .mark__traits { gap: 12px; }
  .mark__downloads { grid-template-columns: 1fr; gap: 12px; }
  .mark__note { max-width: none; }
}

@media (prefers-reduced-motion: reduce) {
  .mark__spinner span { animation: none; opacity: 0.6; }
}
