/* planning.css — WKR-PLAN — Development board · Risk register/matrix · Timeline Gantt
   Lead-wired lane stylesheet (2.76.84). Owned by the WKR-PLAN seat.
   Use existing tokens from design/brand.css + css/styles.css; honour
   prefers-reduced-motion; 44px targets; visible focus. */

.plan-hint {
  font-size: 0.78rem;
  color: var(--text-secondary);
  margin: 0 0 8px;
  max-width: 72ch;
}
.plan-live {
  min-height: 1.2em;
  font-size: 0.72rem;
  color: var(--text-secondary);
  margin-bottom: 8px;
}
.plan-live.is-error {
  color: #b91c1c;
  background: rgba(239, 68, 68, 0.12);
  border: 1px solid rgba(239, 68, 68, 0.35);
  border-radius: 8px;
  padding: 8px 12px;
}
.plan-error {
  color: #b91c1c;
  background: rgba(239, 68, 68, 0.12);
  border: 1px solid rgba(239, 68, 68, 0.35);
  border-radius: 8px;
  padding: 8px 12px;
  font-size: 0.78rem;
  margin-bottom: 8px;
}
.plan-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 12px;
}
/* Beat the shared module 24px floor (0,1,1) with module-id + class (1,1,0). */
#module-development .plan-chip,
#module-development .plan-hit,
#module-development .plan-zoom,
#module-development .plan-sort,
#module-development .plan-drawer-actions .btn,
#module-development .plan-bulk .btn,
#module-risk .plan-chip,
#module-risk .plan-hit,
#module-risk .plan-sort,
#module-risk .plan-matrix-cell,
#module-timeline .plan-chip,
#module-timeline .plan-hit,
#module-timeline .plan-zoom,
#module-timeline .plan-sort {
  min-height: 44px;
  min-width: 44px;
}
.plan-chip,
.plan-sort {
  border: 1px solid var(--border);
  background: var(--bg-secondary);
  color: var(--text-primary);
  border-radius: 999px;
  padding: 8px 14px;
  font-size: 0.78rem;
  cursor: pointer;
}
.plan-chip.is-on,
.plan-zoom[aria-pressed="true"] {
  background: var(--accent-dim);
  border-color: var(--accent);
  color: var(--text-primary);
}
.plan-chip:focus-visible,
.plan-sort:focus-visible,
.plan-card:focus-visible,
.plan-matrix-cell:focus-visible,
.plan-gantt-bar:focus,
.plan-gantt-due:focus,
.plan-zoom:focus-visible,
.plan-hit:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.plan-board {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 20px;
}
.plan-board.is-skel .plan-lane-list {
  min-height: 120px;
  background: linear-gradient(90deg, var(--bg-secondary), var(--bg-hover), var(--bg-secondary));
  background-size: 200% 100%;
  animation: planSkel 1.1s ease-in-out infinite;
}
.plan-lane {
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: 10px;
  min-height: 160px;
  display: flex;
  flex-direction: column;
}
.plan-lane.is-drop {
  outline: 2px dashed var(--accent);
}
.plan-lane-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
}
.plan-lane-head h5 {
  margin: 0;
  font-size: 0.82rem;
}
.plan-lane-pending { border-top: 3px solid var(--orange, #f59e0b); }
.plan-lane-active { border-top: 3px solid var(--accent-cb); }
.plan-lane-blocked { border-top: 3px solid #ef4444; }
.plan-lane-done { border-top: 3px solid var(--green, #22c55e); }
.plan-wip {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1;
  background: var(--card-bg);
  border-radius: 999px;
  padding: 2px 8px;
  font-size: 0.72rem;
}
.plan-lane-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 8px;
  min-height: 80px;
}
.plan-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  cursor: grab;
  transition: transform 200ms ease, opacity 180ms ease, box-shadow 180ms ease;
}
.plan-card.is-overdue { border-left: 3px solid #ef4444; }
.plan-card.is-selected {
  outline: 2px solid var(--accent);
  box-shadow: 0 0 0 3px var(--accent-dim, rgba(59, 130, 246, 0.28));
}
.plan-card.is-dragging { opacity: 0.55; }
.plan-card:hover { box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18); }
.plan-card-title { font-size: 0.84rem; margin: 4px 0 8px; }
.plan-card-meta,
.plan-card-foot {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 0.68rem;
  color: var(--text-secondary);
}
#planRiskRegister tbody tr[data-plan-risk-row]:focus,
#planRiskRegister tbody tr.is-row-focus {
  outline: 2px solid var(--accent);
  outline-offset: -2px;
}
.plan-due.is-overdue,
tr.is-overdue td,
td.is-overdue { color: #ef4444; font-weight: 600; }
.plan-empty {
  padding: 16px 10px;
  text-align: center;
  color: var(--text-secondary);
  font-size: 0.75rem;
}
.plan-drawer {
  position: fixed;
  top: 0;
  right: 0;
  width: min(420px, 100vw);
  height: 100vh;
  background: var(--bg-secondary);
  border-left: 1px solid var(--border);
  box-shadow: -8px 0 24px rgba(0, 0, 0, 0.24);
  z-index: 40;
  padding: 20px;
  overflow: auto;
}
.plan-drawer[hidden] { display: none !important; }
.plan-drawer h3 { margin: 0 0 12px; }
.plan-drawer label {
  display: block;
  margin: 12px 0 4px;
  font-size: 0.78rem;
}
.plan-drawer-actions {
  display: flex;
  gap: 8px;
  margin-top: 16px;
}
.plan-na { color: var(--text-muted); font-size: 0.72rem; }
.plan-mit {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  background: var(--bg-hover);
}
.plan-risk-cn { font-size: 0.7rem; color: var(--text-muted); }
.plan-matrix {
  display: flex;
  flex-direction: column;
  gap: 4px;
  max-width: 520px;
}
.plan-matrix-row {
  display: grid;
  grid-template-columns: 44px repeat(5, minmax(44px, 1fr));
  gap: 4px;
}
.plan-matrix-label,
.plan-matrix-corner {
  font-size: 0.68rem;
  color: var(--text-secondary);
  display: flex;
  align-items: center;
  justify-content: center;
}
.plan-matrix-cell {
  border: 1px solid var(--border);
  border-radius: 6px;
  min-height: 44px;
  font-variant-numeric: tabular-nums;
  cursor: pointer;
  transition: transform 180ms ease, opacity 180ms ease;
}
.plan-matrix-cell.sev-none { background: var(--bg-input); }
.plan-matrix-cell.sev-low { background: rgba(34, 197, 94, 0.18); }
.plan-matrix-cell.sev-med { background: rgba(245, 158, 11, 0.22); }
.plan-matrix-cell.sev-high { background: rgba(249, 115, 22, 0.28); }
.plan-matrix-cell.sev-crit { background: rgba(239, 68, 68, 0.3); }
.plan-matrix-cell.is-on { outline: 2px solid var(--accent); }
.plan-gantt-toolbar { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.plan-gantt {
  overflow-x: auto;
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 8px;
}
.plan-gantt-svg { width: 100%; min-height: 180px; display: block; }
.plan-gantt-tick { fill: var(--text-secondary); font-size: 10px; }
.plan-gantt-label { fill: var(--text-primary); font-size: 10px; }
.plan-gantt-grid { stroke: var(--border); stroke-width: 1; }
.plan-gantt-today { stroke: #ef4444; stroke-width: 2; }
.plan-gantt-today-label { fill: #ef4444; font-size: 10px; }
.plan-gantt-bar { fill: var(--accent-cb); }
.plan-gantt-due { fill: var(--accent-ss); }
.plan-gantt-bar.critical-path { fill: var(--red, #ef4444); }
.plan-gantt-bar.critical-path:focus,
.plan-gantt-bar.critical-path:hover { fill: var(--red, #ef4444); }
.plan-gantt-bar.slip-affected { stroke: var(--orange, #f59e0b); stroke-width: 2; }
.plan-gantt-label.critical-path-label { fill: var(--red, #ef4444); font-weight: 600; }
.critical-path-unresolved {
  font-size: 0.68rem;
  color: var(--orange, #f59e0b);
  padding: 2px 8px 4px;
}
@media (prefers-reduced-motion: reduce) {
  .plan-gantt-bar, .plan-gantt-due, .plan-gantt-label { transition: none; }
}
.plan-gantt-dep { fill: var(--text-secondary); }
.plan-legacy-count { display: none; }
.plan-views {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 0 0 12px;
}
.plan-view-chip { display: inline-flex; gap: 4px; align-items: center; }
.plan-spark { display: block; margin-top: 4px; color: var(--text-secondary); }
.plan-gantt-toolbar #planGanttExport { margin-left: auto; }
.plan-bulk {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 0 0 12px;
}
.plan-bulk[hidden] { display: none !important; }
.plan-bulk-count {
  font-size: 0.78rem;
  font-variant-numeric: tabular-nums;
  color: var(--text-secondary);
}
.plan-matrix-count {
  display: inline-block;
  transition: transform 180ms ease, opacity 180ms ease;
}
.plan-matrix-count.is-pulse { transform: scale(1.18); }
.plan-gantt-today.is-today-flash { stroke-width: 3; }

@media print {
  #planBoard { break-inside: avoid; }
  #planBoardHint,
  #planBoardFilters,
  #planBoardViews,
  #planBulkBar,
  #planRiskFilters,
  .plan-drawer,
  .plan-matrix,
  .risk-charts-row,
  #module-risk .card,
  #planGanttExport,
  #planGanttHint,
  #planGanttHonest,
  #planGanttPrev,
  #planGanttToday,
  #planGanttNext,
  .plan-hit[data-plan-edit-risk],
  .module-actions { display: none !important; }
  #planGantt { break-inside: avoid; }
  #planRiskRegister { break-inside: avoid; width: 100%; border-collapse: collapse; }
  #planRiskRegister th,
  #planRiskRegister td { border-bottom: 1px solid #999; padding: 6px 8px; font-size: 11pt; }
}

@keyframes planSkel {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}

@media (max-width: 900px) {
  .plan-board { grid-template-columns: 1fr; }
  .plan-drawer { width: 100vw; }
}

@media (prefers-reduced-motion: reduce) {
  .plan-card,
  .plan-matrix-cell,
  .plan-matrix-count,
  .plan-gantt-bar,
  .plan-gantt-due,
  .plan-gantt-today,
  .plan-board.is-skel .plan-lane-list {
    transition: none !important;
    animation: none !important;
    transform: none !important;
  }
}

/* v2.76.118: overdue red #ef4444 is 3.76:1 on the light planning table —
   below AA 4.5:1. 700-weight red ink, dark theme untouched.
   Gate: scripts/test_light_theme_contrast.py */
[data-theme="light"] .plan-due.is-overdue,
[data-theme="light"] tr.is-overdue td,
[data-theme="light"] td.is-overdue { color: #b91c1c; }
