@matt82198/aesop 0.1.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/CHANGELOG.md +117 -2
  2. package/README.md +59 -218
  3. package/bin/cli.js +168 -41
  4. package/daemons/run-watchdog.sh +16 -4
  5. package/daemons/selfheal.sh +231 -0
  6. package/docs/ANY-REPO.md +427 -0
  7. package/docs/CONTRIBUTING.md +72 -0
  8. package/docs/DEMO.md +334 -0
  9. package/docs/HOOK-INSTALL.md +15 -56
  10. package/docs/INSTALL.md +74 -4
  11. package/docs/PORTING.md +166 -0
  12. package/docs/README.md +33 -3
  13. package/docs/TEAM-STATE.md +372 -0
  14. package/docs/reproduce.md +33 -3
  15. package/driver/CLAUDE.md +150 -0
  16. package/driver/README.md +383 -0
  17. package/driver/aesop.config.example.json +80 -0
  18. package/driver/agent_driver.py +355 -0
  19. package/driver/backend_config.py +253 -0
  20. package/driver/claude_code_driver.py +198 -0
  21. package/driver/codex_driver.py +673 -0
  22. package/driver/openai_compatible_driver.py +249 -0
  23. package/driver/openai_transport.py +179 -0
  24. package/driver/verification_policy.py +75 -0
  25. package/driver/wave_bridge.py +254 -0
  26. package/driver/wave_loop.py +1408 -0
  27. package/driver/wave_scheduler.py +890 -0
  28. package/hooks/pre-push-policy.sh +131 -33
  29. package/mcp/server.mjs +320 -4
  30. package/monitor/collect-signals.mjs +69 -0
  31. package/package.json +22 -14
  32. package/skills/CLAUDE.md +132 -2
  33. package/skills/buildsystem/SKILL.md +330 -0
  34. package/skills/buildsystem/wave-flat-dispatch.template.mjs +658 -0
  35. package/skills/fleet/SKILL.md +113 -0
  36. package/skills/power/SKILL.md +246 -131
  37. package/state_store/__init__.py +4 -2
  38. package/state_store/api.py +19 -4
  39. package/state_store/coordination.py +209 -0
  40. package/state_store/identity.py +51 -0
  41. package/state_store/projections.py +63 -0
  42. package/state_store/read_api.py +156 -0
  43. package/state_store/store.py +185 -73
  44. package/state_store/write_api.py +462 -0
  45. package/templates/wave-presets/data.json +65 -0
  46. package/templates/wave-presets/library.json +65 -0
  47. package/templates/wave-presets/saas.json +64 -0
  48. package/tools/audit_report.py +388 -0
  49. package/tools/bench_runner.py +100 -3
  50. package/tools/ci_merge_wait.py +256 -35
  51. package/tools/ci_workflow_lint.py +430 -0
  52. package/tools/claudemd_drift.py +394 -0
  53. package/tools/claudemd_lint.py +359 -0
  54. package/tools/common.py +39 -3
  55. package/tools/cost_ceiling.py +166 -43
  56. package/tools/cost_econ.py +480 -0
  57. package/tools/cost_projection.py +559 -0
  58. package/tools/crossos_drift.py +394 -0
  59. package/tools/defect_escape.py +252 -0
  60. package/tools/doctor.js +1 -1
  61. package/tools/eod_sweep.py +188 -26
  62. package/tools/fleet.js +260 -0
  63. package/tools/fleet_ledger.py +209 -7
  64. package/tools/git_identity_check.py +315 -0
  65. package/tools/health-score.js +40 -0
  66. package/tools/health_score.py +361 -0
  67. package/tools/metrics_gate.py +13 -4
  68. package/tools/mutation_test.py +523 -0
  69. package/tools/portability_check.py +206 -0
  70. package/tools/proposals.mjs +47 -2
  71. package/tools/reconcile.py +7 -4
  72. package/tools/reproduce.js +405 -0
  73. package/tools/secret_scan.py +207 -65
  74. package/tools/self_stats.py +20 -0
  75. package/tools/stall_check.py +247 -16
  76. package/tools/stateapi_lint.py +325 -0
  77. package/tools/test_battery.py +173 -0
  78. package/tools/transcript_digest.py +380 -0
  79. package/tools/verify_activity_filter.py +437 -0
  80. package/tools/verify_agent_inspector.py +2 -0
  81. package/tools/verify_cost_panel.py +345 -0
  82. package/tools/verify_dash.py +2 -0
  83. package/tools/verify_dispatch_panel.py +301 -0
  84. package/tools/verify_failure_drilldown.py +188 -0
  85. package/tools/verify_prboard.py +2 -0
  86. package/tools/verify_scorecards.py +281 -0
  87. package/tools/verify_submit_encoding.py +2 -0
  88. package/tools/verify_ui_trio.py +409 -0
  89. package/tools/verify_wave_telemetry.py +268 -0
  90. package/tools/wave_backlog_analyzer.py +490 -0
  91. package/tools/wave_ledger_hook.py +150 -0
  92. package/tools/wave_preflight.py +779 -0
  93. package/tools/wave_resume.py +215 -0
  94. package/tools/wave_templates.py +340 -0
  95. package/ui/agents.py +68 -14
  96. package/ui/collectors.py +81 -55
  97. package/ui/config.py +7 -2
  98. package/ui/cost.py +231 -12
  99. package/ui/handler.py +383 -55
  100. package/ui/quality_scorecard.py +232 -0
  101. package/ui/sse.py +3 -3
  102. package/ui/wave_audit_tail.py +213 -0
  103. package/ui/wave_dispatch.py +280 -0
  104. package/ui/wave_failure.py +288 -0
  105. package/ui/wave_gantt.py +152 -0
  106. package/ui/wave_reasoning_tail.py +176 -0
  107. package/ui/wave_telemetry.py +383 -0
  108. package/ui/web/dist/assets/index-CNQxaiOW.css +1 -0
  109. package/ui/web/dist/assets/index-CP68RIh3.js +9 -0
  110. package/ui/web/dist/index.html +2 -2
  111. package/bin/CLAUDE.md +0 -76
  112. package/daemons/CLAUDE.md +0 -36
  113. package/dash/CLAUDE.md +0 -32
  114. package/docs/archive/README.md +0 -3
  115. package/docs/archive/spikes/tiered-cognition/ACTIVATION.md +0 -125
  116. package/docs/archive/spikes/tiered-cognition/DESIGN.md +0 -287
  117. package/docs/archive/spikes/tiered-cognition/FINDINGS.md +0 -113
  118. package/docs/archive/spikes/tiered-cognition/README.md +0 -27
  119. package/docs/archive/spikes/tiered-cognition/aesop-cognition.example.md +0 -32
  120. package/docs/archive/spikes/tiered-cognition/force-model-policy.merged.mjs +0 -673
  121. package/docs/archive/spikes/tiered-cognition/strip-tools-hook.mjs +0 -434
  122. package/hooks/CLAUDE.md +0 -89
  123. package/mcp/CLAUDE.md +0 -213
  124. package/monitor/CLAUDE.md +0 -40
  125. package/scan/CLAUDE.md +0 -30
  126. package/state_store/CLAUDE.md +0 -39
  127. package/tools/CLAUDE.md +0 -79
  128. package/ui/CLAUDE.md +0 -127
  129. package/ui/web/dist/assets/index-0qQYnvMC.js +0 -9
  130. package/ui/web/dist/assets/index-BdIlFieV.css +0 -1
@@ -0,0 +1,383 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Wave telemetry collector — current wave phase, cost metrics, and blockers.
4
+
5
+ Reads state at CALL TIME (not import time) to ensure test isolation.
6
+ State sources (via read_api facade):
7
+ - orchestrator-status: current phase and activity (preferred, <24h)
8
+ - STATE.md: current phase and wave info (fallback if status file missing/stale)
9
+ - AUDIT-BACKLOG.md: top blocker via parse
10
+ - ledger: cost data (re-uses cost.py logic)
11
+ """
12
+ import json
13
+ import re
14
+ import sys
15
+ from datetime import datetime, timezone, timedelta
16
+ from pathlib import Path
17
+
18
+ import config
19
+ import cost
20
+
21
+ # serve.py runs with ui/ as the import root; state_store is a repo-root
22
+ # package, so the repo root must be on sys.path before this import.
23
+ _REPO_ROOT = str(Path(__file__).resolve().parent.parent)
24
+ if _REPO_ROOT not in sys.path:
25
+ sys.path.insert(0, _REPO_ROOT)
26
+ from state_store.read_api import ReadAPI # noqa: E402
27
+
28
+
29
+ def _read_orchestrator_status():
30
+ """Read orchestrator-status.json if fresh (<24h old) using the read_api.
31
+
32
+ Returns:
33
+ tuple: (phase_str, activity_str, source_str) or (None, None, None) if missing/stale/malformed
34
+ """
35
+ try:
36
+ # Use read_api to read orchestrator status
37
+ api = ReadAPI(str(config.STATE_DIR))
38
+ status = api.read_orchestrator_status()
39
+ if status is None:
40
+ return None, None, None
41
+
42
+ # Check freshness (24h threshold)
43
+ updated_at_str = status.get("updated_at")
44
+ if not updated_at_str:
45
+ return None, None, None
46
+
47
+ # Parse ISO format timestamp (handle both "Z" and "+00:00" suffixes)
48
+ updated_at_str_normalized = updated_at_str.replace("Z", "+00:00")
49
+ try:
50
+ updated_at = datetime.fromisoformat(updated_at_str_normalized)
51
+ except ValueError:
52
+ return None, None, None
53
+
54
+ # Check if fresh (<24h) and not in the future
55
+ now = datetime.now(timezone.utc)
56
+ age = now - updated_at
57
+ # Treat ANY future-dated timestamp as NOT fresh (fail-closed)
58
+ if age > timedelta(hours=24) or age < timedelta(0):
59
+ return None, None, None
60
+
61
+ # Extract phase and activity
62
+ phase = status.get("phase", "").lower()
63
+ activity = status.get("activity", "").lower()
64
+
65
+ if not phase:
66
+ return None, None, None
67
+
68
+ return phase, activity, "orchestrator-status"
69
+ except Exception as e:
70
+ print(f"[wave_telemetry] Error reading orchestrator-status.json: {e}", file=sys.stderr)
71
+ return None, None, None
72
+
73
+
74
+ def _parse_state_md_phase():
75
+ """Extract current phase and wave from STATE.md.
76
+
77
+ Looks for lines like:
78
+ ## Phase: `rc-1-published-source-available` (2026-07-17, current)
79
+ or
80
+ ## Phase: `wave-rc.2` (2026-07-17, current)
81
+
82
+ Returns:
83
+ dict: {"wave": str, "phase": str} or {"wave": "unknown", "phase": "unknown"}
84
+ """
85
+ try:
86
+ state_md = config.AESOP_ROOT / "STATE.md"
87
+ if not state_md.exists():
88
+ return {"wave": "unknown", "phase": "unknown"}
89
+
90
+ content = state_md.read_text(encoding='utf-8')
91
+
92
+ # Look for ## Phase: `...` (..., current)
93
+ # Extract the phase name between backticks and the wave indicator
94
+ match = re.search(r'## Phase:\s*`([^`]+)`', content)
95
+ if not match:
96
+ return {"wave": "unknown", "phase": "unknown"}
97
+
98
+ phase = match.group(1)
99
+
100
+ # Extract wave name from phase (e.g., "wave-rc.2" from "rc-1-published-source-available")
101
+ # Match patterns like "wave-26", "wave-rc.2", "rc-1", etc.
102
+ # Use (?:\.\w+)* to capture dot-separated identifiers (e.g., "wave-rc.2")
103
+ wave_match = re.search(r'(wave[-.]?\w+(?:\.\w+)*|rc[-.]?\w+(?:\.\w+)*)', phase, re.IGNORECASE)
104
+ if wave_match:
105
+ wave_str = wave_match.group(0) # e.g., "wave-26" or "rc-1"
106
+ else:
107
+ wave_str = phase # Fallback to phase itself
108
+
109
+ return {
110
+ "wave": wave_str.lower(),
111
+ "phase": phase.lower()
112
+ }
113
+ except Exception as e:
114
+ print(f"[wave_telemetry] Error parsing STATE.md: {e}", file=sys.stderr)
115
+ return {"wave": "unknown", "phase": "unknown"}
116
+
117
+
118
+ def _parse_top_blocker():
119
+ """Extract top blocker from AUDIT-BACKLOG.md.
120
+
121
+ Looks for the first P0 item with status 🔵 (inflight) or ⬜ (todo).
122
+ Returns the title if found, otherwise looks for orchestrator-status.
123
+
124
+ Returns:
125
+ str: blocker title or reason, e.g., "CI test flakes", "unknown"
126
+ """
127
+ try:
128
+ backlog_file = config.AUDIT_BACKLOG_FILE
129
+ if not backlog_file.exists():
130
+ return "unknown"
131
+
132
+ content = backlog_file.read_text(encoding='utf-8')
133
+ lines = content.split('\n')
134
+
135
+ in_p0 = False
136
+ for line in lines:
137
+ line_stripped = line.strip()
138
+
139
+ # Check if we entered P0 section
140
+ if re.match(r'^##\s*P0\b', line_stripped):
141
+ in_p0 = True
142
+ continue
143
+
144
+ # If we entered a different tier, stop
145
+ if line_stripped.startswith('## ') and not re.match(r'^##\s*P0\b', line_stripped):
146
+ in_p0 = False
147
+ continue
148
+
149
+ if in_p0 and line_stripped.startswith('- '):
150
+ # Check for inflight (🔵) or todo (⬜) status
151
+ if '🔵' in line_stripped or '⬜' in line_stripped:
152
+ # Extract title after status
153
+ # Pattern: - 🔵 **[tag] Title**
154
+ match = re.search(r'(?:🔵|⬜)\s+\*\*\[([^\]]+)\]\s+(.+?)\*\*', line_stripped)
155
+ if match:
156
+ title = match.group(2)
157
+ return title
158
+
159
+ return "unknown"
160
+ except Exception as e:
161
+ print(f"[wave_telemetry] Error parsing blocker: {e}", file=sys.stderr)
162
+ return "unknown"
163
+
164
+
165
+ def _get_wave_cost_metrics():
166
+ """Get cost metrics for the current wave.
167
+
168
+ Uses cost.py to parse the ledger and return this-wave totals.
169
+ For now, returns a simplified snapshot of per-model tokens and OK rate.
170
+
171
+ Returns:
172
+ dict: {
173
+ "tokens_used": int,
174
+ "top_model": str,
175
+ "ok_rate": float (0.0-1.0)
176
+ }
177
+ """
178
+ try:
179
+ summary = cost.get_cost_summary()
180
+
181
+ if "error" in summary:
182
+ return {
183
+ "tokens_used": 0,
184
+ "top_model": "unknown",
185
+ "ok_rate": 0.0
186
+ }
187
+
188
+ # Sum total tokens across all models
189
+ total_tokens = 0
190
+ top_model = "unknown"
191
+ top_model_tokens = 0
192
+
193
+ for model, stats in summary.get("models", {}).items():
194
+ tokens = stats.get("tokens_in", 0) + stats.get("tokens_out", 0)
195
+ total_tokens += tokens
196
+ if tokens > top_model_tokens:
197
+ # Extract model name (e.g., "haiku" from "claude-haiku-4-5" or "claude-haiku-4-5-20251001")
198
+ model_lower = model.lower()
199
+ if "haiku" in model_lower:
200
+ top_model = "haiku"
201
+ elif "sonnet" in model_lower:
202
+ top_model = "sonnet"
203
+ elif "opus" in model_lower:
204
+ top_model = "opus"
205
+ else:
206
+ # Fallback to last part of model id
207
+ top_model = model.split("-")[-1]
208
+ top_model_tokens = tokens
209
+
210
+ scorecard = summary.get("overall_scorecard", {})
211
+ ok_rate = scorecard.get("ok_rate", 0.0)
212
+
213
+ return {
214
+ "tokens_used": total_tokens,
215
+ "top_model": top_model,
216
+ "ok_rate": ok_rate
217
+ }
218
+ except Exception as e:
219
+ print(f"[wave_telemetry] Error computing cost metrics: {e}", file=sys.stderr)
220
+ return {
221
+ "tokens_used": 0,
222
+ "top_model": "unknown",
223
+ "ok_rate": 0.0
224
+ }
225
+
226
+
227
+ def _get_wave_start_time():
228
+ """Get the wave start time from orchestrator-status.json or STATE.md.
229
+
230
+ Returns:
231
+ datetime or None: wave start time in UTC, or None if not available
232
+ """
233
+ try:
234
+ # Use read_api to read orchestrator status
235
+ api = ReadAPI(str(config.STATE_DIR))
236
+ status = api.read_orchestrator_status()
237
+ if status is not None:
238
+ # Check if there's a wave_start_time or started_at field
239
+ start_time_str = status.get("wave_start_time") or status.get("started_at")
240
+ if start_time_str:
241
+ start_time_str_normalized = start_time_str.replace("Z", "+00:00")
242
+ return datetime.fromisoformat(start_time_str_normalized)
243
+ except Exception:
244
+ pass
245
+ return None
246
+
247
+
248
+ def _calculate_burn_rate_fields(total_tokens: int) -> dict:
249
+ """Calculate burn-rate and projection fields for live wave cost.
250
+
251
+ Args:
252
+ total_tokens: total tokens burned in this wave so far
253
+
254
+ Returns:
255
+ dict: {
256
+ "tokens_burned_per_min": float (tokens/min),
257
+ "projected_total_tokens": int (at current rate),
258
+ "cost_ceiling_exceeded": bool
259
+ }
260
+ """
261
+ try:
262
+ # Try to get wave start time for burn-rate calculation
263
+ wave_start = _get_wave_start_time()
264
+ if not wave_start:
265
+ # Fallback: estimate from cost ledger timestamps if available
266
+ return {
267
+ "tokens_burned_per_min": 0.0,
268
+ "projected_total_tokens": 0,
269
+ "cost_ceiling_exceeded": False
270
+ }
271
+
272
+ now = datetime.now(timezone.utc)
273
+ elapsed_seconds = (now - wave_start).total_seconds()
274
+ if elapsed_seconds < 1:
275
+ return {
276
+ "tokens_burned_per_min": 0.0,
277
+ "projected_total_tokens": 0,
278
+ "cost_ceiling_exceeded": False
279
+ }
280
+
281
+ elapsed_minutes = elapsed_seconds / 60.0
282
+ burn_rate = total_tokens / elapsed_minutes if elapsed_minutes > 0 else 0.0
283
+
284
+ # Get cost ceiling from config (typical: 2M tokens = $40 budget estimate)
285
+ cost_ceiling = getattr(config, 'COST_CEILING_TOKENS', 2_000_000)
286
+
287
+ # Estimate wave duration (typical: 8-30 min, assume 20 min average for projection)
288
+ avg_wave_duration_min = 20
289
+ estimated_remaining_min = max(0, avg_wave_duration_min - elapsed_minutes)
290
+ projected_additional = burn_rate * estimated_remaining_min
291
+ projected_total = int(total_tokens + projected_additional)
292
+
293
+ ceiling_exceeded = total_tokens > cost_ceiling
294
+
295
+ return {
296
+ "tokens_burned_per_min": round(burn_rate, 1),
297
+ "projected_total_tokens": projected_total,
298
+ "cost_ceiling_exceeded": ceiling_exceeded
299
+ }
300
+ except Exception as e:
301
+ print(f"[wave_telemetry] Error calculating burn-rate: {e}", file=sys.stderr)
302
+ return {
303
+ "tokens_burned_per_min": 0.0,
304
+ "projected_total_tokens": 0,
305
+ "cost_ceiling_exceeded": False
306
+ }
307
+
308
+
309
+ def get_wave_telemetry():
310
+ """Get consolidated wave telemetry snapshot.
311
+
312
+ Prefers state/orchestrator-status.json (if fresh <24h) over STATE.md regex parsing.
313
+ Reads all state at call time (not import time) to ensure test isolation.
314
+
315
+ Returns:
316
+ dict: {
317
+ "wave": str,
318
+ "phase": str,
319
+ "blocker": str,
320
+ "tokens_used": int,
321
+ "top_model": str,
322
+ "ok_rate": float,
323
+ "source": "orchestrator-status" | "state-md",
324
+ "tokens_burned_per_min": float (NEW: burn rate),
325
+ "projected_total_tokens": int (NEW: projection),
326
+ "cost_ceiling_exceeded": bool (NEW: alert flag)
327
+ }
328
+ """
329
+ try:
330
+ # Try orchestrator-status.json first (fresh <24h)
331
+ orch_phase, orch_activity, source = _read_orchestrator_status()
332
+
333
+ if orch_phase:
334
+ # Fresh orchestrator-status.json found; use it
335
+ # Extract wave identifier from phase (e.g., "wave-26" from "wave-26-verify", "wave-rc.2" from "wave-rc.2: build")
336
+ # Use (?:\.\w+)* to capture dot-separated identifiers (e.g., "wave-rc.2")
337
+ wave_match = re.search(r'(wave[-.]?\w+(?:\.\w+)*|rc[-.]?\w+(?:\.\w+)*)', orch_phase, re.IGNORECASE)
338
+ if wave_match:
339
+ wave_str = wave_match.group(0) # e.g., "wave-26", "wave-rc", or "rc-1"
340
+ else:
341
+ wave_str = orch_phase # Fallback to phase itself
342
+ phase_info = {
343
+ "wave": wave_str.lower(),
344
+ "phase": orch_phase
345
+ }
346
+ source_field = source
347
+ else:
348
+ # Fall back to STATE.md
349
+ phase_info = _parse_state_md_phase()
350
+ source_field = "state-md"
351
+
352
+ blocker = _parse_top_blocker()
353
+ cost_metrics = _get_wave_cost_metrics()
354
+
355
+ # Calculate burn-rate fields
356
+ burn_rate_fields = _calculate_burn_rate_fields(cost_metrics["tokens_used"])
357
+
358
+ return {
359
+ "wave": phase_info["wave"],
360
+ "phase": phase_info["phase"],
361
+ "blocker": blocker,
362
+ "tokens_used": cost_metrics["tokens_used"],
363
+ "top_model": cost_metrics["top_model"],
364
+ "ok_rate": cost_metrics["ok_rate"],
365
+ "source": source_field,
366
+ "tokens_burned_per_min": burn_rate_fields["tokens_burned_per_min"],
367
+ "projected_total_tokens": burn_rate_fields["projected_total_tokens"],
368
+ "cost_ceiling_exceeded": burn_rate_fields["cost_ceiling_exceeded"]
369
+ }
370
+ except Exception as e:
371
+ print(f"[wave_telemetry] Uncaught error: {e}", file=sys.stderr)
372
+ return {
373
+ "wave": "unknown",
374
+ "phase": "unknown",
375
+ "blocker": "error",
376
+ "tokens_used": 0,
377
+ "top_model": "unknown",
378
+ "ok_rate": 0.0,
379
+ "source": "error",
380
+ "tokens_burned_per_min": 0.0,
381
+ "projected_total_tokens": 0,
382
+ "cost_ceiling_exceeded": False
383
+ }
@@ -0,0 +1 @@
1
+ .health-header{z-index:100;background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:var(--space-3) var(--space-5);position:sticky;top:0}.health-header__cells{gap:var(--space-4);max-width:var(--content-max-width);flex-wrap:wrap;align-items:center;margin:0 auto;display:flex}.health-header__cell{align-items:flex-start;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--color-bg-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);font-size:var(--font-size-sm);cursor:pointer;transition:background-color var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);flex-direction:column;display:flex}.health-header__cell:hover{background:var(--color-bg-inset);border-color:var(--color-border)}.health-header__cell:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}.health-header__label{font-size:var(--font-size-xs);color:var(--color-text-muted);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.05em}.health-header__status{font-family:var(--font-mono);font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text)}.health-header__count{font-family:var(--font-mono);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-accent)}.health-header__badge{padding:var(--space-1) var(--space-2);background:var(--color-status-warn-bg);color:var(--color-status-warn);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);display:inline-block}.health-header__icon{font-size:var(--font-size-lg);line-height:1}.health-header__cell--sse{cursor:default}.health-header__cell--sse:hover{background:var(--color-bg-subtle);border-color:var(--color-border-subtle)}.health-header__cell--timestamp{cursor:default}.health-header__cell--timestamp:hover{background:var(--color-bg-subtle);border-color:var(--color-border-subtle)}.health-header__cell--stale,.health-header__cell--stale:hover{background:var(--color-status-warn-bg);border-color:var(--color-status-warn)}.health-header__cell--theme,.health-header__cell--refresh{margin-left:auto}@media (width<=768px){.health-header{padding:var(--space-2) var(--space-3)}.health-header__cells{gap:var(--space-3)}.health-header__cell{padding:var(--space-2);font-size:var(--font-size-xs)}.health-header__count{font-size:var(--font-size-md)}}.health-header__data-wrapper{gap:var(--space-2);flex-direction:column;display:flex}.health-header__warning-strip{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--color-status-warn-bg);border:1px solid var(--color-status-warn);border-radius:var(--radius-md);color:var(--color-status-warn);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);animation:1.5s ease-in-out infinite pulse-warning;display:flex}.health-header__warning-icon{font-size:var(--font-size-sm);flex-shrink:0;display:inline-block}.health-header__warning-text{font-family:var(--font-mono);font-size:var(--font-size-xs)}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.7}}@media (prefers-reduced-motion:reduce){.health-header__cell{transition:none}.health-header__warning-strip{animation:none}}.agent-row{border-bottom:1px solid var(--color-border-subtle);padding:var(--space-3) 0;list-style:none}.agent-row:last-child{border-bottom:none}.agent-row__inspect{padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);white-space:nowrap;background:0 0;margin-left:auto}.agent-row__inspect:hover{background:var(--color-bg-subtle)}.agent-row__inspect:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}.agent-row__toggle{width:var(--space-5);height:var(--space-5);margin-right:var(--space-2);cursor:pointer;color:var(--color-text-muted);transition:color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.agent-row__toggle:hover{color:var(--color-accent)}.agent-row__toggle:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-radius:var(--radius-sm)}.agent-row__toggle-icon{font-size:var(--font-size-xs);line-height:1;display:inline-block}.agent-row__header{align-items:center;gap:var(--space-3);font-size:var(--font-size-sm);line-height:var(--line-height-normal);display:flex}.agent-row__status-icon{font-size:var(--font-size-lg);flex-shrink:0;display:inline-block}.agent-row__id{font-family:var(--font-mono);font-weight:var(--font-weight-bold);color:var(--color-accent);flex-shrink:0;min-width:100px}.agent-row__age{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);flex-shrink:0;min-width:50px}.agent-row__hint{color:var(--color-text);word-break:break-word;flex-grow:1}.agent-row__detail{margin-top:var(--space-3);margin-left:calc(var(--space-5) + var(--space-2));padding:var(--space-3);background:var(--color-bg-subtle);border-left:2px solid var(--color-accent);border-radius:var(--radius-md);animation:.15s expand-in}@keyframes expand-in{0%{opacity:0;max-height:0}to{opacity:1;max-height:100vh}}@media (prefers-reduced-motion:reduce){.agent-row__detail{animation:none}}.agent-row__detail-row{gap:var(--space-3);margin-bottom:var(--space-2);font-size:var(--font-size-sm);line-height:var(--line-height-normal);grid-template-columns:120px 1fr;align-items:baseline;display:grid}.agent-row__detail-label{font-weight:var(--font-weight-bold);color:var(--color-text-muted);text-align:right}.agent-row__detail-value{color:var(--color-text);font-family:var(--font-mono);word-break:break-word}.agent-row__prompt{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-border-subtle)}.agent-row__prompt-label{margin-bottom:var(--space-2);font-weight:var(--font-weight-bold);color:var(--color-text-muted);font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.05em;display:block}.agent-row__prompt-text{background:var(--color-bg-inset);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);font-size:var(--font-size-xs);line-height:var(--line-height-normal);color:var(--color-text);font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;max-height:300px;margin:0;overflow-y:auto}.agent-row__prompt-loading,.agent-row__prompt-error{background:var(--color-bg-inset);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);font-family:var(--font-mono);font-size:var(--font-size-sm)}.agent-row__prompt-loading{color:var(--color-text-muted)}.agent-row__prompt-error{color:var(--color-status-error)}@media (width<=768px){.agent-row__detail-row{gap:var(--space-2);grid-template-columns:1fr}.agent-row__detail-label{text-align:left;font-weight:var(--font-weight-bold)}}.agent-inspector-backdrop{z-index:1000;background:#00000073;justify-content:flex-end;display:flex;position:fixed;inset:0}.agent-inspector{background:var(--color-surface);border-left:1px solid var(--color-border);width:min(560px,100%);max-width:100%;height:100%;box-shadow:var(--shadow-md);padding:var(--space-5);gap:var(--space-4);flex-direction:column;display:flex;overflow-y:auto}.agent-inspector__head{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.agent-inspector__title{font-size:var(--font-size-xl);color:var(--color-text);margin:0}.agent-inspector__close{border:1px solid var(--color-border);border-radius:var(--radius-sm);width:2rem;height:2rem;color:var(--color-text);cursor:pointer;font-size:var(--font-size-md);background:0 0;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.agent-inspector__close:hover{background:var(--color-bg-subtle)}.agent-inspector__close:focus-visible,.agent-inspector__transcript a:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}.agent-inspector__meta{gap:var(--space-2);margin:0;display:grid}.agent-inspector__meta-row{gap:var(--space-3);font-size:var(--font-size-sm);grid-template-columns:8rem 1fr;align-items:baseline;display:grid}.agent-inspector__meta-row dt{color:var(--color-text-muted);font-weight:var(--font-weight-medium);margin:0}.agent-inspector__meta-row dd{color:var(--color-text);word-break:break-word;margin:0}.agent-inspector__mono{font-family:var(--font-mono);font-size:var(--font-size-xs)}.agent-inspector__status{align-items:center;gap:var(--space-1);font-weight:var(--font-weight-medium);display:inline-flex}.agent-inspector__status-icon{font-size:.9em}.agent-inspector__section h3{margin:0 0 var(--space-2);font-size:var(--font-size-md);color:var(--color-text)}.agent-inspector__truncated{color:var(--color-text-muted);font-size:var(--font-size-xs);font-weight:400}.agent-inspector__prompt{padding:var(--space-3);background:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);color:var(--color-text);font-family:var(--font-mono);font-size:var(--font-size-xs);line-height:var(--line-height-normal);white-space:pre-wrap;word-break:break-word;max-height:12rem;margin:0;overflow-y:auto}.agent-inspector__callout{padding:var(--space-3);border-left:4px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-bg-subtle);color:var(--color-text);font-size:var(--font-size-sm)}.agent-inspector__callout--error{border-left-color:var(--color-status-error);background:var(--color-status-error-bg)}.agent-inspector__transcript{gap:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);padding:0;padding:var(--space-3);flex-direction:column;max-height:24rem;margin:0;list-style:none;display:flex;overflow-y:auto}.agent-inspector__tail-entry{gap:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border-subtle);grid-template-columns:6rem 1fr;align-items:start;display:grid}.agent-inspector__tail-entry:last-child{border-bottom:none;padding-bottom:0}.agent-inspector__tail-type{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:.03em;color:var(--color-text-muted);white-space:nowrap}.agent-inspector__tail-type--user{color:var(--color-accent)}.agent-inspector__tail-type--assistant{color:var(--color-text)}.agent-inspector__tail-text{font-family:var(--font-mono);font-size:var(--font-size-xs);line-height:var(--line-height-normal);color:var(--color-text);white-space:pre-wrap;word-break:break-word;margin:0}@media (width<=768px){.agent-inspector{width:100%;padding:var(--space-4)}.agent-inspector__meta-row,.agent-inspector__tail-entry{gap:var(--space-1);grid-template-columns:1fr}}.agents-panel{min-width:0;padding:var(--space-5);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1}.agents-panel h2{margin:0 0 var(--space-4) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text)}.agents-panel__summaries{gap:var(--space-3);margin-bottom:var(--space-4);padding:var(--space-3);background:var(--color-bg-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));display:grid}.agent-summary{align-items:center;gap:var(--space-2);padding:var(--space-2);background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);font-size:var(--font-size-sm);display:flex}.agent-summary__project{font-weight:var(--font-weight-medium);color:var(--color-text);flex:none;min-width:fit-content}.agent-summary__status{padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);text-transform:uppercase;white-space:nowrap;flex:none}.agent-summary__status--running{background:var(--color-status-ok-bg);color:var(--color-status-ok)}.agent-summary__status--idle{background:var(--color-status-info-bg);color:var(--color-status-info)}.agent-summary__status--SUSPICIOUS,.agent-summary__status--HIGH{background:var(--color-status-error-bg);color:var(--color-status-error)}.agent-summary__status--MED,.agent-summary__status--DRIFT{background:var(--color-status-warn-bg);color:var(--color-status-warn)}.agent-summary__runtime{text-align:right;font-family:var(--font-mono);color:var(--color-text-muted);flex:1;min-width:fit-content}.agents-panel__list{margin:0;margin-top:var(--space-4);padding:0;list-style:none}@media (width<=768px){.agents-panel{padding:var(--space-3)}.agents-panel h2{font-size:var(--font-size-md)}}.alerts-panel{min-width:0;padding:var(--space-5);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1}.alerts-panel h2{margin:0 0 var(--space-4) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text)}.alerts-panel__list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.alerts-panel__item{gap:var(--space-3);padding:var(--space-3);background:var(--color-bg-subtle);border-left:4px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);line-height:var(--line-height-normal);word-break:break-word;align-items:flex-start;display:flex}.alerts-panel__item[data-severity=error]{background:var(--color-status-error-bg)}.alerts-panel__item[data-severity=warn]{background:var(--color-status-warn-bg)}.alerts-panel__item[data-severity=info]{background:var(--color-status-info-bg)}.alerts-panel__severity{min-width:60px;padding:var(--space-1) var(--space-2);font-weight:var(--font-weight-bold);font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.05em;border-radius:var(--radius-sm);background:#0000000d;border:1.5px solid;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}@media (prefers-color-scheme:dark){.alerts-panel__severity{background:#ffffff1a}}.alerts-panel__text{color:var(--color-text);font-family:var(--font-mono);font-size:var(--font-size-xs);flex-grow:1}@media (width<=768px){.alerts-panel{padding:var(--space-3)}.alerts-panel h2{font-size:var(--font-size-md)}.alerts-panel__item{padding:var(--space-2);gap:var(--space-2)}}.events-feed{min-width:0;padding:var(--space-5);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1}.events-feed h2{margin:0 0 var(--space-4) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text)}.events-feed__list{gap:var(--space-2);background:linear-gradient(to bottom, var(--color-surface) 0%, var(--color-surface) 85%, #0000000d 100%);flex-direction:column;max-height:300px;margin:0;padding:0;list-style:none;display:flex;position:relative;overflow-y:auto}.events-feed__item{padding:var(--space-2) var(--space-3);background:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);font-size:var(--font-size-xs);line-height:var(--line-height-normal);color:var(--color-text-muted)}.events-feed__item code{font-family:var(--font-mono);color:var(--color-text);word-break:break-word}.empty-state{padding:var(--space-2) var(--space-3);text-align:center;color:var(--color-text-muted);font-size:var(--font-size-sm);background:var(--color-bg-inset);border-radius:var(--radius-sm);width:fit-content;margin:0 auto;display:inline-block}@media (width<=768px){.events-feed{padding:var(--space-3)}.events-feed h2{font-size:var(--font-size-md)}.events-feed__list{max-height:200px}.events-feed__item{padding:var(--space-2);font-size:var(--font-size-xs)}}.repos-panel{min-width:0;padding:var(--space-5);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1}.repos-panel h2{margin:0 0 var(--space-4) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text)}.repos-panel__list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.repos-panel__item{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3);background:var(--color-bg-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);font-size:var(--font-size-sm);display:flex}.repos-panel__item[data-severity=ok]{background:var(--color-status-ok-bg);border-color:var(--color-status-ok)}.repos-panel__item[data-severity=warn]{background:var(--color-status-warn-bg);border-color:var(--color-status-warn)}.repos-panel__item[data-severity=error]{background:var(--color-status-error-bg);border-color:var(--color-status-error)}.repos-panel__name{font-weight:var(--font-weight-bold);color:var(--color-text);font-family:var(--font-mono)}.repos-panel__state{font-family:var(--font-mono);font-size:var(--font-size-xs);text-align:right}.empty-state{padding:var(--space-4);text-align:center;color:var(--color-text-muted);font-size:var(--font-size-sm)}@media (width<=768px){.repos-panel{padding:var(--space-3)}.repos-panel h2{font-size:var(--font-size-md)}.repos-panel__item{padding:var(--space-2);flex-direction:column;align-items:flex-start}.repos-panel__state{text-align:left}}.inbox-form{padding:var(--space-5);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md)}.inbox-form h2{margin:0 0 var(--space-4) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text)}.inbox-form__form{gap:var(--space-3);flex-direction:column;display:flex}.inbox-form__group{gap:var(--space-2);align-items:stretch;display:flex}.inbox-form__input{min-width:0;padding:var(--space-3) var(--space-4);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-family:var(--font-sans);color:var(--color-text);line-height:var(--line-height-normal);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);flex:1}.inbox-form__input:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-color:var(--color-accent)}.inbox-form__input::placeholder{color:var(--color-text-muted)}.inbox-form__input:disabled{opacity:.6;cursor:not-allowed}.inbox-form__submit{padding:var(--space-3) var(--space-5);background:var(--color-accent);color:var(--color-text-inverse);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);cursor:pointer;transition:background-color var(--transition-fast);border:none}.inbox-form__submit:hover:not(:disabled){background:var(--color-accent-emphasis)}.inbox-form__submit:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}.inbox-form__submit:disabled{opacity:.5;cursor:not-allowed}.inbox-form__error{padding:var(--space-3);background:var(--color-status-error-bg);color:var(--color-status-error);border-left:4px solid var(--color-status-error);border-radius:var(--radius-md);font-size:var(--font-size-sm)}.inbox-form__success{padding:var(--space-3);background:var(--color-status-ok-bg);color:var(--color-status-ok);border-left:4px solid var(--color-status-ok);border-radius:var(--radius-md);font-size:var(--font-size-sm)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (width<=768px){.inbox-form{padding:var(--space-3)}.inbox-form h2{font-size:var(--font-size-md)}.inbox-form__group{flex-direction:column}.inbox-form__submit{width:100%}}@media (prefers-reduced-motion:reduce){.inbox-form__input,.inbox-form__submit{transition:none}}.wave-telemetry-progress{border:1px solid var(--color-border-secondary);background:var(--color-surface-secondary);border-radius:8px;padding:1.5rem}.wave-progress-header{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.wave-progress-header h3{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin:0;font-size:.875rem;font-weight:500}.wave-progress-badge{background:var(--color-accent-secondary);color:var(--color-text-on-accent);text-transform:uppercase;border-radius:4px;padding:.25rem .75rem;font-size:.875rem;font-weight:600}.wave-progress-content{flex-direction:column;gap:1rem;display:flex}.wave-progress-phase,.wave-progress-blocker{flex-direction:column;gap:.25rem;display:flex}.phase-label,.blocker-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);font-size:.75rem;font-weight:600}.phase-value,.blocker-value{color:var(--color-text-primary);word-break:break-word;font-size:1rem;font-weight:500}.wave-progress-error{color:var(--color-severity-error);margin:0;font-size:.875rem}@media (prefers-color-scheme:dark){.wave-telemetry-progress{--color-surface-secondary:#1a1a1a;--color-border-secondary:#333;--color-text-secondary:#999;--color-text-primary:#fff;--color-accent-secondary:#444;--color-text-on-accent:#ccc;--color-severity-error:#ff6b6b}}@media (prefers-color-scheme:light){.wave-telemetry-progress{--color-surface-secondary:#f5f5f5;--color-border-secondary:#d0d0d0;--color-text-secondary:#666;--color-text-primary:#000;--color-accent-secondary:#e0e0e0;--color-text-on-accent:#333;--color-severity-error:#d32f2f}}.overview{gap:var(--space-4);padding:var(--space-6);max-width:var(--content-max-width);flex-direction:column;width:100%;margin:0 auto;display:flex}.overview__section{gap:var(--space-5);display:flex}.overview__section--full{width:100%}.overview__section--row{gap:var(--space-5);grid-template-columns:repeat(3,1fr);display:grid}@media (width<=1200px){.overview__section--row{grid-template-columns:repeat(2,1fr)}}@media (width<=768px){.overview{gap:var(--space-4);padding:var(--space-4)}.overview__section{gap:var(--space-3)}.overview__section--row{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){.overview{scroll-behavior:auto}}.wave-telemetry-cost{border:1px solid var(--color-border-secondary);background:var(--color-surface-secondary);border-radius:8px;padding:1.5rem}.cost-header{margin-bottom:1.5rem}.cost-header h3{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin:0;font-size:.875rem;font-weight:500}.cost-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;display:grid}.cost-tile{background:var(--color-surface-primary);border:1px solid var(--color-border-primary);border-radius:6px;flex-direction:column;gap:.5rem;padding:1rem;display:flex}.cost-tile--tokens{--tile-accent:var(--color-blue-500)}.cost-tile--model{--tile-accent:var(--color-green-500)}.cost-tile--okrate{--tile-accent:var(--color-amber-500)}.cost-tile--burnrate{--tile-accent:var(--color-purple-500)}.cost-tile--projection{--tile-accent:var(--color-cyan-500)}.tile-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);font-size:.75rem;font-weight:600}.tile-value{color:var(--tile-accent,var(--color-text-primary));font-size:1.25rem;font-weight:700;line-height:1}.tile-unit{color:var(--color-text-secondary);font-size:.75rem}.cost-content{justify-content:center;align-items:center;min-height:100px;display:flex}.cost-content p{color:var(--color-text-secondary);margin:0;font-size:.875rem}.cost-error{color:var(--color-severity-error)!important}.wave-telemetry-cost--alert{border-color:var(--color-severity-error);background:var(--color-surface-alert)}.cost-alert-badge{background:var(--color-severity-error);color:#fff;text-transform:uppercase;letter-spacing:.05em;border-radius:4px;padding:.25rem .75rem;font-size:.75rem;font-weight:600}.cost-ceiling-warning{border-left:3px solid var(--color-severity-error);color:var(--color-severity-error);background:#ff6b6b1a;border-radius:4px;margin-bottom:1rem;padding:.75rem;font-size:.875rem;font-weight:500}@media (prefers-color-scheme:dark){.wave-telemetry-cost{--color-surface-secondary:#1a1a1a;--color-surface-primary:#0a0a0a;--color-surface-alert:#2a1515;--color-border-secondary:#333;--color-border-primary:#222;--color-text-secondary:#999;--color-text-primary:#fff;--color-blue-500:#4a9eff;--color-green-500:#4caf50;--color-amber-500:#ffa726;--color-purple-500:#b47ff0;--color-cyan-500:#4dd9ff;--color-severity-error:#ff6b6b}}@media (prefers-color-scheme:light){.wave-telemetry-cost{--color-surface-secondary:#f5f5f5;--color-surface-primary:#fff;--color-surface-alert:#fff3f0;--color-border-secondary:#d0d0d0;--color-border-primary:#e0e0e0;--color-text-secondary:#666;--color-text-primary:#000;--color-blue-500:#1976d2;--color-green-500:#388e3c;--color-amber-500:#f57c00;--color-purple-500:#7b1fa2;--color-cyan-500:#0097a7;--color-severity-error:#d32f2f}}.quality-scorecards{padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);gap:var(--space-5);flex-direction:column;display:flex}.quality-scorecards--loading,.quality-scorecards--empty{color:var(--color-text-muted);text-align:center;padding:var(--space-5);justify-content:center;align-items:center;min-height:200px;display:flex}.quality-section{gap:var(--space-3);flex-direction:column;display:flex}.quality-section h4{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text);margin:0}.quality-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm);background:var(--color-bg-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);overflow:hidden}.quality-table thead{background:var(--color-bg-muted)}.quality-table th{padding:var(--space-2) var(--space-3);text-align:left;font-weight:var(--font-weight-medium);color:var(--color-text-muted);border-bottom:1px solid var(--color-border-subtle)}.quality-table tbody tr{border-bottom:1px solid var(--color-border-subtle);transition:background-color .15s ease-out}.quality-table tbody tr:hover{background:var(--color-bg-hover)}.quality-table td{padding:var(--space-2) var(--space-3)}.cell-specialty{font-weight:var(--font-weight-medium)}.cell-numeric{text-align:center}.cell-metric{align-items:center;gap:var(--space-2);display:flex}.metric{font-weight:var(--font-weight-bold);font-size:var(--font-size-md)}.metric-detail{font-size:var(--font-size-xs);color:var(--color-text-muted)}.quality-row--ok .cell-specialty,.quality-row--ok .metric{color:var(--color-status-ok)}.quality-row--warn .cell-specialty,.quality-row--warn .metric{color:var(--color-status-warn)}.quality-row--error .cell-specialty,.quality-row--error .metric{color:var(--color-status-error)}.quality-ranking{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ranking-item{gap:var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);background:var(--color-bg-subtle);font-size:var(--font-size-sm);grid-template-columns:2rem 1fr auto;align-items:center;display:grid}.ranking-place{font-weight:var(--font-weight-bold);color:var(--color-text-muted);text-align:center}.ranking-specialty{font-weight:var(--font-weight-medium);color:var(--color-text)}.ranking-metric{font-weight:var(--font-weight-medium);color:var(--color-text);text-align:right}.quality-footer{border-top:1px solid var(--color-border-subtle);padding-top:var(--space-3)}.quality-footer small{color:var(--color-text-muted);font-size:var(--font-size-xs)}@media (width<=768px){.quality-table{font-size:var(--font-size-xs)}.quality-table th,.quality-table td{padding:var(--space-2)}.ranking-item{gap:var(--space-2);padding:var(--space-2);grid-template-columns:1.5rem 1fr auto}}.work-view{padding:var(--space-4)}.work-container{gap:var(--space-6);max-width:var(--content-max-width);grid-template-columns:1fr 300px;margin:0 auto;display:grid}@media (width<=1200px){.work-container{grid-template-columns:1fr}.work-sidebar{order:2}}.board-header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.board-header h2{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold)}.add-item-button{padding:var(--space-2) var(--space-3);background:var(--color-accent);color:var(--color-text-inverse);border-radius:var(--radius-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-normal);border:none}.add-item-button:hover{background:var(--color-accent-emphasis)}.add-item-button:disabled{opacity:.5;cursor:not-allowed}.form-container{background:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-4)}.tracker-form{gap:var(--space-3);flex-direction:column;display:flex}.form-group{gap:var(--space-1);flex-direction:column;display:flex}.form-group label{font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);color:var(--color-text)}.form-group input,.form-group select,.form-group textarea{padding:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);font-size:var(--font-size-sm)}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--color-accent)}.form-group input:disabled,.form-group select:disabled,.form-group textarea:disabled{opacity:.6;cursor:not-allowed}.tracker-form button{padding:var(--space-2) var(--space-3);background:var(--color-accent);color:var(--color-text-inverse);border-radius:var(--radius-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-normal);border:none}.tracker-form button:hover:not(:disabled){background:var(--color-accent-emphasis)}.tracker-form button:disabled{opacity:.5;cursor:not-allowed}.form-error{padding:var(--space-2) var(--space-3);background:var(--color-status-error-bg);color:var(--color-status-error);border-radius:var(--radius-sm);border-left:3px solid var(--color-status-error)}.form-success{padding:var(--space-2) var(--space-3);background:var(--color-status-ok-bg);color:var(--color-status-ok);border-radius:var(--radius-sm);border-left:3px solid var(--color-status-ok)}.tracker-board{gap:var(--space-4);flex-direction:column;display:flex}.lanes-container{gap:var(--space-3);grid-template-columns:repeat(4,1fr);display:grid}@media (width<=1600px){.lanes-container{grid-template-columns:repeat(2,1fr)}}@media (width<=768px){.lanes-container{grid-template-columns:1fr}}.tracker-lane{background:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);min-height:300px}.lane-header{margin-bottom:var(--space-3);font-size:var(--font-size-md);font-weight:var(--font-weight-bold);justify-content:space-between;align-items:center;display:flex}.lane-count{padding:var(--space-1) var(--space-2);background:var(--color-accent);color:var(--color-text-inverse);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);display:inline-block}.lane-badge{padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);white-space:nowrap;display:inline-block}.lane-badge--active{background:var(--color-accent);color:var(--color-text-inverse)}.lane-badge--empty{background:var(--color-bg-inset);color:var(--color-text-muted)}.lane-content{gap:var(--space-2);flex-direction:column;max-height:600px;display:flex;overflow-y:auto}.lane-empty{text-align:center;color:var(--color-text-muted);padding:var(--space-4);font-style:italic}.tracker-card{background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);padding:var(--space-3);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-normal)}.tracker-card:hover{box-shadow:var(--shadow-md)}.tracker-card-header{justify-content:space-between;align-items:flex-start;gap:var(--space-2);margin-bottom:var(--space-2);display:flex}.tracker-card-title-row{align-items:flex-start;gap:var(--space-2);flex:1;display:flex}.priority-chip{padding:var(--space-1) var(--space-2);color:var(--color-text-inverse);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);border-radius:var(--radius-sm);white-space:nowrap;flex-shrink:0;display:inline-block}.tracker-card-title{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);line-height:var(--line-height-tight);margin:0}.expand-button{padding:var(--space-1);cursor:pointer;color:var(--color-text-muted);font-size:var(--font-size-sm);background:0 0;border:none}.expand-button:hover{color:var(--color-text)}.tracker-card-tags{gap:var(--space-1);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.tag{padding:var(--space-1) var(--space-2);background:var(--color-bg-inset);border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:var(--font-size-xs);color:var(--color-text-muted);display:inline-block}.tracker-card-details{background:var(--color-bg-inset);border-top:1px solid var(--color-border);margin:var(--space-2) 0;padding:var(--space-2) 0}.detail-section{padding:var(--space-2) 0;border-bottom:1px solid var(--color-border-subtle)}.detail-section:last-child{border-bottom:none}.detail-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--color-text-muted);text-transform:uppercase;margin-bottom:var(--space-1);display:block}.detail-section p,.detail-section time,.detail-section a,.detail-section code{font-size:var(--font-size-sm);color:var(--color-text)}.detail-section a{word-break:break-all}.pr-link-inert{padding:var(--space-1) var(--space-2);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-status-error);word-break:break-all;white-space:pre-wrap;display:block}.tracker-card-actions{gap:var(--space-1);margin-top:var(--space-2);display:flex}.tracker-card-actions button{padding:var(--space-1) var(--space-2);background:var(--color-accent);color:var(--color-text-inverse);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-normal);border:none;flex:1}.tracker-card-actions button:hover:not(:disabled){background:var(--color-accent-emphasis)}.tracker-card-actions button:disabled{opacity:.5;cursor:not-allowed}.card-error{padding:var(--space-2);background:var(--color-status-error-bg);color:var(--color-status-error);border-radius:var(--radius-sm);border-left:3px solid var(--color-status-error);margin-top:var(--space-2);font-size:var(--font-size-sm)}.archived-summary{background:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);margin-top:var(--space-4)}.archived-summary h3{font-size:var(--font-size-md);font-weight:var(--font-weight-bold);margin-bottom:var(--space-2)}.archived-list{gap:var(--space-1);flex-direction:column;max-height:200px;list-style:none;display:flex;overflow-y:auto}.archived-item{gap:var(--space-2);padding:var(--space-2);background:var(--color-surface);border-radius:var(--radius-sm);font-size:var(--font-size-sm);align-items:center;display:flex}.archived-title{color:var(--color-text-muted);flex:1;text-decoration:line-through}.archived-priority{padding:var(--space-1) var(--space-2);background:var(--color-bg-inset);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--color-text-muted)}.backlog-panel{background:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);top:calc(var(--header-height) + var(--space-3));position:sticky}.backlog-panel h3{font-size:var(--font-size-md);font-weight:var(--font-weight-bold);margin-bottom:var(--space-3)}.empty-state{color:var(--color-text-muted);text-align:center;padding:var(--space-3);font-style:italic}.backlog-tier{margin-bottom:var(--space-3)}.tier-header{margin-bottom:var(--space-2);justify-content:space-between;align-items:center;display:flex}.tier-header h4{font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);margin:0}.tier-counts{font-size:var(--font-size-xs);color:var(--color-text-muted)}.tier-progress-bar{background:var(--color-bg-inset);border-radius:var(--radius-sm);height:6px;margin-bottom:var(--space-2);display:flex;overflow:hidden}.progress-segment{height:100%;transition:width var(--transition-normal);flex:none}.progress-segment.done{background:var(--color-status-ok)}.progress-segment.inflight{background:var(--color-status-warn)}.progress-segment.todo{background:var(--color-status-neutral)}.tier-items-list{gap:var(--space-1);flex-direction:column;max-height:250px;display:flex;position:relative;overflow-y:auto}.tier-items-list:after{background:linear-gradient(to bottom, transparent, var(--color-bg-subtle));pointer-events:none;height:20px;position:absolute;bottom:0;left:0;right:0}.backlog-item{gap:var(--space-2);padding:var(--space-1) var(--space-2);font-size:var(--font-size-xs);background:var(--color-surface);border-radius:var(--radius-sm);word-break:break-word;align-items:flex-start;display:flex}.item-status{font-size:var(--font-size-sm);flex-shrink:0}.item-tag{font-weight:var(--font-weight-bold);color:var(--color-accent);flex-shrink:0;min-width:fit-content}.item-title{color:var(--color-text);flex:1}._container_1pt1h_5{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-subtle);padding:var(--space-4)}._title_1pt1h_12{margin:0 0 var(--space-4) 0;font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text)}._timelineContent_1pt1h_19{gap:var(--space-4);flex-direction:column;display:flex}._row_1pt1h_25{gap:var(--space-3);grid-template-columns:160px 1fr 80px;align-items:center;display:grid}._rowLabel_1pt1h_32{gap:var(--space-1);font-size:var(--font-size-sm);flex-direction:column;display:flex;overflow:hidden}._agentId_1pt1h_40{font-family:var(--font-mono);font-weight:var(--font-weight-bold);color:var(--color-text);word-break:break-all}._agentStatus_1pt1h_47{font-size:var(--font-size-xs);color:var(--color-text-muted);text-transform:uppercase}._barContainer_1pt1h_53{background:var(--color-bg);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);height:24px;position:relative;overflow:visible}._bar_1pt1h_53{border-radius:var(--radius-sm);height:100%;transition:width var(--transition-normal);min-width:5%;max-width:100%;padding-right:var(--space-2);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-inverse);white-space:nowrap;justify-content:flex-end;align-items:center;display:flex;overflow:hidden}._status-ok_1pt1h_80{background:var(--color-status-ok)}._status-info_1pt1h_84{background:var(--color-status-info)}._status-warn_1pt1h_88{background:var(--color-status-warn)}._status-error_1pt1h_92{background:var(--color-status-error)}._status-neutral_1pt1h_96{background:var(--color-status-neutral)}._rowDuration_1pt1h_100{text-align:right;font-size:var(--font-size-sm);font-family:var(--font-mono);color:var(--color-text-muted);min-width:60px}._footer_1pt1h_108{margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--color-border-subtle);font-size:var(--font-size-xs);color:var(--color-text-muted)}._legend_1pt1h_116{line-height:var(--line-height-normal);display:inline-block}@media (width<=768px){._row_1pt1h_25{gap:var(--space-2);grid-template-columns:1fr}._rowLabel_1pt1h_32{gap:var(--space-2);flex-direction:row;align-items:baseline;display:flex}._barContainer_1pt1h_53{order:3;grid-column:1}._rowDuration_1pt1h_100{text-align:left;order:2}}@media (prefers-reduced-motion:reduce){._bar_1pt1h_53{transition:none}}._scaleLabels_1pt1h_154{pointer-events:none;height:18px;display:flex;position:absolute;top:-20px;left:0;right:0}._scaleTick_1pt1h_164{flex-direction:column;align-items:center;height:100%;display:flex;position:absolute}._scaleLabel_1pt1h_154{font-size:var(--font-size-xs);color:var(--color-text-muted);font-weight:var(--font-weight-normal);white-space:nowrap;text-transform:lowercase}._barLabel_1pt1h_181{font-size:var(--font-size-xs);color:var(--color-text-inverse);font-weight:var(--font-weight-bold);white-space:nowrap;margin-left:var(--space-1)}._container_jryat_5{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-subtle);flex-direction:column;height:100%;display:flex;overflow:hidden}._header_jryat_15{padding:var(--space-4);border-bottom:1px solid var(--color-border-subtle);background:var(--color-bg);justify-content:space-between;align-items:center;display:flex}._title_jryat_24{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text);margin:0}._toggleButton_jryat_31{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text-muted);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}._toggleButton_jryat_31:hover{background:var(--color-bg-inset);color:var(--color-text)}._toggleButton_jryat_31:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}._toggleButton_jryat_31[aria-pressed=true]{background:var(--color-status-ok-bg);color:var(--color-status-ok);border-color:var(--color-status-ok)}._messagesBox_jryat_58{padding:var(--space-4);gap:var(--space-3);scroll-behavior:smooth;flex-direction:column;flex:1;display:flex;overflow-y:auto}._emptyState_jryat_68{color:var(--color-text-muted);font-size:var(--font-size-sm);text-align:center;padding:var(--space-8) var(--space-4)}._message_jryat_58{padding:var(--space-3) var(--space-4);border-left:3px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);font-size:var(--font-size-sm)}._role-user_jryat_84{border-left-color:var(--color-status-info);background:#0969da0a}._role-assistant_jryat_89{border-left-color:var(--color-status-ok);background:#1a7f370a}._role_jryat_84{font-weight:var(--font-weight-bold);text-transform:uppercase;font-size:var(--font-size-xs);margin-right:var(--space-2);display:inline-block}._role-user_jryat_84 ._role_jryat_84{color:var(--color-status-info)}._role-assistant_jryat_89 ._role_jryat_84{color:var(--color-status-ok)}._timestamp_jryat_110{color:var(--color-text-muted);font-size:var(--font-size-xs);font-family:var(--font-mono);margin-left:var(--space-2);display:inline-block}._text_jryat_118{margin-top:var(--space-2);color:var(--color-text);line-height:var(--line-height-normal);word-wrap:break-word;white-space:pre-wrap}._footer_jryat_126{padding:var(--space-2) var(--space-4);border-top:1px solid var(--color-border-subtle);background:var(--color-bg);text-align:right;font-size:var(--font-size-xs)}._footerTimestamp_jryat_134{color:var(--color-text-muted);font-family:var(--font-mono)}@media (prefers-reduced-motion:reduce){._messagesBox_jryat_58{scroll-behavior:auto}}._container_mspxs_6{border:1px solid var(--color-border,#e0e0e0);background-color:var(--color-surface,#f9f9f9);border-radius:8px;margin:12px 0;padding:12px}@media (prefers-color-scheme:dark){._container_mspxs_6{border-color:var(--color-border,#444);background-color:var(--color-surface,#1a1a1a)}}._header_mspxs_21{border-bottom:1px solid var(--color-border,#e0e0e0);align-items:center;gap:12px;margin-bottom:12px;padding-bottom:8px;display:flex}@media (prefers-color-scheme:dark){._header_mspxs_21{border-color:var(--color-border,#444)}}._title_mspxs_36{color:var(--color-text,#333);margin:0;font-size:14px;font-weight:600}@media (prefers-color-scheme:dark){._title_mspxs_36{color:var(--color-text,#ccc)}}._phase_mspxs_49{color:var(--color-text-secondary,#666);font-size:12px;font-weight:500}@media (prefers-color-scheme:dark){._phase_mspxs_49{color:var(--color-text-secondary,#999)}}._timestamp_mspxs_61{color:var(--color-text-secondary,#999);margin-left:auto;font-size:11px}@media (prefers-color-scheme:dark){._timestamp_mspxs_61{color:var(--color-text-secondary,#666)}}._agentsList_mspxs_73{flex-direction:column;gap:8px;display:flex}._agentRow_mspxs_79{background-color:var(--color-background,#fff);border:1px solid var(--color-border,#e0e0e0);border-radius:4px;align-items:center;gap:8px;padding:8px;font-size:12px;display:flex}@media (prefers-color-scheme:dark){._agentRow_mspxs_79{background-color:var(--color-background,#222);border-color:var(--color-border,#333)}}._agentId_mspxs_97{color:var(--color-text,#333);min-width:60px;font-family:monospace;font-weight:500}@media (prefers-color-scheme:dark){._agentId_mspxs_97{color:var(--color-text,#ccc)}}._phaseBadge_mspxs_110{text-transform:uppercase;letter-spacing:.5px;color:#fff;border-radius:3px;padding:2px 6px;font-size:11px;font-weight:600}._phase-blue_mspxs_120{background-color:#2196f3}._phase-cyan_mspxs_124{background-color:#00bcd4}._phase-green_mspxs_128{background-color:#4caf50}._phase-orange_mspxs_132{background-color:#ff9800}._phase-gray_mspxs_136{background-color:#9e9e9e}._age_mspxs_73{background-color:var(--color-border,#e0e0e0);color:var(--color-text,#333);text-align:center;border-radius:3px;min-width:40px;padding:2px 6px;font-weight:500}@media (prefers-color-scheme:dark){._age_mspxs_73{background-color:var(--color-border,#333);color:var(--color-text,#ccc)}}._tokens_mspxs_157{background-color:var(--color-border,#e0e0e0);color:var(--color-text,#333);text-align:center;border-radius:3px;min-width:60px;padding:2px 6px;font-weight:500}@media (prefers-color-scheme:dark){._tokens_mspxs_157{background-color:var(--color-border,#333);color:var(--color-text,#ccc)}}._warnings_mspxs_174{color:#d32f2f;margin-left:auto;font-size:11px;font-weight:500}@media (prefers-color-scheme:dark){._warnings_mspxs_174{color:#ff6b6b}}._unavailable_mspxs_187{text-align:center;color:var(--color-text-secondary,#999);padding:12px;font-size:13px;font-style:italic}@media (prefers-color-scheme:dark){._unavailable_mspxs_187{color:var(--color-text-secondary,#666)}}._empty_mspxs_201{text-align:center;color:var(--color-text-secondary,#999);padding:8px;font-size:12px}@media (prefers-color-scheme:dark){._empty_mspxs_201{color:var(--color-text-secondary,#666)}}._agentMetrics_mspxs_214{align-items:center;gap:6px;display:flex}._lifecycle_mspxs_220{color:var(--color-text-secondary,#666);align-items:center;gap:4px;margin-left:auto;font-size:11px;display:flex}@media (prefers-color-scheme:dark){._lifecycle_mspxs_220{color:var(--color-text-secondary,#999)}}._lifecycleLabel_mspxs_235{font-weight:500}._lifecycleBadge_mspxs_239{background-color:var(--color-border,#e0e0e0);color:var(--color-text,#333);border-radius:3px;padding:2px 6px;font-size:10px;font-weight:600}@media (prefers-color-scheme:dark){._lifecycleBadge_mspxs_239{background-color:var(--color-border,#333);color:var(--color-text,#ccc)}}._container_ud6jd_5{gap:var(--space-6);flex-direction:column;height:100%;display:flex;overflow-y:auto}._section_ud6jd_13{flex-direction:column;flex:0 auto;min-height:200px;display:flex}._section_ud6jd_13:first-child{flex:0 40%}._section_ud6jd_13:last-child{flex:60%}._timelineHeader_ud6jd_28{gap:var(--space-3);margin-bottom:var(--space-4);flex-direction:column;display:flex}._timelineTitle_ud6jd_35{font-size:var(--font-size-lg);margin:0;font-weight:600}._filterControls_ud6jd_41{gap:var(--space-2);flex-wrap:wrap;display:flex}._filterButton_ud6jd_47{padding:var(--space-2) var(--space-4);border:1px solid var(--color-border);background:var(--color-bg-subtle);color:var(--color-text);cursor:pointer;font-size:var(--font-size-sm);border-radius:4px;font-weight:500;transition:all .2s}._filterButton_ud6jd_47:hover{background:var(--color-bg-inset);border-color:var(--color-border-subtle)}._filterButtonActive_ud6jd_64{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-text-inverse)}._filterButtonActive_ud6jd_64:hover{background:var(--color-accent-emphasis);border-color:var(--color-accent-emphasis)}@media (width<=768px){._container_ud6jd_5{gap:var(--space-4)}._section_ud6jd_13:first-child{flex:0 auto;min-height:auto}._section_ud6jd_13:last-child{flex:auto;min-height:250px}._filterControls_ud6jd_41{gap:var(--space-1)}._filterButton_ud6jd_47{padding:var(--space-1) var(--space-2);font-size:var(--font-size-xs)}}.cost-table-wrapper{border-radius:var(--radius-md);overflow-x:auto}.cost-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm);background:var(--color-surface)}.cost-table caption{text-align:left;padding:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text-muted);caption-side:top}.cost-table thead{background:var(--color-bg-inset);border-bottom:2px solid var(--color-border)}.cost-table th{padding:var(--space-2) var(--space-3);text-align:left;font-weight:var(--font-weight-bold);color:var(--color-text)}.cost-table th.col-numeric{text-align:right}.cost-table tbody tr{border-bottom:1px solid var(--color-border-subtle)}.cost-table tbody tr:hover{background:var(--color-bg-subtle)}.cost-table td{padding:var(--space-2) var(--space-3);text-align:left;color:var(--color-text)}.cost-table td.col-numeric{text-align:right;font-family:var(--font-mono)}.cost-table .model-name{font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size-xs);word-break:break-word;max-width:180px}.cost-table .verdict-failed{color:var(--color-status-error)}.cost-table .verdict-empty{color:var(--color-status-warn)}.cost-table .verdict-hung{color:var(--color-status-error)}.cost-table .col-total{font-weight:var(--font-weight-bold)}@media (width<=640px){.cost-table .verdict-col-header,.cost-table .verdict-cell{display:none}}@media (width<=768px){.cost-table{font-size:var(--font-size-xs)}.cost-table th,.cost-table td{padding:var(--space-1) var(--space-2)}.cost-table .model-name{max-width:100px}}.chart-container{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);flex-direction:column;display:flex;overflow:hidden}.chart-empty{min-height:250px;padding:var(--space-6);text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.chart-empty-message{margin:0 0 var(--space-2) 0;font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text)}.chart-empty-hint{font-size:var(--font-size-sm);color:var(--color-text-muted);margin:0}.cost-chart-svg{max-width:100%;height:auto;display:block;overflow:visible}.chart-footer{padding:var(--space-2) var(--space-4);border-top:1px solid var(--color-border-subtle);background:var(--color-bg);text-align:right;font-size:var(--font-size-xs)}.chart-footer-timestamp{color:var(--color-text-muted);font-family:var(--font-mono)}.chart-axis{stroke:var(--color-border);stroke-width:2px}.chart-label-x,.chart-label-y{fill:var(--color-text-muted);font-size:12px;font-family:var(--font-sans)}.bar-segment{stroke:var(--color-border-subtle);stroke-width:.5px;transition:opacity var(--transition-fast);cursor:pointer}.bar-segment:hover{opacity:.8}.bar-input{fill:var(--color-status-info)}.bar-output{fill:var(--color-accent)}.chart-legend{font-size:12px}.legend-text{fill:var(--color-text-muted);font-family:var(--font-sans);font-size:12px}@media (width<=768px){.cost-chart-svg{width:100%}.chart-label-x,.chart-label-y,.legend-text{font-size:10px}}.scorecard{padding:var(--space-5);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}.scorecard-header{margin-bottom:var(--space-4)}.scorecard-header h3{margin:0 0 var(--space-2) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);color:var(--color-text)}.scorecard-total{font-size:var(--font-size-sm);color:var(--color-text-muted)}.scorecard-tiles{gap:var(--space-3);margin-bottom:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));display:grid}.scorecard-tile{padding:var(--space-3);border-radius:var(--radius-md);text-align:center;border:1px solid var(--color-border);background:var(--color-bg-subtle)}.tile-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);margin-bottom:var(--space-1)}.tile-percent{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin-bottom:var(--space-1)}.tile-count{font-size:var(--font-size-xs);color:var(--color-text-muted)}.scorecard-tile--ok{border-color:var(--color-status-ok);background:var(--color-status-ok-bg)}.scorecard-tile--ok .tile-label,.scorecard-tile--ok .tile-percent{color:var(--color-status-ok)}.scorecard-tile--error{border-color:var(--color-status-error);background:var(--color-status-error-bg)}.scorecard-tile--error .tile-label,.scorecard-tile--error .tile-percent{color:var(--color-status-error)}.scorecard-tile--warn{border-color:var(--color-status-warn);background:var(--color-status-warn-bg)}.scorecard-tile--warn .tile-label,.scorecard-tile--warn .tile-percent{color:var(--color-status-warn)}.scorecard-tile--neutral{border-color:var(--color-status-neutral)}.scorecard-tile--neutral .tile-label,.scorecard-tile--neutral .tile-percent{color:var(--color-status-neutral)}.scorecard-footer{border-top:1px solid var(--color-border-subtle);padding-top:var(--space-3)}.scorecard-footer small{color:var(--color-text-muted);font-size:var(--font-size-xs)}.weekly-cost-wrapper{width:100%;overflow-x:auto}.weekly-cost-empty{padding:var(--space-5);text-align:center;color:var(--color-text-muted);background-color:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md)}.weekly-cost-empty .empty-message{font-size:var(--font-size-sm);margin:0}.weekly-cost-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm)}.weekly-cost-table caption{text-align:left;padding:var(--space-3) 0 var(--space-2) 0;font-size:var(--font-size-xs);color:var(--color-text-muted)}.weekly-cost-table thead th{background-color:var(--color-bg-subtle);border:1px solid var(--color-border-subtle);padding:var(--space-3);text-align:left;font-weight:var(--font-weight-bold);color:var(--color-text)}.weekly-cost-table thead th.col-numeric{text-align:right}.weekly-cost-table tbody td{border:1px solid var(--color-border-subtle);padding:var(--space-3);background-color:var(--color-surface)}.weekly-cost-table tbody tr:nth-child(odd) td{background-color:var(--color-bg-inset)}.weekly-cost-table tbody td.week-label{font-weight:var(--font-weight-medium);color:var(--color-text)}.weekly-cost-table tbody td.col-numeric{text-align:right;font-family:var(--font-mono);color:var(--color-text-muted)}@media (prefers-reduced-motion:no-preference){.weekly-cost-table tbody tr{transition:background-color var(--transition-fast)}.weekly-cost-table tbody tr:hover td{background-color:var(--color-bg-subtle)}}.verdict-cost-wrapper{width:100%}.verdict-cost-empty{padding:var(--space-5);text-align:center;color:var(--color-text-muted);background-color:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md)}.verdict-cost-empty .empty-message{font-size:var(--font-size-sm);margin:0}.verdict-cost-grid{gap:var(--space-4);margin-bottom:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.verdict-cost-tile{padding:var(--space-4);border:2px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-bg-subtle);transition:all var(--transition-normal)}.verdict-cost-tile:hover:not(.verdict-tile--disabled){border-color:var(--color-accent);background-color:var(--color-surface);box-shadow:var(--shadow-md)}.verdict-tile--ok{border-left:4px solid var(--color-status-ok)}.verdict-tile--failed{border-left:4px solid var(--color-status-error)}.verdict-tile--empty{border-left:4px solid var(--color-status-warn)}.verdict-tile--hung{border-left:4px solid var(--color-status-neutral)}.verdict-tile--disabled{opacity:.5;background-color:var(--color-bg-inset);border-color:var(--color-border-subtle);cursor:not-allowed}.verdict-cost-tile .tile-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-2)}.verdict-cost-tile .tile-value{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text);margin-bottom:var(--space-2);align-items:baseline;gap:var(--space-2);display:flex}.verdict-cost-tile .tile-unit{font-size:var(--font-size-xs);color:var(--color-text-muted);font-weight:var(--font-weight-normal)}.verdict-cost-tile .tile-disabled{color:var(--color-text-muted);font-size:var(--font-size-xl);line-height:1}.verdict-cost-tile .tile-meta{font-size:var(--font-size-xs);color:var(--color-text-muted)}.verdict-cost-note{padding:var(--space-3);background-color:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);border-left:3px solid var(--color-status-info)}.verdict-cost-note p{font-size:var(--font-size-xs);color:var(--color-text-muted);line-height:var(--line-height-normal);margin:0}.model-mix-wrapper{width:100%}.model-mix-empty{padding:var(--space-5);text-align:center;color:var(--color-text-muted);background-color:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md)}.model-mix-empty .chart-empty-message{font-size:var(--font-size-sm);margin:0}.model-mix-chart-svg{width:100%;max-width:800px;height:auto;margin:0 auto;display:block}.model-mix-chart-svg .chart-axis{stroke:var(--color-border);stroke-width:1.5px}.model-mix-chart-svg .chart-label-x,.model-mix-chart-svg .chart-label-y{font-size:12px;font-family:var(--font-sans);fill:var(--color-text-muted)}.model-mix-chart-svg .chart-label-x{text-anchor:middle}.model-mix-chart-svg .bar-segment{stroke:var(--color-bg);stroke-width:1px;opacity:.9;transition:opacity .15s}.model-mix-chart-svg .bar-segment:hover{opacity:1;stroke-width:1.5px;filter:brightness(1.1)}.model-mix-chart-svg .bar-segment:hover title{display:block}.model-mix-chart-svg .chart-legend{font-family:var(--font-sans)}.model-mix-chart-svg .legend-text{fill:var(--color-text-muted);font-size:11px}.model-mix-wrapper .model-mix-note{margin-top:var(--space-4);padding:var(--space-3);background-color:var(--color-bg-inset);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md)}.model-mix-note p{font-size:var(--font-size-xs);color:var(--color-text-muted);line-height:var(--line-height-normal);margin:0}@media (width<=600px){.model-mix-chart-svg{min-height:200px}.model-mix-chart-svg .chart-label-x{font-size:10px}.model-mix-chart-svg .legend-text{font-size:9px}}.cost-analytics-panel{background:var(--color-surface,#1a1a1a);border:1px solid var(--color-border,#333);border-radius:.5rem;flex-direction:column;gap:1.5rem;padding:1.5rem;display:flex}.cost-analytics-panel h3{color:var(--color-text,#fff);margin:0 0 1rem;font-size:1.1rem;font-weight:600}.analytics-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;display:grid}.analytics-section{background:var(--color-bg,#0f0f0f);border:1px solid var(--color-border,#333);border-radius:.375rem;flex-direction:column;gap:.75rem;padding:1rem;display:flex}.analytics-section h4{color:var(--color-text,#fff);text-transform:uppercase;letter-spacing:.05em;opacity:.9;margin:0;font-size:.95rem;font-weight:600}.wave-spend-chart{width:100%;height:150px}.wave-bar{fill:var(--color-primary,#60a5fa);opacity:.8;transition:opacity .2s}.wave-bar:hover{opacity:1}.wave-label{fill:var(--color-text-secondary,#999);font-size:.75rem;font-weight:500}.counterfactual-compare{flex-direction:column;gap:0;font-size:.85rem;display:flex;overflow-x:auto}.compare-row{border-bottom:1px solid var(--color-border,#222);grid-template-columns:1.5fr 1fr 1fr 1.2fr;align-items:center;gap:.5rem;padding:.5rem;display:grid}.compare-row:last-child{border-bottom:none}.compare-header{background:var(--color-surface,#1a1a1a);color:var(--color-text-secondary,#999);text-transform:uppercase;letter-spacing:.05em;border-bottom:2px solid var(--color-border,#333);padding:.75rem .5rem;font-size:.75rem;font-weight:600}.compare-total{background:var(--color-surface-variant,#111);border-top:2px solid var(--color-border,#333);border-bottom:none;font-weight:600}.compare-col{text-align:right}.model-col{text-align:left;color:var(--color-text,#fff);font-family:SF Mono,Monaco,monospace;font-size:.8rem}.cost-col{color:var(--color-text-secondary,#aaa);font-variant-numeric:tabular-nums}.savings-col{font-variant-numeric:tabular-nums;font-weight:600}.savings-col.positive{color:var(--color-success,#10b981)}.savings-col.negative{color:var(--color-error,#ef4444)}.burn-rate-projection{flex-direction:column;gap:1rem;display:flex}.burn-stats{flex-direction:column;gap:.5rem;font-size:.85rem;display:flex}.stat-row{justify-content:space-between;align-items:center;padding:.25rem 0;display:flex}.stat-label{color:var(--color-text-secondary,#999);font-weight:500}.stat-value{color:var(--color-text,#fff);text-align:right;font-family:SF Mono,Monaco,monospace;font-weight:600}.burn-meter{flex-direction:column;gap:.5rem;display:flex}.meter-bar{background:var(--color-bg,#0f0f0f);border:1px solid var(--color-border,#333);border-radius:.25rem;width:100%;height:24px;position:relative;overflow:hidden}.meter-fill{border-radius:.25rem 0 0 .25rem;height:100%;transition:width .3s,background-color .2s}.meter-fill.burn-safe{background:linear-gradient(90deg, var(--color-success,#10b981), var(--color-info,#3b82f6))}.meter-fill.burn-warning{background:linear-gradient(90deg, var(--color-warn,#f59e0b), var(--color-error,#ef4444))}.meter-fill.burn-alert{background:var(--color-error,#ef4444)}.meter-label{color:var(--color-text,#fff);justify-content:space-between;font-size:.8rem;font-weight:600;display:flex}.meter-projection{color:var(--color-text-secondary,#999);font-size:.75rem;font-style:italic}.analytics-unavailable{background:var(--color-surface-variant,#111);border:1px dashed var(--color-border,#333);text-align:center;border-radius:.375rem;justify-content:center;align-items:center;min-height:100px;padding:1.5rem;display:flex}.analytics-unavailable p{color:var(--color-text-secondary,#999);margin:0;font-size:.85rem}@media (width<=768px){.analytics-grid{grid-template-columns:1fr}.compare-row{grid-template-columns:1fr;gap:.25rem}.compare-col{text-align:left}.compare-col:before{content:attr(data-label);color:var(--color-text-secondary,#999);min-width:80px;font-weight:600;display:inline-block}}@media (prefers-color-scheme:dark){.cost-analytics-panel{background:#1a1a1a}.analytics-section{background:#0f0f0f;border-color:#333}}@media (prefers-color-scheme:light){.cost-analytics-panel{background:#f5f5f5;border-color:#e0e0e0}.analytics-section{background:#fff;border-color:#d0d0d0}.analytics-section h4{color:#1a1a1a}.wave-label,.stat-label,.compare-header{color:#666}.stat-value,.cost-col,.model-col,.meter-label{color:#1a1a1a}.meter-bar{background:#e0e0e0;border-color:silver}}.view-cost{padding:var(--space-5);max-width:var(--content-max-width)}.view-cost h2{margin-top:0;margin-bottom:var(--space-5);font-size:var(--font-size-xl);color:var(--color-text)}.view-cost h3{font-size:var(--font-size-lg);color:var(--color-text);margin-top:var(--space-5);margin-bottom:var(--space-3)}.cost-callout{padding:var(--space-4);border-left:4px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-bg-subtle);margin-bottom:var(--space-5)}.cost-callout h3{margin-top:0;margin-bottom:var(--space-2);font-size:var(--font-size-md)}.cost-callout p{color:var(--color-text);font-size:var(--font-size-sm);line-height:var(--line-height-normal);margin:0}.cost-callout code{background:var(--color-bg-inset);font-family:var(--font-mono);border-radius:3px;padding:.2em .4em;font-size:.9em}.cost-callout--info{border-left-color:var(--color-status-info)}.cost-layout{gap:var(--space-5);display:grid}.cost-section{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);background:var(--color-surface)}.cost-section h3{margin-top:0;margin-bottom:var(--space-3)}.cost-section--full{grid-column:1/-1}@media (width<=768px){.view-cost{padding:var(--space-3)}.cost-layout{gap:var(--space-4)}.cost-section{padding:var(--space-3)}}.failure-drilldown{flex-direction:column;gap:.5rem;display:flex}.failure-drilldown-toggle{border:1px solid var(--color-border,#ccc);cursor:pointer;font-family:inherit;font-size:inherit;text-align:left;background:0 0;border-radius:4px;padding:.5rem;transition:background-color .2s}.failure-drilldown-toggle:hover{background-color:var(--color-bg-hover,#f5f5f5)}.failure-drilldown-toggle:active{background-color:var(--color-bg-active,#e8e8e8)}@media (prefers-color-scheme:dark){.failure-drilldown-toggle:hover{background-color:#2a2a2a}.failure-drilldown-toggle:active{background-color:#333}}.failure-drilldown-content{background-color:var(--color-bg-secondary,#f9f9f9);border:1px solid var(--color-border,#ccc);border-radius:4px;flex-direction:column;gap:1rem;padding:1rem;display:flex}@media (prefers-color-scheme:dark){.failure-drilldown-content{background-color:#1a1a1a;border-color:#444}}.failure-drilldown-loading,.failure-drilldown-error,.failure-drilldown-unavailable,.failure-drilldown-empty{border-radius:4px;padding:1rem;font-size:.95rem}.failure-drilldown-loading{color:var(--color-text-secondary,#666);background-color:#0000}.failure-drilldown-error{color:#c41e3a;background-color:#fef5f5;border:1px solid #c41e3a;flex-direction:column;gap:.5rem;display:flex}@media (prefers-color-scheme:dark){.failure-drilldown-error{background-color:#2a1a1a;border-color:#8b2e2e}}.failure-drilldown-error button{color:#fff;cursor:pointer;background:#c41e3a;border:none;border-radius:4px;align-self:flex-start;padding:.5rem 1rem;font-size:.9rem}.failure-drilldown-error button:hover{background:#a01830}.failure-drilldown-unavailable{color:var(--color-text,#333);background-color:#fffaef;border:1px solid #f0ad4e}@media (prefers-color-scheme:dark){.failure-drilldown-unavailable{background-color:#2a1f00;border-color:#8b6f00}}.failure-drilldown-empty{color:var(--color-text-secondary,#666);background-color:#0000;font-style:italic}.failure-run{border-left:4px solid var(--color-border,#ccc);background-color:#0000;border-radius:2px;flex-direction:column;gap:.75rem;padding:1rem;display:flex}.failure-run-header{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.failure-run-conclusion{color:var(--color-text,#333);align-items:center;gap:.25rem;font-weight:600;display:flex}.failure-run-icon{font-size:1.2em;display:inline-block}.failure-run-name{color:var(--color-text,#333);font-family:monospace;font-size:.9rem}.failure-run-link{color:#06c;font-size:.9rem;text-decoration:none}.failure-run-link:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.failure-run-link{color:#66b3ff}}.failure-run-meta{color:var(--color-text-secondary,#666);font-size:.85rem}.failure-run-meta code{background-color:var(--color-code-bg,#f0f0f0);border-radius:2px;padding:2px 4px;font-family:monospace;font-size:.85em}@media (prefers-color-scheme:dark){.failure-run-meta code{background-color:#2a2a2a}}.failure-jobs{flex-direction:column;gap:.5rem;display:flex}.failure-jobs-summary{color:var(--color-text,#333);padding:.5rem 0;font-weight:500}.failure-jobs-failing{color:#c41e3a}.failure-jobs-all-passing{color:#2ecc71}.failure-jobs-empty{color:var(--color-text-secondary,#666);text-align:center;padding:1rem;font-style:italic}.failure-jobs-list{flex-direction:column;gap:.5rem;display:flex}.failure-job{border:1px solid var(--color-border,#ddd);border-radius:4px;flex-direction:column;gap:.5rem;display:flex;overflow:hidden}.failure-job-summary{background:var(--color-bg-secondary,#fafafa);cursor:pointer;text-align:left;font-family:inherit;font-size:inherit;color:var(--color-text,#333);border:none;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s;display:flex}.failure-job-summary:hover{background-color:var(--color-bg-hover,#f0f0f0)}.failure-job-summary:active{background-color:var(--color-bg-active,#e8e8e8)}@media (prefers-color-scheme:dark){.failure-job-summary{background:#2a2a2a}.failure-job-summary:hover{background-color:#333}.failure-job-summary:active{background-color:#3a3a3a}}.failure-job-summary.failure-job-failing{background-color:#fef5f5;border-left:4px solid #c41e3a}@media (prefers-color-scheme:dark){.failure-job-summary.failure-job-failing{background-color:#2a1a1a;border-left-color:#8b2e2e}}.failure-job-icon{width:1em;color:var(--color-text-secondary,#666);justify-content:center;align-items:center;font-size:.9em;display:inline-flex}.failure-job-status{flex:none;align-items:center;gap:.25rem;font-weight:500;display:flex}.failure-job-conclusion-icon{font-size:1em;display:inline-block}.failure-job-name{color:var(--color-text,#333);text-overflow:ellipsis;flex:auto;min-width:0;font-family:monospace;font-size:.9rem;overflow:hidden}.failure-job-link{color:#06c;white-space:nowrap;flex:none;font-size:.85rem;text-decoration:none}.failure-job-link:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.failure-job-link{color:#66b3ff}}.failure-job-details{border-top:1px solid var(--color-border,#ddd);background-color:#0000;flex-direction:column;gap:.5rem;padding:.75rem;display:flex}@media (prefers-color-scheme:dark){.failure-job-details{border-top-color:#444}}.failure-job-meta{color:var(--color-text-secondary,#666);font-size:.85rem}.failure-job-meta code{background-color:var(--color-code-bg,#f0f0f0);border-radius:2px;padding:2px 4px;font-family:monospace;font-size:.85em}@media (prefers-color-scheme:dark){.failure-job-meta code{background-color:#1a1a1a}}.failure-job-meta a{color:#06c;text-decoration:none}.failure-job-meta a:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.failure-job-meta a{color:#66b3ff}}.failure-job-log{color:#333;background-color:#f5f5f5;border:1px solid #ddd;border-radius:2px;max-height:300px;margin:0;padding:.75rem;font-family:Courier New,Courier,monospace;font-size:.8rem;line-height:1.4;overflow:auto}@media (prefers-color-scheme:dark){.failure-job-log{color:#ccc;background-color:#1a1a1a;border-color:#444}}.failure-job-log-unavailable{color:var(--color-text,#333);background-color:#fffaef;border:1px solid #f0ad4e;border-radius:2px;padding:.75rem;font-size:.9rem}@media (prefers-color-scheme:dark){.failure-job-log-unavailable{background-color:#2a1f00;border-color:#8b6f00}}.view-prboard{padding:var(--space-5);max-width:var(--content-max-width)}.prboard-head{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-5);display:flex}.view-prboard h2{font-size:var(--font-size-xl);color:var(--color-text);margin:0}.view-prboard h3{margin-top:0;margin-bottom:var(--space-2);font-size:var(--font-size-md);color:var(--color-text)}.prboard-refresh{padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);background:0 0}.prboard-refresh:hover{background:var(--color-bg-subtle)}.prboard-refresh:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}.prboard-callout{padding:var(--space-4);border-left:4px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-bg-subtle);margin-bottom:var(--space-5);color:var(--color-text);font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.prboard-callout p{margin:var(--space-2) 0 0}.prboard-callout code{background:var(--color-bg-inset);font-family:var(--font-mono);border-radius:3px;padding:.2em .4em;font-size:.9em}.prboard-callout--info{border-left-color:var(--color-status-info)}.prboard-callout--warn{border-left-color:var(--color-status-warn)}.prboard-callout--error{border-left-color:var(--color-status-error);background:var(--color-status-error-bg)}.prboard-filter{padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md) var(--radius-md) 0 0;background:var(--color-surface);border-bottom:none}.prboard-toggle-label{align-items:center;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text);cursor:pointer;-webkit-user-select:none;user-select:none;display:flex}.prboard-toggle-input{cursor:pointer;flex-shrink:0}.prboard-toggle-input:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}.prboard-table-wrapper{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);overflow-x:auto}.prboard-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm)}.prboard-table caption{text-align:left;padding:var(--space-3) var(--space-4);color:var(--color-text-muted);font-size:var(--font-size-xs)}.prboard-table th{text-align:left;padding:var(--space-2) var(--space-4);border-bottom:2px solid var(--color-border);color:var(--color-text-muted);font-weight:var(--font-weight-bold);white-space:nowrap}.prboard-table td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border-subtle);color:var(--color-text);vertical-align:top}.prboard-table tbody tr:last-child td{border-bottom:none}.prboard-num{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:var(--font-weight-medium)}.prboard-branch-tag{border-radius:var(--radius-sm);background:var(--color-bg-inset);color:var(--color-text-muted);font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.03em;padding:.1em .5em;display:inline-block}.prboard-title a{color:var(--color-accent);font-weight:var(--font-weight-medium);text-decoration:none}.prboard-title a:hover{text-decoration:underline}.prboard-title a:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-radius:var(--radius-sm)}.prboard-draft-badge{color:var(--color-text-muted);font-size:var(--font-size-xs)}.prboard-branchcol code{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);word-break:break-all}.prboard-status{align-items:center;gap:var(--space-1);white-space:nowrap;font-weight:var(--font-weight-medium);display:inline-flex}.prboard-status-icon{font-size:.9em}.prboard-agecol{color:var(--color-text-muted);white-space:nowrap}.prboard-blocker{color:var(--color-status-warn)}@media (width<=768px){.view-prboard{padding:var(--space-3)}.prboard-table th,.prboard-table td{padding:var(--space-2) var(--space-3)}}:root{--color-bg:#fff;--color-bg-subtle:#f6f8fa;--color-bg-inset:#eff2f5;--color-surface:#fff;--color-border:#d0d7de;--color-border-subtle:#e4e8ec;--color-text:#1f2328;--color-text-muted:#59636e;--color-text-inverse:#fff;--color-accent:#0969da;--color-accent-emphasis:#0550ae;--color-status-ok:#1a7f37;--color-status-warn:#9a6700;--color-status-error:#cf222e;--color-status-info:#0969da;--color-status-neutral:#59636e;--color-status-ok-bg:#dafbe1;--color-status-warn-bg:#fff8c5;--color-status-error-bg:#ffebe9;--color-status-info-bg:#ddf4ff;--color-focus-ring:#0969da;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--font-sans:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, "Liberation Mono", Menlo, monospace;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-md:1rem;--font-size-lg:1.125rem;--font-size-xl:1.375rem;--line-height-tight:1.25;--line-height-normal:1.5;--font-weight-normal:400;--font-weight-medium:500;--font-weight-bold:600;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--shadow-sm:0 1px 2px #1f232814;--shadow-md:0 3px 8px #1f23281f;--header-height:3rem;--content-max-width:90rem;--transition-fast:.12s ease;--transition-normal:.2s ease;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.text-status-ok{color:var(--color-status-ok)}.text-status-warn{color:var(--color-status-warn)}.text-status-error{color:var(--color-status-error)}.text-status-info{color:var(--color-status-info)}.text-status-neutral{color:var(--color-status-neutral)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--color-bg:#0d1117;--color-bg-subtle:#161b22;--color-bg-inset:#010409;--color-surface:#161b22;--color-border:#30363d;--color-border-subtle:#21262d;--color-text:#e6edf3;--color-text-muted:#9198a1;--color-text-inverse:#0d1117;--color-accent:#4493f8;--color-accent-emphasis:#79b8ff;--color-status-ok:#3fb950;--color-status-warn:#d29922;--color-status-error:#f85149;--color-status-info:#58a6ff;--color-status-neutral:#9198a1;--color-status-ok-bg:#12261e;--color-status-warn-bg:#3d3a1f;--color-status-error-bg:#4a2028;--color-status-info-bg:#121d2f;--color-focus-ring:#58a6ff;--shadow-sm:0 1px 2px #01040999;--shadow-md:0 3px 8px #010409b3;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--color-bg:#0d1117;--color-bg-subtle:#161b22;--color-bg-inset:#010409;--color-surface:#161b22;--color-border:#30363d;--color-border-subtle:#21262d;--color-text:#e6edf3;--color-text-muted:#9198a1;--color-text-inverse:#0d1117;--color-accent:#4493f8;--color-accent-emphasis:#79b8ff;--color-status-ok:#3fb950;--color-status-warn:#d29922;--color-status-error:#f85149;--color-status-info:#58a6ff;--color-status-neutral:#9198a1;--color-status-ok-bg:#12261e;--color-status-warn-bg:#3d3a1f;--color-status-error-bg:#4a2028;--color-status-info-bg:#121d2f;--color-focus-ring:#58a6ff;--shadow-sm:0 1px 2px #01040999;--shadow-md:0 3px 8px #010409b3;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);font-size:var(--font-size-md);line-height:var(--line-height-normal);color:var(--color-text);background:var(--color-bg)}img,svg{max-width:100%;display:block}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--color-accent)}:focus{outline:none}:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-radius:var(--radius-sm)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app-header{z-index:100;align-items:center;gap:var(--space-3);min-height:var(--header-height);padding:0 var(--space-4);background:var(--color-bg-subtle);border-bottom:1px solid var(--color-border);display:flex;position:sticky;top:0}.app-title{font-size:var(--font-size-md);font-weight:var(--font-weight-bold);white-space:nowrap}.app-nav{gap:var(--space-1);display:flex}.app-nav a{padding:var(--space-2) var(--space-3);color:var(--color-text-muted);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);border-bottom:2px solid #0000;text-decoration:none;display:inline-block}.app-nav a[aria-current=page]{color:var(--color-text);border-bottom-color:var(--color-accent)}.app-nav a:hover{color:var(--color-text)}.app-main{max-width:var(--content-max-width);padding:var(--space-4);margin:0 auto}.view-placeholder{padding:var(--space-6);border:1px dashed var(--color-border);border-radius:var(--radius-md);color:var(--color-text-muted);text-align:center}.theme-toggle{padding:var(--space-1) var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--font-size-sm);color:var(--color-text-muted);background:0 0;margin-left:auto}.theme-toggle:hover{color:var(--color-text);background:var(--color-bg-inset)}.sse-status{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);white-space:nowrap}.sse-status[data-status=live]{color:var(--color-status-ok);background:var(--color-status-ok-bg)}.sse-status[data-status=reconnecting]{color:var(--color-status-warn);background:var(--color-status-warn-bg)}.sse-status[data-status=error]{color:var(--color-status-error);background:var(--color-status-error-bg)}