/* JAC-ARCH-RUNTIME-001 — Arch host layer (documented SPD extension, D-013).
 * ADDITIVE ONLY: this layer adds host-wrapper layout for Arch/Tenant/Resident host
 * shells. It NEVER overrides an SPD component contract (notification/card/widget/signal
 * parts stay owned by spd-*.css). It introduces ONLY data-arch-* host attributes and
 * host-wrapper selectors. All additions are catalogued in D-013. Compatible with future
 * Native Jrole UI (host substrate is SPD-contract-based) and Resident apps (surface host).
 * No data-jpt-* / data-react-* introduced; theme values remain in spd-theme.css. */

/* Arch host root — full-viewport host substrate; class-aware shell boundary. */
[data-arch-host] {
  box-sizing: border-box;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

/* Host kind differentiates ownership boundary (§4 taxonomy). */
[data-arch-host-kind="arch"] { /* Native Jrole UI host: hosts Native projections + Resident surfaces */ }
[data-arch-host-kind="tenant"] { /* Tenant-owned shell boundary: Arch registers/status only, does not control UI */ }
[data-arch-host-kind="resident-surface"] { /* Arch-controlled surface host: Resident mounts here, no own shell */ }

/* Resident surface slot — Arch-controlled mount region; predictable panel/surface layout. */
[data-arch-surface] {
  display: block;
  position: relative;
}
[data-arch-surface-slot] { /* one Arch surface slot; Resident mounts a surface, never a shell */ }
[data-arch-surface][data-arch-surface-state="empty"]::after {
  content: attr(data-arch-surface-slot) " — empty (TARGET)";
  display: block;
  opacity: 0.6;
}

/* Host status projections read data-arch-* state; visual is delegated to SPD theme tokens. */
[data-arch-app-class] { /* projection row keyed by lifecycle_class */ }
[data-arch-evidence-status="failed"] { /* honest failed evidence marker; no fabricated proof */ }
[data-arch-economy-state="target"] { /* economy capability TARGET marker */ }

/* ── JAC-JROLE-INVITE-NOTIFICATION-LANDING-001 — invite landing (additive; §13 quality bar).
 * SPD notification parts stay owned by spd-*.css; here ONLY data-arch-invite-* affordances:
 * obvious actions, keyboard focus, mobile-safe layout, reduced-motion, fallback letter tile. */

/* actions: obvious, keyboard-accessible, no layout shift (reserved row height) */
[data-arch-invite-actions] {
  display: flex;
  gap: 0.75rem;
  flex-wrap: wrap;
  min-height: 2.75rem;
  align-items: center;
}
/* Кнопки визуально принадлежат SPD-теме (spd-forms/spd-notifications); здесь ТОЛЬКО
 * поведенческие гарантии (§13): целевой размер, курсор, disabled, focus. Никаких своих
 * цветов/фонов — иначе конфликт каскада с темой (белый текст на светлом фоне). */
[data-arch-invite-action] {
  min-height: 2.5rem;
  cursor: pointer;
}
[data-arch-invite-action]:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
[data-arch-invite-action]:focus-visible {
  outline: 3px solid var(--spd-color-accent, #1f6feb);
  outline-offset: 2px;
}
@media (max-width: 480px) { /* mobile-safe: full-width targets, никогда не прячем Accept/Decline */
  [data-arch-invite-action] { flex: 1 1 100%; min-width: 0; }
}

/* actor fallback letter tile (§5.4) — no avatar → first letter, browser-safe */
[data-arch-invite-vid] i {
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
}

/* invite_chat: Archon panel region — full remaining viewport, same-origin iframe */
[data-arch-invite-chat] {
  flex: 1 1 auto;
  display: none;
  min-height: 70vh;
}
[data-arch-invite-chat][data-display="block"] { display: block; }
[data-arch-invite-chat] iframe {
  width: 100%;
  height: 100%;
  min-height: 70vh;
  border: 0;
  display: block;
}

/* reduced motion: no transitions/animations anywhere in the invite flow (§13) */
@media (prefers-reduced-motion: reduce) {
  [data-arch-host] *, [data-arch-invite-chat] * {
    transition: none !important;
    animation: none !important;
  }
}
