.mint-jobs-tray {
  position: fixed;
  right: max(1.25rem, env(safe-area-inset-right));
  bottom: max(1.25rem, env(safe-area-inset-bottom));
  z-index: 1000;
  color: var(--text-primary);
  font-family: var(--font-sans);
}

/* Dark --border-light equals --bg-card; row and band hairlines need --border-color there. */
:where(html.dark) .mint-jobs-tray {
  --border-light: var(--border-color);
}

.mint-jobs-tray__trigger {
  display: inline-flex;
  min-height: 2.75rem;
  align-items: center;
  gap: 0.625rem;
  padding: 0.5rem 1rem;
  border: 0;
  border-radius: 9999px;
  background: var(--color-primary);
  color: white;
  box-shadow: var(--shadow-lg);
  cursor: pointer;
  transition: background var(--mint-transition), box-shadow var(--mint-transition);
}

.mint-jobs-tray__trigger:hover {
  background: var(--color-primary-hover);
}

.mint-jobs-tray__trigger:focus-visible,
.mint-jobs-tray__panel:focus-visible,
.mint-jobs-tray button:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring-offset);
}

.mint-jobs-tray__trigger-icon {
  width: 1.125rem;
  height: 1.125rem;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.mint-jobs-tray__trigger-icon--active {
  animation: mint-jobs-tray-pulse 1.8s ease-in-out infinite;
}

.mint-jobs-tray__trigger-label {
  font-size: 0.875rem;
  font-weight: 600;
}

.mint-jobs-tray__count,
.mint-jobs-tray__tab-count {
  display: inline-flex;
  min-width: 1.25rem;
  height: 1.25rem;
  align-items: center;
  justify-content: center;
  padding: 0 0.375rem;
  border-radius: 9999px;
  font: 600 0.6875rem/1 var(--font-mono);
}

.mint-jobs-tray__count {
  /* Darken, not lighten: white text keeps >= 4.5:1 on any primary (indigo or the platform teal). */
  background: rgb(0 0 0 / 0.4);
  color: inherit;
}

.mint-jobs-tray__backdrop {
  position: fixed;
  inset: 0;
  z-index: -2;
  background: rgb(15 23 42 / 0.22);
  backdrop-filter: blur(2px);
}

.mint-jobs-tray__panel {
  position: absolute;
  right: 0;
  bottom: 3.75rem;
  display: flex;
  width: min(27.5rem, calc(100vw - 2rem));
  max-height: min(42rem, calc(100vh - 7rem));
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  background: var(--bg-card);
  box-shadow: var(--shadow-lg);
}

.mint-jobs-tray__header,
.mint-jobs-tray__job-heading,
.mint-jobs-tray__job-footer,
.mint-jobs-tray__header-actions,
.mint-jobs-tray__clear-row {
  display: flex;
  align-items: center;
}

.mint-jobs-tray__header {
  justify-content: space-between;
  padding: 0.75rem 0.75rem 0.75rem 1rem;
  border-bottom: 1px solid var(--border-color);
}

.mint-jobs-tray__header > div:first-child {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  min-width: 0;
}

.mint-jobs-tray__title {
  margin: 0;
  color: var(--text-primary);
  font-size: 0.875rem;
  font-weight: 600;
}

.mint-jobs-tray__subtitle {
  margin: 0;
  color: var(--text-secondary);
  font: 0.6875rem/1.3 var(--font-mono);
}

.mint-jobs-tray__header-actions {
  gap: 0.25rem;
}

.mint-jobs-tray__icon-button {
  display: inline-flex;
  width: 2rem;
  height: 2rem;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 0;
  border-radius: var(--radius-md);
  background: transparent;
  color: var(--text-secondary-strong);
  cursor: pointer;
  transition: background var(--mint-transition), color var(--mint-transition);
}

.mint-jobs-tray__icon-button:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}

.mint-jobs-tray__icon-button svg {
  width: 1rem;
  height: 1rem;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.mint-jobs-tray__icon-button--danger {
  color: var(--mint-error);
}

.mint-jobs-tray__tabs {
  display: grid;
  grid-template-columns: 1fr 1fr;
  border-bottom: 1px solid var(--border-color);
}

.mint-jobs-tray__tab {
  position: relative;
  display: inline-flex;
  min-height: 2.75rem;
  align-items: center;
  justify-content: center;
  gap: 0.375rem;
  padding: 0.5rem 1rem;
  border: 0;
  background: transparent;
  color: var(--text-secondary-strong);
  font: 500 0.8125rem/1 var(--font-sans);
  cursor: pointer;
}

.mint-jobs-tray__tab--active {
  color: var(--color-primary);
}

.mint-jobs-tray__tab--active::after {
  position: absolute;
  right: 1rem;
  bottom: 0;
  left: 1rem;
  height: 2px;
  background: var(--color-primary);
  content: '';
}

.mint-jobs-tray__tab-count {
  background: var(--bg-tertiary);
  color: currentColor;
}

.mint-jobs-tray__error {
  margin: 0.75rem 1rem;
  padding: 0.625rem 0.75rem;
  border: 1px solid var(--mint-error-border);
  border-radius: var(--radius-md);
  background: var(--mint-error-bg);
  color: var(--mint-error);
  font-size: 0.75rem;
}

.mint-jobs-tray__body {
  flex: 1;
  overflow-y: auto;
  scrollbar-color: var(--scrollbar-thumb) transparent;
}

.mint-jobs-tray__empty {
  margin: 0;
  padding: 3rem 1rem;
  color: var(--text-secondary);
  text-align: center;
  font-size: 0.8125rem;
}

/* 2f: rows + hairlines, no card per job. */
.mint-jobs-tray__job {
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--border-light);
}

/* The one state that needs a person: tinted and pinned first. */
.mint-jobs-tray__job--awaiting-input {
  background: var(--mint-warning-bg);
}

.mint-jobs-tray__job-heading,
.mint-jobs-tray__job-footer {
  justify-content: space-between;
  gap: 0.75rem;
}

.mint-jobs-tray__job-identity {
  flex: 1;
  min-width: 0;
}

.mint-jobs-tray__job-select {
  display: block;
  max-width: 100%;
  padding: 0;
  overflow: hidden;
  border: 0;
  background: transparent;
  color: var(--text-primary);
  cursor: pointer;
  font-size: 0.8125rem;
  font-weight: 600;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mint-jobs-tray__kind {
  display: block;
  margin-top: 0.125rem;
  color: var(--text-secondary);
  font: 0.6875rem/1.3 var(--font-mono);
}

/* Status: tone dot + neutral text. Only "waiting for input" and "failed"
   color their text. */
.mint-jobs-tray__status {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 0.375rem;
  color: var(--text-secondary-strong);
  font-size: 0.75rem;
  --mint-jobs-tray-tone: var(--text-muted);
}

.mint-jobs-tray__status-dot {
  width: 0.375rem;
  height: 0.375rem;
  border-radius: 9999px;
  background: var(--mint-jobs-tray-tone);
}

.mint-jobs-tray__status--running { --mint-jobs-tray-tone: var(--mint-info); }
.mint-jobs-tray__status--completed { --mint-jobs-tray-tone: var(--mint-success); }

.mint-jobs-tray__status--awaiting-input {
  --mint-jobs-tray-tone: var(--mint-warning);
  color: var(--mint-warning-text);
  font-weight: 600;
}

.mint-jobs-tray__status--failed {
  --mint-jobs-tray-tone: var(--mint-error);
  color: var(--_ink-error);
}

.mint-jobs-tray__percent {
  flex: 0 0 auto;
  min-width: 2.125rem;
  color: var(--text-primary);
  font-family: var(--font-mono);
  font-size: 0.75rem;
  font-variant-numeric: tabular-nums;
  text-align: right;
}

.mint-jobs-tray__progress {
  height: 2px;
  margin-top: 0.5rem;
  overflow: hidden;
  border-radius: 9999px;
  background: var(--bg-tertiary);
}

.mint-jobs-tray__progress span {
  display: block;
  height: 100%;
  background: var(--color-primary);
  transition: width var(--mint-transition);
}

.mint-jobs-tray__job-footer {
  min-height: 1.75rem;
  margin-top: 0.375rem;
  color: var(--text-secondary);
  font-size: 0.75rem;
}

.mint-jobs-tray__action {
  min-height: 1.75rem;
  padding: 0.375rem 0.625rem;
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  background: var(--bg-secondary);
  color: var(--text-secondary-strong);
  font: 500 0.75rem/1 var(--font-sans);
  cursor: pointer;
  transition: background var(--mint-transition), border-color var(--mint-transition), color var(--mint-transition);
}

.mint-jobs-tray__job-actions {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
}

/* 2f: the inline action of a row waiting for input is the primary one. */
.mint-jobs-tray__job--awaiting-input .mint-jobs-tray__action:not(.mint-jobs-tray__action--danger) {
  border-color: var(--color-primary);
  background: var(--color-primary);
  color: white;
}

.mint-jobs-tray__job--awaiting-input .mint-jobs-tray__action:not(.mint-jobs-tray__action--danger):hover {
  border-color: var(--color-primary-hover);
  background: var(--color-primary-hover);
}

.mint-jobs-tray__action--danger {
  border-color: var(--mint-error-border);
  color: var(--mint-error);
}

.mint-jobs-tray__action--danger:hover {
  background: var(--mint-error-bg);
}

.mint-jobs-tray__clear-row {
  justify-content: flex-end;
  padding: 0.5rem 1rem;
  border-bottom: 1px solid var(--border-light);
}

.mint-jobs-tray button:disabled {
  opacity: var(--mint-disabled-opacity);
  cursor: not-allowed;
}

.mint-jobs-tray-fade-enter-active,
.mint-jobs-tray-fade-leave-active,
.mint-jobs-tray-slide-enter-active,
.mint-jobs-tray-slide-leave-active {
  transition: opacity var(--mint-transition), transform var(--mint-transition);
}

.mint-jobs-tray-fade-enter-from,
.mint-jobs-tray-fade-leave-to {
  opacity: 0;
}

.mint-jobs-tray-slide-enter-from,
.mint-jobs-tray-slide-leave-to {
  opacity: 0;
  transform: translateY(0.5rem) scale(0.98);
}

@keyframes mint-jobs-tray-pulse {
  50% { opacity: 0.55; }
}

@media (max-width: 480px) {
  .mint-jobs-tray {
    right: max(1rem, env(safe-area-inset-right));
    bottom: max(1rem, env(safe-area-inset-bottom));
  }

  .mint-jobs-tray__panel {
    position: fixed;
    right: 1rem;
    bottom: 4.75rem;
    left: 1rem;
    width: auto;
    max-height: calc(100vh - 6.75rem - env(safe-area-inset-bottom));
  }
}

@media (prefers-reduced-motion: reduce) {
  .mint-jobs-tray *,
  .mint-jobs-tray *::before,
  .mint-jobs-tray *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
