/* Inbox.css — §15.2 inbox panel refinements (roadmap #25, light pass).
 *
 * The base inbox layout/structure lives in App.css (the §15 / Slice 6
 * block). This sheet is a TOKENIZED polish layer on top of it: it does
 * NOT re-lay-out the panel, it sharpens the unread/read distinction,
 * adds the per-row "mark read" affordance + the unread dot, and gives
 * the empty/loading states real copy and spacing.
 *
 * Cascade note: Inbox.jsx is imported by App.jsx (line 6) BEFORE the
 * App.css import (line 30), so under ESM depth-first evaluation this
 * sheet is injected FIRST and App.css wins on equal specificity. Any
 * rule here that must override an App.css value is therefore written
 * one notch more specific (e.g. `.inbox-list .inbox-row.unread`).
 * New classes that App.css doesn't define need no such guard.
 */

/* ===== Unread vs. read distinction ===== */

/* A clear left accent bar + warmer tint on unread; read rows sit calm. */
.inbox-list .inbox-row {
  position: relative;
  border-bottom: 1px solid var(--color-border);
  transition: background var(--motion-fast) var(--ease-out);
}
.inbox-list .inbox-row.unread {
  background: var(--color-warning-bg-soft, var(--c-warning-bg-soft));
  box-shadow: inset 3px 0 0 var(--color-accent);
}
.inbox-list .inbox-row.read .inbox-summary {
  color: var(--color-text-muted);
  font-weight: var(--weight-normal);
}
.inbox-list .inbox-row.unread .inbox-summary {
  color: var(--color-text);
  font-weight: var(--weight-medium);
}

/* The dot is a NEW affordance: a filled accent dot for unread, hidden
 * (but space-reserved) for read so summaries stay column-aligned. */
.inbox-unread-dot {
  flex: 0 0 auto;
  width: 8px;
  height: 8px;
  border-radius: var(--radius-pill);
  background: var(--color-accent);
}
.inbox-row.read .inbox-unread-dot {
  background: transparent;
}

/* ===== Per-row "mark read" affordance ===== */

/* The row is a flex Link followed by this button; pin the button to the
 * right edge, revealed on row hover/focus and always visible on touch. */
.inbox-row {
  display: flex;
  align-items: center;
}
.inbox-row .inbox-row-link {
  flex: 1 1 auto;
  min-width: 0;
}
.inbox-row-dismiss {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  margin-right: var(--space-5);
  padding: 0;
  color: var(--color-text-subtle);
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--radius-md);
  cursor: pointer;
  opacity: 0;
  transition:
    opacity var(--motion-fast) var(--ease-out),
    color var(--motion-fast) var(--ease-out),
    background var(--motion-fast) var(--ease-out),
    border-color var(--motion-fast) var(--ease-out);
}
.inbox-row:hover .inbox-row-dismiss,
.inbox-row:focus-within .inbox-row-dismiss,
.inbox-row-dismiss:focus-visible {
  opacity: 1;
}
.inbox-row-dismiss:hover {
  color: var(--color-success-fg);
  background: var(--color-success-bg);
  border-color: var(--color-success-bg);
}
.inbox-row-dismiss:focus-visible {
  outline: 2px solid var(--color-focus-ring);
  outline-offset: 1px;
}
/* Coarse pointers (touch) have no hover; keep the affordance discoverable. */
@media (hover: none) {
  .inbox-row-dismiss { opacity: 1; }
}

/* ===== Mark-all-read button ===== */
.inbox-mark-all {
  margin-left: auto;
}

/* ===== Empty / loading states ===== */
.inbox-state {
  padding: var(--space-9) var(--space-7);
  text-align: center;
}
.inbox-empty {
  padding: var(--space-11) var(--space-7);
  text-align: center;
}
.inbox-empty-title {
  margin: 0 0 var(--space-3);
  font-size: var(--text-md);
  font-weight: var(--weight-semibold);
  color: var(--color-text-strong);
}
.inbox-empty .muted {
  margin: 0;
  font-size: var(--text-base);
  line-height: var(--leading-normal);
  color: var(--color-text-muted);
}

/* #28 Part 3 — actionable contribute-request row: the requester's
   who/why/use-case detail plus an Accept/Decline pair. */
.inbox-row-action { display: flex; flex-direction: column; gap: 8px; padding: 12px; }
.inbox-row-action .inbox-row-main { display: flex; align-items: center; gap: 8px; }
.inbox-request-detail { margin-left: 18px; font-size: var(--text-sm); }
.inbox-request-detail p { margin: 2px 0; color: var(--color-text-muted); }
.inbox-request-detail strong { color: var(--color-text); }
.inbox-request-actions { display: flex; gap: 8px; margin-left: 18px; }
.inbox-request-outcome { margin: 0 0 0 18px; }
