/* Tabs */
.tab-btn {
  padding: 0.4rem 0.85rem;
  border-radius: 0.375rem;
  font-size: 0.875rem;
  color: rgb(71 85 105);
  transition: background-color 120ms, color 120ms;
}
.tab-btn:hover { background-color: rgb(241 245 249); color: rgb(15 23 42); }
.tab-btn.active { background-color: rgb(15 23 42); color: white; }
.tab-btn.active:hover { background-color: rgb(30 41 59); color: white; }

/* Admin dropdown */
.tab-dropdown { position: relative; }
.admin-trigger { display: inline-flex; align-items: center; gap: 0.3rem; }
.admin-caret { font-size: 0.7rem; opacity: 0.7; }
.tab-dropdown-menu {
  position: absolute;
  top: calc(100% + 0.25rem);
  right: 0;
  min-width: 11rem;
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  box-shadow: 0 8px 20px rgba(0,0,0,0.08);
  padding: 0.25rem;
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
}
.tab-dropdown-menu.hidden { display: none; }
.tab-dropdown-item {
  text-align: left;
  padding: 0.4rem 0.7rem;
  border-radius: 0.3rem;
  font-size: 0.875rem;
  color: rgb(51 65 85);
  background: transparent;
  border: none;
  cursor: pointer;
}
.tab-dropdown-item:hover { background: rgb(241 245 249); color: rgb(15 23 42); }
.tab-dropdown-item.active { background: rgb(15 23 42); color: white; }

/* View toggle */
.view-btn {
  padding: 0.25rem 0.6rem;
  border-radius: 0.25rem;
  color: rgb(71 85 105);
}
.view-btn:hover { color: rgb(15 23 42); }
.view-btn.active { background-color: rgb(15 23 42); color: white; }

/* File list items */
.file-item {
  display: block;
  padding: 0.5rem 0.75rem;
  border-radius: 0.375rem;
  cursor: pointer;
  transition: background-color 120ms;
}
.file-item:hover { background-color: rgb(241 245 249); }
.file-item.active { background-color: rgb(224 231 255); color: rgb(30 27 75); }
.file-item .file-title { display: block; font-size: 0.875rem; font-weight: 500; }
.file-item .file-sub { display: block; font-size: 0.75rem; color: rgb(100 116 139); margin-top: 0.125rem; }
.file-item.active .file-sub { color: rgb(67 56 202); }
.sidebar-divider {
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: rgb(100 116 139);
  padding: 0.65rem 0.65rem 0.35rem;
  margin-top: 0.4rem;
  border-top: 1px solid rgb(226 232 240);
  list-style: none;
}

/* Markdown content */
.prose-md h1 { font-size: 1.5rem; font-weight: 700; margin: 0 0 0.75rem 0; }
.prose-md h2 { font-size: 1.125rem; font-weight: 600; margin: 1.25rem 0 0.5rem 0; padding-top: 0.75rem; border-top: 1px solid rgb(226 232 240); }
.prose-md h2:first-child { padding-top: 0; border-top: none; }
.prose-md h3 { font-size: 1rem; font-weight: 600; margin: 1rem 0 0.4rem 0; color: rgb(51 65 85); }
.prose-md p, .prose-md ul, .prose-md ol { margin: 0.5rem 0; line-height: 1.6; font-size: 0.9rem; }
.prose-md ul { list-style: disc; padding-left: 1.5rem; }
.prose-md ol { list-style: decimal; padding-left: 1.5rem; }
.prose-md li { margin: 0.2rem 0; }
.prose-md code { background-color: rgb(241 245 249); padding: 0.1rem 0.35rem; border-radius: 0.25rem; font-size: 0.85em; }
.prose-md pre { background-color: rgb(15 23 42); color: rgb(226 232 240); padding: 0.75rem 1rem; border-radius: 0.375rem; overflow-x: auto; font-size: 0.85em; }
.prose-md pre code { background: none; padding: 0; color: inherit; }
.prose-md blockquote { border-left: 3px solid rgb(203 213 225); padding-left: 0.85rem; color: rgb(71 85 105); margin: 0.5rem 0; }
.prose-md hr { border: 0; border-top: 1px solid rgb(226 232 240); margin: 1rem 0; }
.prose-md a { color: rgb(37 99 235); text-decoration: underline; }
.prose-md table { width: 100%; border-collapse: collapse; margin: 0.75rem 0; font-size: 0.85rem; }
.prose-md th, .prose-md td { padding: 0.4rem 0.6rem; border: 1px solid rgb(226 232 240); text-align: left; vertical-align: top; }
.prose-md th { background-color: rgb(248 250 252); font-weight: 600; }
.prose-md strong { font-weight: 600; }

/* Sprint board */
.board-section { margin-bottom: 1.5rem; }
.board-section h3 { font-size: 0.875rem; font-weight: 600; color: rgb(71 85 105); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.5rem; }
.board-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0.75rem; }
.card {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  padding: 0.75rem 0.85rem;
  box-shadow: 0 1px 2px rgb(0 0 0 / 4%);
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  transition: box-shadow 150ms, transform 150ms;
}
.card:hover { box-shadow: 0 4px 8px rgb(0 0 0 / 6%); transform: translateY(-1px); }
.card.priority-high { border-left: 4px solid rgb(220 38 38); }
.card.priority-medium { border-left: 4px solid rgb(234 179 8); }
.card.priority-low { border-left: 4px solid rgb(34 197 94); }
.card.priority-unknown { border-left: 4px solid rgb(148 163 184); }
.card .card-head { display: flex; justify-content: space-between; align-items: start; gap: 0.5rem; }
.card .card-tkt { font-family: ui-monospace, SFMono-Regular, monospace; font-size: 0.7rem; color: rgb(100 116 139); }
.card .card-priority { font-size: 0.65rem; padding: 0.1rem 0.4rem; border-radius: 0.25rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }
.card .card-priority.high { background: rgb(254 226 226); color: rgb(153 27 27); }
.card .card-priority.medium { background: rgb(254 249 195); color: rgb(133 77 14); }
.card .card-priority.low { background: rgb(220 252 231); color: rgb(22 101 52); }
.card .card-priority.unknown { background: rgb(241 245 249); color: rgb(71 85 105); }
.card .card-subj { font-size: 0.875rem; font-weight: 500; line-height: 1.35; }
.card .card-meta { font-size: 0.7rem; color: rgb(100 116 139); display: flex; gap: 0.5rem; flex-wrap: wrap; }
.card .card-notes { font-size: 0.75rem; color: rgb(71 85 105); line-height: 1.4; border-top: 1px solid rgb(241 245 249); padding-top: 0.4rem; }

/* Standup blocks */
.standup-block { background: white; border: 1px solid rgb(226 232 240); border-radius: 0.5rem; padding: 0.85rem 1rem; margin-bottom: 0.75rem; }
.standup-block.has-blockers { border-left: 4px solid rgb(234 88 12); }
.standup-block .standup-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.4rem; }
.standup-block .standup-name { font-weight: 600; }
.standup-block .standup-count { font-size: 0.7rem; color: rgb(100 116 139); }
.standup-block dl { display: grid; grid-template-columns: 5rem 1fr; gap: 0.3rem 0.75rem; font-size: 0.825rem; margin-top: 0.4rem; }
.standup-block dt { font-weight: 600; color: rgb(71 85 105); }
.standup-block dd { color: rgb(30 41 59); white-space: pre-line; }
.standup-block dd.blockers { color: rgb(154 52 18); }

/* Goal banner */
.goal-banner { background: linear-gradient(135deg, rgb(15 23 42), rgb(30 41 59)); color: white; padding: 1rem 1.25rem; border-radius: 0.5rem; margin-bottom: 1.25rem; }
.goal-banner .goal-label { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em; color: rgb(148 163 184); margin-bottom: 0.3rem; }
.goal-banner .goal-text { font-size: 1rem; line-height: 1.5; }

/* Capacity stats */
.stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 0.6rem; margin-bottom: 1.25rem; }
.stat-card { background: white; border: 1px solid rgb(226 232 240); border-radius: 0.5rem; padding: 0.75rem; }
.stat-card .stat-label { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.05em; color: rgb(100 116 139); margin-bottom: 0.25rem; }
.stat-card .stat-value { font-size: 1.4rem; font-weight: 600; color: rgb(15 23 42); }

/* Grouped ticket sections (Spark / Framework) */
.group-section {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  overflow: hidden;
}
.group-head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.65rem 0.85rem;
  background: rgb(248 250 252);
  border-bottom: 1px solid rgb(226 232 240);
}
.group-title { font-size: 0.95rem; font-weight: 600; color: rgb(15 23 42); }
.group-count {
  font-size: 0.7rem;
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  background: white;
  border: 1px solid rgb(226 232 240);
  color: rgb(71 85 105);
  font-weight: 600;
}
.group-empty { padding: 0.85rem 1rem; color: rgb(148 163 184); font-style: italic; font-size: 0.85rem; }

.ticket-table-wrap { overflow-x: auto; }
.ticket-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; }
.ticket-table thead th {
  text-align: left;
  font-weight: 600;
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: rgb(100 116 139);
  background: rgb(248 250 252);
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid rgb(226 232 240);
  white-space: nowrap;
}
.ticket-table tbody td { padding: 0.55rem 0.75rem; border-bottom: 1px solid rgb(241 245 249); vertical-align: top; }
.ticket-table tbody tr { cursor: pointer; transition: background-color 100ms; }
.ticket-table tbody tr:hover { background: rgb(248 250 252); }
.ticket-table tbody tr:last-child td { border-bottom: none; }
.ticket-table .col-tkt { font-family: ui-monospace, SFMono-Regular, monospace; font-size: 0.75rem; color: rgb(71 85 105); white-space: nowrap; }
.ticket-table .col-subj { color: rgb(15 23 42); font-weight: 500; min-width: 280px; }
.ticket-table .col-status, .ticket-table .col-priority, .ticket-table .col-category { white-space: nowrap; color: rgb(71 85 105); }
.ticket-table .col-assignee { color: rgb(51 65 85); white-space: nowrap; }
.ticket-table .col-reporter { color: rgb(51 65 85); white-space: nowrap; }
.ticket-table .col-meta { color: rgb(71 85 105); white-space: nowrap; font-size: 0.8rem; }
.ticket-table .col-created { color: rgb(100 116 139); white-space: nowrap; font-size: 0.75rem; }
.ticket-table .col-updated { color: rgb(100 116 139); white-space: nowrap; font-size: 0.75rem; }
.ticket-table .col-tags { white-space: normal; max-width: 14rem; }
.ticket-table .col-notes { color: rgb(71 85 105); font-size: 0.75rem; max-width: 24rem; white-space: normal; line-height: 1.35; }

/* Tag chips on ticket rows */
.tag-chip {
  display: inline-block;
  font-size: 0.65rem;
  padding: 0.1rem 0.45rem;
  border-radius: 999px;
  background: rgb(241 245 249);
  color: rgb(51 65 85);
  font-weight: 500;
  margin: 0.1rem 0.2rem 0.1rem 0;
  white-space: nowrap;
  border: 1px solid rgb(226 232 240);
}
.tag-chip.tag-spark, .tag-chip.tag-spark-portal { background: rgb(238 242 255); color: rgb(67 56 202); border-color: rgb(199 210 254); }
.tag-chip.tag-framework, .tag-chip.tag-new-framework { background: rgb(236 253 245); color: rgb(6 95 70); border-color: rgb(167 243 208); }
.tag-chip.tag-internal-ticket, .tag-chip.tag-comments, .tag-chip.tag-updates { background: rgb(254 249 195); color: rgb(133 77 14); border-color: rgb(253 224 71); }
.tag-chip.tag-content { background: rgb(219 234 254); color: rgb(30 64 175); border-color: rgb(147 197 253); }
.tag-chip.tag-login, .tag-chip.tag-password, .tag-chip.tag-access { background: rgb(254 226 226); color: rgb(153 27 27); border-color: rgb(252 165 165); }
.tag-chip.tag-attachments, .tag-chip.tag-search { background: rgb(245 243 255); color: rgb(91 33 182); border-color: rgb(196 181 253); }
.tag-chip.tag-email, .tag-chip.tag-branding, .tag-chip.tag-outlook { background: rgb(255 237 213); color: rgb(154 52 18); border-color: rgb(253 186 116); }
.ticket-table .priority-row-high { box-shadow: inset 3px 0 0 rgb(220 38 38); }
.ticket-table .priority-row-medium { box-shadow: inset 3px 0 0 rgb(234 179 8); }
.ticket-table .priority-row-low { box-shadow: inset 3px 0 0 rgb(34 197 94); }
.ticket-table .priority-row-unknown { box-shadow: inset 3px 0 0 rgb(203 213 225); }
.row-priority { font-size: 0.65rem; padding: 0.1rem 0.4rem; border-radius: 0.25rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }
.row-priority.high { background: rgb(254 226 226); color: rgb(153 27 27); }
.row-priority.medium { background: rgb(254 249 195); color: rgb(133 77 14); }
.row-priority.low { background: rgb(220 252 231); color: rgb(22 101 52); }
.row-priority.unknown { background: rgb(241 245 249); color: rgb(71 85 105); }
.priority-derived { margin-left: 0.2rem; opacity: 0.55; cursor: help; }
.row-overdue { background: rgb(254 226 226); color: rgb(153 27 27); font-size: 0.65rem; font-weight: 600; padding: 0.05rem 0.35rem; border-radius: 0.25rem; margin-left: 0.4rem; }

/* Live board mode toggle (Active vs Recently closed) */
.board-mode-btn {
  padding: 0.25rem 0.6rem;
  border-radius: 0.25rem;
  color: rgb(71 85 105);
  font-weight: 500;
  background: transparent;
  border: none;
  cursor: pointer;
}
.board-mode-btn:hover { color: rgb(15 23 42); background: rgb(248 250 252); }
.board-mode-btn.active { background: rgb(15 23 42); color: white; }
.board-mode-btn.active:hover { background: rgb(30 41 59); }

.ticket-table .col-closed { color: rgb(100 116 139); white-space: nowrap; font-size: 0.75rem; }

/* Live polling pulse + freshness indicator in the header */
.live-pulse {
  display: inline-block;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 999px;
  background: rgb(34 197 94);
  box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.55);
  animation: live-pulse-anim 2.2s ease-out infinite;
}
@keyframes live-pulse-anim {
  0%   { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.55); }
  70%  { box-shadow: 0 0 0 6px rgba(34, 197, 94, 0); }
  100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
}

/* "NEW since last visit" badge in the Subject cell of the live board */
.ticket-new-badge {
  display: inline-block;
  background: rgb(219 234 254);
  color: rgb(29 78 216);
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  padding: 0.05rem 0.4rem;
  border-radius: 0.25rem;
  margin-left: 0.4rem;
  border: 1px solid rgb(147 197 253);
  vertical-align: middle;
}

.board-section-sub { font-size: 0.75rem; font-weight: 500; color: rgb(100 116 139); margin-left: 0.4rem; }

/* Assignable secondary sections at the bottom of Triage (Stretch / Needs more info / Cleanups / Decisions) */
.assignable-section {
  border: 1px solid rgb(226 232 240);
  border-left: 4px solid var(--accent, rgb(148 163 184));
  border-radius: 0.5rem;
  background: white;
  padding: 0.65rem 0.85rem;
  margin: 1rem 0;
}
.assignable-section > summary {
  cursor: pointer;
  font-size: 0.9rem;
  font-weight: 700;
  color: rgb(15 23 42);
  padding: 0.25rem 0;
  text-transform: none;
  letter-spacing: 0;
  list-style: none;
}
.assignable-section > summary::before {
  content: '▸';
  display: inline-block;
  width: 1rem;
  color: rgb(100 116 139);
  transition: transform 150ms;
}
.assignable-section[open] > summary::before { transform: rotate(90deg); }
.section-explanation {
  font-size: 0.78rem;
  color: rgb(71 85 105);
  line-height: 1.5;
  margin: 0.35rem 0 0.7rem;
  font-style: italic;
}
.assignable-stretch    { --accent: rgb(59 130 246); }
.assignable-groom      { --accent: rgb(245 158 11); }
.assignable-cleanup    { --accent: rgb(148 163 184); }
.assignable-decisions  { --accent: rgb(139 92 246); }

/* Whole-card click target — cursor + hover hint so users know the row opens the picker */
.assignable-row, .sprint-card-row, .theme-row:has(.theme-assign-select) {
  cursor: pointer;
}
.assignable-row:hover, .sprint-card-row:hover {
  background: rgb(238 242 255);
}
.theme-row:has(.theme-assign-select):hover .theme-title {
  color: rgb(67 56 202);
}

/* Sprint board table extras */
.theme-title { font-size: 1.125rem; font-weight: 700; color: rgb(15 23 42); margin: 1.1rem 0 0.5rem; }
.theme-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.75rem;
  margin: 1.1rem 0 0.5rem;
}
.theme-row .theme-title {
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.theme-meta { font-size: 0.7rem; font-weight: 500; color: rgb(100 116 139); margin-left: 0.4rem; }
/* Read-only theme rows on Triage (no Owner column) — just show the categorization. */
.theme-row-readonly { grid-template-columns: 1fr; }
.standup-theme-count { font-size: 0.65rem; color: rgb(100 116 139); font-weight: 600; }
.standup-theme-row-project .standup-theme-tkt { display: inline-flex; align-items: center; gap: 0.25rem; color: rgb(88 28 135); font-size: 0.65rem; font-weight: 700; }

/* Individual override indicators on Standups */
.standup-override-badge {
  display: inline-block;
  font-size: 0.6rem;
  font-weight: 700;
  background: rgb(254 226 226);
  color: rgb(153 27 27);
  padding: 0.05rem 0.35rem;
  border-radius: 0.2rem;
  margin-left: 0.4rem;
  vertical-align: middle;
}
.standup-row-moved { opacity: 0.55; text-decoration: line-through; }
.standup-row-moved .standup-override-badge { opacity: 1; text-decoration: none; }
.standup-from-badge {
  display: inline-block;
  font-size: 0.6rem;
  font-weight: 600;
  background: rgb(241 245 249);
  color: rgb(71 85 105);
  padding: 0.05rem 0.35rem;
  border-radius: 0.2rem;
  margin-left: 0.4rem;
  vertical-align: middle;
}
.theme-assign { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.8rem; }
.theme-assign-label { color: rgb(100 116 139); font-weight: 600; text-transform: uppercase; font-size: 0.65rem; letter-spacing: 0.04em; }
.theme-assignee-chip {
  font-size: 0.78rem;
  font-weight: 600;
  color: rgb(15 23 42);
  background: rgb(241 245 249);
  padding: 0.15rem 0.55rem;
  border-radius: 0.3rem;
}
.theme-assign-select {
  font-size: 0.78rem;
  padding: 0.2rem 0.4rem;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.3rem;
  background: white;
}
.theme-assign-select:focus { outline: 2px solid rgb(99 102 241); outline-offset: 1px; }
.theme-save-toast {
  display: inline-block;
  font-size: 0.7rem;
  font-weight: 600;
  padding: 0.15rem 0.45rem;
  border-radius: 0.3rem;
  opacity: 0;
  transition: opacity 200ms;
  pointer-events: none;
  margin-left: 0.3rem;
}
.theme-save-toast.visible { opacity: 1; }
.theme-save-toast.ok    { background: rgb(220 252 231); color: rgb(22 101 52); border: 1px solid rgb(134 239 172); }
.theme-save-toast.error { background: rgb(254 226 226); color: rgb(153 27 27); border: 1px solid rgb(252 165 165); }

/* Sprint screen — backlog cards with per-card dropdown */
.sprint-cards-hint { font-size: 0.75rem; color: rgb(100 116 139); margin-bottom: 0.65rem; }
.sprint-kanban { margin-top: 0.5rem; }
.sprint-card-row {
  display: grid !important;
  grid-template-columns: 4.5rem 1fr auto;
  align-items: baseline;
  column-gap: 0.45rem;
  row-gap: 0.2rem;
}
.sprint-card-row.project-item {
  grid-template-columns: 1fr auto;
  align-items: center;
}
.sprint-card-row.project-item .project-row1 { display: flex; align-items: center; gap: 0.4rem; }
.sprint-card-row[data-owner] { background: rgb(243 244 246); }
.sprint-card-row[data-owner]::after {
  content: 'owner: ' attr(data-owner);
  grid-column: 1 / -1;
  font-size: 0.65rem;
  color: rgb(67 56 202);
  font-weight: 600;
  background: rgb(238 242 255);
  padding: 0.05rem 0.4rem;
  border-radius: 0.2rem;
  margin-top: 0.1rem;
  width: max-content;
  justify-self: end;
}
.sprint-card-assign {
  font-size: 0.7rem;
  padding: 0.1rem 0.3rem;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.25rem;
  background: white;
  max-width: 9rem;
}
.sprint-card-assign:focus { outline: 2px solid rgb(99 102 241); outline-offset: 1px; }

.standup-loose-tickets, .standup-loose-projects {
  background: rgb(248 250 252);
}

/* Standup kanban (columns by user, theme cards inside) */
.standup-meta {
  font-size: 0.8rem;
  color: rgb(71 85 105);
  margin-bottom: 0.85rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}
.standup-meta-label { font-weight: 700; text-transform: uppercase; font-size: 0.65rem; letter-spacing: 0.05em; color: rgb(100 116 139); }
.standup-meta-hint { margin-left: auto; font-size: 0.75rem; color: rgb(100 116 139); }
.standup-kanban {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  gap: 0.85rem;
  overflow-x: auto;
  padding-bottom: 0.5rem;
}
.standup-col {
  background: rgb(248 250 252);
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  display: flex;
  flex-direction: column;
  min-height: 5rem;
  flex: 0 0 320px;
  width: 320px;
}
.standup-col-unassigned {
  background: rgb(255 247 237);
  border-color: rgb(253 186 116);
}
.standup-col-head {
  padding: 0.6rem 0.85rem;
  background: white;
  border-bottom: 1px solid rgb(226 232 240);
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
}
.standup-col-unassigned .standup-col-head { background: rgb(255 251 235); border-bottom-color: rgb(253 186 116); }
.standup-col-name { font-size: 0.95rem; font-weight: 700; color: rgb(15 23 42); }
.standup-col-meta { font-size: 0.7rem; color: rgb(100 116 139); margin-top: 0.1rem; }
.standup-col-body { padding: 0.55rem; display: flex; flex-direction: column; gap: 0.55rem; }
.standup-theme-card {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.4rem;
  padding: 0.55rem 0.7rem;
}
.standup-theme-title { font-size: 0.85rem; font-weight: 600; color: rgb(15 23 42); margin-bottom: 0.3rem; line-height: 1.3; }
.standup-theme-tickets { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.15rem; }
.standup-theme-row { display: flex; align-items: baseline; gap: 0.4rem; font-size: 0.75rem; line-height: 1.35; }
.standup-theme-tkt { font-family: ui-monospace, SFMono-Regular, monospace; font-size: 0.68rem; min-width: 4.5rem; flex-shrink: 0; }
.standup-theme-subj { color: rgb(51 65 85); flex: 1; }

/* Triage banner — Insights / Considerations / Next steps */
.triage-banner { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0.75rem; margin-bottom: 1.25rem; }
.triage-block { background: white; border: 1px solid rgb(226 232 240); border-radius: 0.5rem; padding: 0.85rem 1rem; }
.triage-block-label { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: rgb(71 85 105); margin-bottom: 0.5rem; }
.triage-block-list { font-size: 0.875rem; line-height: 1.5; color: rgb(30 41 59); padding-left: 1.1rem; margin: 0; }
.triage-block-list li { margin: 0.25rem 0; }
.triage-block-list strong { color: rgb(15 23 42); }
.triage-block-list code { background: rgb(241 245 249); padding: 0.05rem 0.3rem; border-radius: 0.2rem; font-size: 0.85em; }

/* Triage sub-section table label (e.g., "Spark portal bugs (assign to ...)") */
.triage-table-label { font-size: 1rem; font-weight: 700; color: rgb(15 23 42); margin: 1rem 0 0.4rem; }

/* Triage summary tables — multi-table grid under "## Summary counts" */
.triage-summary { margin-bottom: 1.25rem; }
.triage-summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0.75rem; }
.triage-summary-block {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  padding: 0.7rem 0.85rem;
}
.triage-summary-label {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgb(71 85 105);
  margin-bottom: 0.45rem;
}
.triage-summary-block .ticket-table { font-size: 0.78rem; }
.triage-summary-block .ticket-table thead th {
  font-size: 0.65rem;
  padding: 0.3rem 0.5rem;
  background: transparent;
  border-bottom: 1px solid rgb(241 245 249);
}
.triage-summary-block .ticket-table tbody td {
  padding: 0.35rem 0.5rem;
  border-bottom: 1px solid rgb(241 245 249);
}
.triage-summary-block .ticket-table tbody tr:hover { background: transparent; cursor: default; }
.triage-summary-block .ticket-table tbody tr:last-child td { border-bottom: none; }
.triage-summary-merged { display: flex; flex-direction: column; gap: 0.5rem; }
.triage-summary-sub { border-top: 1px dashed rgb(226 232 240); padding-top: 0.35rem; }
.triage-summary-sub:first-child { border-top: none; padding-top: 0; }
.triage-summary-sublabel { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.05em; color: rgb(100 116 139); margin-bottom: 0.25rem; }

/* Triage kanban — 3 columns (Urgent / Backlog / Can wait) with theme buckets inside */
.triage-kanban {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.85rem;
  margin-bottom: 1.25rem;
}
@media (max-width: 1100px) {
  .triage-kanban { grid-template-columns: 1fr; }
}
.triage-col {
  background: rgb(248 250 252);
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  display: flex;
  flex-direction: column;
  min-height: 14rem;
}
.triage-col-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.6rem 0.85rem;
  background: white;
  border-bottom: 1px solid rgb(226 232 240);
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
  border-left: 4px solid var(--col-accent, rgb(148 163 184));
}
.triage-col-urgent .triage-col-head { --col-accent: rgb(220 38 38); }
.triage-col-backlog .triage-col-head { --col-accent: rgb(234 179 8); }
.triage-col-projects .triage-col-head { --col-accent: rgb(139 92 246); }
.triage-col-title { font-size: 0.95rem; font-weight: 700; color: rgb(15 23 42); }
.triage-col-count {
  font-size: 0.75rem;
  font-weight: 700;
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  background: rgb(241 245 249);
  color: rgb(51 65 85);
}
.triage-col-urgent .triage-col-count { background: rgb(254 226 226); color: rgb(153 27 27); }
.triage-col-backlog .triage-col-count { background: rgb(254 249 195); color: rgb(133 77 14); }
.triage-col-projects .triage-col-count { background: rgb(243 232 255); color: rgb(88 28 135); }

.triage-col-body { padding: 0.6rem; display: flex; flex-direction: column; gap: 0.65rem; flex: 1; }
.triage-col-empty { color: rgb(148 163 184); font-style: italic; font-size: 0.8rem; padding: 0.85rem 0.4rem; text-align: center; }

.triage-theme {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.4rem;
  padding: 0.5rem 0.65rem;
}
.triage-theme-head {
  font-size: 0.78rem;
  font-weight: 700;
  color: rgb(30 41 59);
  margin-bottom: 0.35rem;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}
.triage-theme-count { font-size: 0.65rem; color: rgb(100 116 139); font-weight: 600; }
.triage-theme-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.2rem; }
.triage-ticket-item {
  display: flex;
  align-items: baseline;
  gap: 0.45rem;
  font-size: 0.78rem;
  line-height: 1.35;
  padding: 0.15rem 0;
  border-bottom: 1px dashed rgb(241 245 249);
}
.triage-ticket-item:last-child { border-bottom: none; }
.triage-ticket-tkt { font-family: ui-monospace, SFMono-Regular, monospace; font-size: 0.7rem; flex-shrink: 0; min-width: 4.5rem; }
.triage-ticket-subj { color: rgb(30 41 59); flex: 1; }

/* Read-only assignee chip on Sprint backlog cards — sourced from Spark's assigned_to_user_id. */
.card-assignee-chip {
  display: inline-block;
  flex-shrink: 0;
  font-size: 0.65rem;
  font-weight: 600;
  background: rgb(219 234 254);
  color: rgb(30 58 138);
  padding: 0.1rem 0.45rem;
  border-radius: 0.25rem;
  white-space: nowrap;
  max-width: 9rem;
  overflow: hidden;
  text-overflow: ellipsis;
  vertical-align: middle;
}
.card-assignee-chip.card-assignee-none {
  background: rgb(241 245 249);
  color: rgb(100 116 139);
  font-weight: 500;
  font-style: italic;
}

/* Projects column — meeting-derived work that doesn't have Spark tickets yet */
.triage-projects-theme { background: rgb(250 245 255); border-color: rgb(216 180 254); }
.triage-projects-theme .triage-theme-head { color: rgb(88 28 135); }
.project-item {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  padding: 0.35rem 0;
  border-bottom: 1px dashed rgb(233 213 255);
  cursor: help;
}
.project-item:last-child { border-bottom: none; }
.project-row1 { display: flex; align-items: baseline; gap: 0.4rem; }
.project-urgency-dot {
  display: inline-block;
  width: 0.5rem; height: 0.5rem;
  border-radius: 999px;
  flex-shrink: 0;
  margin-top: 0.25rem;
}
.project-urgency-dot.urgency-high   { background: rgb(220 38 38); }
.project-urgency-dot.urgency-medium { background: rgb(234 179 8); }
.project-urgency-dot.urgency-low    { background: rgb(34 197 94); }
.project-title {
  font-size: 0.8rem;
  font-weight: 500;
  color: rgb(46 16 101);
  line-height: 1.35;
  flex: 1;
}
.project-related-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  margin-left: 0.9rem;
}
.project-related-tkt {
  font-family: ui-monospace, SFMono-Regular, monospace;
  font-size: 0.65rem;
  background: white;
  border: 1px solid rgb(216 180 254);
  color: rgb(91 33 182);
  padding: 0.05rem 0.4rem;
  border-radius: 0.25rem;
  text-decoration: none;
}
a.project-related-tkt:hover { background: rgb(243 232 255); border-color: rgb(167 139 250); }

/* Progress / feature progress bars */
.legend-item { display: inline-flex; align-items: center; gap: 0.35rem; color: rgb(71 85 105); }
.legend-swatch { display: inline-block; width: 0.85rem; height: 0.55rem; border-radius: 0.15rem; border: 1px solid rgba(0,0,0,0.05); }

/* Status colors (shared by bar fills, badges, swatches, count pills) */
.status-done       { --st-bg: rgb(34 197 94);   --st-fg: white;             --st-soft: rgb(220 252 231); --st-soft-fg: rgb(22 101 52); }
.status-in_progress{ --st-bg: rgb(59 130 246);  --st-fg: white;             --st-soft: rgb(219 234 254); --st-soft-fg: rgb(30 64 175); }
.status-blocked    { --st-bg: rgb(220 38 38);   --st-fg: white;             --st-soft: rgb(254 226 226); --st-soft-fg: rgb(153 27 27); }
.status-at_risk    { --st-bg: rgb(234 88 12);   --st-fg: white;             --st-soft: rgb(255 237 213); --st-soft-fg: rgb(154 52 18); }
.status-planned    { --st-bg: rgb(148 163 184); --st-fg: white;             --st-soft: rgb(241 245 249); --st-soft-fg: rgb(51 65 85); }
.legend-swatch.status-done { background: rgb(34 197 94); }
.legend-swatch.status-in_progress { background: rgb(59 130 246); }
.legend-swatch.status-blocked { background: rgb(220 38 38); }
.legend-swatch.status-at_risk { background: rgb(234 88 12); }
.legend-swatch.status-planned { background: rgb(148 163 184); }

/* Lane accent bars */
.lane-indigo { --lane: rgb(99 102 241); }
.lane-violet { --lane: rgb(139 92 246); }
.lane-sky    { --lane: rgb(14 165 233); }
.lane-emerald{ --lane: rgb(16 185 129); }
.lane-amber  { --lane: rgb(245 158 11); }
.lane-rose   { --lane: rgb(244 63 94); }
.lane-cyan   { --lane: rgb(6 182 212); }
.lane-slate  { --lane: rgb(100 116 139); }

/* Top summary card */
.progress-summary {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.5rem;
}
.progress-summary-overall { display: flex; align-items: center; gap: 0.85rem; flex: 1 1 320px; }
.progress-summary-label { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: rgb(71 85 105); white-space: nowrap; }
.progress-summary-bar { flex: 1; height: 0.85rem; background: rgb(241 245 249); border-radius: 999px; overflow: hidden; min-width: 12rem; }
.progress-summary-fill { height: 100%; background: linear-gradient(90deg, rgb(34 197 94), rgb(59 130 246)); transition: width 300ms; }
.progress-summary-pct { font-size: 1rem; font-weight: 700; color: rgb(15 23 42); white-space: nowrap; }
.progress-summary-counts { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.progress-count-pill {
  font-size: 0.7rem;
  font-weight: 600;
  padding: 0.2rem 0.55rem;
  border-radius: 999px;
  background: var(--st-soft);
  color: var(--st-soft-fg);
}

/* Category section */
.progress-category {
  background: white;
  border: 1px solid rgb(226 232 240);
  border-left: 4px solid var(--lane, rgb(148 163 184));
  border-radius: 0.5rem;
  padding: 0.85rem 1rem 1rem;
  margin-bottom: 0.85rem;
}
.progress-category-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.65rem; gap: 0.5rem; }
.progress-category-name { font-size: 1rem; font-weight: 700; color: rgb(15 23 42); margin: 0; }
.progress-category-meta { font-size: 0.75rem; color: rgb(100 116 139); white-space: nowrap; }
.progress-feature-list { display: flex; flex-direction: column; gap: 0.55rem; }

/* Feature card */
.progress-feature {
  background: rgb(248 250 252);
  border: 1px solid rgb(226 232 240);
  border-radius: 0.4rem;
  padding: 0.7rem 0.85rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}
.progress-feature-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 0.5rem; }
.progress-feature-title { font-size: 0.875rem; font-weight: 600; color: rgb(15 23 42); line-height: 1.3; }
.progress-status-badge {
  font-size: 0.65rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 0.15rem 0.45rem;
  border-radius: 0.25rem;
  background: var(--st-soft);
  color: var(--st-soft-fg);
  white-space: nowrap;
  flex-shrink: 0;
}
.progress-feature-summary { font-size: 0.78rem; color: rgb(71 85 105); line-height: 1.45; }
.progress-bar-row { display: flex; align-items: center; gap: 0.6rem; }
.progress-bar { flex: 1; height: 0.55rem; background: rgb(226 232 240); border-radius: 999px; overflow: hidden; }
.progress-bar-fill { height: 100%; background: var(--st-bg); transition: width 300ms; }
.progress-bar-fill.status-planned { background: linear-gradient(90deg, var(--lane, rgb(148 163 184)) 0%, rgb(203 213 225) 100%); opacity: 0.7; }
.progress-bar-pct { font-size: 0.75rem; font-weight: 600; color: rgb(51 65 85); min-width: 2.5rem; text-align: right; }

/* Feature metadata footer */
.progress-feature-meta { display: flex; flex-wrap: wrap; gap: 0.5rem 0.85rem; font-size: 0.72rem; color: rgb(71 85 105); }
.progress-target { font-weight: 500; }
.progress-tickets { display: inline-flex; flex-wrap: wrap; gap: 0.3rem; }
.progress-ticket-chip {
  font-family: ui-monospace, SFMono-Regular, monospace;
  font-size: 0.65rem;
  background: white;
  border: 1px solid rgb(226 232 240);
  color: rgb(37 99 235);
  padding: 0.1rem 0.4rem;
  border-radius: 0.25rem;
  text-decoration: none;
}
a.progress-ticket-chip:hover { background: rgb(239 246 255); border-color: rgb(147 197 253); }
.board-summary { cursor: pointer; font-size: 0.875rem; font-weight: 600; color: rgb(51 65 85); text-transform: uppercase; letter-spacing: 0.04em; padding: 0.4rem 0; user-select: none; }
.board-summary:hover { color: rgb(15 23 42); }
.col-notes { color: rgb(51 65 85); font-size: 0.8rem; line-height: 1.4; max-width: 30rem; }

/* Sprint + standup tables aren't clickable — override the live-board hover/cursor */
.prose-md ~ * .ticket-table tbody tr,
#content .ticket-table tbody tr:not([data-tkt-idx]) { cursor: default; }
#content .ticket-table tbody tr:not([data-tkt-idx]):hover { background: transparent; }
.standup-table tbody tr { cursor: default !important; }
.standup-table tbody tr:hover { background: transparent; }
.standup-table tbody tr.standup-row-blocked:hover { background: rgb(254 240 219); }

/* Standup table */
.standup-table tbody td { vertical-align: top; }
.standup-table .col-assignee { white-space: normal; min-width: 9rem; }
.standup-table .col-assignee .standup-name { font-weight: 600; color: rgb(15 23 42); }
.standup-table .col-assignee .standup-count { font-size: 0.7rem; color: rgb(100 116 139); margin-top: 0.15rem; }
.standup-table .col-block { font-size: 0.8rem; line-height: 1.45; color: rgb(30 41 59); max-width: 22rem; }
.standup-table .col-block.blockers { color: rgb(154 52 18); }
.standup-table .standup-list { list-style: disc; padding-left: 1.1rem; margin: 0; }
.standup-table .standup-list li { margin: 0.1rem 0; }
.standup-table .standup-row-blocked { background: rgb(255 247 237); }
.standup-table .standup-row-blocked:hover { background: rgb(254 240 219); }

/* Kanban columns (legacy — still used by some callers) */
.kanban-col {
  background: rgb(248 250 252);
  border: 1px solid rgb(226 232 240);
  border-radius: 0.5rem;
  display: flex;
  flex-direction: column;
}
.kanban-col-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.65rem 0.85rem;
  border-bottom: 1px solid rgb(226 232 240);
  background: white;
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
  position: sticky;
  top: 0;
  z-index: 1;
}
.kanban-col-title { font-size: 0.875rem; font-weight: 600; color: rgb(15 23 42); }
.kanban-col-count { font-size: 0.7rem; padding: 0.15rem 0.5rem; border-radius: 999px; background: rgb(241 245 249); color: rgb(71 85 105); font-weight: 600; }
.kanban-col-body { padding: 0.6rem; display: flex; flex-direction: column; gap: 0.5rem; overflow-y: auto; flex: 1; }
.kanban-card { cursor: pointer; }
.kanban-card .card-overdue {
  background: rgb(254 226 226);
  color: rgb(153 27 27);
  font-size: 0.65rem;
  font-weight: 600;
  padding: 0.1rem 0.4rem;
  border-radius: 0.25rem;
  margin-left: auto;
}

/* Drawer */
#drawer { transition: opacity 150ms; }
#drawer.hidden { display: none !important; }
.drawer-fields { display: grid; grid-template-columns: 6.5rem 1fr; gap: 0.4rem 0.75rem; font-size: 0.85rem; margin-bottom: 1rem; }
.drawer-fields dt { font-weight: 600; color: rgb(71 85 105); }
.drawer-fields dd { color: rgb(15 23 42); }
.drawer-section { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: rgb(71 85 105); margin: 1rem 0 0.4rem 0; }
.drawer-desc { font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; color: rgb(30 41 59); padding: 0.6rem 0.85rem; background: rgb(248 250 252); border-radius: 0.375rem; }
.drawer-desc-html { white-space: normal; overflow-wrap: anywhere; word-break: break-word; }
.drawer-desc-html p { margin: 0 0 0.6rem 0; }
.drawer-desc-html p:last-child { margin-bottom: 0; }
.drawer-desc-html ul, .drawer-desc-html ol { margin: 0.4rem 0; padding-left: 1.5rem; }
.drawer-desc-html ul { list-style: disc; }
.drawer-desc-html ol { list-style: decimal; }
.drawer-desc-html a { color: rgb(37 99 235); text-decoration: underline; overflow-wrap: anywhere; }
.drawer-desc-html img { max-width: 100%; height: auto; border-radius: 0.25rem; margin: 0.4rem 0; }
.drawer-desc-html pre, .drawer-desc-html code { white-space: pre-wrap; word-break: break-word; }
.drawer-desc-html h1, .drawer-desc-html h2, .drawer-desc-html h3, .drawer-desc-html h4 { font-weight: 600; margin: 0.6rem 0 0.3rem; }
.drawer-desc-html em { font-style: italic; color: rgb(100 116 139); font-size: 0.8rem; }

/* Spark ticket link */
.tkt-link { color: rgb(37 99 235); text-decoration: none; }
.tkt-link:hover { text-decoration: underline; color: rgb(29 78 216); }
.drawer-warning { padding: 0.5rem 0.85rem; background: rgb(254 226 226); color: rgb(153 27 27); border-radius: 0.375rem; font-size: 0.8rem; font-weight: 600; margin-bottom: 1rem; }
