/* Cainer design system — shared tokens and base element styles (M1a).
   Later milestones use these variables instead of redeclaring colors or
   spacing. Landing/dashboard pages may keep page-specific rules, but the
   palette, type scale, spacing, radii and focus ring come from here. */

:root {
  color-scheme: light dark;

  /* Palette: warm off-white paper, near-black ink, terracotta accent. */
  --paper: #f7f6f2;
  --surface: #fffefa;
  --surface-soft: #f2efe8;
  --ink: #20231f;
  --muted: #60665e;
  --line: #dcded5;
  --line-strong: #c8cabf;
  --accent: #b5401f;
  --accent-strong: #96341a;
  --accent-soft: #fce8dd;
  --danger: #a83d35;
  --danger-soft: #fff0ed;
  --success: #26744e;
  --success-soft: #e8f4ec;
  --warning: #8a5a12;
  --warning-soft: #fdf1dc;
  --focus: #b5401f;

  /* Spacing scale. */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;

  /* Radii. */
  --radius-sm: 6px;
  --radius-md: 10px;
  --radius-lg: 18px;
  --radius-pill: 999px;

  /* Type. */
  --font-sans: "Pretendard", "Pretendard Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", "Apple SD Gothic Neo",
    "Noto Sans KR", "Malgun Gothic", system-ui, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
  --text-xs: 0.75rem;
  --text-sm: 0.875rem;
  --text-base: 1rem;
  --text-lg: 1.125rem;
  --text-xl: 1.375rem;
  --text-2xl: 1.75rem;
  --text-3xl: clamp(2rem, 4vw, 2.75rem);

  --shadow-sm: 0 1px 2px rgb(32 35 31 / 6%);
  --shadow-md: 0 8px 28px rgb(32 35 31 / 8%);
  --content-width: 1180px;
}

@media (prefers-color-scheme: dark) {
  :root {
    --paper: #141613;
    --surface: #1c1f1b;
    --surface-soft: #232722;
    --ink: #eceee7;
    --muted: #a7ada3;
    --line: #333831;
    --line-strong: #454b43;
    --accent: #e8734c;
    --accent-strong: #f08a66;
    --accent-soft: #3a241c;
    --danger: #f09a90;
    --danger-soft: #3a2320;
    --success: #7fd2a5;
    --success-soft: #1d3327;
    --warning: #e6c07a;
    --warning-soft: #3a2f1a;
    --focus: #f08a66;
    --shadow-sm: 0 1px 2px rgb(0 0 0 / 35%);
    --shadow-md: 0 8px 28px rgb(0 0 0 / 45%);
  }
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  min-width: 320px;
  scroll-behavior: smooth;
  scroll-padding-top: var(--space-7);
}

body {
  margin: 0;
  min-height: 100vh;
  background: var(--paper);
  color: var(--ink);
  font: var(--text-base) / 1.6 var(--font-sans);
  word-break: keep-all;
  -webkit-font-smoothing: antialiased;
}

h1,
h2,
h3,
h4 {
  margin: 0 0 var(--space-3);
  color: var(--ink);
  line-height: 1.2;
  letter-spacing: -0.02em;
  text-wrap: balance;
}

h1 {
  font-size: var(--text-3xl);
  letter-spacing: -0.045em;
}

h2 {
  font-size: var(--text-2xl);
}

h3 {
  font-size: var(--text-xl);
}

p {
  margin: 0 0 var(--space-3);
}

a {
  color: inherit;
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.18em;
}

a:hover {
  color: var(--accent-strong);
}

code,
pre,
kbd {
  font-family: var(--font-mono);
  font-size: 0.92em;
}

img,
svg {
  max-width: 100%;
  height: auto;
}

:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 3px;
  border-radius: var(--radius-sm);
}

button,
input,
select,
textarea {
  font: inherit;
  color: inherit;
}

label {
  display: block;
  margin-bottom: var(--space-1);
  font-size: var(--text-sm);
  font-weight: 650;
}

input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]),
select,
textarea {
  width: 100%;
  padding: var(--space-3) var(--space-3);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-md);
  background: var(--surface);
  color: var(--ink);
}

textarea {
  min-height: 7rem;
  resize: vertical;
}

input::placeholder,
textarea::placeholder {
  color: var(--muted);
}

input[aria-invalid="true"],
textarea[aria-invalid="true"] {
  border-color: var(--danger);
}

/* Buttons: .btn base, .btn-primary accent, .btn-ghost quiet. */
.btn,
button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: 2.75rem;
  max-width: 100%;
  padding: var(--space-2) var(--space-4);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-md);
  background: var(--surface);
  color: var(--ink);
  font-weight: 650;
  text-decoration: none;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.btn:hover,
button:hover {
  border-color: var(--accent);
  background: var(--accent-soft);
  color: var(--accent-strong);
}

.btn-primary,
.btn-primary:hover {
  border-color: var(--accent);
  background: var(--accent);
  color: #fff;
}

.btn-primary:hover {
  border-color: var(--accent-strong);
  background: var(--accent-strong);
}

.btn-ghost {
  border-color: transparent;
  background: transparent;
  color: var(--accent-strong);
  font-weight: 650;
}

.btn-ghost:hover {
  border-color: var(--line);
  background: var(--surface-soft);
}

button:disabled,
.btn[aria-disabled="true"] {
  cursor: not-allowed;
  opacity: 0.6;
}

.container {
  width: min(var(--content-width), calc(100% - 2 * var(--space-6)));
  margin-inline: auto;
}

.card {
  padding: var(--space-5);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  background: var(--surface);
  box-shadow: var(--shadow-sm);
}

.alert {
  margin: var(--space-4) 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-md);
  background: var(--surface-soft);
  color: var(--ink);
}

.alert[role="alert"],
.alert-error {
  border-color: var(--danger);
  background: var(--danger-soft);
  color: var(--danger);
}

.alert-success {
  border-color: var(--success);
  background: var(--success-soft);
  color: var(--success);
}

.alert-warning {
  border-color: var(--warning);
  background: var(--warning-soft);
  color: var(--warning);
}

.badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: 0.15rem var(--space-2);
  border: 1px solid var(--line);
  border-radius: var(--radius-pill);
  background: var(--surface-soft);
  color: var(--muted);
  font-size: var(--text-xs);
  font-weight: 700;
  letter-spacing: 0.04em;
  line-height: 1.6;
}

.badge-accent {
  border-color: var(--accent);
  background: var(--accent-soft);
  color: var(--accent-strong);
}

.badge-danger {
  border-color: var(--danger);
  background: var(--danger-soft);
  color: var(--danger);
}

.badge-success {
  border-color: var(--success);
  background: var(--success-soft);
  color: var(--success);
}

.skip-link,
.skip {
  position: absolute;
  left: var(--space-4);
  top: -6rem;
  z-index: 10;
  padding: var(--space-3);
  border-radius: var(--radius-md);
  background: var(--surface);
  color: var(--ink);
  box-shadow: var(--shadow-md);
}

.skip-link:focus,
.skip:focus {
  top: var(--space-4);
}

.visually-hidden,
.sr-only {
  position: absolute !important;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

[hidden] {
  display: none !important;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

/* Auth pages (M1b): /signup, /login, /operator/login, /welcome. */
.auth-header {
  width: min(var(--content-width), calc(100% - 2 * var(--space-6)));
  margin: var(--space-4) auto 0;
}

.auth-header .brand {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-weight: 750;
  letter-spacing: -0.02em;
  text-decoration: none;
}

.auth {
  display: flex;
  justify-content: center;
  padding: var(--space-6) var(--space-4) var(--space-8);
}

.auth-card {
  width: min(100%, 30rem);
  margin-top: var(--space-5);
}

.auth-card h1 {
  margin-bottom: var(--space-2);
}

.auth-card h2 {
  margin-top: var(--space-5);
}

.auth-intro {
  margin-bottom: var(--space-5);
  color: var(--muted);
}

.auth-form {
  display: grid;
  gap: var(--space-4);
}

.auth-form-compact {
  margin-top: var(--space-5);
  justify-items: start;
}

.field {
  display: grid;
  gap: var(--space-1);
}

.field-error {
  margin: 0;
  color: var(--danger);
  font-size: var(--text-sm);
}

.hint {
  margin: 0;
  color: var(--muted);
  font-size: var(--text-sm);
}

.optional {
  color: var(--muted);
  font-weight: 500;
}

.checkbox-row {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: start;
  gap: var(--space-2);
}

.checkbox-row label {
  margin: 0;
  font-weight: 500;
}

.checkbox-row input {
  width: 1.15rem;
  height: 1.15rem;
  margin-top: 0.2rem;
}

.auth-submit {
  justify-self: start;
}

.auth-links {
  margin-top: var(--space-4);
  color: var(--muted);
  font-size: var(--text-sm);
}

.auth-operator {
  margin: var(--space-2) 0 0;
  font-size: var(--text-xs);
}

.auth-operator a {
  color: var(--muted);
}

.welcome-list {
  margin: 0 0 var(--space-4);
  padding: 0;
  list-style: none;
  display: grid;
  gap: var(--space-2);
}

.welcome-list li {
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface);
}

@media (max-width: 480px) {
  .auth {
    padding-top: var(--space-4);
  }

  .auth-card {
    margin-top: 0;
  }
}

/* App shell (M2) — /app tenant pages (src/server/ui/layout.ts).
   Header with tenant switcher, primary nav + mobile <details> drawer, user
   menu, main landmark and footer. Every control keeps a >=44px touch target. */
.app-header {
  background: var(--surface);
  border-bottom: 1px solid var(--line);
}

.app-header__bar {
  width: min(var(--content-width), calc(100% - 2 * var(--space-5)));
  margin-inline: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) 0;
}

.app-header .brand {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: 44px;
  font-size: var(--text-xl);
  font-weight: 800;
  letter-spacing: -0.03em;
  text-decoration: none;
}

.brand-mark {
  display: inline-grid;
  place-items: center;
  width: 1.6rem;
  height: 1.6rem;
  border-radius: var(--radius-sm);
  background: var(--accent);
  color: #fff;
  font-size: 0.95rem;
  font-weight: 800;
  letter-spacing: 0;
}

.tenant-switcher {
  position: relative;
  min-width: 0;
  max-width: 100%;
}

.tenant-switcher > summary {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  max-width: 100%;
  min-height: 44px;
  padding: var(--space-1) var(--space-3);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-md);
  background: var(--surface);
  cursor: pointer;
  list-style: none;
}

.tenant-switcher > summary::-webkit-details-marker,
.app-nav-drawer > summary::-webkit-details-marker {
  display: none;
}

.tenant-switcher > summary::after {
  content: "▾";
  color: var(--muted);
  font-size: var(--text-xs);
}

.tenant-switcher[open] > summary::after {
  content: "▴";
}

.tenant-switcher__name {
  font-weight: 650;
  overflow-wrap: anywhere;
}

.tenant-switcher__role {
  color: var(--muted);
  font-size: var(--text-xs);
  white-space: nowrap;
}

.tenant-switcher__list {
  position: absolute;
  z-index: 6;
  top: calc(100% + var(--space-1));
  left: 0;
  min-width: min(22rem, 88vw);
  margin: 0;
  padding: var(--space-2);
  list-style: none;
  display: grid;
  gap: 2px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-md);
}

.tenant-switcher__list a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  min-height: 44px;
  padding: var(--space-1) var(--space-2);
  border-radius: var(--radius-sm);
  text-decoration: none;
}

.tenant-switcher__list a:hover,
.tenant-switcher__list a[aria-current="true"] {
  background: var(--accent-soft);
  color: var(--accent-strong);
}

.app-nav--bar {
  width: min(var(--content-width), calc(100% - 2 * var(--space-5)));
  margin-inline: auto;
}

.app-nav ul {
  display: flex;
  gap: var(--space-1);
  margin: 0;
  padding: 0 0 var(--space-1);
  list-style: none;
}

.app-nav a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 var(--space-3);
  border-radius: var(--radius-md);
  color: var(--muted);
  font-weight: 650;
  text-decoration: none;
}

.app-nav a:hover {
  color: var(--accent-strong);
  background: var(--surface-soft);
}

.app-nav a[aria-current="page"] {
  color: var(--accent-strong);
  background: var(--accent-soft);
}

.app-nav-drawer {
  display: none;
  width: min(var(--content-width), calc(100% - 2 * var(--space-5)));
  margin: 0 auto var(--space-2);
}

.app-nav-drawer > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 44px;
  padding: 0 var(--space-3);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-md);
  background: var(--surface);
  cursor: pointer;
  font-weight: 650;
  list-style: none;
}

.app-nav-drawer > summary::after {
  content: "▾";
  color: var(--muted);
}

.app-nav-drawer[open] > summary::after {
  content: "▴";
}

.app-nav-drawer ul {
  display: grid;
  gap: 2px;
  margin: var(--space-2) 0 0;
  padding: 0;
  list-style: none;
}

.app-user {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
}

.app-user__email {
  max-width: 18rem;
  color: var(--muted);
  font-size: var(--text-sm);
  overflow-wrap: anywhere;
}

.logout-form {
  display: inline-flex;
  margin: 0;
}

.app-main {
  padding: var(--space-6) 0 var(--space-8);
}

.app-main__inner {
  width: min(var(--content-width), calc(100% - 2 * var(--space-5)));
  margin-inline: auto;
}

.app-footer {
  border-top: 1px solid var(--line);
  color: var(--muted);
  font-size: var(--text-sm);
}

.app-footer p {
  width: min(var(--content-width), calc(100% - 2 * var(--space-5)));
  margin: 0 auto;
  padding: var(--space-4) 0;
}

.page-heading {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-4);
  margin-bottom: var(--space-5);
}

.page-heading h1 {
  margin: 0;
  font-size: var(--text-2xl);
}

.page-intro {
  max-width: 46rem;
  margin: var(--space-2) 0 0;
  color: var(--muted);
}

.eyebrow {
  margin: 0 0 var(--space-1);
  color: var(--accent-strong);
  font-size: var(--text-xs);
  font-weight: 750;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.sync-state {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  color: var(--muted);
  font-size: var(--text-sm);
}

.sync-label {
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  padding: 0 var(--space-3);
  border: 1px solid var(--line);
  border-radius: var(--radius-pill);
  background: var(--surface-soft);
}

#poll-status:empty {
  display: none;
}

.row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: center;
}

.row > input,
.row > select {
  flex: 1 1 10rem;
}

.workspace-grid {
  display: grid;
  grid-template-columns: minmax(240px, 300px) minmax(0, 1fr);
  gap: var(--space-4);
  align-items: start;
}

.threads h2,
.workspace-panel h2 {
  margin-top: 0;
}

.sidebar-help {
  margin: 0 0 var(--space-4);
  color: var(--muted);
  font-size: var(--text-sm);
}

.thread-list {
  display: grid;
  gap: 2px;
  margin: var(--space-4) 0 0;
  padding: 0;
  list-style: none;
}

.thread-list li {
  min-width: 0;
  display: grid;
  gap: 2px;
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-md);
}

.thread-list li:has(a[aria-current="page"]) {
  background: var(--accent-soft);
}

.thread-list a {
  display: block;
  min-height: 44px;
  padding: var(--space-2) 0;
  color: var(--ink);
  font-weight: 600;
  text-decoration: none;
  overflow-wrap: anywhere;
}

.thread-list a[aria-current="page"] {
  color: var(--accent-strong);
}

.thread-list time {
  color: var(--muted);
  font-size: var(--text-xs);
}

.empty {
  color: var(--muted);
}

.notice {
  margin: var(--space-3) 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius-md);
  background: var(--warning-soft);
  color: var(--ink);
}

.workspace-empty {
  min-height: 18rem;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: var(--space-2);
}

.conversation-header {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
  padding-bottom: var(--space-4);
  border-bottom: 1px solid var(--line);
}

.conversation-header h2 {
  margin: 0;
  overflow-wrap: anywhere;
}

.thread-meta {
  margin: 0;
  color: var(--muted);
  font-size: var(--text-xs);
}

.task-section,
.messages-section {
  margin-top: var(--space-5);
}

.tasks {
  display: grid;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.tasks li {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface-soft);
  overflow-wrap: anywhere;
}

.handle {
  font-weight: 650;
}

.tasks .badge {
  flex: 0 0 auto;
}

.badge[data-badge="queued"] {
  border-color: var(--warning);
  background: var(--warning-soft);
  color: var(--warning);
}

.badge[data-badge="running"],
.badge[data-badge="acknowledged"],
.badge[data-badge="delivery_unconfirmed"] {
  border-color: var(--accent);
  background: var(--accent-soft);
  color: var(--accent-strong);
}

.badge[data-badge="failed"],
.badge[data-badge="unreceipted"] {
  border-color: var(--danger);
  background: var(--danger-soft);
  color: var(--danger);
}

.badge[data-badge="replied"] {
  border-color: var(--success);
  background: var(--success-soft);
  color: var(--success);
}

.task-meta {
  color: var(--muted);
  font-size: var(--text-xs);
}

.messages {
  display: grid;
  gap: var(--space-3);
  margin: 0;
  padding: 0;
  list-style: none;
}

.message {
  min-width: 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface);
  overflow-wrap: anywhere;
}

.message .meta {
  margin: 0 0 var(--space-1);
  color: var(--muted);
  font-size: var(--text-xs);
}

.message .role {
  color: var(--ink);
  font-weight: 700;
}

.message .body {
  margin: 0;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.jump {
  position: sticky;
  bottom: var(--space-3);
  margin: var(--space-3) 0 0 auto;
}

.composer-panel {
  margin-top: var(--space-5);
  padding-top: var(--space-4);
  border-top: 1px solid var(--line);
}

.mentions {
  margin: var(--space-2) 0;
}

.mention {
  min-height: 44px;
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  color: var(--accent-strong);
}

#composer-status {
  color: var(--muted);
  font-size: var(--text-sm);
}

#composer-error {
  margin-top: var(--space-2);
}

.agent-list {
  display: grid;
  gap: var(--space-3);
  margin: 0;
  padding: 0;
  list-style: none;
}

.agent-card {
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface-soft);
  overflow-wrap: anywhere;
}

.agent-card h3 {
  margin: 0 0 var(--space-1);
  font-size: var(--text-lg);
}

.agent-meta {
  margin: 0 0 var(--space-2);
  color: var(--muted);
  font-size: var(--text-sm);
}

.help > summary {
  display: flex;
  align-items: center;
  min-height: 44px;
  cursor: pointer;
  font-weight: 650;
}

.bot-setup h2 {
  margin-top: 0;
}

.bot-create-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
  gap: var(--space-4);
  margin-top: var(--space-4);
}

.bot-setup fieldset {
  min-width: 0;
  margin: var(--space-2) 0;
  padding: var(--space-3);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
}

.bot-list {
  display: grid;
  gap: var(--space-3);
  margin: var(--space-4) 0 0;
  padding: 0;
  list-style: none;
}

.bot-card {
  padding-top: var(--space-4);
  border-top: 1px solid var(--line);
}

.bot-action {
  margin: var(--space-2) 0;
}

.bot-action-status {
  margin: 0;
  color: var(--muted);
  font-size: var(--text-sm);
}

.bot-action-error {
  margin: 0;
  color: var(--danger);
  font-size: var(--text-sm);
}

.tenant-list,
.member-list {
  display: grid;
  gap: var(--space-2);
  margin: 0 0 var(--space-4);
  padding: 0;
  list-style: none;
}

.tenant-list a,
.member-list li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  min-height: 44px;
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface);
}

.tenant-list a {
  text-decoration: none;
}

.member-email {
  overflow-wrap: anywhere;
}

.table-wrap {
  overflow-x: auto;
}

.roster-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.roster-table th,
.roster-table td {
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--line);
  text-align: left;
  vertical-align: top;
}

.error-card h1 {
  font-size: var(--text-xl);
}

/* M3a/M3b: thread lifecycle, message actions, attachments, onboarding,
   search results and the thread-view back navigation. */
.thread-back {
  display: none;
  min-height: 44px;
  align-items: center;
}

.thread-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: flex-start;
  margin-top: var(--space-3);
}

.thread-actions details {
  min-width: 0;
}

.thread-views {
  display: flex;
  gap: var(--space-3);
  margin: var(--space-2) 0;
}

.thread-views a[aria-current='true'] {
  font-weight: 700;
  text-decoration: underline;
}

.edited {
  color: var(--muted);
  font-size: var(--text-xs);
}

.message.is-deleted .body-deleted {
  color: var(--muted);
  font-style: italic;
}

.message-actions {
  margin-top: var(--space-2);
}

.message-actions textarea {
  width: 100%;
  min-width: 0;
}

.attachment-chips,
.attachment-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin: var(--space-2) 0 0;
  padding: 0;
  list-style: none;
}

.attachment-chip {
  display: inline-flex;
  gap: var(--space-2);
  align-items: center;
  max-width: 100%;
  padding: var(--space-1) var(--space-2);
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  overflow-wrap: anywhere;
}

.attachment-chip a {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  overflow-wrap: anywhere;
}

.attachment-size {
  color: var(--muted);
  font-size: var(--text-xs);
}

.attachment-section {
  margin-top: var(--space-5);
}

.attachment-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  overflow-wrap: anywhere;
}

.attachment-row form {
  margin: 0;
}

#attachment-form {
  margin-top: var(--space-3);
}

#attachment-form input[type='file'] {
  max-width: 100%;
}

.onboarding {
  margin-bottom: var(--space-4);
}

.onboarding-steps {
  display: grid;
  gap: var(--space-2);
  margin: var(--space-2) 0;
  padding-left: var(--space-4);
}

.onboarding-step {
  display: flex;
  gap: var(--space-2);
  align-items: flex-start;
}

.onboarding-step.is-done .onboarding-mark {
  color: var(--success);
}

.onboarding-mark {
  font-weight: 700;
}

.onboarding-state {
  color: var(--muted);
  font-size: var(--text-xs);
}

.search-results .search-list {
  margin: var(--space-2) 0 var(--space-4);
  padding-left: var(--space-4);
}

.search-snippet {
  margin: var(--space-1) 0;
  overflow-wrap: anywhere;
}

mark {
  background: var(--accent-soft);
  color: var(--ink);
}

.confirm-card {
  border-color: var(--danger);
}

.btn-danger {
  background: var(--danger);
  color: #fff;
}

@media (max-width: 768px) {
  .app-nav--bar {
    display: none;
  }

  .app-nav-drawer {
    display: block;
  }

  .tenant-switcher__list {
    position: static;
    width: 100%;
    min-width: 0;
    margin-top: var(--space-2);
    box-shadow: none;
  }

  .workspace-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .app-user__email {
    max-width: 40%;
  }
  .workspace-grid.is-thread-view .threads {
    display: none;
  }

  .thread-back {
    display: inline-flex;
  }

  .composer-panel {
    position: sticky;
    bottom: 0;
    z-index: 2;
    padding-bottom: var(--space-3);
    background: var(--surface);
  }

  .thread-list a,
  .thread-views a,
  .thread-actions .btn,
  #composer button,
  .message-actions summary,
  .attachment-row .btn {
    min-height: 44px;
  }

  .thread-views {
    flex-wrap: wrap;
  }
}

@media (max-width: 420px) {
  .app-header__bar {
    gap: var(--space-2);
  }

  .app-user {
    width: 100%;
    justify-content: space-between;
  }

  .page-heading {
    flex-direction: column;
  }

  .row {
    flex-wrap: wrap;
  }

  .row > input,
  .row > textarea,
  .row > select {
    flex: 1 1 100%;
    min-width: 0;
  }

  .attachment-chip {
    width: 100%;
  }

  .conversation-header {
    flex-direction: column;
    align-items: flex-start;
  }
}

/* M8: tenant operations (승인·정책·감사·이벤트·예약·사용량). */
.ops-tabs {
  margin: var(--space-3) 0 var(--space-4);
}

.ops-tabs ul {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  list-style: none;
}

.ops-tabs a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 var(--space-3);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  color: var(--muted);
  text-decoration: none;
}

.ops-tabs a[aria-current='page'] {
  border-color: var(--accent);
  background: var(--accent-soft);
  color: var(--accent-strong);
  font-weight: 700;
}

.ops-filter {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--space-2);
  margin: 0 0 var(--space-4);
}

.ops-filter label {
  flex: 1 1 100%;
}

.ops-audit-actions,
.ops-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin: var(--space-3) 0;
}

.ops-inline-form {
  margin: 0;
}

.ops-card {
  margin-bottom: var(--space-4);
}

.ops-card h2 {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
}

.ops-detail {
  display: grid;
  grid-template-columns: minmax(7rem, max-content) minmax(0, 1fr);
  gap: var(--space-1) var(--space-3);
  margin: var(--space-3) 0;
}

.ops-detail dt {
  color: var(--muted);
  font-size: var(--text-sm);
}

.ops-detail dd {
  margin: 0;
  overflow-wrap: anywhere;
}

.ops-prompt {
  white-space: pre-wrap;
}

.ops-masked {
  margin: var(--space-3) 0;
}

.ops-label {
  margin: 0 0 var(--space-1);
  color: var(--muted);
  font-size: var(--text-sm);
}

.ops-pre {
  max-width: 100%;
  margin: 0;
  padding: var(--space-3);
  overflow-x: auto;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--surface-soft);
  font-size: var(--text-sm);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.ops-decision,
.ops-form {
  display: grid;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

.ops-field {
  display: grid;
  gap: var(--space-1);
  min-width: 0;
}

.ops-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.ops-table th,
.ops-table td {
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--line);
  text-align: left;
  vertical-align: top;
  overflow-wrap: anywhere;
}

.ops-table th {
  color: var(--muted);
  font-weight: 600;
}

.ops-pager {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

.ops-result {
  margin-top: var(--space-4);
}

.ops-sim-effect {
  font-weight: 700;
}

@media (max-width: 390px) {
  .ops-detail {
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
  }

  .ops-detail dt {
    margin-top: var(--space-2);
  }

  .ops-table thead {
    display: none;
  }

  .ops-table,
  .ops-table tbody,
  .ops-table tr,
  .ops-table td {
    display: block;
    width: 100%;
  }

  .ops-table tr {
    margin-bottom: var(--space-3);
    padding: var(--space-2) var(--space-3);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--surface);
  }

  .ops-table td {
    display: grid;
    grid-template-columns: minmax(6rem, 40%) minmax(0, 1fr);
    gap: var(--space-2);
    padding: var(--space-1) 0;
    border-bottom: 0;
  }

  .ops-table td::before {
    content: attr(data-label);
    color: var(--muted);
    font-size: var(--text-xs);
  }
}
