@netlify/axis 1.1.7 → 1.5.0

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 (69) hide show
  1. package/README.md +8 -8
  2. package/dist/adapters/base/agent-adapter.d.ts.map +1 -1
  3. package/dist/adapters/base/agent-adapter.js +43 -2
  4. package/dist/adapters/base/agent-adapter.js.map +1 -1
  5. package/dist/adapters/registry.d.ts +2 -0
  6. package/dist/adapters/registry.d.ts.map +1 -1
  7. package/dist/adapters/registry.js +6 -2
  8. package/dist/adapters/registry.js.map +1 -1
  9. package/dist/cli.js +126 -9
  10. package/dist/cli.js.map +1 -1
  11. package/dist/config/loader.d.ts +2 -2
  12. package/dist/config/loader.d.ts.map +1 -1
  13. package/dist/config/loader.js +232 -28
  14. package/dist/config/loader.js.map +1 -1
  15. package/dist/config/validator.d.ts +9 -1
  16. package/dist/config/validator.d.ts.map +1 -1
  17. package/dist/config/validator.js +91 -6
  18. package/dist/config/validator.js.map +1 -1
  19. package/dist/report-ui/index.html +319 -151
  20. package/dist/reports/html.d.ts.map +1 -1
  21. package/dist/reports/html.js +2 -1
  22. package/dist/reports/html.js.map +1 -1
  23. package/dist/reports/writer.d.ts.map +1 -1
  24. package/dist/reports/writer.js +19 -1
  25. package/dist/reports/writer.js.map +1 -1
  26. package/dist/runner/artifacts.d.ts +31 -0
  27. package/dist/runner/artifacts.d.ts.map +1 -0
  28. package/dist/runner/artifacts.js +213 -0
  29. package/dist/runner/artifacts.js.map +1 -0
  30. package/dist/runner/lifecycle.d.ts +14 -0
  31. package/dist/runner/lifecycle.d.ts.map +1 -1
  32. package/dist/runner/lifecycle.js +55 -0
  33. package/dist/runner/lifecycle.js.map +1 -1
  34. package/dist/runner/runner.d.ts +6 -0
  35. package/dist/runner/runner.d.ts.map +1 -1
  36. package/dist/runner/runner.js +225 -39
  37. package/dist/runner/runner.js.map +1 -1
  38. package/dist/scoring/index.d.ts.map +1 -1
  39. package/dist/scoring/index.js +7 -1
  40. package/dist/scoring/index.js.map +1 -1
  41. package/dist/scoring/judge.js +1 -1
  42. package/dist/scoring/judge.js.map +1 -1
  43. package/dist/scoring/sparse-index.d.ts +6 -1
  44. package/dist/scoring/sparse-index.d.ts.map +1 -1
  45. package/dist/scoring/sparse-index.js +43 -15
  46. package/dist/scoring/sparse-index.js.map +1 -1
  47. package/dist/transcript/extract.d.ts.map +1 -1
  48. package/dist/transcript/extract.js +33 -3
  49. package/dist/transcript/extract.js.map +1 -1
  50. package/dist/types/agent.d.ts +4 -0
  51. package/dist/types/agent.d.ts.map +1 -1
  52. package/dist/types/config.d.ts +34 -2
  53. package/dist/types/config.d.ts.map +1 -1
  54. package/dist/types/output.d.ts +31 -2
  55. package/dist/types/output.d.ts.map +1 -1
  56. package/dist/types/output.js.map +1 -1
  57. package/dist/types/report.d.ts +9 -1
  58. package/dist/types/report.d.ts.map +1 -1
  59. package/dist/types/scenario.d.ts +23 -2
  60. package/dist/types/scenario.d.ts.map +1 -1
  61. package/dist/types/scoring.d.ts +4 -0
  62. package/dist/types/scoring.d.ts.map +1 -1
  63. package/dist/ui/LiveStatus.js +10 -5
  64. package/dist/ui/LiveStatus.js.map +1 -1
  65. package/dist/ui/format.d.ts +4 -0
  66. package/dist/ui/format.d.ts.map +1 -1
  67. package/dist/ui/format.js +34 -18
  68. package/dist/ui/format.js.map +1 -1
  69. package/package.json +5 -3
@@ -1,15 +1,78 @@
1
- <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AXIS Report</title><style>:root{--bg: #fafbf9;--bg-card: #ffffff;--bg-alt: #f3f4f6;--text: #1a1a2e;--text-secondary: #4a5568;--text-muted: #637083;--mid-gray: #6b7280;--light-gray: #e5e7eb;--border: #e5e7eb;--accent: #016867;--accent-hover: #015554;--accent-bright: #2dd4bf;--accent-light: rgba(1, 104, 103, .07);--success: #059669;--success-light: #ecfdf5;--yellow: #d97706;--yellow-light: #fffbeb;--warning: #d97706;--warning-light: #fffbeb;--danger: #dc2626;--danger-light: #fef2f2;--cat-env: #059669;--cat-svc: #2563eb;--cat-agent: #6b7280;--radius: 8px;--radius-lg: 12px;--shadow: 0 1px 3px rgba(0, 0, 0, .04), 0 2px 8px rgba(0, 0, 0, .03);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .06), 0 0 40px rgba(1, 104, 103, .04);--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Roboto, sans-serif;--font-mono: "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--transition: .15s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font);color:var(--text);background:var(--bg);line-height:1.6;min-height:100vh}.container{max-width:1120px;margin:0 auto;padding:32px 24px 64px}h1{font-size:2rem;font-weight:800;letter-spacing:-.02em;background:linear-gradient(135deg,var(--text) 0%,var(--accent) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}h2{font-size:1.375rem;font-weight:700;letter-spacing:-.01em;color:var(--text)}h3{font-size:1.0625rem;font-weight:600;color:var(--text)}.report-header{display:flex;align-items:flex-start;justify-content:space-between;gap:32px;margin-bottom:32px}.header-left{flex:1;min-width:0}.report-branding{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.site-logo-mark{font-size:2.0625rem;font-weight:800;letter-spacing:.12em;color:var(--accent)}.logo-ax{letter-spacing:-.06em}.logo-i{display:inline-block;font-style:italic;transform:skew(-20deg);margin-left:2px;margin-right:-2px}.report-badge{font-size:2.0625rem;font-weight:800;letter-spacing:.02em;color:var(--accent)}.report-meta{margin:0}.report-meta-row{font-size:.875rem;line-height:1.8;color:var(--text-secondary)}.report-meta-label{font-weight:600;color:var(--text)}.report-meta-value{color:var(--text-secondary)}.report-meta-id{font-family:var(--font-mono);font-size:.8125rem}.summary-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px 28px;box-shadow:var(--shadow);flex-shrink:0;display:flex;align-items:center;gap:24px}.summary-hero{text-align:center;padding:0 8px}.summary-hero .hero-score{font-size:2.5rem;font-weight:800;line-height:1;color:var(--accent)}.summary-hero .hero-label{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;margin-top:4px;white-space:nowrap}.summary-divider{width:1px;align-self:stretch;background:var(--border)}.summary-stats{display:flex;gap:20px;align-items:flex-start}.summary-stat{text-align:center;min-width:48px}.summary-stat .stat-value{font-size:1.25rem;font-weight:700;color:var(--text);line-height:1.2;margin-bottom:2px}.summary-stat .stat-label{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:500;white-space:nowrap}.summary-stat.stat-passed .stat-value{color:var(--success)}.summary-stat.stat-failed .stat-value{color:var(--danger)}.summary-stat.stat-skipped .stat-value{color:var(--text-muted)}.score-badge{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:28px;padding:0 8px;border-radius:14px;font-size:.8125rem;font-weight:700;color:#fff;line-height:1}.score-badge.score-green{background:var(--success)}.score-badge.score-yellow{background:var(--yellow)}.score-badge.score-orange{background:#ea580c}.score-badge.score-red{background:var(--danger)}.score-badge.score-na{background:var(--mid-gray);font-weight:500}.score-badge-lg{min-width:64px;height:64px;border-radius:32px;font-size:1.5rem;padding:0 16px}.results-section{margin-top:32px}.results-table{width:100%;border-collapse:collapse;font-size:.875rem}.results-table thead th{text-align:left;padding:10px 12px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;border-bottom:2px solid var(--light-gray);white-space:nowrap}.results-table thead th.col-score{text-align:center;width:60px}.results-table thead th.col-right{text-align:right}.result-row{cursor:pointer;transition:background var(--transition)}.result-row:hover,.result-row.expanded{background:var(--accent-light)}.result-row td{padding:12px;border-bottom:1px solid var(--light-gray);vertical-align:middle}.result-row td.col-score{text-align:center}.result-row td.col-right{text-align:right;font-family:var(--font-mono);font-size:.8125rem;color:var(--text-secondary)}.result-row td.col-scenario{font-weight:500;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row td.col-agent{color:var(--text-secondary);font-family:var(--font-mono);font-size:.8125rem}.result-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.625rem;opacity:.5}.result-row.expanded .expand-icon{transform:rotate(90deg)}.error-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--danger);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.error-btn:hover{background:var(--danger-light);border-color:var(--danger)}.modal-error-text{border-color:var(--danger)!important;background:var(--danger-light)!important}.scenario-header-row{cursor:pointer;background:#e8ebe5;transition:background var(--transition)}.scenario-header-row:hover{background:#e0e3dc}.scenario-header-row td{padding:14px 12px;vertical-align:middle;border-bottom:1px solid var(--border)}.scenario-header-row td.col-scenario-header{font-size:.9375rem;font-weight:700;letter-spacing:-.01em;color:var(--text);padding-left:0}.scenario-header-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.75rem}.scenario-header-row.expanded .expand-icon{transform:rotate(90deg)}.agent-row td.col-expand-indent{text-align:center}.agent-row.scenario-collapsed,.detail-row.scenario-collapsed,.detail-row{display:none}.detail-row.visible{display:table-row}.detail-row td{padding:0;border-bottom:2px solid var(--light-gray)}.detail-panel{padding:24px;background:var(--bg)}.score-overview{display:flex;align-items:flex-start;gap:32px;margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--light-gray)}.score-overview .big-score{flex-shrink:0}.category-bars{flex:1;display:flex;flex-direction:column;gap:8px;padding-top:4px}.category-bar-row{display:flex;align-items:center;gap:12px}.category-bar-label{width:120px;font-size:.8125rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.category-bar-value{font-size:.8125rem;font-weight:600;width:32px;text-align:right;flex-shrink:0}.progress-bar{flex:1;height:8px;background:var(--light-gray);border-radius:4px;overflow:hidden;min-width:80px}.progress-bar .fill{height:100%;border-radius:4px;transition:width .4s ease}.progress-bar .fill.fill-green{background:var(--success)}.progress-bar .fill.fill-yellow{background:var(--yellow)}.progress-bar .fill.fill-orange{background:#ea580c}.progress-bar .fill.fill-red{background:var(--danger)}.detail-sections{display:flex;flex-direction:column;gap:20px}.detail-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow)}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-header h3{display:flex;align-items:center;gap:8px}.section-score{font-size:.875rem;font-weight:600;color:var(--text-secondary)}.criteria-list{display:flex;flex-direction:column;gap:12px}.criterion-item{padding:12px;background:var(--bg);border-radius:var(--radius);border:1px solid var(--light-gray)}.criterion-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}.criterion-icon{font-size:.875rem;width:20px;text-align:center;flex-shrink:0}.criterion-icon.high{color:var(--success)}.criterion-icon.good{color:var(--yellow)}.criterion-icon.medium{color:#ea580c}.criterion-icon.low{color:var(--danger)}.criterion-name{flex:1;font-size:.8125rem;font-weight:500}.criterion-score{font-size:.8125rem;font-weight:600;color:var(--text-secondary);flex-shrink:0}.criterion-weight{font-size:.6875rem;color:var(--text-muted);background:var(--light-gray);padding:1px 6px;border-radius:3px;flex-shrink:0}.criterion-bar{margin-bottom:8px}.criterion-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5;font-style:italic}.criterion-perfect{padding:8px 12px;background:var(--success-light);border-left:3px solid var(--success)}.criterion-perfect .criterion-bar{display:none}.criterion-imperfect{border-left:3px solid var(--warning)}.dim-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.dim-tag{font-size:.6875rem;font-weight:600;font-family:var(--font-mono);padding:2px 8px;border-radius:10px;color:#fff}.dim-tag.fill-green{background:var(--success)}.dim-tag.fill-yellow{background:var(--yellow)}.dim-tag.fill-orange{background:#ea580c}.dim-tag.fill-red{background:var(--danger)}.cat-deduction-item{padding:8px 0;border-bottom:1px solid rgba(217,119,6,.15)}.cat-deduction-item:last-child{border-bottom:none;padding-bottom:0}.cat-deduction-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text);margin-right:8px}.cat-deduction-scores{display:inline-flex;gap:4px}.dim-score-tag{font-size:.625rem;font-family:var(--font-mono);background:var(--light-gray);padding:1px 5px;border-radius:3px;color:var(--text-secondary)}.cat-deduction-rationale{display:block;font-size:.75rem;color:var(--text-secondary);line-height:1.5;font-style:italic;margin-top:4px}.cat-deduction-note{font-size:.75rem;color:var(--text-muted);font-style:italic}.deductions-baseline{background:var(--bg);border-color:var(--light-gray)}.deductions-baseline .deductions-header{color:var(--text-muted)}.dimensions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:16px}.dimension-item{display:flex;align-items:center;gap:8px}.dimension-label{width:72px;font-size:.75rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.dimension-value{font-size:.75rem;font-weight:600;width:28px;text-align:right;flex-shrink:0}.interaction-meta{font-size:.75rem;color:var(--text-muted);margin-bottom:12px}.audits-section{margin-top:12px}.audits-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.audits-toggle:hover{color:var(--accent-hover)}.audits-list{display:none;margin-top:8px}.audits-list.visible{display:block}.audit-item{padding:10px 12px;background:var(--bg);border-radius:var(--radius);margin-bottom:6px;border-left:3px solid var(--mid-gray)}.audit-header{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}.audit-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text)}.audit-scores{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted)}.audit-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5}.necessity-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--light-gray)}.necessity-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.necessity-label{font-size:.75rem;font-weight:600;color:var(--text-secondary)}.necessity-score{font-size:.75rem;font-weight:600}.necessity-rationale{font-size:.8125rem;color:var(--text-secondary);font-style:italic}.waterfall{font-size:.8125rem}.waterfall-header{display:flex;align-items:flex-end;border-bottom:1px solid var(--light-gray);padding-bottom:6px;margin-bottom:2px}.wf-label-col{width:200px;flex-shrink:0;display:flex;align-items:center;gap:6px;overflow:hidden}.waterfall-header .wf-label-col,.waterfall-header .wf-dur-col{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600}.wf-timeline-col{flex:1;min-width:0;position:relative}.wf-dur-col{width:64px;flex-shrink:0;text-align:right;font-family:var(--font-mono);font-size:.75rem;color:var(--text-secondary)}.wf-ticks{position:relative;height:18px}.wf-tick{position:absolute;transform:translate(-50%);font-family:var(--font-mono);font-size:.625rem;color:var(--text-muted);white-space:nowrap;top:0}.wf-tick:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:4px;background:var(--light-gray)}.waterfall-body{position:relative}.wf-row{display:flex;align-items:center;height:26px;border-bottom:1px solid rgba(0,0,0,.03)}.wf-row:hover{background:var(--accent-light)}.wf-id{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted);width:28px;flex-shrink:0}.wf-cat{font-size:.625rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);width:36px;flex-shrink:0}.wf-tool{font-size:.75rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-track{position:relative;height:14px;background:#00000004;border-radius:2px}.wf-bar{position:absolute;top:2px;height:10px;border-radius:2px;min-width:3px;cursor:default;transition:opacity var(--transition)}.wf-row:hover .wf-bar{opacity:.8}.wf-env .wf-bar{background:var(--cat-env)}.wf-svc .wf-bar{background:var(--cat-svc)}.wf-agent .wf-bar{background:var(--cat-agent)}.wf-bar-error{background:var(--danger)!important}.wf-show-all{display:block;width:100%;margin-top:4px;padding:6px;font-size:.75rem;color:var(--accent);background:none;border:1px dashed var(--light-gray);border-radius:var(--radius);cursor:pointer;font-family:var(--font);font-weight:500}.wf-show-all:hover{background:var(--accent-light);border-color:var(--accent)}.wf-legend{display:flex;gap:16px;margin-top:10px;padding-top:8px;border-top:1px solid var(--light-gray)}.wf-legend-item{display:flex;align-items:center;gap:5px;font-size:.6875rem;color:var(--text-muted)}.wf-legend-dot{width:10px;height:10px;border-radius:2px}.wf-legend-dot.wf-env{background:var(--cat-env)}.wf-legend-dot.wf-svc{background:var(--cat-svc)}.wf-legend-dot.wf-agent{background:var(--cat-agent)}.sparse-index-section{margin-top:16px}.sparse-index-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.sparse-index-content{display:none;margin-top:8px}.sparse-index-content.visible{display:block}.sparse-line{font-family:var(--font-mono);font-size:.75rem;line-height:1.8;padding:3px 10px;border-left:3px solid var(--cat-agent);white-space:pre;overflow-x:auto}.sparse-line.cat-env{border-left-color:var(--cat-env);background:#0596690a}.sparse-line.cat-svc{border-left-color:var(--cat-svc);background:#2563eb0a}.sparse-line.cat-agent{border-left-color:var(--cat-agent)}.sparse-line-expandable{cursor:pointer;position:relative}.sparse-line-expandable:after{content:"▶";position:absolute;right:8px;top:4px;font-size:.6rem;color:var(--text-secondary);transition:transform .15s ease}.sparse-line-expandable.expanded:after{transform:rotate(90deg)}.sparse-line-expandable:hover{background:var(--accent-light)}.sparse-line-content{display:none;margin:4px 0 8px 12px;padding:8px 12px;background:var(--bg-alt);border-radius:4px;border:1px solid var(--border)}.sparse-line-expandable.expanded .sparse-line-content{display:block}.sparse-line-content pre{margin:0;font-family:var(--font-mono);font-size:.7rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--text)}.sparse-expand-all{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500;margin-left:12px}.info-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--accent);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.info-btn:hover{background:var(--accent-light);border-color:var(--accent)}.modal-backdrop{display:none;position:fixed;inset:0;z-index:100;background:#1a1a2e73;align-items:center;justify-content:center;padding:24px}.modal-backdrop.visible{display:flex}.modal{background:var(--bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg),0 8px 32px #0000001f;max-width:640px;width:100%;max-height:80vh;overflow-y:auto;animation:modal-in .15s ease}@keyframes modal-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--light-gray)}.modal-header h3{font-size:1.0625rem;font-weight:600;margin-bottom:2px}.modal-subtitle{font-size:.75rem;font-family:var(--font-mono);color:var(--text-muted)}.modal-close{background:none;border:none;font-size:1.5rem;line-height:1;color:var(--text-muted);cursor:pointer;padding:0 4px;flex-shrink:0;transition:color var(--transition)}.modal-close:hover{color:var(--text)}.modal-body{padding:20px 24px 24px}.modal-section{margin-bottom:20px}.modal-section:last-child{margin-bottom:0}.modal-section h4{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;margin-bottom:8px}.modal-prompt{font-family:var(--font-mono);font-size:.8125rem;line-height:1.6;background:var(--bg);border:1px solid var(--light-gray);border-radius:var(--radius);padding:12px 16px;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto}.modal-rubric-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-rubric-table thead th{text-align:left;padding:6px 10px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--light-gray)}.modal-rubric-table tbody td{padding:8px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary)}.modal-rubric-weight{width:60px;text-align:right;font-family:var(--font-mono);font-weight:600;color:var(--text)!important}.modal-config{display:flex;flex-direction:column;gap:6px}.modal-config-item{display:flex;align-items:baseline;gap:12px;font-size:.8125rem;padding:6px 10px;background:var(--bg);border-radius:var(--radius)}.modal-config-key{font-family:var(--font-mono);font-weight:600;color:var(--text);flex-shrink:0}.modal-config-val{font-family:var(--font-mono);color:var(--text-secondary);word-break:break-all}.error-banner{background:var(--danger-light);border:1px solid var(--danger);border-radius:var(--radius);padding:12px 16px;color:var(--danger);font-size:.875rem;font-weight:500;margin-bottom:16px}.loading{text-align:center;padding:80px 24px;color:var(--text-muted);font-size:1.125rem}.empty-state{text-align:center;padding:60px 24px;color:var(--text-muted)}@media(max-width:768px){.container{padding:16px 12px 48px}.report-header{flex-direction:column;gap:16px}.report-branding{gap:8px;margin-bottom:8px}.site-logo-mark,.report-badge{font-size:1.5rem}.report-meta-row{font-size:.8125rem;line-height:1.7}.summary-card{padding:16px;flex-direction:column;gap:16px;width:100%}.summary-hero .hero-score{font-size:2rem}.summary-divider{width:100%;height:1px;align-self:auto}.summary-stats{flex-wrap:wrap;gap:16px;justify-content:center}.results-table{font-size:.8125rem}.results-table thead th{padding:8px 6px}.results-table thead th.hide-mobile,.results-table tbody td.hide-mobile{display:none}.result-row td{padding:10px 6px}.result-row td:first-child{padding-left:4px;padding-right:0;width:20px}.result-row .expand-icon{width:12px;font-size:.625rem}.result-row td.col-scenario{max-width:120px;font-size:.75rem}.result-row td.col-agent{max-width:70px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.6875rem}.scenario-header-row td{padding:10px 6px}.scenario-header-row td.col-scenario-header{font-size:.8125rem}.agent-row td.col-agent{padding-left:16px}.detail-panel{padding:16px 12px}.score-overview{flex-direction:column;align-items:center;gap:16px}.category-bars{width:100%}.category-bar-label{width:80px;font-size:.75rem}.dimensions-grid{grid-template-columns:1fr}.criterion-top{flex-wrap:wrap}.criterion-name{min-width:0;word-break:break-word}.cat-deduction-item{flex-direction:column;gap:4px;align-items:flex-start}.waterfall{overflow-x:auto;-webkit-overflow-scrolling:touch}.wf-label-col{width:100px}.wf-dur-col{width:48px;font-size:.6875rem}.wf-tool{font-size:.625rem;max-width:50px;overflow:hidden;text-overflow:ellipsis}.wf-id,.wf-cat{font-size:.5625rem}.wf-legend{flex-wrap:wrap;gap:8px}.sparse-line{font-size:.6875rem;word-break:break-all}.modal-backdrop{padding:12px}.modal{max-height:90vh;border-radius:var(--radius)}.modal-header{padding:16px}.modal-header h3{font-size:1rem}.modal-body{padding:16px}.modal-prompt{font-size:.75rem}.audit-header{flex-direction:column;gap:4px}.necessity-header{flex-wrap:wrap;gap:4px}}@media print{.detail-row{display:table-row!important}.audits-list,.sparse-index-content{display:block!important}.result-row{cursor:default}.wf-overflow{display:block!important}.wf-show-all,.expand-icon,.audits-toggle,.sparse-index-toggle,.info-btn{display:none!important}.agent-row.scenario-collapsed{display:table-row!important}.modal-backdrop{display:none!important}}
2
- </style></head> <body> <div id="app"> <div class="loading">Loading report&hellip;</div> </div> <script id="axis-data" type="application/json">__AXIS_REPORT_DATA__</script> <script type="module">function L(e){return"averageAxisScore"in e}function o(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function u(e){return!Number.isFinite(e)||e<0?"—":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function f(e){return e===void 0||e<=0?"—":`$${e.toFixed(4)}`}function w(e){if(!e)return"";const s=e.input+e.output+(e.cacheReadInput??0);return s===0?"—":s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}k`:s.toLocaleString()}function A(e){try{return new Date(e).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return e}}function S(e){return e>=90?"score-green":e>=80?"score-yellow":e>=70?"score-orange":"score-red"}function E(e){return e>=90?"fill-green":e>=80?"fill-yellow":e>=70?"fill-orange":"fill-red"}function C(e){const s=new Map;for(const t of e){let a=s.get(t.scenarioKey);a||(a={scenarioKey:t.scenarioKey,scenarioName:t.scenarioName,entries:[],prompt:t.prompt,rubric:t.rubric},s.set(t.scenarioKey,a)),a.entries.push(t)}return Array.from(s.values())}function v(e,s=!1){return e===void 0?`<span class="score-badge score-na${s?" score-badge-lg":""}">—</span>`:`<span class="score-badge ${S(e)}${s?" score-badge-lg":""}">${e}</span>`}function b(e,s=100){const t=Math.max(0,Math.min(100,e/s*100));return`<div class="progress-bar"><div class="fill ${E(t)}" style="width: ${t}%"></div></div>`}function R(e,s){return`
1
+ <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AXIS Report</title><style>:root{--bg: #fafbf9;--bg-card: #ffffff;--bg-alt: #f3f4f6;--text: #1a1a2e;--text-secondary: #4a5568;--text-muted: #637083;--mid-gray: #6b7280;--light-gray: #e5e7eb;--border: #e5e7eb;--accent: #016867;--accent-hover: #015554;--accent-bright: #2dd4bf;--accent-light: rgba(1, 104, 103, .07);--success: #059669;--success-light: #ecfdf5;--yellow: #d97706;--yellow-light: #fffbeb;--warning: #d97706;--warning-light: #fffbeb;--danger: #dc2626;--danger-light: #fef2f2;--cat-env: #059669;--cat-svc: #2563eb;--cat-agent: #6b7280;--radius: 8px;--radius-lg: 12px;--shadow: 0 1px 3px rgba(0, 0, 0, .04), 0 2px 8px rgba(0, 0, 0, .03);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .06), 0 0 40px rgba(1, 104, 103, .04);--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Roboto, sans-serif;--font-mono: "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--transition: .15s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font);color:var(--text);background:var(--bg);line-height:1.6;min-height:100vh}.container{max-width:1120px;margin:0 auto;padding:32px 24px 64px}h1{font-size:2rem;font-weight:800;letter-spacing:-.02em;background:linear-gradient(135deg,var(--text) 0%,var(--accent) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}h2{font-size:1.375rem;font-weight:700;letter-spacing:-.01em;color:var(--text)}h3{font-size:1.0625rem;font-weight:600;color:var(--text)}.report-header{display:flex;align-items:flex-start;justify-content:space-between;gap:32px;margin-bottom:32px}.header-left{flex:1;min-width:0}.report-branding{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.site-logo-mark{font-size:2.0625rem;font-weight:800;letter-spacing:.12em;color:var(--accent)}.logo-ax{letter-spacing:-.06em}.logo-i{display:inline-block;font-style:italic;transform:skew(-20deg);margin-left:2px;margin-right:-2px}.report-badge{font-size:2.0625rem;font-weight:800;letter-spacing:.02em;color:var(--accent)}.report-meta{margin:0}.report-meta-row{font-size:.875rem;line-height:1.8;color:var(--text-secondary)}.report-meta-label{font-weight:600;color:var(--text)}.report-meta-value{color:var(--text-secondary)}.report-meta-id{font-family:var(--font-mono);font-size:.8125rem}.summary-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px 28px;box-shadow:var(--shadow);flex-shrink:0;display:flex;align-items:center;gap:24px}.summary-hero{text-align:center;padding:0 8px}.summary-hero .hero-score{font-size:2.5rem;font-weight:800;line-height:1;color:var(--accent)}.summary-hero .hero-label{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;margin-top:4px;white-space:nowrap}.summary-divider{width:1px;align-self:stretch;background:var(--border)}.summary-stats{display:flex;gap:20px;align-items:flex-start}.summary-stat{text-align:center;min-width:48px}.summary-stat .stat-value{font-size:1.25rem;font-weight:700;color:var(--text);line-height:1.2;margin-bottom:2px}.summary-stat .stat-label{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:500;white-space:nowrap}.summary-stat.stat-passed .stat-value{color:var(--success)}.summary-stat.stat-failed .stat-value{color:var(--danger)}.summary-stat.stat-skipped .stat-value{color:var(--text-muted)}.score-badge{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:28px;padding:0 8px;border-radius:14px;font-size:.8125rem;font-weight:700;color:#fff;line-height:1}.score-badge.score-green{background:var(--success)}.score-badge.score-yellow{background:var(--yellow)}.score-badge.score-orange{background:#ea580c}.score-badge.score-red{background:var(--danger)}.score-badge.score-na{background:var(--mid-gray);font-weight:500}.score-badge-lg{min-width:64px;height:64px;border-radius:32px;font-size:1.5rem;padding:0 16px}.results-section{margin-top:32px}.results-table{width:100%;border-collapse:collapse;font-size:.875rem;table-layout:fixed}.results-table thead th{text-align:left;padding:10px 12px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;white-space:nowrap;position:sticky;top:0;background:var(--bg);box-shadow:inset 0 -2px 0 var(--light-gray);z-index:2}.results-table thead th:first-child{width:36px}.results-table thead th.col-score{text-align:center;width:60px}.results-table thead th.col-right{text-align:right;width:90px}.results-table td.col-agent,.results-table td.col-scenario-header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row{cursor:pointer;transition:background var(--transition)}.result-row:hover,.result-row.expanded{background:var(--accent-light)}.result-row td{padding:12px;border-bottom:1px solid var(--light-gray);vertical-align:middle}.result-row td.col-score{text-align:center}.result-row td.col-right{text-align:right;font-family:var(--font-mono);font-size:.8125rem;color:var(--text-secondary)}.result-row td.col-scenario{font-weight:500;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row td.col-agent{color:var(--text-secondary);font-family:var(--font-mono);font-size:.8125rem}.result-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.625rem;opacity:.5}.result-row.expanded .expand-icon{transform:rotate(90deg)}.error-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--danger);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.error-btn:hover{background:var(--danger-light);border-color:var(--danger)}.modal-error-text{border-color:var(--danger)!important;background:var(--danger-light)!important}.scenario-header-row{cursor:pointer;background:#e8ebe5;transition:background var(--transition)}.scenario-header-row:hover{background:#e0e3dc}.scenario-header-row td{padding:14px 12px;vertical-align:middle;border-bottom:1px solid var(--border)}.scenario-header-row td.col-scenario-header{font-size:.9375rem;font-weight:700;letter-spacing:-.01em;color:var(--text);padding-left:0}.scenario-header-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.75rem}.scenario-header-row.expanded .expand-icon{transform:rotate(90deg)}.agent-row td.col-expand-indent{text-align:center}.agent-row.scenario-collapsed,.detail-row.scenario-collapsed,.detail-row{display:none}.detail-row.visible{display:table-row}.detail-row td{padding:0;border-bottom:2px solid var(--light-gray)}.detail-panel{padding:24px;background:var(--bg)}.score-overview{display:flex;align-items:flex-start;gap:32px;margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--light-gray)}.score-overview .big-score{flex-shrink:0}.category-bars{flex:1;display:flex;flex-direction:column;gap:8px;padding-top:4px}.category-bar-row{display:flex;align-items:center;gap:12px}.category-bar-label{width:120px;font-size:.8125rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.category-bar-value{font-size:.8125rem;font-weight:600;width:32px;text-align:right;flex-shrink:0}.progress-bar{flex:1;height:8px;background:var(--light-gray);border-radius:4px;overflow:hidden;min-width:80px}.progress-bar .fill{height:100%;border-radius:4px;transition:width .4s ease}.progress-bar .fill.fill-green{background:var(--success)}.progress-bar .fill.fill-yellow{background:var(--yellow)}.progress-bar .fill.fill-orange{background:#ea580c}.progress-bar .fill.fill-red{background:var(--danger)}.detail-sections{display:flex;flex-direction:column;gap:20px}.detail-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow)}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-header h3{display:flex;align-items:center;gap:8px}.section-score{font-size:.875rem;font-weight:600;color:var(--text-secondary)}.section-description{font-size:.8125rem;color:var(--text-muted);line-height:1.5;margin:-8px 0 16px;max-width:70ch}.section-description code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);color:var(--text-secondary);padding:1px 5px;border-radius:3px}.criteria-list{display:flex;flex-direction:column;gap:12px}.criterion-item{padding:12px;background:var(--bg);border-radius:var(--radius);border:1px solid var(--light-gray)}.criterion-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}.criterion-icon{font-size:.875rem;width:20px;text-align:center;flex-shrink:0}.criterion-icon.high{color:var(--success)}.criterion-icon.good{color:var(--yellow)}.criterion-icon.medium{color:#ea580c}.criterion-icon.low{color:var(--danger)}.criterion-name{flex:1;font-size:.8125rem;font-weight:500}.criterion-score{font-size:.8125rem;font-weight:600;color:var(--text-secondary);flex-shrink:0}.criterion-weight{font-size:.6875rem;color:var(--text-muted);background:var(--light-gray);padding:1px 6px;border-radius:3px;flex-shrink:0}.criterion-bar{margin-bottom:8px}.criterion-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5;font-style:italic}.criterion-perfect{padding:8px 12px;background:var(--success-light);border-left:3px solid var(--success)}.criterion-perfect .criterion-bar{display:none}.criterion-imperfect{border-left:3px solid var(--warning)}.dim-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.dim-tag{font-size:.6875rem;font-weight:600;font-family:var(--font-mono);padding:2px 8px;border-radius:10px;color:#fff}.dim-tag.fill-green{background:var(--success)}.dim-tag.fill-yellow{background:var(--yellow)}.dim-tag.fill-orange{background:#ea580c}.dim-tag.fill-red{background:var(--danger)}.cat-deduction-item{padding:8px 0;border-bottom:1px solid rgba(217,119,6,.15)}.cat-deduction-item:last-child{border-bottom:none;padding-bottom:0}.cat-deduction-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text);margin-right:8px}.interaction-link{cursor:pointer;color:var(--accent);text-decoration:none;border-bottom:1px dashed transparent;transition:border-color var(--transition),color var(--transition)}.interaction-link:hover{border-bottom-color:var(--accent)}a.cat-deduction-id.interaction-link,a.wf-id.interaction-link{color:var(--accent)}@keyframes interaction-flash{0%,35%{background:var(--yellow-light);box-shadow:inset 3px 0 0 var(--yellow)}to{background:transparent;box-shadow:inset 3px 0 0 transparent}}.sparse-line.interaction-flash{animation:interaction-flash 1.8s ease-out}.cat-deduction-scores{display:inline-flex;gap:4px}.dim-score-tag{font-size:.625rem;font-family:var(--font-mono);background:var(--light-gray);padding:1px 5px;border-radius:3px;color:var(--text-secondary)}.cat-deduction-rationale{display:block;font-size:.75rem;color:var(--text-secondary);line-height:1.5;font-style:italic;margin-top:4px}.cat-deduction-note{font-size:.75rem;color:var(--text-muted);font-style:italic}.deductions-baseline{background:var(--bg);border-color:var(--light-gray)}.deductions-baseline .deductions-header{color:var(--text-muted)}.dimensions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:16px}.dimension-item{display:flex;align-items:center;gap:8px}.dimension-label{width:72px;font-size:.75rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.dimension-value{font-size:.75rem;font-weight:600;width:28px;text-align:right;flex-shrink:0}.interaction-meta{font-size:.75rem;color:var(--text-muted);margin-bottom:12px}.category-empty-state{font-size:.8125rem;color:var(--text-muted);font-style:italic;padding:12px 14px;background:var(--bg-alt);border-radius:6px}.audits-section{margin-top:12px}.audits-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.audits-toggle:hover{color:var(--accent-hover)}.audits-list{display:none;margin-top:8px}.audits-list.visible{display:block}.audit-item{padding:10px 12px;background:var(--bg);border-radius:var(--radius);margin-bottom:6px;border-left:3px solid var(--mid-gray)}.audit-header{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}.audit-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text)}.audit-scores{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted)}.audit-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5}.necessity-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--light-gray)}.necessity-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.necessity-label{font-size:.75rem;font-weight:600;color:var(--text-secondary)}.necessity-score{font-size:.75rem;font-weight:600}.necessity-rationale{font-size:.8125rem;color:var(--text-secondary);font-style:italic}.waterfall{font-size:.8125rem}.waterfall-header{display:flex;align-items:flex-end;border-bottom:1px solid var(--light-gray);padding-bottom:6px;margin-bottom:2px}.wf-label-col{width:200px;flex-shrink:0;display:flex;align-items:center;gap:6px;overflow:hidden}.waterfall-header .wf-label-col,.waterfall-header .wf-dur-col{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600}.wf-timeline-col{flex:1;min-width:0;position:relative}.wf-dur-col{width:64px;flex-shrink:0;text-align:right;font-family:var(--font-mono);font-size:.75rem;color:var(--text-secondary)}.wf-ticks{position:relative;height:18px}.wf-tick{position:absolute;transform:translate(-50%);font-family:var(--font-mono);font-size:.625rem;color:var(--text-muted);white-space:nowrap;top:0}.wf-tick:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:4px;background:var(--light-gray)}.waterfall-body{position:relative}.wf-row{display:flex;align-items:center;height:26px;border-bottom:1px solid rgba(0,0,0,.03)}.wf-row:hover{background:var(--accent-light)}.wf-id{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted);width:28px;flex-shrink:0}.wf-cat{font-size:.625rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);width:36px;flex-shrink:0}.wf-tool{font-size:.75rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-track{position:relative;height:14px;background:#00000004;border-radius:2px}.wf-bar{position:absolute;top:2px;height:10px;border-radius:2px;min-width:3px;cursor:default;transition:opacity var(--transition)}.wf-row:hover .wf-bar{opacity:.8}.wf-env .wf-bar{background:var(--cat-env)}.wf-svc .wf-bar{background:var(--cat-svc)}.wf-agent .wf-bar{background:var(--cat-agent)}.wf-bar-error{background:var(--danger)!important}.wf-track{position:relative}.wf-tooltip{position:absolute;bottom:calc(100% + 8px);left:0;display:none;background:var(--text);color:var(--bg-card);padding:10px 12px;border-radius:6px;width:max-content;max-width:360px;z-index:20;pointer-events:none;box-shadow:0 6px 16px #0003;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;text-align:left;font-weight:400}.wf-bar:hover .wf-tooltip{display:block}.wf-track .wf-bar.wf-tip-right .wf-tooltip{left:auto;right:0}.wf-tooltip-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:.8125rem}.wf-tooltip-id{font-family:var(--font-mono);color:var(--bg-alt);font-size:.75rem}.wf-tooltip-tool{font-family:var(--font-mono);font-weight:600;color:var(--bg-card);word-break:break-all}.wf-tooltip-cat{font-size:.625rem;font-weight:600;padding:1px 6px;border-radius:3px;margin-left:auto;flex-shrink:0}.wf-tooltip-cat-env{background:var(--cat-env);color:var(--text)}.wf-tooltip-cat-svc{background:var(--cat-svc);color:var(--text)}.wf-tooltip-cat-agent{background:var(--cat-agent);color:var(--text)}.wf-tooltip-meta{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:.75rem;color:var(--bg-alt);margin-bottom:4px}.wf-tooltip-meta strong{color:var(--bg-card);font-weight:600;margin-right:4px}.wf-tooltip-error{color:#fca5a5;font-weight:600}.wf-tooltip-snippet{font-family:var(--font-mono);font-size:.6875rem;margin:6px 0 0;padding:6px 8px;background:#ffffff0f;border-radius:4px;white-space:pre-wrap;max-height:120px;overflow:hidden;line-height:1.45;color:var(--bg-card)}.wf-lifecycle .wf-bar{background:repeating-linear-gradient(45deg,var(--mid-gray),var(--mid-gray) 4px,var(--light-gray) 4px,var(--light-gray) 8px);opacity:.7}.wf-lifecycle .wf-tool{font-style:italic;color:var(--text-muted)}.wf-lifecycle .wf-cat{color:var(--text-muted)}.wf-show-all{display:block;width:100%;margin-top:4px;padding:6px;font-size:.75rem;color:var(--accent);background:none;border:1px dashed var(--light-gray);border-radius:var(--radius);cursor:pointer;font-family:var(--font);font-weight:500}.wf-show-all:hover{background:var(--accent-light);border-color:var(--accent)}.wf-legend{display:flex;gap:16px;margin-top:10px;padding-top:8px;border-top:1px solid var(--light-gray)}.wf-legend-item{display:flex;align-items:center;gap:5px;font-size:.6875rem;color:var(--text-muted)}.wf-legend-dot{width:10px;height:10px;border-radius:2px}.wf-legend-dot.wf-env{background:var(--cat-env)}.wf-legend-dot.wf-svc{background:var(--cat-svc)}.wf-legend-dot.wf-agent{background:var(--cat-agent)}.sparse-index-section{margin-top:16px}.sparse-index-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.sparse-index-content{display:none;margin-top:8px}.sparse-index-content.visible{display:block}.sparse-line{font-family:var(--font-mono);font-size:.75rem;line-height:1.8;padding:3px 10px;border-left:3px solid var(--cat-agent);white-space:pre;overflow-x:auto}.sparse-line.cat-env{border-left-color:var(--cat-env);background:#0596690a}.sparse-line.cat-svc{border-left-color:var(--cat-svc);background:#2563eb0a}.sparse-line.cat-agent{border-left-color:var(--cat-agent)}.sparse-line-expandable{cursor:pointer;position:relative}.sparse-line-expandable:after{content:"▶";position:absolute;right:8px;top:4px;font-size:.6rem;color:var(--text-secondary);transition:transform .15s ease}.sparse-line-expandable.expanded:after{transform:rotate(90deg)}.sparse-line-expandable:hover{background:var(--accent-light)}.sparse-line-content{display:none;margin:4px 0 8px 12px;padding:8px 12px;background:var(--bg-alt);border-radius:4px;border:1px solid var(--border)}.sparse-line-expandable.expanded .sparse-line-content{display:block}.sparse-line-content pre{margin:0;font-family:var(--font-mono);font-size:.7rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--text)}.sparse-expand-all{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500;margin-left:12px}.info-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--accent);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.info-btn:hover{background:var(--accent-light);border-color:var(--accent)}.info-btn[data-tooltip]{position:relative}.info-btn[data-tooltip]:hover:after,.info-btn[data-tooltip]:focus-visible:after{content:attr(data-tooltip);position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--text);color:var(--bg-card);font-size:.75rem;font-weight:400;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;line-height:1.5;padding:8px 12px;border-radius:6px;width:max-content;max-width:320px;white-space:normal;text-align:left;z-index:10;pointer-events:none;box-shadow:0 4px 12px #00000026}.modal-backdrop{display:none;position:fixed;inset:0;z-index:100;background:#1a1a2e73;align-items:center;justify-content:center;padding:24px}.modal-backdrop.visible{display:flex}.modal{background:var(--bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg),0 8px 32px #0000001f;max-width:640px;width:100%;max-height:80vh;overflow-y:auto;animation:modal-in .15s ease}@keyframes modal-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--light-gray)}.modal-header h3{font-size:1.0625rem;font-weight:600;margin-bottom:2px}.modal-subtitle{font-size:.75rem;font-family:var(--font-mono);color:var(--text-muted)}.modal-close{background:none;border:none;font-size:1.5rem;line-height:1;color:var(--text-muted);cursor:pointer;padding:0 4px;flex-shrink:0;transition:color var(--transition)}.modal-close:hover{color:var(--text)}.modal-body{padding:20px 24px 24px}.modal-section{margin-bottom:20px}.modal-section:last-child{margin-bottom:0}.modal-section h4{font-size:.875rem;color:var(--text);font-weight:600;margin-bottom:10px}.modal-prompt{font-family:var(--font-mono);font-size:.8125rem;line-height:1.6;background:var(--bg);border:1px solid var(--light-gray);border-radius:var(--radius);padding:12px 16px;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto}.modal-rubric-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-rubric-table thead th{text-align:left;padding:6px 10px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--light-gray)}.modal-rubric-table tbody td{padding:8px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary)}.modal-rubric-weight{width:60px;text-align:right;font-family:var(--font-mono);font-weight:600;color:var(--text)!important}.modal-config-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-config-table tbody td{padding:6px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary);vertical-align:top}.modal-config-table tbody tr:last-child td{border-bottom:none}.modal-config-label{width:140px;font-weight:600;color:var(--text)!important}.modal-config-table code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);word-break:break-all}.modal-section-value{font-family:var(--font-mono);font-size:.875rem;font-weight:600;background:var(--bg-alt);color:var(--text);padding:2px 8px;border-radius:4px}.modal-config-line{font-size:.8125rem;color:var(--text-secondary);margin:0}.modal-config-line code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);margin:0 2px}.modal-config-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.modal-config-list li{font-size:.8125rem;color:var(--text-secondary);display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}.modal-config-list code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);word-break:break-all}.modal-config-label-inline{font-weight:600;color:var(--text);font-size:.8125rem}.modal-config{display:flex;flex-direction:column;gap:6px}.modal-config-item{display:flex;align-items:baseline;gap:12px;font-size:.8125rem;padding:6px 10px;background:var(--bg);border-radius:var(--radius)}.modal-config-key{font-family:var(--font-mono);font-weight:600;color:var(--text);flex-shrink:0}.modal-config-val{font-family:var(--font-mono);color:var(--text-secondary);word-break:break-all}.error-banner{background:var(--danger-light);border:1px solid var(--danger);border-radius:var(--radius);padding:12px 16px;color:var(--danger);font-size:.875rem;font-weight:500;margin-bottom:16px}.loading{text-align:center;padding:80px 24px;color:var(--text-muted);font-size:1.125rem}.empty-state{text-align:center;padding:60px 24px;color:var(--text-muted)}@media(max-width:768px){.container{padding:16px 12px 48px}.report-header{flex-direction:column;gap:16px}.report-branding{gap:8px;margin-bottom:8px}.site-logo-mark,.report-badge{font-size:1.5rem}.report-meta-row{font-size:.8125rem;line-height:1.7}.summary-card{padding:16px;flex-direction:column;gap:16px;width:100%}.summary-hero .hero-score{font-size:2rem}.summary-divider{width:100%;height:1px;align-self:auto}.summary-stats{flex-wrap:wrap;gap:16px;justify-content:center}.results-table{font-size:.8125rem}.results-table thead th{padding:8px 6px}.results-table thead th.hide-mobile,.results-table tbody td.hide-mobile{display:none}.result-row td{padding:10px 6px}.result-row td:first-child{padding-left:4px;padding-right:0;width:20px}.result-row .expand-icon{width:12px;font-size:.625rem}.result-row td.col-scenario{max-width:120px;font-size:.75rem}.result-row td.col-agent{max-width:70px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.6875rem}.scenario-header-row td{padding:10px 6px}.scenario-header-row td.col-scenario-header{font-size:.8125rem}.agent-row td.col-agent{padding-left:16px}.detail-panel{padding:16px 12px}.score-overview{flex-direction:column;align-items:center;gap:16px}.category-bars{width:100%}.category-bar-label{width:80px;font-size:.75rem}.dimensions-grid{grid-template-columns:1fr}.criterion-top{flex-wrap:wrap}.criterion-name{min-width:0;word-break:break-word}.cat-deduction-item{flex-direction:column;gap:4px;align-items:flex-start}.waterfall{overflow-x:auto;-webkit-overflow-scrolling:touch}.wf-label-col{width:100px}.wf-dur-col{width:48px;font-size:.6875rem}.wf-tool{font-size:.625rem;max-width:50px;overflow:hidden;text-overflow:ellipsis}.wf-id,.wf-cat{font-size:.5625rem}.wf-legend{flex-wrap:wrap;gap:8px}.sparse-line{font-size:.6875rem;word-break:break-all}.modal-backdrop{padding:12px}.modal{max-height:90vh;border-radius:var(--radius)}.modal-header{padding:16px}.modal-header h3{font-size:1rem}.modal-body{padding:16px}.modal-prompt{font-size:.75rem}.audit-header{flex-direction:column;gap:4px}.necessity-header{flex-wrap:wrap;gap:4px}}.artifacts-section{margin-top:20px}.artifacts-count{font-size:.8125rem;font-weight:500;color:var(--text-muted)}.artifacts-actions{display:flex;gap:8px;align-items:center}.artifacts-toggle,.artifacts-download-all{font-size:.75rem;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;transition:background .1s ease,border-color .1s ease}.artifacts-toggle:hover,.artifacts-download-all:hover{background:var(--bg-hover, var(--border))}.art-tree-root{list-style:none;margin:12px 0 0;padding:4px 0 0;font-size:.8125rem;border-top:1px solid var(--border)}.art-tree-root[hidden]{display:none}.art-tree-root ul{list-style:none;margin:0;padding:0}.art-tree-row,.art-tree-folder-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px 4px 0;font-size:.8125rem;color:var(--text-primary);background:transparent;border:none;border-radius:4px;cursor:default;text-align:left;font-family:inherit}.art-tree-folder-toggle{cursor:pointer}.art-tree-row:hover,.art-tree-folder-toggle:hover{background:var(--bg-hover, rgba(0, 0, 0, .04))}.art-tree-chevron{display:inline-flex;align-items:center;justify-content:center;width:18px;font-size:1.05rem;line-height:1;color:var(--text-secondary);transition:transform .1s ease;flex-shrink:0}.art-tree-dir:not(.collapsed)>.art-tree-folder-toggle .art-tree-chevron{transform:rotate(90deg)}.art-tree-icon{display:inline-block;width:14px;text-align:center;color:var(--text-muted);font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;flex-shrink:0}.art-tree-dir-icon{color:var(--accent, var(--text-secondary))}.art-tree-name{flex:1;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-tree-size{color:var(--text-muted);font-size:.7rem;font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;padding-left:12px}.art-tree-eye,.art-tree-download{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border-radius:4px;border:1px solid transparent;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .1s ease,border-color .1s ease,color .1s ease}.art-tree-eye:hover,.art-tree-download:hover{background:var(--bg-card, transparent);border-color:var(--border);color:var(--text-primary)}.art-tree-dir.collapsed>.art-tree-children{display:none}.modal-backdrop.artifact-modal .modal.artifact-modal-content{width:min(900px,92vw);max-height:85vh;display:flex;flex-direction:column}.artifact-modal .modal-header h3{display:flex;flex-direction:column;gap:2px;align-items:flex-start;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.9rem;word-break:break-all}.artifact-modal-meta{font-size:.7rem!important;color:var(--text-muted);font-weight:400}.artifact-modal .modal-body{display:flex;flex-direction:column;gap:12px;min-height:0;flex:1;overflow:hidden}.artifact-modal-toolbar{display:flex;justify-content:flex-end;flex-shrink:0}.artifact-modal-download{display:inline-flex;align-items:center;gap:6px;font-size:.75rem;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;transition:background .1s ease}.artifact-modal-download:hover{background:var(--bg-hover, var(--border))}.artifact-modal-preview{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card)}.artifact-text{margin:0;padding:12px 16px;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;line-height:1.5;color:var(--text-primary);white-space:pre;overflow:auto}.artifact-image{display:block;max-width:100%;max-height:70vh;height:auto;margin:0 auto;padding:12px}.artifact-not-previewable{padding:32px 16px;text-align:center;color:var(--text-muted)}.artifact-not-previewable p{margin:0 0 4px}.artifact-not-previewable-meta{font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem}@media print{.detail-row{display:table-row!important}.audits-list,.sparse-index-content{display:block!important}.result-row{cursor:default}.wf-overflow{display:block!important}.wf-show-all,.expand-icon,.audits-toggle,.sparse-index-toggle,.info-btn{display:none!important}.agent-row.scenario-collapsed{display:table-row!important}.modal-backdrop,.artifacts-toggle,.artifacts-download-all,.art-tree-eye,.art-tree-download{display:none!important}.art-tree-root[hidden]{display:block!important}.art-tree-dir.collapsed>.art-tree-children{display:block!important}}.lifecycle-notes{margin-top:20px}.notes-body{padding:12px 16px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.875rem;line-height:1.55;color:var(--text-primary);overflow-x:auto}.markdown-body :first-child{margin-top:0}.markdown-body :last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{margin:1em 0 .4em;font-weight:600;line-height:1.3}.markdown-body h1{font-size:1.1rem}.markdown-body h2{font-size:1rem}.markdown-body h3,.markdown-body h4{font-size:.9375rem}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body blockquote,.markdown-body pre,.markdown-body table{margin:.5em 0}.markdown-body ul,.markdown-body ol{padding-left:1.4em}.markdown-body code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;background:var(--border);padding:.1em .35em;border-radius:3px}.markdown-body pre{background:var(--border);padding:10px 12px;border-radius:var(--radius-sm);overflow-x:auto}.markdown-body pre code{background:transparent;padding:0;font-size:.8125rem}.markdown-body blockquote{border-left:3px solid var(--border);padding-left:.8em;color:var(--text-secondary)}.markdown-body table{border-collapse:collapse;font-size:.8125rem}.markdown-body th,.markdown-body td{border:1px solid var(--border);padding:4px 8px;text-align:left}.markdown-body a{color:var(--link, #4099ff);text-decoration:underline}
2
+ </style></head> <body> <div id="app"> <div class="loading">Loading report&hellip;</div> </div> <script id="axis-data" type="application/json">__AXIS_REPORT_DATA__</script> <script type="module">function re(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var I=re();function Ie(e){I=e}var L={exec:()=>null};function g(e,t=""){let s=typeof e=="string"?e:e.source,n={replace:(r,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(w.caret,"$1"),s=s.replace(r,a),n},getRegex:()=>new RegExp(s,t)};return n}var Ge=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch{return!1}})(),w={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Ke=/^(?:[ \t]*(?:\n|$))+/,Qe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,We=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,_=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Ve=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ie=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,ze=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Pe=g(ze).replace(/bull/g,ie).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Xe=g(ze).replace(/bull/g,ie).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ae=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Je=/^[^\n]+/,le=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Ye=g(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",le).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),et=g(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ie).getRegex(),K="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",oe=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,tt=g("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",oe).replace("tag",K).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Me=g(ae).replace("hr",_).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",K).getRegex(),st=g(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Me).getRegex(),ce={blockquote:st,code:Qe,def:Ye,fences:We,heading:Ve,hr:_,html:tt,lheading:Pe,list:et,newline:Ke,paragraph:Me,table:L,text:Je},ge=g("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",_).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",K).getRegex(),nt={...ce,lheading:Xe,table:ge,paragraph:g(ae).replace("hr",_).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",ge).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",K).getRegex()},rt={...ce,html:g(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",oe).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:L,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:g(ae).replace("hr",_).replace("heading",` *#{1,6} *[^
3
+ ]`).replace("lheading",Pe).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},it=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,at=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,qe=/^( {2,}|\\)\n(?!\s*$)/,lt=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,P=/[\p{P}\p{S}]/u,Q=/[\s\p{P}\p{S}]/u,de=/[^\s\p{P}\p{S}]/u,ot=g(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Q).getRegex(),Be=/(?!~)[\p{P}\p{S}]/u,ct=/(?!~)[\s\p{P}\p{S}]/u,dt=/(?:[^\s\p{P}\p{S}]|~)/u,ut=g(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Ge?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Ue=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,pt=g(Ue,"u").replace(/punct/g,P).getRegex(),ht=g(Ue,"u").replace(/punct/g,Be).getRegex(),_e="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",ft=g(_e,"gu").replace(/notPunctSpace/g,de).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),gt=g(_e,"gu").replace(/notPunctSpace/g,dt).replace(/punctSpace/g,ct).replace(/punct/g,Be).getRegex(),mt=g("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,de).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),kt=g(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,P).getRegex(),bt="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",vt=g(bt,"gu").replace(/notPunctSpace/g,de).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),wt=g(/\\(punct)/,"gu").replace(/punct/g,P).getRegex(),xt=g(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),$t=g(oe).replace("(?:-->|$)","-->").getRegex(),yt=g("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",$t).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),O=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,St=g(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",O).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),je=g(/^!?\[(label)\]\[(ref)\]/).replace("label",O).replace("ref",le).getRegex(),Ne=g(/^!?\[(ref)\](?:\[\])?/).replace("ref",le).getRegex(),At=g("reflink|nolink(?!\\()","g").replace("reflink",je).replace("nolink",Ne).getRegex(),me=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ue={_backpedal:L,anyPunctuation:wt,autolink:xt,blockSkip:ut,br:qe,code:at,del:L,delLDelim:L,delRDelim:L,emStrongLDelim:pt,emStrongRDelimAst:ft,emStrongRDelimUnd:mt,escape:it,link:St,nolink:Ne,punctuation:ot,reflink:je,reflinkSearch:At,tag:yt,text:lt,url:L},Rt={...ue,link:g(/^!?\[(label)\]\((.*?)\)/).replace("label",O).getRegex(),reflink:g(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",O).getRegex()},ee={...ue,emStrongRDelimAst:gt,emStrongLDelim:ht,delLDelim:kt,delRDelim:vt,url:g(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",me).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:g(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",me).getRegex()},Et={...ee,br:g(qe).replace("{2,}","*").getRegex(),text:g(ee.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},j={normal:ce,gfm:nt,pedantic:rt},B={normal:ue,gfm:ee,breaks:Et,pedantic:Rt},Tt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},ke=e=>Tt[e];function R(e,t){if(t){if(w.escapeTest.test(e))return e.replace(w.escapeReplace,ke)}else if(w.escapeTestNoEncode.test(e))return e.replace(w.escapeReplaceNoEncode,ke);return e}function be(e){try{e=encodeURI(e).replace(w.percentDecode,"%")}catch{return null}return e}function ve(e,t){let s=e.replace(w.findPipe,(i,a,l)=>{let c=!1,o=a;for(;--o>=0&&l[o]==="\\";)c=!c;return c?"|":" |"}),n=s.split(w.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(w.slashPipe,"|");return n}function E(e,t,s){let n=e.length;if(n===0)return"";let r=0;for(;r<n&&e.charAt(n-r-1)===t;)r++;return e.slice(0,n-r)}function we(e){let t=e.split(`
4
+ `),s=t.length-1;for(;s>=0&&w.blankLine.test(t[s]);)s--;return t.length-s<=2?e:t.slice(0,s+1).join(`
5
+ `)}function Lt(e,t){if(e.indexOf(t[1])===-1)return-1;let s=0;for(let n=0;n<e.length;n++)if(e[n]==="\\")n++;else if(e[n]===t[0])s++;else if(e[n]===t[1]&&(s--,s<0))return n;return s>0?-2:-1}function Ct(e,t=0){let s=t,n="";for(let r of e)if(r===" "){let i=4-s%4;n+=" ".repeat(i),s+=i}else n+=r,s++;return n}function xe(e,t,s,n,r){let i=t.href,a=t.title||null,l=e[1].replace(r.other.outputLinkReplace,"$1");n.state.inLink=!0;let c={type:e[0].charAt(0)==="!"?"image":"link",raw:s,href:i,title:a,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,c}function It(e,t,s){let n=e.match(s.other.indentCodeCompensation);if(n===null)return t;let r=n[1];return t.split(`
6
+ `).map(i=>{let a=i.match(s.other.beginningSpace);if(a===null)return i;let[l]=a;return l.length>=r.length?i.slice(r.length):i}).join(`
7
+ `)}var F=class{options;rules;lexer;constructor(e){this.options=e||I}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let s=this.options.pedantic?t[0]:we(t[0]),n=s.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:s,codeBlockStyle:"indented",text:n}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let s=t[0],n=It(s,t[3]||"",this.rules);return{type:"code",raw:s,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let s=t[2].trim();if(this.rules.other.endingHash.test(s)){let n=E(s,"#");(this.options.pedantic||!n||this.rules.other.endingSpaceChar.test(n))&&(s=n.trim())}return{type:"heading",raw:E(t[0],`
8
+ `),depth:t[1].length,text:s,tokens:this.lexer.inline(s)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:E(t[0],`
9
+ `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let s=E(t[0],`
10
+ `).split(`
11
+ `),n="",r="",i=[];for(;s.length>0;){let a=!1,l=[],c;for(c=0;c<s.length;c++)if(this.rules.other.blockquoteStart.test(s[c]))l.push(s[c]),a=!0;else if(!a)l.push(s[c]);else break;s=s.slice(c);let o=l.join(`
12
+ `),p=o.replace(this.rules.other.blockquoteSetextReplace,`
13
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,"");n=n?`${n}
14
+ ${o}`:o,r=r?`${r}
15
+ ${p}`:p;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(p,i,!0),this.lexer.state.top=d,s.length===0)break;let h=i.at(-1);if(h?.type==="code")break;if(h?.type==="blockquote"){let f=h,m=f.raw+`
16
+ `+s.join(`
17
+ `),x=this.blockquote(m);i[i.length-1]=x,n=n.substring(0,n.length-f.raw.length)+x.raw,r=r.substring(0,r.length-f.text.length)+x.text;break}else if(h?.type==="list"){let f=h,m=f.raw+`
18
+ `+s.join(`
19
+ `),x=this.list(m);i[i.length-1]=x,n=n.substring(0,n.length-h.raw.length)+x.raw,r=r.substring(0,r.length-f.raw.length)+x.raw,s=m.substring(i.at(-1).raw.length).split(`
20
+ `);continue}}return{type:"blockquote",raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let s=t[1].trim(),n=s.length>1,r={type:"list",raw:"",ordered:n,start:n?+s.slice(0,-1):"",loose:!1,items:[]};s=n?`\\d{1,9}\\${s.slice(-1)}`:`\\${s}`,this.options.pedantic&&(s=n?s:"[*+-]");let i=this.rules.other.listItemRegex(s),a=!1;for(;e;){let c=!1,o="",p="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;o=t[0],e=e.substring(o.length);let d=Ct(t[2].split(`
21
+ `,1)[0],t[1].length),h=e.split(`
22
+ `,1)[0],f=!d.trim(),m=0;if(this.options.pedantic?(m=2,p=d.trimStart()):f?m=t[1].length+1:(m=d.search(this.rules.other.nonSpaceChar),m=m>4?1:m,p=d.slice(m),m+=t[1].length),f&&this.rules.other.blankLine.test(h)&&(o+=h+`
23
+ `,e=e.substring(h.length+1),c=!0),!c){let x=this.rules.other.nextBulletRegex(m),b=this.rules.other.hrRegex(m),T=this.rules.other.fencesBeginRegex(m),$=this.rules.other.headingBeginRegex(m),M=this.rules.other.htmlBeginRegex(m),v=this.rules.other.blockquoteBeginRegex(m);for(;e;){let W=e.split(`
24
+ `,1)[0],q;if(h=W,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),q=h):q=h.replace(this.rules.other.tabCharGlobal," "),T.test(h)||$.test(h)||M.test(h)||v.test(h)||x.test(h)||b.test(h))break;if(q.search(this.rules.other.nonSpaceChar)>=m||!h.trim())p+=`
25
+ `+q.slice(m);else{if(f||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||T.test(d)||$.test(d)||b.test(d))break;p+=`
26
+ `+h}f=!h.trim(),o+=W+`
27
+ `,e=e.substring(W.length+1),d=q.slice(m)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(o)&&(a=!0)),r.items.push({type:"list_item",raw:o,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]}),r.raw+=o}let l=r.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let c of r.items){this.lexer.state.top=!1,c.tokens=this.lexer.blockTokens(c.text,[]);let o=c.tokens[0];if(c.task&&(o?.type==="text"||o?.type==="paragraph")){c.text=c.text.replace(this.rules.other.listReplaceTask,""),o.raw=o.raw.replace(this.rules.other.listReplaceTask,""),o.text=o.text.replace(this.rules.other.listReplaceTask,"");for(let d=this.lexer.inlineQueue.length-1;d>=0;d--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[d].src)){this.lexer.inlineQueue[d].src=this.lexer.inlineQueue[d].src.replace(this.rules.other.listReplaceTask,"");break}let p=this.rules.other.listTaskCheckbox.exec(c.raw);if(p){let d={type:"checkbox",raw:p[0]+" ",checked:p[0]!=="[ ]"};c.checked=d.checked,r.loose?c.tokens[0]&&["paragraph","text"].includes(c.tokens[0].type)&&"tokens"in c.tokens[0]&&c.tokens[0].tokens?(c.tokens[0].raw=d.raw+c.tokens[0].raw,c.tokens[0].text=d.raw+c.tokens[0].text,c.tokens[0].tokens.unshift(d)):c.tokens.unshift({type:"paragraph",raw:d.raw,text:d.raw,tokens:[d]}):c.tokens.unshift(d)}}else c.task&&(c.task=!1);if(!r.loose){let p=c.tokens.filter(h=>h.type==="space"),d=p.length>0&&p.some(h=>this.rules.other.anyLine.test(h.raw));r.loose=d}}if(r.loose)for(let c of r.items){c.loose=!0;for(let o of c.tokens)o.type==="text"&&(o.type="paragraph")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let s=we(t[0]);return{type:"html",block:!0,raw:s,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:s}}}def(e){let t=this.rules.block.def.exec(e);if(t){let s=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:s,raw:E(t[0],`
28
+ `),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let s=ve(t[1]),n=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
29
+ `):[],i={type:"table",raw:E(t[0],`
30
+ `),header:[],align:[],rows:[]};if(s.length===n.length){for(let a of n)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<s.length;a++)i.header.push({text:s[a],tokens:this.lexer.inline(s[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(ve(a,i.header.length).map((l,c)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[c]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let s=t[1].trim();return{type:"heading",raw:E(t[0],`
31
+ `),depth:t[2].charAt(0)==="="?1:2,text:s,tokens:this.lexer.inline(s)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let s=t[1].charAt(t[1].length-1)===`
32
+ `?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:s,tokens:this.lexer.inline(s)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let s=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(s)){if(!this.rules.other.endAngleBracket.test(s))return;let i=E(s.slice(0,-1),"\\");if((s.length-i.length)%2===0)return}else{let i=Lt(t[2],"()");if(i===-2)return;if(i>-1){let a=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,a).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(n);i&&(n=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(s)?n=n.slice(1):n=n.slice(1,-1)),xe(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let s;if((s=this.rules.inline.reflink.exec(e))||(s=this.rules.inline.nolink.exec(e))){let n=(s[2]||s[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[n.toLowerCase()];if(!r){let i=s[0].charAt(0);return{type:"text",raw:i,text:i}}return xe(s,r,s[0],this.lexer,this.rules)}}emStrong(e,t,s=""){let n=this.rules.inline.emStrongLDelim.exec(e);if(!(!n||!n[1]&&!n[2]&&!n[3]&&!n[4]||n[4]&&s.match(this.rules.other.unicodeAlphaNumeric))&&(!(n[1]||n[3])||!s||this.rules.inline.punctuation.exec(s))){let r=[...n[0]].length-1,i,a,l=r,c=0,o=n[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(o.lastIndex=0,t=t.slice(-1*e.length+r);(n=o.exec(t))!==null;){if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!i)continue;if(a=[...i].length,n[3]||n[4]){l+=a;continue}else if((n[5]||n[6])&&r%3&&!((r+a)%3)){c+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l+c);let p=[...n[0]][0].length,d=e.slice(0,r+n.index+p+a);if(Math.min(r,a)%2){let f=d.slice(1,-1);return{type:"em",raw:d,text:f,tokens:this.lexer.inlineTokens(f)}}let h=d.slice(2,-2);return{type:"strong",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let s=t[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(s),r=this.rules.other.startingSpaceChar.test(s)&&this.rules.other.endingSpaceChar.test(s);return n&&r&&(s=s.substring(1,s.length-1)),{type:"codespan",raw:t[0],text:s}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,s=""){let n=this.rules.inline.delLDelim.exec(e);if(n&&(!n[1]||!s||this.rules.inline.punctuation.exec(s))){let r=[...n[0]].length-1,i,a,l=r,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+r);(n=c.exec(t))!==null;){if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!i||(a=[...i].length,a!==r))continue;if(n[3]||n[4]){l+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l);let o=[...n[0]][0].length,p=e.slice(0,r+n.index+o+a),d=p.slice(r,-r);return{type:"del",raw:p,text:d,tokens:this.lexer.inlineTokens(d)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let s,n;return t[2]==="@"?(s=t[1],n="mailto:"+s):(s=t[1],n=s),{type:"link",raw:t[0],text:s,href:n,tokens:[{type:"text",raw:s,text:s}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let s,n;if(t[2]==="@")s=t[0],n="mailto:"+s;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(r!==t[0]);s=t[0],t[1]==="www."?n="http://"+t[0]:n=t[0]}return{type:"link",raw:t[0],text:s,href:n,tokens:[{type:"text",raw:s,text:s}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let s=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:s}}}},y=class te{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||I,this.options.tokenizer=this.options.tokenizer||new F,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let s={other:w,block:j.normal,inline:B.normal};this.options.pedantic?(s.block=j.pedantic,s.inline=B.pedantic):this.options.gfm&&(s.block=j.gfm,this.options.breaks?s.inline=B.breaks:s.inline=B.gfm),this.tokenizer.rules=s}static get rules(){return{block:j,inline:B}}static lex(t,s){return new te(s).lex(t)}static lexInline(t,s){return new te(s).inlineTokens(t)}lex(t){t=t.replace(w.carriageReturn,`
33
+ `),this.blockTokens(t,this.tokens);for(let s=0;s<this.inlineQueue.length;s++){let n=this.inlineQueue[s];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,s=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(t=t.replace(w.tabCharGlobal," ").replace(w.spaceLine,""));let r=1/0;for(;t;){if(t.length<r)r=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(l=>(i=l.call({lexer:this},t,s))?(t=t.substring(i.raw.length),s.push(i),!0):!1))continue;if(i=this.tokenizer.space(t)){t=t.substring(i.raw.length);let l=s.at(-1);i.raw.length===1&&l!==void 0?l.raw+=`
34
+ `:s.push(i);continue}if(i=this.tokenizer.code(t)){t=t.substring(i.raw.length);let l=s.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`
35
+ `)?"":`
36
+ `)+i.raw,l.text+=`
37
+ `+i.text,this.inlineQueue.at(-1).src=l.text):s.push(i);continue}if(i=this.tokenizer.fences(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.heading(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.hr(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.blockquote(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.list(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.html(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.def(t)){t=t.substring(i.raw.length);let l=s.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`
38
+ `)?"":`
39
+ `)+i.raw,l.text+=`
40
+ `+i.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},s.push(i));continue}if(i=this.tokenizer.table(t)){t=t.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.lheading(t)){t=t.substring(i.raw.length),s.push(i);continue}let a=t;if(this.options.extensions?.startBlock){let l=1/0,c=t.slice(1),o;this.options.extensions.startBlock.forEach(p=>{o=p.call({lexer:this},c),typeof o=="number"&&o>=0&&(l=Math.min(l,o))}),l<1/0&&l>=0&&(a=t.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let l=s.at(-1);n&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(`
41
+ `)?"":`
42
+ `)+i.raw,l.text+=`
43
+ `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):s.push(i),n=a.length!==t.length,t=t.substring(i.raw.length);continue}if(i=this.tokenizer.text(t)){t=t.substring(i.raw.length);let l=s.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(`
44
+ `)?"":`
45
+ `)+i.raw,l.text+=`
46
+ `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):s.push(i);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,s}inline(t,s=[]){return this.inlineQueue.push({src:t,tokens:s}),s}inlineTokens(t,s=[]){this.tokenizer.lexer=this;let n=t,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,l="",c=1/0;for(;t;){if(t.length<c)c=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}a||(l=""),a=!1;let o;if(this.options.extensions?.inline?.some(d=>(o=d.call({lexer:this},t,s))?(t=t.substring(o.raw.length),s.push(o),!0):!1))continue;if(o=this.tokenizer.escape(t)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.tag(t)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.link(t)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(o.raw.length);let d=s.at(-1);o.type==="text"&&d?.type==="text"?(d.raw+=o.raw,d.text+=o.text):s.push(o);continue}if(o=this.tokenizer.emStrong(t,n,l)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.codespan(t)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.br(t)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.del(t,n,l)){t=t.substring(o.raw.length),s.push(o);continue}if(o=this.tokenizer.autolink(t)){t=t.substring(o.raw.length),s.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(t))){t=t.substring(o.raw.length),s.push(o);continue}let p=t;if(this.options.extensions?.startInline){let d=1/0,h=t.slice(1),f;this.options.extensions.startInline.forEach(m=>{f=m.call({lexer:this},h),typeof f=="number"&&f>=0&&(d=Math.min(d,f))}),d<1/0&&d>=0&&(p=t.substring(0,d+1))}if(o=this.tokenizer.inlineText(p)){t=t.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(l=o.raw.slice(-1)),a=!0;let d=s.at(-1);d?.type==="text"?(d.raw+=o.raw,d.text+=o.text):s.push(o);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return s}infiniteLoopError(t){let s="Infinite loop on byte: "+t;if(this.options.silent)console.error(s);else throw new Error(s)}},H=class{options;parser;constructor(e){this.options=e||I}space(e){return""}code({text:e,lang:t,escaped:s}){let n=(t||"").match(w.notSpaceStart)?.[0],r=e.replace(w.endingNewline,"")+`
47
+ `;return n?'<pre><code class="language-'+R(n)+'">'+(s?r:R(r,!0))+`</code></pre>
48
+ `:"<pre><code>"+(s?r:R(r,!0))+`</code></pre>
49
+ `}blockquote({tokens:e}){return`<blockquote>
50
+ ${this.parser.parse(e)}</blockquote>
51
+ `}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
52
+ `}hr(e){return`<hr>
53
+ `}list(e){let t=e.ordered,s=e.start,n="";for(let a=0;a<e.items.length;a++){let l=e.items[a];n+=this.listitem(l)}let r=t?"ol":"ul",i=t&&s!==1?' start="'+s+'"':"";return"<"+r+i+`>
54
+ `+n+"</"+r+`>
55
+ `}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
56
+ `}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
57
+ `}table(e){let t="",s="";for(let r=0;r<e.header.length;r++)s+=this.tablecell(e.header[r]);t+=this.tablerow({text:s});let n="";for(let r=0;r<e.rows.length;r++){let i=e.rows[r];s="";for(let a=0;a<i.length;a++)s+=this.tablecell(i[a]);n+=this.tablerow({text:s})}return n&&(n=`<tbody>${n}</tbody>`),`<table>
58
+ <thead>
59
+ `+t+`</thead>
60
+ `+n+`</table>
61
+ `}tablerow({text:e}){return`<tr>
62
+ ${e}</tr>
63
+ `}tablecell(e){let t=this.parser.parseInline(e.tokens),s=e.header?"th":"td";return(e.align?`<${s} align="${e.align}">`:`<${s}>`)+t+`</${s}>
64
+ `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${R(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:s}){let n=this.parser.parseInline(s),r=be(e);if(r===null)return n;e=r;let i='<a href="'+e+'"';return t&&(i+=' title="'+R(t)+'"'),i+=">"+n+"</a>",i}image({href:e,title:t,text:s,tokens:n}){n&&(s=this.parser.parseInline(n,this.parser.textRenderer));let r=be(e);if(r===null)return R(s);e=r;let i=`<img src="${e}" alt="${R(s)}"`;return t&&(i+=` title="${R(t)}"`),i+=">",i}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:R(e.text)}},pe=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},S=class se{options;renderer;textRenderer;constructor(t){this.options=t||I,this.options.renderer=this.options.renderer||new H,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new pe}static parse(t,s){return new se(s).parse(t)}static parseInline(t,s){return new se(s).parseInline(t)}parse(t){this.renderer.parser=this;let s="";for(let n=0;n<t.length;n++){let r=t[n];if(this.options.extensions?.renderers?.[r.type]){let a=r,l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){s+=l||"";continue}}let i=r;switch(i.type){case"space":{s+=this.renderer.space(i);break}case"hr":{s+=this.renderer.hr(i);break}case"heading":{s+=this.renderer.heading(i);break}case"code":{s+=this.renderer.code(i);break}case"table":{s+=this.renderer.table(i);break}case"blockquote":{s+=this.renderer.blockquote(i);break}case"list":{s+=this.renderer.list(i);break}case"checkbox":{s+=this.renderer.checkbox(i);break}case"html":{s+=this.renderer.html(i);break}case"def":{s+=this.renderer.def(i);break}case"paragraph":{s+=this.renderer.paragraph(i);break}case"text":{s+=this.renderer.text(i);break}default:{let a='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return s}parseInline(t,s=this.renderer){this.renderer.parser=this;let n="";for(let r=0;r<t.length;r++){let i=t[r];if(this.options.extensions?.renderers?.[i.type]){let l=this.options.extensions.renderers[i.type].call({parser:this},i);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=l||"";continue}}let a=i;switch(a.type){case"escape":{n+=s.text(a);break}case"html":{n+=s.html(a);break}case"link":{n+=s.link(a);break}case"image":{n+=s.image(a);break}case"checkbox":{n+=s.checkbox(a);break}case"strong":{n+=s.strong(a);break}case"em":{n+=s.em(a);break}case"codespan":{n+=s.codespan(a);break}case"br":{n+=s.br(a);break}case"del":{n+=s.del(a);break}case"text":{n+=s.text(a);break}default:{let l='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}},U=class{options;block;constructor(e){this.options=e||I}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?y.lex:y.lexInline}provideParser(e=this.block){return e?S.parse:S.parseInline}},zt=class{defaults=re();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=S;Renderer=H;TextRenderer=pe;Lexer=y;Tokenizer=F;Hooks=U;constructor(...e){this.use(...e)}walkTokens(e,t){let s=[];for(let n of e)switch(s=s.concat(t.call(this,n)),n.type){case"table":{let r=n;for(let i of r.header)s=s.concat(this.walkTokens(i.tokens,t));for(let i of r.rows)for(let a of i)s=s.concat(this.walkTokens(a.tokens,t));break}case"list":{let r=n;s=s.concat(this.walkTokens(r.items,t));break}default:{let r=n;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let a=r[i].flat(1/0);s=s.concat(this.walkTokens(a,t))}):r.tokens&&(s=s.concat(this.walkTokens(r.tokens,t)))}}return s}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(s=>{let n={...s};if(n.async=this.defaults.async||n.async||!1,s.extensions&&(s.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...a){let l=r.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),n.extensions=t),s.renderer){let r=this.defaults.renderer||new H(this.defaults);for(let i in s.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=s.renderer[a],c=r[a];r[a]=(...o)=>{let p=l.apply(r,o);return p===!1&&(p=c.apply(r,o)),p||""}}n.renderer=r}if(s.tokenizer){let r=this.defaults.tokenizer||new F(this.defaults);for(let i in s.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=s.tokenizer[a],c=r[a];r[a]=(...o)=>{let p=l.apply(r,o);return p===!1&&(p=c.apply(r,o)),p}}n.tokenizer=r}if(s.hooks){let r=this.defaults.hooks||new U;for(let i in s.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=s.hooks[a],c=r[a];U.passThroughHooks.has(i)?r[a]=o=>{if(this.defaults.async&&U.passThroughHooksRespectAsync.has(i))return(async()=>{let d=await l.call(r,o);return c.call(r,d)})();let p=l.call(r,o);return c.call(r,p)}:r[a]=(...o)=>{if(this.defaults.async)return(async()=>{let d=await l.apply(r,o);return d===!1&&(d=await c.apply(r,o)),d})();let p=l.apply(r,o);return p===!1&&(p=c.apply(r,o)),p}}n.hooks=r}if(s.walkTokens){let r=this.defaults.walkTokens,i=s.walkTokens;n.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),r&&(l=l.concat(r.call(this,a))),l}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return y.lex(e,t??this.defaults)}parser(e,t){return S.parse(e,t??this.defaults)}parseMarkdown(e){return(t,s)=>{let n={...s},r={...this.defaults,...n},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&n.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let a=r.hooks?await r.hooks.preprocess(t):t,l=await(r.hooks?await r.hooks.provideLexer(e):e?y.lex:y.lexInline)(a,r),c=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(c,r.walkTokens));let o=await(r.hooks?await r.hooks.provideParser(e):e?S.parse:S.parseInline)(c,r);return r.hooks?await r.hooks.postprocess(o):o})().catch(i);try{r.hooks&&(t=r.hooks.preprocess(t));let a=(r.hooks?r.hooks.provideLexer(e):e?y.lex:y.lexInline)(t,r);r.hooks&&(a=r.hooks.processAllTokens(a)),r.walkTokens&&this.walkTokens(a,r.walkTokens);let l=(r.hooks?r.hooks.provideParser(e):e?S.parse:S.parseInline)(a,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(a){return i(a)}}}onError(e,t){return s=>{if(s.message+=`
65
+ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error occurred:</p><pre>"+R(s.message+"",!0)+"</pre>";return t?Promise.resolve(n):n}if(t)return Promise.reject(s);throw s}}},C=new zt;function k(e,t){return C.parse(e,t)}k.options=k.setOptions=function(e){return C.setOptions(e),k.defaults=C.defaults,Ie(k.defaults),k};k.getDefaults=re;k.defaults=I;k.use=function(...e){return C.use(...e),k.defaults=C.defaults,Ie(k.defaults),k};k.walkTokens=function(e,t){return C.walkTokens(e,t)};k.parseInline=C.parseInline;k.Parser=S;k.parser=S.parse;k.Renderer=H;k.TextRenderer=pe;k.Lexer=y;k.lexer=y.lex;k.Tokenizer=F;k.Hooks=U;k.parse=k;k.options;k.setOptions;k.use;k.walkTokens;k.parseInline;S.parse;y.lex;function Pt(e){return"averageAxisScore"in e}k.setOptions({gfm:!0,breaks:!1});function Mt(e){try{const t=k.parse(e,{async:!1});return qt(t)}catch{return`<pre>${u(e)}</pre>`}}function qt(e){return e.replace(/<\s*\/?\s*(script|style|iframe|object|embed)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/(href|src)\s*=\s*("\s*javascript:[^"]*"|'\s*javascript:[^']*'|\s*javascript:[^\s>]+)/gi,'$1="#"')}function u(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function A(e){return!Number.isFinite(e)||e<0?"—":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function Z(e){return e===void 0||e<=0?"—":`$${e.toFixed(4)}`}function $e(e){if(!e)return"—";const t=e.input+e.output+(e.cacheReadInput??0);return t===0?"—":t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:t.toLocaleString()}function Bt(e){try{return new Date(e).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return e}}function Ut(e){return e>=90?"score-green":e>=80?"score-yellow":e>=70?"score-orange":"score-red"}function _t(e){return e>=90?"fill-green":e>=80?"fill-yellow":e>=70?"fill-orange":"fill-red"}function jt(e){const t=e.indexOf("@");return t===-1?e:e.slice(0,t)}function G(e){const t=e.indexOf("@");return t===-1?null:e.slice(t+1)}function De(e){return e.replace(/ \[[^\]]+\]$/,"")}function ne(e){const t=G(e.scenarioKey);return t?`${e.agentName} @${t}`:e.agentName}function Oe(e){const t=new Map;for(const n of e){const r=jt(n.scenarioKey);let i=t.get(r);i||(i={scenarioKey:r,scenarioName:De(n.scenarioName),entries:[],prompt:n.prompt,rubric:n.rubric},t.set(r,i)),i.entries.push(n)}const s=Array.from(t.values());for(const n of s)n.entries.sort((r,i)=>{const a=r.agentName.localeCompare(i.agentName);if(a!==0)return a;const l=G(r.scenarioKey)??"",c=G(i.scenarioKey)??"";return l.localeCompare(c)});return s.sort((n,r)=>n.scenarioKey.localeCompare(r.scenarioKey)),s}function z(e,t=!1){return e===void 0?`<span class="score-badge score-na${t?" score-badge-lg":""}">—</span>`:`<span class="score-badge ${Ut(e)}${t?" score-badge-lg":""}">${e}</span>`}function he(e,t=100){const s=Math.max(0,Math.min(100,e/t*100));return`<div class="progress-bar"><div class="fill ${_t(s)}" style="width: ${s}%"></div></div>`}function ye(e,t){return`
3
66
  <div class="dimension-item">
4
- <span class="dimension-label">${o(e)}</span>
5
- ${b(s)}
6
- <span class="dimension-value">${s}</span>
7
- </div>`}function M(e){return`
67
+ <span class="dimension-label">${u(e)}</span>
68
+ ${he(t)}
69
+ <span class="dimension-value">${t}</span>
70
+ </div>`}function Nt(e){const t=Oe(e.results).flatMap(n=>n.entries),s={...e,results:t};return`
8
71
  <div class="container">
9
- ${I(e)}
10
- ${q(e)}
72
+ ${Dt(s)}
73
+ ${Ot(s)}
11
74
  </div>
12
- ${Y(e.results)}`}function I(e){const s=L(e.summary),t=e.results.reduce((a,n)=>a+(n.totalCostUsd??0),0);return`
75
+ ${ps(t)}`}function Dt(e){const t=Pt(e.summary),s=e.results.reduce((n,r)=>n+(r.totalCostUsd??0),0);return`
13
76
  <header class="report-header">
14
77
  <div class="header-left">
15
78
  <div class="report-branding">
@@ -17,14 +80,14 @@
17
80
  <span class="report-badge">Report</span>
18
81
  </div>
19
82
  <div class="report-meta">
20
- ${e.name?`<div class="report-meta-row"><span class="report-meta-label">Report name:</span> <span class="report-meta-value">${o(e.name)}</span></div>`:""}
21
- <div class="report-meta-row"><span class="report-meta-label">Generated on:</span> <span class="report-meta-value">${A(e.timestamp)}</span></div>
22
- <div class="report-meta-row"><span class="report-meta-label">Total duration:</span> <span class="report-meta-value">${u(e.durationMs)}</span></div>
23
- <div class="report-meta-row"><span class="report-meta-label">Report ID:</span> <span class="report-meta-value report-meta-id">${o(e.reportId)}</span></div>
83
+ ${e.name?`<div class="report-meta-row"><span class="report-meta-label">Report name:</span> <span class="report-meta-value">${u(e.name)}</span></div>`:""}
84
+ <div class="report-meta-row"><span class="report-meta-label">Generated on:</span> <span class="report-meta-value">${Bt(e.timestamp)}</span></div>
85
+ <div class="report-meta-row"><span class="report-meta-label">Total duration:</span> <span class="report-meta-value">${A(e.durationMs)}</span></div>
86
+ <div class="report-meta-row"><span class="report-meta-label">Report ID:</span> <span class="report-meta-value report-meta-id">${u(e.reportId)}</span></div>
24
87
  </div>
25
88
  </div>
26
89
  <div class="summary-card">
27
- ${s?`
90
+ ${t?`
28
91
  <div class="summary-hero">
29
92
  <div class="hero-score">${e.summary.averageAxisScore}</div>
30
93
  <div class="hero-label">AXIS Result</div>
@@ -47,21 +110,21 @@
47
110
  <div class="stat-value">${e.summary.skipped}</div>
48
111
  <div class="stat-label">Skipped</div>
49
112
  </div>`:""}
50
- ${t>0?`
113
+ ${s>0?`
51
114
  <div class="summary-stat">
52
- <div class="stat-value">${f(t)}</div>
115
+ <div class="stat-value">${Z(s)}</div>
53
116
  <div class="stat-label">Cost</div>
54
117
  </div>`:""}
55
118
  </div>
56
119
  </div>
57
- </header>`}function q(e){if(e.results.length===0)return'<div class="empty-state">No results in this report.</div>';const s=e.results.some(i=>i.score!==void 0),t=C(e.results);let a=0;const n=t.map(i=>{const c=a;return a+=i.entries.length,T(i,c,s)}).join("");return`
120
+ </header>`}function Ot(e){if(e.results.length===0)return'<div class="empty-state">No results in this report.</div>';const t=e.results.some(i=>i.score!==void 0),s=Oe(e.results);let n=0;const r=s.map(i=>{const a=n;return n+=i.entries.length,Ft(i,a,t)}).join("");return`
58
121
  <section class="results-section">
59
122
  <table class="results-table">
60
123
  <thead>
61
124
  <tr>
62
125
  <th></th>
63
126
  <th>Scenario / Agent</th>
64
- ${s?`
127
+ ${t?`
65
128
  <th class="col-score">AXIS</th>
66
129
  <th class="col-score hide-mobile">Goal</th>
67
130
  <th class="col-score hide-mobile">Env</th>
@@ -73,12 +136,12 @@
73
136
  <th class="col-right hide-mobile">Cost</th>
74
137
  </tr>
75
138
  </thead>
76
- <tbody>${n}</tbody>
139
+ <tbody>${r}</tbody>
77
140
  </table>
78
- </section>`}function T(e,s,t){const a=N(e,s,t),n=e.entries.map((i,c)=>{const l=s+c;return D(i,l,t,e.scenarioKey)+P(i,l,e.scenarioKey)}).join("");return a+n}function N(e,s,t){const a=e.prompt?`<button class="info-btn" data-modal-index="${s}" title="View scenario settings">ℹ</button>`:"";return t?`
79
- <tr class="scenario-header-row expanded" data-scenario="${o(e.scenarioKey)}">
141
+ </section>`}function Ft(e,t,s){const n=Ht(e,t,s),r=e.entries.map((i,a)=>{const l=t+a;return Zt(i,l,s,e.scenarioKey)+Gt(i,l,e.scenarioKey)}).join("");return n+r}function Ht(e,t,s){return s?`
142
+ <tr class="scenario-header-row expanded" data-scenario="${u(e.scenarioKey)}">
80
143
  <td><span class="expand-icon">▶</span></td>
81
- <td class="col-scenario-header">${o(e.scenarioName)}${a}</td>
144
+ <td class="col-scenario-header">${u(e.scenarioName)}</td>
82
145
  <td class="col-score"></td>
83
146
  <td class="col-score hide-mobile"></td>
84
147
  <td class="col-score hide-mobile"></td>
@@ -88,236 +151,341 @@
88
151
  <td class="col-right hide-mobile"></td>
89
152
  <td class="col-right hide-mobile"></td>
90
153
  </tr>`:`
91
- <tr class="scenario-header-row expanded" data-scenario="${o(e.scenarioKey)}">
154
+ <tr class="scenario-header-row expanded" data-scenario="${u(e.scenarioKey)}">
92
155
  <td><span class="expand-icon">▶</span></td>
93
- <td class="col-scenario-header">${o(e.scenarioName)}${a}</td>
156
+ <td class="col-scenario-header">${u(e.scenarioName)}</td>
94
157
  <td class="col-score"></td>
95
158
  <td class="col-right hide-mobile"></td>
96
159
  <td class="col-right hide-mobile"></td>
97
160
  <td class="col-right hide-mobile"></td>
98
- </tr>`}function D(e,s,t,a){const n=e.score,i=e.exitCode!==0||!!e.error,c=e.error?`<button class="error-btn" data-error-index="${s}" title="${o(ne(e.error))}">!</button>`:"";if(t)return`
99
- <tr class="result-row agent-row" data-index="${s}" data-scenario="${o(a)}">
161
+ </tr>`}function Zt(e,t,s,n){const r=e.score,i=e.exitCode!==0||!!e.error,a=e.error?`<button class="error-btn" data-error-index="${t}" title="${u($s(e.error))}">!</button>`:"",l=e.prompt||e.agentConfig?`<button class="info-btn" data-modal-index="${t}" title="View resolved configuration" type="button">ℹ</button>`:"";if(s)return`
162
+ <tr class="result-row agent-row" data-index="${t}" data-scenario="${u(n)}">
100
163
  <td class="col-expand-indent"><span class="expand-icon">▶</span></td>
101
- <td class="col-agent">${o(e.agentName)}${c}</td>
102
- <td class="col-score">${v(n?.axisScore)}</td>
103
- <td class="col-score hide-mobile">${v(n?.goalAchievement.score)}</td>
104
- <td class="col-score hide-mobile">${v(n?.environment.score)}</td>
105
- <td class="col-score hide-mobile">${v(n?.service.score)}</td>
106
- <td class="col-score hide-mobile">${v(n?.agent.score)}</td>
107
- <td class="col-right hide-mobile">${w(e.tokenUsage)}</td>
108
- <td class="col-right hide-mobile">${u(e.durationMs)}</td>
109
- <td class="col-right hide-mobile">${f(e.totalCostUsd)}</td>
110
- </tr>`;const l=i?'<span class="score-badge score-red">Fail</span>':'<span class="score-badge score-green">Pass</span>';return`
111
- <tr class="result-row agent-row" data-index="${s}" data-scenario="${o(a)}">
164
+ <td class="col-agent">${u(ne(e))}${l}${a}</td>
165
+ <td class="col-score">${z(r?.axisScore)}</td>
166
+ <td class="col-score hide-mobile">${z(r?.goalAchievement.score)}</td>
167
+ <td class="col-score hide-mobile">${z(r?.environment.score)}</td>
168
+ <td class="col-score hide-mobile">${z(r?.service.score)}</td>
169
+ <td class="col-score hide-mobile">${z(r?.agent.score)}</td>
170
+ <td class="col-right hide-mobile">${$e(e.tokenUsage)}</td>
171
+ <td class="col-right hide-mobile">${A(e.durationMs)}</td>
172
+ <td class="col-right hide-mobile">${Z(e.totalCostUsd)}</td>
173
+ </tr>`;const c=i?'<span class="score-badge score-red">Fail</span>':'<span class="score-badge score-green">Pass</span>';return`
174
+ <tr class="result-row agent-row" data-index="${t}" data-scenario="${u(n)}">
112
175
  <td class="col-expand-indent"><span class="expand-icon">▶</span></td>
113
- <td class="col-agent">${o(e.agentName)}${c}</td>
114
- <td class="col-score">${l}</td>
115
- <td class="col-right hide-mobile">${w(e.tokenUsage)}</td>
116
- <td class="col-right hide-mobile">${u(e.durationMs)}</td>
117
- <td class="col-right hide-mobile">${f(e.totalCostUsd)}</td>
118
- </tr>`}function P(e,s,t){const a=e.score?10:7,n=t?` data-scenario="${o(t)}"`:"";return`
119
- <tr class="detail-row" id="detail-${s}"${n}>
120
- <td colspan="${a}">
176
+ <td class="col-agent">${u(ne(e))}${l}${a}</td>
177
+ <td class="col-score">${c}</td>
178
+ <td class="col-right hide-mobile">${$e(e.tokenUsage)}</td>
179
+ <td class="col-right hide-mobile">${A(e.durationMs)}</td>
180
+ <td class="col-right hide-mobile">${Z(e.totalCostUsd)}</td>
181
+ </tr>`}function Gt(e,t,s){const n=e.score?10:6,r=s?` data-scenario="${u(s)}"`:"";return`
182
+ <tr class="detail-row" id="detail-${t}"${r}>
183
+ <td colspan="${n}">
121
184
  <div class="detail-panel">
122
- ${e.error?`<div class="error-banner">${o(e.error)}</div>`:""}
123
- ${e.score?B(e.score):j(e)}
185
+ ${e.error?`<div class="error-banner">${u(e.error)}</div>`:""}
186
+ ${e.score?Wt(e.score,e.durationMs):Qt(e)}
187
+ ${Kt(e)}
188
+ ${e.artifacts&&e.artifacts.length>0?Es(e.artifacts,t):""}
124
189
  </div>
125
190
  </td>
126
- </tr>`}function j(e){const s=[];return e.tokenUsage&&(s.push(`Input: ${e.tokenUsage.input.toLocaleString()}`),s.push(`Output: ${e.tokenUsage.output.toLocaleString()}`),e.tokenUsage.cacheReadInput&&s.push(`Cache: ${e.tokenUsage.cacheReadInput.toLocaleString()}`)),`
191
+ </tr>`}function Kt(e){const t=[];return e.setupOutput&&t.push(Se("Setup notes",e.setupOutput)),e.teardownOutput&&t.push(Se("Teardown notes",e.teardownOutput)),t.join("")}function Se(e,t){return`
192
+ <div class="detail-section lifecycle-notes">
193
+ <div class="section-header"><h3>${u(e)}</h3></div>
194
+ <div class="notes-body markdown-body">${Mt(t)}</div>
195
+ </div>`}function Qt(e){const t=[];return e.tokenUsage&&(t.push(`Input: ${e.tokenUsage.input.toLocaleString()}`),t.push(`Output: ${e.tokenUsage.output.toLocaleString()}`),e.tokenUsage.cacheReadInput&&t.push(`Cache: ${e.tokenUsage.cacheReadInput.toLocaleString()}`)),`
127
196
  <div class="detail-sections">
128
197
  <div class="detail-section">
129
198
  <div class="section-header"><h3>Run Details</h3></div>
130
199
  <p style="color: var(--text-secondary); font-size: 0.875rem;">
131
- Duration: ${u(e.durationMs)}
132
- ${s.length?` &middot; Tokens: ${s.join(", ")}`:""}
133
- ${e.totalCostUsd?` &middot; Cost: ${f(e.totalCostUsd)}`:""}
200
+ Duration: ${A(e.durationMs)}
201
+ ${t.length?` &middot; Tokens: ${t.join(", ")}`:""}
202
+ ${e.totalCostUsd?` &middot; Cost: ${Z(e.totalCostUsd)}`:""}
134
203
  </p>
135
204
  </div>
136
- </div>`}function B(e){return`
205
+ </div>`}function Wt(e,t){return`
137
206
  <div class="score-overview">
138
- ${v(e.axisScore,!0)}
207
+ ${z(e.axisScore,!0)}
139
208
  <div class="category-bars">
140
- ${p("Goal Achievement",e.goalAchievement.score)}
141
- ${p("Environment",e.environment.score)}
142
- ${p("Service",e.service.score)}
143
- ${p("Agent",e.agent.score)}
209
+ ${N("Goal Achievement",e.goalAchievement.score)}
210
+ ${N("Environment",e.environment.score)}
211
+ ${N("Service",e.service.score)}
212
+ ${N("Agent",e.agent.score)}
144
213
  </div>
145
214
  </div>
146
215
  <div class="detail-sections">
147
- ${e.sparseIndex?W(e.sparseIndex):""}
148
- ${F(e.goalAchievement)}
149
- ${h("Environment",e.environment)}
150
- ${h("Service",e.service)}
151
- ${h("Agent",e.agent)}
152
- ${e.sparseIndex?Q(e.sparseIndex):""}
153
- </div>`}function p(e,s){return`
216
+ ${e.sparseIndex?rs(e.sparseIndex,t):""}
217
+ ${Vt(e.goalAchievement)}
218
+ ${V("Environment",e.environment)}
219
+ ${V("Service",e.service)}
220
+ ${V("Agent",e.agent)}
221
+ ${e.sparseIndex?us(e.sparseIndex):""}
222
+ </div>`}function N(e,t){return`
154
223
  <div class="category-bar-row">
155
224
  <span class="category-bar-label">${e}</span>
156
- ${b(s)}
157
- <span class="category-bar-value">${s}</span>
158
- </div>`}function F(e){const s=e.criteria.map(U).join("");return`
225
+ ${he(t)}
226
+ <span class="category-bar-value">${t}</span>
227
+ </div>`}function Vt(e){const t=e.criteria.map(Xt).join("");return`
159
228
  <div class="detail-section">
160
229
  <div class="section-header">
161
230
  <h3>Goal Achievement</h3>
162
231
  <span class="section-score">${e.score} / 100</span>
163
232
  </div>
164
- <div class="criteria-list">${s}</div>
165
- </div>`}function U(e){const s=e.score===10,t=e.score*10,a=t>=90||t>=80?"✔":t>=70?"◐":"✗",n=t>=90?"high":t>=80?"good":t>=70?"medium":"low",i=Math.round(e.weight*100);return`
166
- <div class="${s?"criterion-item criterion-perfect":"criterion-item criterion-imperfect"}">
233
+ <div class="criteria-list">${t}</div>
234
+ </div>`}function Xt(e){const t=e.score===10,s=e.score*10,n=s>=90||s>=80?"✔":s>=70?"◐":"✗",r=s>=90?"high":s>=80?"good":s>=70?"medium":"low",i=Math.round(e.weight*100);return`
235
+ <div class="${t?"criterion-item criterion-perfect":"criterion-item criterion-imperfect"}">
167
236
  <div class="criterion-top">
168
- <span class="criterion-icon ${n}">${a}</span>
169
- <span class="criterion-name">${o(e.check)}</span>
237
+ <span class="criterion-icon ${r}">${n}</span>
238
+ <span class="criterion-name">${u(e.check)}</span>
170
239
  <span class="criterion-score">${e.score}/10</span>
171
240
  <span class="criterion-weight">${i}%</span>
172
241
  </div>
173
- <div class="criterion-bar">${b(e.score,10)}</div>
174
- ${s?"":`<div class="criterion-rationale">${o(e.rationale)}</div>`}
175
- </div>`}function h(e,s){const t=s.dimensions,a=s.audits.filter(d=>d.rationale!=="default"),n=a.length>0,i=[{label:"Success",value:t.success},{label:"Speed",value:t.speed},{label:"Relevance",value:t.relevance},{label:"Necessity",value:t.necessity}],c=i.filter(d=>d.value<100),l=n?`<div class="dimensions-grid">${i.map(d=>R(d.label,d.value)).join("")}</div>`:"",r=c.length>0?O(c,a):"";return`
242
+ <div class="criterion-bar">${he(e.score,10)}</div>
243
+ ${t?"":`<div class="criterion-rationale">${u(e.rationale)}</div>`}
244
+ </div>`}function V(e,t){const s=`<h3>${u(e)}${Jt(e)}</h3>`;if(t.interactionCount===0)return`
245
+ <div class="detail-section">
246
+ <div class="section-header">
247
+ ${s}
248
+ <span class="section-score">${t.score} / 100</span>
249
+ </div>
250
+ <div class="category-empty-state">${u(es(e))}</div>
251
+ </div>`;const n=t.dimensions,r=t.audits.filter(f=>f.rationale!=="default"),i=r.length>0,a=e==="Agent",l=e==="Agent",c=[{label:"Success",value:n.success},{label:"Speed",value:n.speed},...l?[{label:"Relevance",value:n.relevance}]:[],...a?[{label:"Necessity",value:n.necessity}]:[]],o=c.filter(f=>f.value<100),p=t.score>=100&&o.length===0,d=a&&t.necessity.rationale!=="default"?t.necessity:null,h=i?ts(c,o,r,l,p,d):"";return`
176
252
  <div class="detail-section">
177
253
  <div class="section-header">
178
- <h3>${o(e)}</h3>
179
- <span class="section-score">${s.score} / 100</span>
254
+ ${s}
255
+ <span class="section-score">${t.score} / 100</span>
180
256
  </div>
181
257
  <div class="interaction-meta">
182
- ${s.interactionCount} interaction${s.interactionCount!==1?"s":""}
183
- ${n?`&middot; ${s.auditedCount} audited`:""}
184
- </div>
185
- ${l}
186
- ${r}
187
- ${n?_(a):""}
188
- ${G(s.necessity)}
189
- </div>`}function O(e,s,t){const a=e.map(i=>`<span class="dim-tag ${E(i.value)}">${i.label}: ${i.value}</span>`).join(""),n=s.map(i=>`
190
- <div class="cat-deduction-item">
191
- <span class="cat-deduction-id">#${i.id}</span>
192
- <span class="cat-deduction-scores">${H(i)}</span>
193
- <span class="cat-deduction-rationale">${o(i.rationale)}</span>
194
- </div>`).join("");return`
195
- <div class="deductions-summary">
196
- <div class="deductions-header">Score breakdown</div>
197
- <div class="dim-tags">${a}</div>
198
- ${n}
199
- </div>`}function H(e){return[{label:"Success",value:e.success},{label:"Speed",value:e.speed},{label:"Relevance",value:e.contextRelevance}].filter(t=>t.value<1).map(t=>`<span class="dim-score-tag">${t.label}: ${m(t.value)}</span>`).join("")}function _(e){const s=e.map(K).join("");return`
200
- <div class="audits-section">
201
- <button class="audits-toggle">Show audits (${e.length})</button>
202
- <div class="audits-list">${s}</div>
203
- </div>`}function K(e){return`
204
- <div class="audit-item">
205
- <div class="audit-header">
206
- <span class="audit-id">#${e.id}</span>
207
- <span class="audit-scores">
208
- S:${m(e.success)} Sp:${m(e.speed)} R:${m(e.contextRelevance)}
209
- </span>
210
- </div>
211
- <div class="audit-rationale">${o(e.rationale)}</div>
212
- </div>`}function m(e){return(e*100).toFixed(0)}function G(e){if(e.rationale==="default")return"";const s=Math.round(e.score*100),t=e.unnecessaryIds.length>0?` &middot; Unnecessary: #${e.unnecessaryIds.join(", #")}`:"";return`
213
- <div class="necessity-section">
214
- <div class="necessity-header">
215
- <span class="necessity-label">Necessity</span>
216
- <span class="necessity-score ${S(s)}">${s}/100</span>
217
- ${t}
258
+ ${t.interactionCount} interaction${t.interactionCount!==1?"s":""}
259
+ ${i?`&middot; ${t.auditedCount} audited`:""}
218
260
  </div>
219
- <div class="necessity-rationale">${o(e.rationale)}</div>
220
- </div>`}const $=30;function W(e){const{interactions:s}=e;if(!s.some(r=>r.startMs!==null)||s.length===0)return"";const a=e.stats.wallClockMs||V(s);if(a<=0)return"";const n=J(a),i=s.length>$,c=i?s.slice(0,$):s,l=i?s.slice($):[];return`
261
+ ${h}
262
+ </div>`}function Jt(e){const t=Yt(e);return t?`<button class="info-btn" data-tooltip="${u(t)}" aria-label="What is the ${u(e)} score?" type="button">ℹ</button>`:""}function Yt(e){switch(e){case"Environment":return"Interactions with the local execution environment — filesystem reads/writes, shell commands, processes. Each call is scored on whether it succeeded and how fast it returned.";case"Service":return"Calls to external services — HTTP requests, MCP tools, third-party APIs. Each call is scored on whether it succeeded and how fast it returned.";case"Agent":return"The agent's own decisions across the run — model thinking, tool choice, and judgment. Scored on success, speed, context relevance, and whether each action was necessary.";default:return""}}function es(e){switch(e){case"Environment":return"No environment interactions (filesystem, shell, processes) in this run.";case"Service":return"No service interactions (HTTP requests, MCP tools, external APIs) in this run.";case"Agent":return"No agent decision points captured in this run.";default:return`No ${e.toLowerCase()} interactions in this run.`}}function ts(e,t,s,n,r,i){const a=b=>b.success<1||b.speed<1||n&&b.contextRelevance<1,l=s.filter(a),c=s.filter(b=>!a(b));if(r)return`
263
+ <div class="dimensions-grid">${e.map(b=>ye(b.label,b.value)).join("")}</div>`;const o=b=>`
264
+ <div class="cat-deduction-item">
265
+ <a class="cat-deduction-id interaction-link" data-interaction-id="${b.id}" title="Jump to this interaction in the transcript">Interaction #${b.id}</a>
266
+ <span class="cat-deduction-scores">${ss(b,n)}</span>
267
+ <span class="cat-deduction-rationale">${u(b.rationale)}</span>
268
+ </div>`,p=i?i.unnecessaryIds.map(b=>`<a class="interaction-link" data-interaction-id="${b}" title="Jump to this interaction in the transcript">#${b}</a>`).join(", "):"",d=i?`<div class="cat-deduction-item necessity-row">
269
+ <span class="cat-deduction-id">Necessity</span>
270
+ <span class="cat-deduction-scores">${i.unnecessaryIds.length>0?`<span class="dim-score-tag">Unnecessary: ${p}</span>`:""}</span>
271
+ <span class="cat-deduction-rationale">${u(i.rationale)}</span>
272
+ </div>`:"",h=l.map(o).join(""),f=c.map(o).join(""),m=c.length?`
273
+ <button class="audits-toggle">Show ${c.length} other passing interaction${c.length!==1?"s":""}</button>
274
+ <div class="audits-list">${f}</div>`:"",x=!!d||h.length>0||c.length>0;return`
275
+ <div class="dimensions-grid">${e.map(b=>ye(b.label,b.value)).join("")}</div>
276
+ ${x?`<div class="deductions-summary">
277
+ <div class="deductions-header">Score breakdown</div>
278
+ ${d}
279
+ ${h}
280
+ ${m}
281
+ </div>`:""}`}function ss(e,t){return[{label:"Success",value:e.success},{label:"Speed",value:e.speed},...t?[{label:"Relevance",value:e.contextRelevance}]:[]].filter(n=>n.value<1).map(n=>`<span class="dim-score-tag">${n.label}: ${ns(n.value)}</span>`).join("")}function ns(e){return(e*100).toFixed(0)}const X=30;function rs(e,t){const{interactions:s}=e;if(!s.some(d=>d.startMs!==null)||s.length===0)return"";const r=t>0?t:e.stats.wallClockMs||cs(s);if(r<=0)return"";const i=ds(r),a=s.length>X,l=a?s.slice(0,X):s,c=a?s.slice(X):[],o=e.stats.startupMs&&e.stats.startupMs>0?Re("agent startup",0,e.stats.startupMs,r):"",p=e.stats.shutdownMs&&e.stats.shutdownMs>0?Re("agent shutdown",r-e.stats.shutdownMs,e.stats.shutdownMs,r):"";return`
221
282
  <div class="detail-section">
222
283
  <div class="section-header">
223
284
  <h3>Timeline</h3>
224
- <span class="section-score">${u(a)} &middot; ${s.length} interactions</span>
285
+ <span class="section-score">${A(r)} &middot; ${s.length} interactions</span>
225
286
  </div>
226
287
  <div class="waterfall">
227
288
  <div class="waterfall-header">
228
289
  <div class="wf-label-col"></div>
229
290
  <div class="wf-timeline-col">
230
291
  <div class="wf-ticks">
231
- ${n.map(r=>`<span class="wf-tick" style="left: ${r.pct.toFixed(2)}%">${r.label}</span>`).join("")}
292
+ ${i.map(d=>`<span class="wf-tick" style="left: ${d.pct.toFixed(2)}%">${d.label}</span>`).join("")}
232
293
  </div>
233
294
  </div>
234
295
  <div class="wf-dur-col">Duration</div>
235
296
  </div>
236
297
  <div class="waterfall-body">
237
- ${c.map(r=>y(r,a)).join("")}
238
- ${i?`<div class="wf-overflow" style="display:none">${l.map(r=>y(r,a)).join("")}</div>`:""}
298
+ ${o}
299
+ ${l.map(d=>Ae(d,r)).join("")}
300
+ ${a?`<div class="wf-overflow" style="display:none">${c.map(d=>Ae(d,r)).join("")}${p}</div>`:p}
239
301
  </div>
240
- ${i?`<button class="wf-show-all">Show all ${s.length} interactions</button>`:""}
302
+ ${a?`<button class="wf-show-all">Show all ${s.length} interactions</button>`:""}
241
303
  <div class="wf-legend">
242
304
  <span class="wf-legend-item"><span class="wf-legend-dot wf-env"></span>Environment</span>
243
305
  <span class="wf-legend-item"><span class="wf-legend-dot wf-svc"></span>Service</span>
244
306
  <span class="wf-legend-item"><span class="wf-legend-dot wf-agent"></span>Agent</span>
245
307
  </div>
246
308
  </div>
247
- </div>`}function y(e,s){const t=e.startMs??0,a=e.durationMs??0,n=t/s*100,i=Math.max(.4,a/s*100),c=X(e),l=e.hasError?" wf-bar-error":"",r=e.toolName??"thinking",d=e.categories.includes("environment")?"env":e.categories.includes("service")?"svc":"agent",k=[`#${e.id} ${r} (${d})`,e.durationMs!==null?`Duration: ${u(e.durationMs)}`:null,`Context: ${z(e.contextBytes)}`,e.hasError?"ERROR":null].filter(Boolean).join(`
248
- `);return`
249
- <div class="wf-row ${c}">
309
+ </div>`}function Ae(e,t){const s=e.startMs??0,n=e.durationMs??0,r=s/t*100,i=Math.max(.4,n/t*100),a=ls(e),l=e.hasError?" wf-bar-error":"",c=e.toolName??"thinking",o=e.categories.includes("environment")?"env":e.categories.includes("service")?"svc":"agent";return`
310
+ <div class="wf-row ${a}">
311
+ <div class="wf-label-col">
312
+ <a class="wf-id interaction-link" data-interaction-id="${e.id}" title="Jump to this interaction in the transcript">#${e.id}</a>
313
+ <span class="wf-cat">${o}</span>
314
+ <span class="wf-tool">${u(c)}</span>
315
+ </div>
316
+ <div class="wf-timeline-col">
317
+ <div class="wf-track">
318
+ <div class="wf-bar${l}${r>60?" wf-tip-right":""}" style="left:${r.toFixed(2)}%;width:${i.toFixed(2)}%">
319
+ ${is(e,c,o)}
320
+ </div>
321
+ </div>
322
+ </div>
323
+ <div class="wf-dur-col">${e.durationMs!==null?A(e.durationMs):"—"}</div>
324
+ </div>`}function is(e,t,s){const n=[];e.durationMs!==null&&n.push(`<span><strong>Duration</strong> ${u(A(e.durationMs))}</span>`),n.push(`<span><strong>Context</strong> ${u(os(e.contextBytes))}</span>`),e.startMs!==null&&n.push(`<span><strong>Start</strong> +${u(A(e.startMs))}</span>`),e.hasError&&n.push('<span class="wf-tooltip-error">Error</span>');const r=e.content?as(e.content,280):"";return`
325
+ <div class="wf-tooltip">
326
+ <div class="wf-tooltip-header">
327
+ <span class="wf-tooltip-id">#${e.id}</span>
328
+ <span class="wf-tooltip-tool">${u(t)}</span>
329
+ <span class="wf-tooltip-cat wf-tooltip-cat-${u(s)}">${u(s)}</span>
330
+ </div>
331
+ <div class="wf-tooltip-meta">${n.join("")}</div>
332
+ ${r?`<pre class="wf-tooltip-snippet">${u(r)}</pre>`:""}
333
+ </div>`}function as(e,t){const s=e.trim();return s.length<=t?s:s.slice(0,t-1)+"…"}function Re(e,t,s,n){const r=t/n*100,i=Math.max(.4,s/n*100),a=`${e} — ${A(s)}`;return`
334
+ <div class="wf-row wf-lifecycle">
250
335
  <div class="wf-label-col">
251
- <span class="wf-id">#${e.id}</span>
252
- <span class="wf-cat">${d}</span>
253
- <span class="wf-tool">${o(r)}</span>
336
+ <span class="wf-id">—</span>
337
+ <span class="wf-cat">sys</span>
338
+ <span class="wf-tool">${u(e)}</span>
254
339
  </div>
255
340
  <div class="wf-timeline-col">
256
341
  <div class="wf-track">
257
- <div class="wf-bar${l}" style="left:${n.toFixed(2)}%;width:${i.toFixed(2)}%" title="${o(k)}"></div>
342
+ <div class="wf-bar" style="left:${r.toFixed(2)}%;width:${i.toFixed(2)}%" title="${u(a)}"></div>
258
343
  </div>
259
344
  </div>
260
- <div class="wf-dur-col">${e.durationMs!==null?u(e.durationMs):"—"}</div>
261
- </div>`}function X(e){return e.categories.includes("environment")?"wf-env":e.categories.includes("service")?"wf-svc":"wf-agent"}function z(e){return e<1024?`${e}B`:`${(e/1024).toFixed(1)}KB`}function V(e){let s=0;for(const t of e)if(t.startMs!==null){const a=t.startMs+(t.durationMs??0);a>s&&(s=a)}return s}function J(e){const s=[50,100,200,250,500,1e3,2e3,2500,5e3,1e4,15e3,3e4,6e4,12e4,3e5];let t=s[s.length-1];for(const n of s){const i=Math.floor(e/n);if(i>=3&&i<=8){t=n;break}}const a=[];for(let n=0;n<=e;n+=t)a.push({pct:n/e*100,label:u(n)});return a.length===0&&a.push({pct:0,label:"0s"}),a}function Q(e){const s=e.interactions.some(a=>a.content),t=e.lines.map((a,n)=>{const i=e.interactions[n];let c="cat-agent";i?i.categories.includes("environment")?c="cat-env":i.categories.includes("service")&&(c="cat-svc"):a.includes(" env ")?c="cat-env":(a.includes(" service ")||a.includes(" svc "))&&(c="cat-svc");const l=i?.content?" sparse-line-expandable":"",r=i?.content?`<div class="sparse-line-content"><pre>${o(i.content)}</pre></div>`:"";return`<div class="sparse-line ${c}${l}">${o(a)}${r}</div>`}).join("");return`
345
+ <div class="wf-dur-col">${A(s)}</div>
346
+ </div>`}function ls(e){return e.categories.includes("environment")?"wf-env":e.categories.includes("service")?"wf-svc":"wf-agent"}function os(e){return e<1024?`${e}B`:`${(e/1024).toFixed(1)}KB`}function cs(e){let t=0;for(const s of e)if(s.startMs!==null){const n=s.startMs+(s.durationMs??0);n>t&&(t=n)}return t}function ds(e){const t=[50,100,200,250,500,1e3,2e3,2500,5e3,1e4,15e3,3e4,6e4,12e4,3e5];let s=t[t.length-1];for(const r of t){const i=Math.floor(e/r);if(i>=3&&i<=8){s=r;break}}const n=[];for(let r=0;r<=e;r+=s)n.push({pct:r/e*100,label:A(r)});return n.length===0&&n.push({pct:0,label:"0s"}),n}function us(e){const t=e.interactions.some(r=>r.content),s=e.lines.map((r,i)=>{const a=e.interactions[i];let l="cat-agent";a?a.categories.includes("environment")?l="cat-env":a.categories.includes("service")&&(l="cat-svc"):r.includes(" env ")?l="cat-env":(r.includes(" service ")||r.includes(" svc "))&&(l="cat-svc");const c=a?.content?" sparse-line-expandable":"",o=a?.content?`<div class="sparse-line-content"><pre>${u(a.content)}</pre></div>`:"",p=a?` data-interaction-id="${a.id}"`:"";return`<div class="sparse-line ${l}${c}"${p}>${u(r)}${o}</div>`}).join("");return`
262
347
  <div class="detail-section">
263
348
  <div class="section-header">
264
- <h3>Transcript</h3>
349
+ <h3>Transcript of agent interactions<button class="info-btn" data-tooltip="${u("A condensed, ordered log of every tool call, model response, and decision the agent made during this run, classified as Environment, Service, or Agent. Each numbered line corresponds to the Interaction #N references in the score breakdowns above.")}" aria-label="What is this?" type="button">ℹ</button></h3>
265
350
  <span class="section-score">${e.stats.totalInteractions} interactions</span>
266
351
  </div>
267
352
  <div class="sparse-index-section">
268
353
  <button class="sparse-index-toggle">Show transcript</button>
269
- ${s?'<button class="sparse-expand-all">Expand all</button>':""}
270
- <div class="sparse-index-content">${t}</div>
354
+ ${t?'<button class="sparse-expand-all">Expand all</button>':""}
355
+ <div class="sparse-index-content">${s}</div>
271
356
  </div>
272
- </div>`}function Y(e){const s=e.map((a,n)=>a.prompt?Z(a,n):"").join(""),t=e.map((a,n)=>a.error?te(a,n):"").join("");return s+t}function Z(e,s){return`
273
- <div class="modal-backdrop" data-modal-index="${s}">
357
+ </div>`}function ps(e){const t=e.map((n,r)=>!n.prompt&&!n.agentConfig&&!n.resolvedConfig?"":hs(n,r)).join(""),s=e.map((n,r)=>n.error?ws(n,r):"").join("");return t+s}function hs(e,t){const s=G(e.scenarioKey),n=De(e.scenarioName),r=e.resolvedConfig;return`
358
+ <div class="modal-backdrop" data-modal-index="${t}">
274
359
  <div class="modal">
275
360
  <div class="modal-header">
276
361
  <div>
277
- <h3>${o(e.scenarioName)}</h3>
278
- <span class="modal-subtitle">${o(e.scenarioKey)}</span>
362
+ <h3>${u(n)}</h3>
363
+ ${s?`<span class="modal-subtitle">Variant: ${u(s)}</span>`:""}
279
364
  </div>
280
365
  <button class="modal-close">&times;</button>
281
366
  </div>
282
367
  <div class="modal-body">
283
- ${ee(e.prompt)}
284
- ${e.rubric?se(e.rubric):""}
368
+ ${e.agentConfig?fs(e.agentConfig,e.agentName):""}
369
+ ${r?gs(r.limits):""}
370
+ ${r?.skills?.length?ms(r.skills):""}
371
+ ${r?.mcpServers&&Object.keys(r.mcpServers).length?ks(r.mcpServers):""}
372
+ ${e.prompt?bs(e.prompt):""}
373
+ ${e.rubric?vs(e.rubric):""}
374
+ ${r?.setup?.length?Ee("Setup",r.setup):""}
375
+ ${r?.teardown?.length?Ee("Teardown",r.teardown):""}
285
376
  </div>
286
377
  </div>
287
- </div>`}function ee(e){return`
378
+ </div>`}function fs(e,t){const s=[],n=(r,i)=>{s.push(`
379
+ <tr>
380
+ <td class="modal-config-label">${u(r)}</td>
381
+ <td><code>${u(i)}</code></td>
382
+ </tr>`)};if(typeof e.command=="string"&&n("Command",e.command),typeof e.model=="string"&&n("Model",e.model),Array.isArray(e.skills)&&e.skills.length>0&&n("Skills",e.skills.map(r=>String(r)).join(", ")),e.flags&&typeof e.flags=="object"){const r=Object.entries(e.flags);if(r.length>0){const i=r.map(([a,l])=>l===!0?`--${a}`:l===!1?`--no-${a}`:`--${a}=${l}`).join(" ");n("Flags",i)}}return`
383
+ <div class="modal-section">
384
+ <h4>Agent: <code class="modal-section-value">${u(t)}</code></h4>
385
+ ${s.length>0?`<table class="modal-config-table"><tbody>${s.join("")}</tbody></table>`:""}
386
+ </div>`}function gs(e){if(!e)return"";const t=[];if(e.time_minutes!==void 0){const s=e.time_minutes;t.push(`<code>${Number.isInteger(s)?s:s.toFixed(1)} min</code> wall-clock`)}return e.tokens!==void 0&&t.push(`<code>${e.tokens.toLocaleString()}</code> tokens`),t.length===0?"":`
387
+ <div class="modal-section">
388
+ <h4>Limits</h4>
389
+ <p class="modal-config-line">${t.join(" · ")}</p>
390
+ </div>`}function ms(e){return`
391
+ <div class="modal-section">
392
+ <h4>Skills</h4>
393
+ <ul class="modal-config-list">${e.map(s=>`<li><code>${u(s)}</code></li>`).join("")}</ul>
394
+ </div>`}function Ee(e,t){const s=t.map(n=>`
395
+ <li>
396
+ <span class="modal-config-label-inline">${u(n.action)}</span>
397
+ <code>${u(n.command)}</code>
398
+ </li>`).join("");return`
399
+ <div class="modal-section">
400
+ <h4>${u(e)}</h4>
401
+ <ul class="modal-config-list">${s}</ul>
402
+ </div>`}function ks(e){return`
403
+ <div class="modal-section">
404
+ <h4>MCP servers</h4>
405
+ <ul class="modal-config-list">${Object.entries(e).map(([s,n])=>{const r="url"in n&&n.url?`<code>${u(n.url)}</code>`:"command"in n&&n.command?`<code>${u([n.command,...n.args??[]].join(" "))}</code>`:"";return`<li><span class="modal-config-label-inline">${u(s)}</span> ${r}</li>`}).join("")}</ul>
406
+ </div>`}function bs(e){return`
288
407
  <div class="modal-section">
289
408
  <h4>Prompt</h4>
290
- <pre class="modal-prompt">${o(e)}</pre>
291
- </div>`}function se(e){return typeof e=="string"?`
409
+ <pre class="modal-prompt">${u(e)}</pre>
410
+ </div>`}function vs(e){return typeof e=="string"?`
292
411
  <div class="modal-section">
293
412
  <h4>Rubric</h4>
294
- <pre class="modal-prompt">${o(e)}</pre>
413
+ <pre class="modal-prompt">${u(e)}</pre>
295
414
  </div>`:`
296
415
  <div class="modal-section">
297
416
  <h4>Rubric</h4>
298
417
  <table class="modal-rubric-table">
299
418
  <thead><tr><th>Check</th><th>Weight</th></tr></thead>
300
- <tbody>${e.map(t=>`
419
+ <tbody>${e.map(s=>`
301
420
  <tr>
302
- <td>${o(t.check)}</td>
303
- <td class="modal-rubric-weight">${Math.round(t.weight*100)}%</td>
421
+ <td>${u(s.check)}</td>
422
+ <td class="modal-rubric-weight">${Math.round(s.weight*100)}%</td>
304
423
  </tr>`).join("")}</tbody>
305
424
  </table>
306
- </div>`}function te(e,s){return`
307
- <div class="modal-backdrop" data-error-index="${s}">
425
+ </div>`}function ws(e,t){return`
426
+ <div class="modal-backdrop" data-error-index="${t}">
308
427
  <div class="modal">
309
428
  <div class="modal-header">
310
429
  <div>
311
- <h3>${o(e.agentName)}</h3>
312
- <span class="modal-subtitle">${o(e.scenarioName)}</span>
430
+ <h3>${u(ne(e))}</h3>
431
+ <span class="modal-subtitle">${u(e.scenarioName)}</span>
313
432
  </div>
314
433
  <button class="modal-close">&times;</button>
315
434
  </div>
316
435
  <div class="modal-body">
317
436
  <div class="modal-section">
318
437
  <h4>Error</h4>
319
- <pre class="modal-prompt modal-error-text">${o(e.error)}</pre>
438
+ <pre class="modal-prompt modal-error-text">${u(e.error)}</pre>
439
+ </div>
440
+ </div>
441
+ </div>
442
+ </div>`}const xs=[[/quota|rate.?limit|429|too many requests/i,"Rate limit / quota exceeded"],[/auth|unauthorized|401|403|api.?key|token/i,"Authentication error"],[/timeout|timed?\s*out|ETIMEDOUT/i,"Timeout"],[/ECONNREFUSED|ENOTFOUND|network|socket/i,"Network error"],[/not found|command not found|ENOENT/i,"CLI not found"],[/spawn|EPERM|EACCES/i,"Permission error"]];function $s(e){for(const[t,s]of xs)if(t.test(e))return s;return e.length>80?e.slice(0,77)+"...":e}function ys(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function Ss(e){const t={type:"dir",name:"",children:[]};for(let n=0;n<e.length;n++){const r=e[n].path.split("/").filter(Boolean);let i=t;for(let a=0;a<r.length-1;a++){const l=r[a];let c=i.children.find(o=>o.type==="dir"&&o.name===l);c||(c={type:"dir",name:l,children:[]},i.children.push(c)),i=c}i.children.push({type:"file",name:r[r.length-1],size:e[n].size,mimeType:e[n].mimeType,artifactIndex:n})}const s=n=>{n.children.sort((r,i)=>r.type!==i.type?r.type==="dir"?-1:1:r.name.localeCompare(i.name));for(const r of n.children)r.type==="dir"&&s(r)};return s(t),t}const As='<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>',Fe='<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v12m0 0l-5-5m5 5l5-5M5 20h14"/></svg>';function He(e,t){const s=`padding-left:${8+t*16}px;`;if(e.type==="file"){const r=u(e.name);return`
443
+ <li class="art-tree-file">
444
+ <div class="art-tree-row" style="${s}">
445
+ <span class="art-tree-name" title="${r}">${r}</span>
446
+ <span class="art-tree-size">${ys(e.size)}</span>
447
+ <button class="art-tree-eye" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Preview ${r}" title="Preview">${As}</button>
448
+ <button class="art-tree-download" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Download ${r}" title="Download">${Fe}</button>
449
+ </div>
450
+ </li>`}const n=e.children.map(r=>He(r,t+1)).join("");return`
451
+ <li class="art-tree-dir collapsed">
452
+ <button class="art-tree-folder-toggle" type="button" style="${s}" aria-expanded="false">
453
+ <span class="art-tree-chevron" aria-hidden="true">▸</span>
454
+ <span class="art-tree-icon art-tree-dir-icon" aria-hidden="true">◇</span>
455
+ <span class="art-tree-name">${u(e.name)}</span>
456
+ </button>
457
+ <ul class="art-tree-children">${n}</ul>
458
+ </li>`}function Rs(e){return`
459
+ <div class="modal-backdrop artifact-modal" data-artifact-modal-key="${e}">
460
+ <div class="modal artifact-modal-content">
461
+ <div class="modal-header">
462
+ <h3>
463
+ <span class="artifact-modal-title">Artifact</span>
464
+ <span class="modal-subtitle artifact-modal-meta"></span>
465
+ </h3>
466
+ <button class="modal-close" type="button" aria-label="Close">×</button>
467
+ </div>
468
+ <div class="modal-body">
469
+ <div class="artifact-modal-toolbar">
470
+ <button class="artifact-modal-download" type="button" data-artifacts-key="${e}">${Fe}<span>Download</span></button>
320
471
  </div>
472
+ <div class="artifact-modal-preview" data-artifacts-key="${e}"></div>
473
+ </div>
474
+ </div>
475
+ </div>`}function Es(e,t){const n=Ss(e).children.map(i=>He(i,0)).join(""),r=JSON.stringify(e).replace(/</g,"\\u003c").replace(/>/g,"\\u003e");return`
476
+ <div class="detail-section artifacts-section" data-artifacts-key="${t}">
477
+ <div class="section-header">
478
+ <h3>Artifacts <span class="artifacts-count">(${e.length})</span></h3>
479
+ <div class="artifacts-actions">
480
+ <button class="artifacts-toggle" data-artifacts-key="${t}" type="button" aria-expanded="false">Show artifacts</button>
481
+ <button class="artifacts-download-all" data-artifacts-key="${t}" type="button">Download all (.zip)</button>
321
482
  </div>
322
483
  </div>
323
- </div>`}const ae=[[/quota|rate.?limit|429|too many requests/i,"Rate limit / quota exceeded"],[/auth|unauthorized|401|403|api.?key|token/i,"Authentication error"],[/timeout|timed?\s*out|ETIMEDOUT/i,"Timeout"],[/ECONNREFUSED|ENOTFOUND|network|socket/i,"Network error"],[/not found|command not found|ENOENT/i,"CLI not found"],[/spawn|EPERM|EACCES/i,"Permission error"]];function ne(e){for(const[s,t]of ae)if(s.test(e))return t;return e.length>80?e.slice(0,77)+"...":e}function ie(){document.querySelectorAll(".scenario-header-row").forEach(e=>{e.addEventListener("click",s=>{if(s.target.closest(".info-btn"))return;const t=e.dataset.scenario;if(!t)return;const a=e.classList.contains("expanded"),n=document.querySelectorAll(`.agent-row[data-scenario="${t}"]`),i=document.querySelectorAll(`.detail-row[data-scenario="${t}"]`);a?(e.classList.remove("expanded"),n.forEach(c=>c.classList.add("scenario-collapsed")),i.forEach(c=>{c.classList.remove("visible"),c.classList.add("scenario-collapsed");const l=c.id.replace("detail-","");document.querySelector(`.result-row[data-index="${l}"]`)?.classList.remove("expanded")})):(e.classList.add("expanded"),n.forEach(c=>c.classList.remove("scenario-collapsed")),i.forEach(c=>c.classList.remove("scenario-collapsed")))})}),document.querySelectorAll(".result-row").forEach(e=>{e.addEventListener("click",()=>{if(e.classList.contains("scenario-collapsed"))return;const s=e.dataset.index;if(s===void 0)return;const t=document.getElementById(`detail-${s}`);if(!t)return;const a=e.classList.contains("expanded");document.querySelectorAll(".result-row").forEach(n=>{n.classList.remove("expanded")}),document.querySelectorAll(".detail-row").forEach(n=>{n.classList.remove("visible")}),a||(e.classList.add("expanded"),t.classList.add("visible"))})}),document.querySelectorAll(".audits-toggle").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation();const t=e.closest(".audits-section");if(!t)return;const a=t.querySelector(".audits-list");if(!a)return;const n=a.classList.contains("visible");a.classList.toggle("visible"),e.textContent=n?e.textContent.replace("Hide","Show"):e.textContent.replace("Show","Hide")})}),document.querySelectorAll(".wf-show-all").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation();const t=e.closest(".waterfall");if(!t)return;const a=t.querySelector(".wf-overflow");a&&(a.style.display="block",e.style.display="none")})}),document.querySelectorAll(".info-btn").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation();const t=e.dataset.modalIndex;if(t===void 0)return;const a=document.querySelector(`.modal-backdrop[data-modal-index="${t}"]`);a&&a.classList.add("visible")})}),document.querySelectorAll(".error-btn").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation();const t=e.dataset.errorIndex;if(t===void 0)return;const a=document.querySelector(`.modal-backdrop[data-error-index="${t}"]`);a&&a.classList.add("visible")})}),document.querySelectorAll(".modal-backdrop").forEach(e=>{e.addEventListener("click",t=>{t.target===e&&e.classList.remove("visible")});const s=e.querySelector(".modal-close");s&&s.addEventListener("click",()=>e.classList.remove("visible"))}),document.addEventListener("keydown",e=>{e.key==="Escape"&&document.querySelectorAll(".modal-backdrop.visible").forEach(s=>s.classList.remove("visible"))}),document.querySelectorAll(".sparse-index-toggle").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation();const t=e.closest(".sparse-index-section");if(!t)return;const a=t.querySelector(".sparse-index-content");if(!a)return;const n=a.classList.contains("visible");a.classList.toggle("visible"),e.textContent=n?"Show transcript":"Hide transcript"})}),document.querySelectorAll(".sparse-line-expandable").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation(),e.classList.toggle("expanded")})}),document.querySelectorAll(".sparse-expand-all").forEach(e=>{e.addEventListener("click",s=>{s.stopPropagation();const t=e.closest(".sparse-index-section");if(!t)return;const a=t.querySelectorAll(".sparse-line-expandable"),n=Array.from(a).every(i=>i.classList.contains("expanded"));a.forEach(i=>{n?i.classList.remove("expanded"):i.classList.add("expanded")}),e.textContent=n?"Expand all":"Collapse all"})})}function x(e){const s=document.getElementById("app");s&&(s.innerHTML=M(e),document.title=`AXIS Report — ${o(e.reportId)}`,ie())}const oe=document.getElementById("axis-data"),g=oe?.textContent?.trim();if(g&&g!=="__AXIS_REPORT_DATA__")try{x(JSON.parse(g))}catch{const s=document.getElementById("app");s&&(s.innerHTML='<div class="error-banner">Failed to parse report data.</div>')}else fetch("/mock-data.json").then(e=>e.json()).then(e=>x(e)).catch(e=>{const s=document.getElementById("app");s&&(s.innerHTML=`<div class="error-banner">Failed to load mock data: ${e.message}</div>`)});</script> </body> </html>
484
+ <ul class="art-tree-root" data-artifacts-key="${t}" hidden>${n}</ul>
485
+ <script type="application/json" class="artifacts-data" data-artifacts-key="${t}">${r}<\/script>
486
+ ${Rs(t)}
487
+ </div>`}function Te(){const e=document.querySelector(".results-table thead tr");if(!e)return;const t=Array.from(e.cells).filter(s=>s.offsetParent!==null||s.getClientRects().length>0).length;t!==0&&document.querySelectorAll(".detail-row > td[colspan]").forEach(s=>{s.colSpan=t})}function Ts(){Te(),window.addEventListener("resize",Te),document.querySelectorAll(".scenario-header-row").forEach(e=>{e.addEventListener("click",t=>{if(t.target.closest(".info-btn"))return;const s=e.dataset.scenario;if(!s)return;const n=e.classList.contains("expanded"),r=document.querySelectorAll(`.agent-row[data-scenario="${s}"]`),i=document.querySelectorAll(`.detail-row[data-scenario="${s}"]`);n?(e.classList.remove("expanded"),r.forEach(a=>a.classList.add("scenario-collapsed")),i.forEach(a=>{a.classList.remove("visible"),a.classList.add("scenario-collapsed");const l=a.id.replace("detail-","");document.querySelector(`.result-row[data-index="${l}"]`)?.classList.remove("expanded")})):(e.classList.add("expanded"),r.forEach(a=>a.classList.remove("scenario-collapsed")),i.forEach(a=>a.classList.remove("scenario-collapsed")))})}),document.querySelectorAll(".result-row").forEach(e=>{e.addEventListener("click",()=>{if(e.classList.contains("scenario-collapsed"))return;const t=e.dataset.index;if(t===void 0)return;const s=document.getElementById(`detail-${t}`);if(!s)return;const n=e.classList.contains("expanded");document.querySelectorAll(".result-row").forEach(r=>{r.classList.remove("expanded")}),document.querySelectorAll(".detail-row").forEach(r=>{r.classList.remove("visible")}),n||(e.classList.add("expanded"),s.classList.add("visible"))})}),document.querySelectorAll(".audits-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.nextElementSibling?.classList.contains("audits-list")?e.nextElementSibling:e.parentElement?.querySelector(".audits-list")??null;if(!s)return;const n=s.classList.contains("visible");s.classList.toggle("visible"),e.textContent=n?e.textContent.replace("Hide","Show"):e.textContent.replace("Show","Hide")})}),document.querySelectorAll(".wf-show-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".waterfall");if(!s)return;const n=s.querySelector(".wf-overflow");n&&(n.style.display="block",e.style.display="none")})}),document.querySelectorAll(".info-btn").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.modalIndex;if(s===void 0)return;const n=document.querySelector(`.modal-backdrop[data-modal-index="${s}"]`);n&&n.classList.add("visible")})}),document.querySelectorAll(".error-btn").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.errorIndex;if(s===void 0)return;const n=document.querySelector(`.modal-backdrop[data-error-index="${s}"]`);n&&n.classList.add("visible")})}),document.querySelectorAll(".modal-backdrop").forEach(e=>{e.addEventListener("click",s=>{s.target===e&&e.classList.remove("visible")});const t=e.querySelector(".modal-close");t&&t.addEventListener("click",()=>e.classList.remove("visible"))}),document.addEventListener("keydown",e=>{e.key==="Escape"&&document.querySelectorAll(".modal-backdrop.visible").forEach(t=>t.classList.remove("visible"))}),document.querySelectorAll(".interaction-link[data-interaction-id]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation(),t.preventDefault();const s=e.dataset.interactionId;if(!s)return;const n=e.closest(".detail-panel");if(!n)return;const r=n.querySelector(`.sparse-line[data-interaction-id="${CSS.escape(s)}"]`);if(!r)return;const i=n.querySelector(".sparse-index-content"),a=n.querySelector(".sparse-index-toggle");i&&!i.classList.contains("visible")&&(i.classList.add("visible"),a&&(a.textContent="Hide transcript")),r.scrollIntoView({behavior:"smooth",block:"center"}),r.classList.remove("interaction-flash"),r.offsetWidth,r.classList.add("interaction-flash")})}),document.querySelectorAll(".sparse-index-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".sparse-index-section");if(!s)return;const n=s.querySelector(".sparse-index-content");if(!n)return;const r=n.classList.contains("visible");n.classList.toggle("visible"),e.textContent=r?"Show transcript":"Hide transcript"})}),document.querySelectorAll(".sparse-line-expandable").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation(),e.classList.toggle("expanded")})}),document.querySelectorAll(".sparse-expand-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".sparse-index-section");if(!s)return;const n=s.querySelectorAll(".sparse-line-expandable"),r=Array.from(n).every(i=>i.classList.contains("expanded"));n.forEach(i=>{r?i.classList.remove("expanded"):i.classList.add("expanded")}),e.textContent=r?"Expand all":"Collapse all"})}),Ms()}function D(e){const t=document.querySelector(`script.artifacts-data[data-artifacts-key="${CSS.escape(e)}"]`);if(!t?.textContent)return null;try{return JSON.parse(t.textContent)}catch{return null}}function fe(e){const t=atob(e),s=new Uint8Array(t.length);for(let n=0;n<t.length;n++)s[n]=t.charCodeAt(n);return s}function Ze(e,t){const s=URL.createObjectURL(e),n=document.createElement("a");n.href=s,n.download=t,document.body.appendChild(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(s),0)}function Ls(e){const t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function J(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Cs(e){return e.startsWith("text/")?!0:e==="application/json"||e==="application/x-ndjson"||e==="application/yaml"||e==="application/xml"||e==="application/sql"||e==="application/toml"}function Is(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function Le(e){const t=fe(e.content),s=new Blob([new Uint8Array(t)],{type:e.mimeType});Ze(s,Ls(e.path))}function zs(e,t){const s=fe(e.content);if(e.mimeType.startsWith("image/")){const n=new Blob([new Uint8Array(s)],{type:e.mimeType}),r=URL.createObjectURL(n);t.innerHTML=`<img class="artifact-image" alt="${J(e.path)}" src="${r}" />`;return}if(Cs(e.mimeType)){let n;try{n=new TextDecoder("utf-8",{fatal:!1}).decode(s)}catch{n=""}t.innerHTML=`<pre class="artifact-text">${J(n)}</pre>`;return}t.innerHTML=`
488
+ <div class="artifact-not-previewable">
489
+ <p>This file type can’t be previewed inline.</p>
490
+ <p class="artifact-not-previewable-meta">${J(e.mimeType)}</p>
491
+ </div>`}function Ps(e,t,s){const n=D(t);if(!n||!n[s])return;const r=n[s],i=e.querySelector(`.artifact-modal[data-artifact-modal-key="${CSS.escape(t)}"]`);if(!i)return;const a=i.querySelector(".artifact-modal-title"),l=i.querySelector(".artifact-modal-meta"),c=i.querySelector(".artifact-modal-preview"),o=i.querySelector(".artifact-modal-download");!a||!l||!c||(a.textContent=r.path,l.textContent=`${r.mimeType} · ${Is(r.size)}`,zs(r,c),o&&(o.dataset.artifactIndex=String(s)),i.classList.add("visible"))}function Ms(){document.querySelectorAll(".artifacts-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey;if(!s)return;const n=document.querySelector(`.art-tree-root[data-artifacts-key="${CSS.escape(s)}"]`);if(!n)return;const r=n.hidden;n.hidden=!r,e.textContent=r?"Hide artifacts":"Show artifacts",e.setAttribute("aria-expanded",r?"true":"false")})}),document.querySelectorAll(".art-tree-folder-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".art-tree-dir");if(!s)return;const n=s.classList.toggle("collapsed");e.setAttribute("aria-expanded",n?"false":"true")})}),document.querySelectorAll(".art-tree-eye").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".artifacts-section");if(!s)return;const n=s.dataset.artifactsKey;if(!n)return;const r=e.dataset.artifactIndex;r!==void 0&&Ps(s,n,Number(r))})}),document.querySelectorAll(".art-tree-download").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".artifacts-section");if(!s)return;const n=s.dataset.artifactsKey;if(!n)return;const r=e.dataset.artifactIndex;if(r===void 0)return;const i=D(n);if(!i)return;const a=i[Number(r)];a&&Le(a)})}),document.querySelectorAll(".artifact-modal-download").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey,n=e.dataset.artifactIndex;if(!s||n===void 0)return;const r=D(s);if(!r)return;const i=r[Number(n)];i&&Le(i)})}),document.querySelectorAll(".artifacts-download-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey;if(!s)return;const n=D(s);if(!n||n.length===0)return;const r=n.map(l=>({path:l.path,bytes:fe(l.content)})),i=qs(r),a=new Blob([new Uint8Array(i)],{type:"application/zip"});Ze(a,`artifacts-${s}.zip`)})})}function qs(e){const t=new TextEncoder,s=[],n=[];let r=0;const i=_s(new Date);for(const f of e){const m=t.encode(f.path),x=Us(f.bytes),b=f.bytes.length,T=new Uint8Array(30+m.length),$=new DataView(T.buffer);$.setUint32(0,67324752,!0),$.setUint16(4,20,!0),$.setUint16(6,0,!0),$.setUint16(8,0,!0),$.setUint16(10,i.time,!0),$.setUint16(12,i.date,!0),$.setUint32(14,x,!0),$.setUint32(18,b,!0),$.setUint32(22,b,!0),$.setUint16(26,m.length,!0),$.setUint16(28,0,!0),T.set(m,30),s.push(T,f.bytes);const M=new Uint8Array(46+m.length),v=new DataView(M.buffer);v.setUint32(0,33639248,!0),v.setUint16(4,20,!0),v.setUint16(6,20,!0),v.setUint16(8,0,!0),v.setUint16(10,0,!0),v.setUint16(12,i.time,!0),v.setUint16(14,i.date,!0),v.setUint32(16,x,!0),v.setUint32(20,b,!0),v.setUint32(24,b,!0),v.setUint16(28,m.length,!0),v.setUint16(30,0,!0),v.setUint16(32,0,!0),v.setUint16(34,0,!0),v.setUint16(36,0,!0),v.setUint32(38,0,!0),v.setUint32(42,r,!0),M.set(m,46),n.push(M),r+=T.length+b}const a=r;let l=0;for(const f of n)l+=f.length;const c=new Uint8Array(22),o=new DataView(c.buffer);o.setUint32(0,101010256,!0),o.setUint16(4,0,!0),o.setUint16(6,0,!0),o.setUint16(8,e.length,!0),o.setUint16(10,e.length,!0),o.setUint32(12,l,!0),o.setUint32(16,a,!0),o.setUint16(20,0,!0);const p=a+l+c.length,d=new Uint8Array(p);let h=0;for(const f of s)d.set(f,h),h+=f.length;for(const f of n)d.set(f,h),h+=f.length;return d.set(c,h),d}const Bs=(()=>{const e=new Uint32Array(256);for(let t=0;t<256;t++){let s=t;for(let n=0;n<8;n++)s=s&1?3988292384^s>>>1:s>>>1;e[t]=s>>>0}return e})();function Us(e){let t=4294967295;for(let s=0;s<e.length;s++)t=Bs[(t^e[s])&255]^t>>>8;return(t^4294967295)>>>0}function _s(e){const t=(e.getHours()&31)<<11|(e.getMinutes()&63)<<5|e.getSeconds()/2&31,s=(e.getFullYear()-1980&127)<<9|(e.getMonth()+1&15)<<5|e.getDate()&31;return{time:t,date:s}}function Ce(e){const t=document.getElementById("app");t&&(t.innerHTML=Nt(e),document.title=`AXIS Report — ${u(e.reportId)}`,Ts())}const js=document.getElementById("axis-data"),Y=js?.textContent?.trim();if(Y&&Y!=="__AXIS_REPORT_DATA__")try{Ce(JSON.parse(Y))}catch{const t=document.getElementById("app");t&&(t.innerHTML='<div class="error-banner">Failed to parse report data.</div>')}else fetch("/mock-data.json").then(e=>e.json()).then(e=>Ce(e)).catch(e=>{const t=document.getElementById("app");t&&(t.innerHTML=`<div class="error-banner">Failed to load mock data: ${e.message}</div>`)});</script> </body> </html>