/* Per-deployment CSS overrides. Loaded after the core application stylesheet. */

/* Chat thread wallpaper — light warm beige with dot grid in light mode,
   dark surface with a subtler dot pattern in dark mode. Using a CSS class
   rather than an inline style so the dark-mode override can reference
   CSS variables that inline styles can't reach. */
.chat-thread-bg {
  background-color: #ece5dd;
  background-image: radial-gradient(circle, rgba(0,0,0,0.04) 1px, transparent 1px);
  background-size: 18px 18px;
}
.dark .chat-thread-bg {
  background-color: var(--color-surface-muted);
  background-image: radial-gradient(circle, rgba(255,255,255,0.04) 1px, transparent 1px);
}

/* Long-message collapse for chat bubbles. Pure max-height + mask fade,
   so display stays `block` and overflow-wrap can break unbreakable
   content. Toggled by Stimulus expandable_controller. */
.message-collapsed {
  max-height: 10rem;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(to bottom, black 75%, transparent);
          mask-image: linear-gradient(to bottom, black 75%, transparent);
}

/* Kanban card busy/loading state.
   Set by client_kanban_controller.js on transition form submit; cleared
   automatically when the Turbo Stream replaces/removes the card. */
.kanban-card[data-busy] {
  opacity: 0.45;
  pointer-events: none;
}
.kanban-card[data-busy]::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 6px;
  cursor: wait;
}

/* Brief shadow flash on the topmost card in a column so newly-prepended
   cards (Turbo Stream broadcast_prepend) read as a deliberate arrival. */
@keyframes kanban-card-arrive {
  0%   { box-shadow: 0 0 0 3px var(--color-brand-accent); }
  100% { box-shadow: var(--shadow-card); }
}
.kanban-card:first-child {
  animation: kanban-card-arrive 0.6s ease-out;
}
