@netlify/axis 1.15.4 → 1.16.2
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.
- package/dist/report-ui/index.html +53 -50
- package/dist/ui/AnimatedTokens.d.ts +1 -1
- package/dist/ui/AnimatedTokens.d.ts.map +1 -1
- package/dist/ui/App.d.ts +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/LiveDuration.d.ts +1 -1
- package/dist/ui/LiveDuration.d.ts.map +1 -1
- package/dist/ui/LiveStatus.d.ts +1 -1
- package/dist/ui/LiveStatus.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
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)}.speed-tag{position:relative;cursor:help}.speed-tooltip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:var(--text);color:var(--bg-card);padding:8px 10px;border-radius:6px;width:max-content;max-width:260px;z-index:30;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}.speed-tag:hover .speed-tooltip,.speed-tag:focus-within .speed-tooltip{display:block}.speed-tooltip-header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:.75rem;margin-bottom:6px;color:var(--bg-card)}.speed-tooltip-header strong{font-weight:600}.speed-tooltip-actual{font-family:var(--font-mono);font-size:.6875rem;color:var(--bg-alt)}.speed-tooltip-tiers{display:flex;flex-direction:column;gap:2px;font-family:var(--font-mono);font-size:.6875rem}.speed-tooltip-row{display:flex;justify-content:space-between;gap:14px;padding:2px 6px;border-radius:3px;color:var(--bg-alt)}.speed-tooltip-row-active{background:#ffffff1f;color:var(--bg-card);font-weight:600}.speed-tooltip-range{white-space:nowrap}.speed-tooltip-score{font-variant-numeric:tabular-nums}.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{display:block;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-judge-agent{margin:0;font-size:.8125rem;color:var(--text-secondary)}.modal-judge-agent code{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-primary)}.modal-judge-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-judge-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-judge-table tbody td{padding:8px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary)}.modal-judge-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…</div> </div> <script id="axis-data" type="application/json">__AXIS_REPORT_DATA__</script> <script type="module">function ie(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var I=ie();function Pe(e){I=e}var
|
|
3
|
-
]`).replace("lheading",
|
|
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><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet"><style>@font-face{font-family:Digerati;src:url(/Digerati-Regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}:root{--bg: #f6f6f7;--bg-card: #ffffff;--bg-alt: #e9ebed;--text: #353a3e;--text-secondary: #353a3e;--text-muted: #778089;--border: #9da7b2;--border-light: #d1d5da;--neutral-200: #e9ebed;--score-green-bg: #93f5a5;--score-yellow-bg: #f6e0a5;--score-amber-bg: #facd6f;--score-red-bg: #ffada9;--success: #31a855;--danger: #dc2626;--danger-light: #fef2f2;--warning: #d97706;--warning-light:#fffbeb;--yellow: #d97706;--yellow-light: #fffbeb;--cat-env: #059669;--cat-svc: #2563eb;--cat-agent: #778089;--font: "Instrument Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "IBM Plex Mono", "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--font-display: "Instrument Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--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);--transition: .15s ease;--accent: #353a3e;--accent-hover: #353a3e;--accent-bright: #31a855;--accent-light: rgba(53, 58, 62, .05);--success-light: #ecfdf5;--light-gray: #e9ebed;--mid-gray: #778089}*,*: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:1200px;margin:0 auto;padding:40px 32px 80px}h1{font-family:var(--font-display);font-weight:600;font-size:2rem;color:var(--text)}h2{font-family:var(--font-display);font-weight:600;font-size:1.375rem;color:var(--text)}h3{font-family:var(--font-display);font-weight:600;font-size:1.0625rem;color:var(--text)}.report-header{display:flex;align-items:flex-start;justify-content:space-between;gap:40px;margin-bottom:40px}.header-left{flex:1;min-width:0}.report-branding{display:flex;align-items:center;gap:14px;margin-bottom:18px}.axis-logo{height:32px;width:auto;display:block;flex-shrink:0}.report-badge{font-family:var(--font-display);font-size:2rem;font-weight:400;color:var(--text)}.report-meta{margin:0}.report-meta-row{font-size:.875rem;line-height:1.9;color:var(--text);font-family:var(--font)}.report-meta-label{font-weight:600;color:var(--text)}.report-meta-value{color:var(--text)}.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:20px 30px;flex-shrink:0;display:flex;align-items:center;gap:0}.summary-hero{text-align:center;padding:0}.summary-hero .hero-score{font-family:var(--font-display);font-size:3rem;font-weight:400;line-height:1;color:var(--success)}.summary-hero .hero-label{font-family:var(--font-mono);font-size:.625rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-weight:500;margin-top:6px;white-space:nowrap}.summary-divider{width:1px;align-self:stretch;background:var(--border);margin:0 30px}.summary-stats{display:flex;gap:0;align-items:flex-start}.summary-stat{text-align:center;padding:0 24px;border-right:1px solid var(--border)}.summary-stat:last-child{border-right:none}.summary-stat .stat-value{font-family:var(--font);font-size:1.375rem;font-weight:500;color:var(--text);line-height:1.2;margin-bottom:4px}.summary-stat .stat-label{font-family:var(--font-mono);font-size:.5625rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-weight:400;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:42px;height:32px;padding:0 10px;border-radius:100px;border:1px solid var(--border);font-family:var(--font-mono);font-size:.8125rem;font-weight:400;color:var(--text);line-height:1}.score-badge.score-green{background:var(--score-green-bg)}.score-badge.score-yellow{background:var(--score-yellow-bg)}.score-badge.score-orange{background:var(--score-amber-bg)}.score-badge.score-red{background:var(--score-red-bg)}.score-badge.score-na{background:var(--neutral-200);color:var(--text)}.score-badge-lg{min-width:64px;height:64px;border-radius:32px;font-family:var(--font-display);font-size:1.75rem;font-weight:400;padding:0 16px}.results-section{margin-top:8px}.results-table{width:100%;border-collapse:collapse;font-size:.875rem;table-layout:fixed}.results-table thead th{text-align:left;padding:10px 12px;font-family:var(--font-mono);font-size:.625rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-weight:400;white-space:nowrap;position:sticky;top:0;background:var(--bg);border-bottom:1px solid var(--border-light);z-index:2}.results-table thead th:first-child{width:40px}.results-table thead th.col-score{text-align:center;width:64px}.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);background:var(--bg-card)}.result-row:hover,.result-row.expanded{background:#f0f1f2}.result-row td{padding:14px 12px;border-bottom:1px solid var(--border-light);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)}.result-row td.col-agent{font-family:var(--font-mono);font-size:.8125rem;color:var(--text)}.result-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.625rem}.result-row.expanded .expand-icon{transform:rotate(90deg)}.scenario-header-row{cursor:pointer;background:var(--neutral-200);transition:background var(--transition)}.scenario-header-row:hover{background:#dfe1e4}.scenario-header-row td{padding:14px 12px;vertical-align:middle;border-bottom:1px solid var(--border-light)}.scenario-header-row td.col-scenario-header{font-family:var(--font-mono);font-size:.9375rem;font-weight:400;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(--border-light)}.detail-panel{padding:28px 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(--border-light)}.category-bars{flex:1;display:flex;flex-direction:column;gap:10px;padding-top:4px}.category-bar-row{display:flex;align-items:center;gap:12px}.category-bar-label{width:120px;font-size:.8125rem;font-weight:400;color:var(--text);flex-shrink:0;font-family:var(--font)}.category-bar-value{font-size:.8125rem;font-family:var(--font-mono);width:32px;text-align:right;flex-shrink:0;color:var(--text)}.progress-bar{flex:1;height:6px;background:var(--border-light);border-radius:3px;overflow:hidden;min-width:80px}.progress-bar .fill{height:100%;border-radius:3px;transition:width .4s ease}.progress-bar .fill.fill-green{background:var(--success)}.progress-bar .fill.fill-yellow{background:#d97706}.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}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-header h3{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.0625rem;font-weight:400;color:var(--text)}.section-score{font-family:var(--font-mono);font-size:.875rem;font-weight:400;color:var(--text-muted)}.section-description{font-size:.8125rem;color:var(--text-muted);line-height:1.5;margin:-8px 0 16px;max-width:70ch}.criteria-list{display:flex;flex-direction:column;gap:10px}.criterion-item{padding:12px;background:var(--bg);border-radius:var(--radius);border:1px solid var(--border-light)}.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:#d97706}.criterion-icon.medium{color:#ea580c}.criterion-icon.low{color:var(--danger)}.criterion-name{flex:1;font-size:.8125rem;font-weight:400;font-family:var(--font)}.criterion-score{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-muted);flex-shrink:0}.criterion-weight{font-family:var(--font-mono);font-size:.6875rem;color:var(--text);background:var(--border-light);padding:2px 7px;border-radius:999px;flex-shrink:0}.criterion-bar{margin-bottom:8px}.criterion-rationale{font-size:.8125rem;color:var(--text-muted);line-height:1.5;font-style:italic}.criterion-perfect{padding:8px 12px;background:#31a8550f;border-left:3px solid var(--success);border-top:none;border-right:none;border-bottom:none}.criterion-perfect .criterion-bar{display:none}.criterion-imperfect{border-left:3px solid #d97706;border-top:none;border-right:none;border-bottom:none}.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:var(--text)}.dim-tag.fill-green{background:var(--score-green-bg)}.dim-tag.fill-yellow{background:var(--score-yellow-bg)}.dim-tag.fill-orange{background:var(--score-amber-bg)}.dim-tag.fill-red{background:var(--score-red-bg)}.cat-deduction-item{padding:8px 0;border-bottom:1px solid var(--border-light)}.cat-deduction-item:last-child{border-bottom:none;padding-bottom:0}.cat-deduction-id{font-family:var(--font-mono);font-size:.75rem;font-weight:500;color:var(--text);margin-right:8px}.interaction-link{cursor:pointer;color:#353a3e;text-decoration:underline;text-decoration-color:var(--border);transition:text-decoration-color var(--transition)}.interaction-link:hover{text-decoration-color:var(--text)}a.cat-deduction-id.interaction-link,a.wf-id.interaction-link{color:var(--text)}@keyframes interaction-flash{0%,35%{background:var(--score-yellow-bg);box-shadow:inset 3px 0 #d97706}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(--neutral-200);padding:1px 5px;border-radius:3px;color:var(--text)}.speed-tag{position:relative;cursor:help}.speed-tooltip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:var(--text);color:#f6f6f7;padding:8px 10px;border-radius:8px;width:max-content;max-width:260px;z-index:30;pointer-events:none;box-shadow:0 6px 16px #0003;font-family:var(--font);text-transform:none;letter-spacing:normal;text-align:left;font-weight:400}.speed-tag:hover .speed-tooltip,.speed-tag:focus-within .speed-tooltip{display:block}.speed-tooltip-header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:.75rem;margin-bottom:6px;color:#f6f6f7}.speed-tooltip-header strong{font-weight:600}.speed-tooltip-actual{font-family:var(--font-mono);font-size:.6875rem;color:#d1d5da}.speed-tooltip-tiers{display:flex;flex-direction:column;gap:2px;font-family:var(--font-mono);font-size:.6875rem}.speed-tooltip-row{display:flex;justify-content:space-between;gap:14px;padding:2px 6px;border-radius:3px;color:#d1d5da}.speed-tooltip-row-active{background:#ffffff1f;color:#fff;font-weight:600}.speed-tooltip-range{white-space:nowrap}.speed-tooltip-score{font-variant-numeric:tabular-nums}.cat-deduction-rationale{display:block;font-size:.75rem;color:var(--text-muted);line-height:1.5;font-style:italic;margin-top:4px}.cat-deduction-note{font-size:.75rem;color:var(--text-muted);font-style:italic}.deductions-header{font-size:.75rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}.deductions-summary{margin-top:12px;padding-top:12px;border-top:1px solid var(--border-light)}.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:400;color:var(--text-muted);flex-shrink:0}.dimension-value{font-family:var(--font-mono);font-size:.75rem;width:28px;text-align:right;flex-shrink:0;color:var(--text)}.interaction-meta{font-size:.75rem;color:var(--text-muted);margin-bottom:12px}.category-empty-state{font-size:.8125rem;color:var(--text);font-style:italic;padding:12px 14px;background:var(--neutral-200);border-radius:6px}.audits-toggle{font-size:.75rem;color:var(--text);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500;text-decoration:underline;text-decoration-color:var(--border)}.audits-toggle:hover{text-decoration-color:var(--text)}.audits-list{display:none;margin-top:8px}.audits-list.visible{display:block}.error-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--border-light);border-radius:50%;background:var(--bg-card);color:var(--danger);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;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}.necessity-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--border-light)}.necessity-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.necessity-label{font-size:.75rem;font-weight:600;color:var(--text-muted)}.necessity-score{font-size:.75rem;font-weight:600;font-family:var(--font-mono)}.necessity-rationale{font-size:.8125rem;color:var(--text-muted);font-style:italic}.necessity-row .cat-deduction-id{font-weight:500}.waterfall{font-size:.8125rem}.waterfall-header{display:flex;align-items:flex-end;border-bottom:1px solid var(--border-light);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-family:var(--font-mono);font-size:.5625rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-weight:400}.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)}.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(--border-light)}.waterfall-body{position:relative}.wf-row{display:flex;align-items:center;height:26px;border-bottom:1px solid rgba(0,0,0,.03);transition:background var(--transition)}.wf-row:hover{background:#353a3e0a}.wf-id{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted);width:28px;flex-shrink:0}.wf-cat{font-family:var(--font-mono);font-size:.5625rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);width:36px;flex-shrink:0}.wf-tool{font-size:.75rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-track{position:relative;height:14px;background:#00000005;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-tooltip{position:absolute;bottom:calc(100% + 8px);left:0;display:none;background:var(--text);color:#f6f6f7;padding:10px 12px;border-radius:8px;width:max-content;max-width:360px;z-index:20;pointer-events:none;box-shadow:0 6px 16px #0003;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:#9da7b2;font-size:.75rem}.wf-tooltip-tool{font-family:var(--font-mono);font-weight:600;color:#fff;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;color:#fff}.wf-tooltip-cat-env{background:var(--cat-env)}.wf-tooltip-cat-svc{background:var(--cat-svc)}.wf-tooltip-cat-agent{background:var(--cat-agent)}.wf-tooltip-meta{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:.75rem;color:#9da7b2;margin-bottom:4px}.wf-tooltip-meta strong{color:#fff;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:#fff}.wf-lifecycle .wf-bar{background:repeating-linear-gradient(45deg,var(--text-muted),var(--text-muted) 4px,var(--border-light) 4px,var(--border-light) 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(--text);background:none;border:1px dashed var(--border-light);border-radius:var(--radius);cursor:pointer;font-family:var(--font);font-weight:500}.wf-show-all:hover{background:#353a3e0a;border-color:var(--border)}.wf-legend{display:flex;gap:16px;margin-top:10px;padding-top:8px;border-top:1px solid var(--border-light)}.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,.sparse-expand-all{font-size:.75rem;color:var(--text);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500;text-decoration:underline;text-decoration-color:var(--border)}.sparse-index-toggle:hover,.sparse-expand-all:hover{text-decoration-color:var(--text)}.sparse-expand-all{margin-left:12px}.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;color:var(--text)}.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-muted);transition:transform .15s ease}.sparse-line-expandable.expanded:after{transform:rotate(90deg)}.sparse-line-expandable:hover{background:#353a3e0a}.sparse-line-content{display:none;margin:4px 0 8px 12px;padding:8px 12px;background:var(--neutral-200);border-radius:4px;border:1px solid var(--border-light)}.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)}.info-btn{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-left:6px;border:1px solid var(--border);border-radius:50%;background:var(--bg-card);color:var(--text-muted);font-size:.6875rem;font-weight:400;cursor:pointer;vertical-align:middle;transition:background var(--transition),border-color var(--transition)}.info-btn:hover{background:var(--neutral-200);border-color:var(--border)}.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:#f6f6f7;font-size:.75rem;font-weight:400;font-family:var(--font);text-transform:none;letter-spacing:normal;line-height:1.5;padding:8px 12px;border-radius:8px;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:#353a3e73;align-items:center;justify-content:center;padding:24px}.modal-backdrop.visible{display:flex}.modal{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);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(--border-light)}.modal-header h3{font-family:var(--font-display);font-size:1.0625rem;font-weight:400;margin-bottom:2px;color:var(--text)}.modal-subtitle{display:block;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-family:var(--font);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(--border-light);border-radius:var(--radius);padding:12px 16px;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;color:var(--text)}.modal-judge-agent{margin:0;font-size:.8125rem;color:var(--text)}.modal-judge-agent code{font-family:var(--font-mono);font-size:.8125rem}.modal-judge-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-judge-table thead th{text-align:left;padding:6px 10px;font-family:var(--font-mono);font-size:.5625rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-weight:400;border-bottom:1px solid var(--border-light)}.modal-judge-table tbody td{padding:8px 10px;border-bottom:1px solid var(--border-light);color:var(--text)}.modal-judge-weight{width:60px;text-align:right;font-family:var(--font-mono);font-weight:500;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(--border-light);color:var(--text);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(--neutral-200);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:500;background:var(--neutral-200);color:var(--text);padding:2px 8px;border-radius:4px}.modal-config-line{font-size:.8125rem;color:var(--text);margin:0}.modal-config-line code{font-family:var(--font-mono);font-size:.75rem;background:var(--neutral-200);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);display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}.modal-config-list code{font-family:var(--font-mono);font-size:.75rem;background:var(--neutral-200);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}.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-family:var(--font);font-size:1.125rem}.empty-state{text-align:center;padding:60px 24px;color:var(--text-muted)}.artifacts-section{margin-top:20px}.artifacts-count{font-size:.8125rem;font-weight:400;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);border:1px solid var(--border);background:var(--bg-card);color:var(--text);cursor:pointer;font-family:var(--font);transition:background .1s ease}.artifacts-toggle:hover,.artifacts-download-all:hover{background:var(--neutral-200)}.art-tree-root{list-style:none;margin:12px 0 0;padding:4px 0 0;font-size:.8125rem;border-top:1px solid var(--border-light)}.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);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:#353a3e0a}.art-tree-chevron{display:inline-flex;align-items:center;justify-content:center;width:18px;font-size:1.05rem;line-height:1;color:var(--text-muted);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);font-size:.75rem;flex-shrink:0}.art-tree-dir-icon{color:var(--text)}.art-tree-name{flex:1;font-family:var(--font-mono);font-size:.75rem;color:var(--text);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-muted);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);border-color:var(--border);color:var(--text)}.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);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);border:1px solid var(--border);background:var(--bg-card);color:var(--text);cursor:pointer;font-family:var(--font);transition:background .1s ease}.artifact-modal-download:hover{background:var(--neutral-200)}.artifact-modal-preview{flex:1;min-height:0;overflow:auto;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--bg-card)}.artifact-text{margin:0;padding:12px 16px;font-family:var(--font-mono);font-size:.75rem;line-height:1.5;color:var(--text);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);font-size:.75rem}.lifecycle-notes{margin-top:20px}.notes-body{padding:12px 16px;background:var(--bg-card);border:1px solid var(--border-light);border-radius:var(--radius);font-size:.875rem;line-height:1.55;color:var(--text);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:var(--font-mono);font-size:.85em;background:var(--neutral-200);padding:.1em .35em;border-radius:3px}.markdown-body pre{background:var(--neutral-200);padding:10px 12px;border-radius:var(--radius);overflow-x:auto}.markdown-body pre code{background:transparent;padding:0;font-size:.8125rem}.markdown-body blockquote{border-left:3px solid var(--border-light);padding-left:.8em;color:var(--text-muted)}.markdown-body table{border-collapse:collapse;font-size:.8125rem}.markdown-body th,.markdown-body td{border:1px solid var(--border-light);padding:4px 8px;text-align:left}.markdown-body a{color:var(--text);text-decoration:underline}.report-footer{margin-top:64px;padding:24px 0;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text);text-align:center}.report-footer a{color:var(--text);text-decoration:underline}@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{padding:0 0 16px;margin:0 0 4px;border-right:none;border-bottom:1px solid var(--border)}.summary-hero .hero-score{font-size:2rem}.summary-stats{flex-wrap:wrap;gap:0;justify-content:center}.summary-stat{padding:8px 16px}.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}.scenario-header-row td{padding:10px 6px}.scenario-header-row td.col-scenario-header{font-size:.8125rem}.detail-panel{padding:16px 12px}.score-overview{flex-direction:column;align-items:center;gap:16px}.category-bars{width:100%}.dimensions-grid{grid-template-columns:1fr}.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}.modal-backdrop{padding:12px}.modal{max-height:90vh}.modal-header,.modal-body{padding:16px}}@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}}
|
|
2
|
+
</style></head> <body> <div id="app"> <div class="loading">Loading report…</div> </div> <script id="axis-data" type="application/json">__AXIS_REPORT_DATA__</script> <script type="module">function ie(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var I=ie();function Pe(e){I=e}var T={exec:()=>null};function z(e){let t=[];return s=>{let n=Math.max(0,Math.min(3,s-1)),r=t[n];return r||(r=e(n),t[n]=r),r}}function k(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(x.caret,"$1"),s=s.replace(r,a),n},getRegex:()=>new RegExp(s,t)};return n}var Je=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch{return!1}})(),x={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:z(e=>new RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:z(e=>new RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:z(e=>new RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:z(e=>new RegExp(`^ {0,${e}}#`)),htmlBeginRegex:z(e=>new RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:z(e=>new RegExp(`^ {0,${e}}>`))},Xe=/^(?:[ \t]*(?:\n|$))+/,Ye=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,et=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,j=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,tt=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ae=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Me=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Be=k(Me).replace(/bull/g,ae).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(),st=k(Me).replace(/bull/g,ae).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(),oe=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,nt=/^[^\n]+/,le=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,rt=k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",le).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),it=k(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ae).getRegex(),Q="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",ce=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,at=k("^ {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",ce).replace("tag",Q).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),qe=k(oe).replace("hr",j).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",Q).getRegex(),ot=k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",qe).getRegex(),de={blockquote:ot,code:Ye,def:rt,fences:et,heading:tt,hr:j,html:at,lheading:Be,list:it,newline:Xe,paragraph:qe,table:T,text:nt},me=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",j).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",Q).getRegex(),lt={...de,lheading:st,table:me,paragraph:k(oe).replace("hr",j).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",me).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",Q).getRegex()},ct={...de,html:k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",ce).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:T,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(oe).replace("hr",j).replace("heading",` *#{1,6} *[^
|
|
3
|
+
]`).replace("lheading",Be).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},dt=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ut=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Ue=/^( {2,}|\\)\n(?!\s*$)/,pt=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,M=/[\p{P}\p{S}]/u,W=/[\s\p{P}\p{S}]/u,ue=/[^\s\p{P}\p{S}]/u,ht=k(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,W).getRegex(),_e=/(?!~)[\p{P}\p{S}]/u,ft=/(?!~)[\s\p{P}\p{S}]/u,gt=/(?:[^\s\p{P}\p{S}]|~)/u,mt=k(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Je?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),je=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,kt=k(je,"u").replace(/punct/g,M).getRegex(),bt=k(je,"u").replace(/punct/g,_e).getRegex(),Ne="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",vt=k(Ne,"gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,M).getRegex(),xt=k(Ne,"gu").replace(/notPunctSpace/g,gt).replace(/punctSpace/g,ft).replace(/punct/g,_e).getRegex(),wt=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,M).getRegex(),$t=k(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,M).getRegex(),yt="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",St=k(yt,"gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,M).getRegex(),At=k(/\\(punct)/,"gu").replace(/punct/g,M).getRegex(),Rt=k(/^<(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(),Lt=k(ce).replace("(?:-->|$)","-->").getRegex(),Et=k("^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",Lt).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),O=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Tt=k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",O).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),De=k(/^!?\[(label)\]\[(ref)\]/).replace("label",O).replace("ref",le).getRegex(),He=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",le).getRegex(),Ct=k("reflink|nolink(?!\\()","g").replace("reflink",De).replace("nolink",He).getRegex(),ke=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,pe={_backpedal:T,anyPunctuation:At,autolink:Rt,blockSkip:mt,br:Ue,code:ut,del:T,delLDelim:T,delRDelim:T,emStrongLDelim:kt,emStrongRDelimAst:vt,emStrongRDelimUnd:wt,escape:dt,link:Tt,nolink:He,punctuation:ht,reflink:De,reflinkSearch:Ct,tag:Et,text:pt,url:T},It={...pe,link:k(/^!?\[(label)\]\((.*?)\)/).replace("label",O).getRegex(),reflink:k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",O).getRegex()},te={...pe,emStrongRDelimAst:xt,emStrongLDelim:bt,delLDelim:$t,delRDelim:St,url:k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",ke).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:k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",ke).getRegex()},zt={...te,br:k(Ue).replace("{2,}","*").getRegex(),text:k(te.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},N={normal:de,gfm:lt,pedantic:ct},U={normal:pe,gfm:te,breaks:zt,pedantic:It},Pt={"&":"&","<":"<",">":">",'"':""","'":"'"},be=e=>Pt[e];function R(e,t){if(t){if(x.escapeTest.test(e))return e.replace(x.escapeReplace,be)}else if(x.escapeTestNoEncode.test(e))return e.replace(x.escapeReplaceNoEncode,be);return e}function ve(e){try{e=encodeURI(e).replace(x.percentDecode,"%")}catch{return null}return e}function xe(e,t){let s=e.replace(x.findPipe,(i,a,o)=>{let c=!1,l=a;for(;--l>=0&&o[l]==="\\";)c=!c;return c?"|":" |"}),n=s.split(x.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(x.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
4
|
`),s=t.length-1;for(;s>=0&&x.blankLine.test(t[s]);)s--;return t.length-s<=2?e:t.slice(0,s+1).join(`
|
|
5
|
-
`)}function Mt(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
|
|
5
|
+
`)}function Mt(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 Bt(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 $e(e,t,s,n,r){let i=t.href,a=t.title||null,o=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:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,c}function qt(e,t,s){let n=e.match(s.other.indentCodeCompensation);if(n===null)return t;let r=n[1];return t.split(`
|
|
6
6
|
`).map(i=>{let a=i.match(s.other.beginningSpace);if(a===null)return i;let[o]=a;return o.length>=r.length?i.slice(r.length):i}).join(`
|
|
7
|
-
`)}var
|
|
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:
|
|
9
|
-
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let s=
|
|
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=qt(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
10
|
`).split(`
|
|
11
11
|
`),n="",r="",i=[];for(;s.length>0;){let a=!1,o=[],c;for(c=0;c<s.length;c++)if(this.rules.other.blockquoteStart.test(s[c]))o.push(s[c]),a=!0;else if(!a)o.push(s[c]);else break;s=s.slice(c);let l=o.join(`
|
|
12
12
|
`),p=l.replace(this.rules.other.blockquoteSetextReplace,`
|
|
@@ -17,19 +17,19 @@ ${p}`:p;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
|
|
|
17
17
|
`),w=this.blockquote(f);i[i.length-1]=w,n=n.substring(0,n.length-m.raw.length)+w.raw,r=r.substring(0,r.length-m.text.length)+w.text;break}else if(h?.type==="list"){let m=h,f=m.raw+`
|
|
18
18
|
`+s.join(`
|
|
19
19
|
`),w=this.list(f);i[i.length-1]=w,n=n.substring(0,n.length-h.raw.length)+w.raw,r=r.substring(0,r.length-m.raw.length)+w.raw,s=f.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,l="",p="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let d=
|
|
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,l="",p="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let d=Bt(t[2].split(`
|
|
21
21
|
`,1)[0],t[1].length),h=e.split(`
|
|
22
22
|
`,1)[0],m=!d.trim(),f=0;if(this.options.pedantic?(f=2,p=d.trimStart()):m?f=t[1].length+1:(f=d.search(this.rules.other.nonSpaceChar),f=f>4?1:f,p=d.slice(f),f+=t[1].length),m&&this.rules.other.blankLine.test(h)&&(l+=h+`
|
|
23
|
-
`,e=e.substring(h.length+1),c=!0),!c){let w=this.rules.other.nextBulletRegex(f),A=this.rules.other.hrRegex(f),
|
|
24
|
-
`,1)[0],
|
|
25
|
-
`+
|
|
26
|
-
`+h}m=!h.trim(),l+=
|
|
27
|
-
`,e=e.substring(
|
|
23
|
+
`,e=e.substring(h.length+1),c=!0),!c){let w=this.rules.other.nextBulletRegex(f),A=this.rules.other.hrRegex(f),L=this.rules.other.fencesBeginRegex(f),g=this.rules.other.headingBeginRegex(f),B=this.rules.other.htmlBeginRegex(f),v=this.rules.other.blockquoteBeginRegex(f);for(;e;){let V=e.split(`
|
|
24
|
+
`,1)[0],q;if(h=V,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),q=h):q=h.replace(this.rules.other.tabCharGlobal," "),L.test(h)||g.test(h)||B.test(h)||v.test(h)||w.test(h)||A.test(h))break;if(q.search(this.rules.other.nonSpaceChar)>=f||!h.trim())p+=`
|
|
25
|
+
`+q.slice(f);else{if(m||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||L.test(d)||g.test(d)||A.test(d))break;p+=`
|
|
26
|
+
`+h}m=!h.trim(),l+=V+`
|
|
27
|
+
`,e=e.substring(V.length+1),d=q.slice(f)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(a=!0)),r.items.push({type:"list_item",raw:l,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]}),r.raw+=l}let o=r.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.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 l=c.tokens[0];if(c.task&&(l?.type==="text"||l?.type==="paragraph")){c.text=c.text.replace(this.rules.other.listReplaceTask,""),l.raw=l.raw.replace(this.rules.other.listReplaceTask,""),l.text=l.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 l of c.tokens)l.type==="text"&&(l.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
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=xe(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:
|
|
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(xe(a,i.header.length).map((o,c)=>({text:o,tokens:this.lexer.inline(o),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:
|
|
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(xe(a,i.header.length).map((o,c)=>({text:o,tokens:this.lexer.inline(o),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
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=
|
|
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=Mt(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)),$e(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 $e(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,o=r,c=0,l=n[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+r);(n=l.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]){o+=a;continue}else if((n[5]||n[6])&&r%3&&!((r+a)%3)){c+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+c);let p=[...n[0]][0].length,d=e.slice(0,r+n.index+p+a);if(Math.min(r,a)%2){let m=d.slice(1,-1);return{type:"em",raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}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,o=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]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let l=[...n[0]][0].length,p=e.slice(0,r+n.index+l+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 se{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:x,block:N.normal,inline:U.normal};this.options.pedantic?(s.block=N.pedantic,s.inline=U.pedantic):this.options.gfm&&(s.block=N.gfm,this.options.breaks?s.inline=U.breaks:s.inline=U.gfm),this.tokenizer.rules=s}static get rules(){return{block:N,inline:U}}static lex(t,s){return new se(s).lex(t)}static lexInline(t,s){return new se(s).inlineTokens(t)}lex(t){t=t.replace(x.carriageReturn,`
|
|
33
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(x.tabCharGlobal," ").replace(x.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(o=>(i=o.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 o=s.at(-1);i.raw.length===1&&o!==void 0?o.raw+=`
|
|
34
34
|
`:s.push(i);continue}if(i=this.tokenizer.code(t)){t=t.substring(i.raw.length);let o=s.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(`
|
|
35
35
|
`)?"":`
|
|
@@ -61,22 +61,25 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
61
61
|
`}tablerow({text:e}){return`<tr>
|
|
62
62
|
${e}</tr>
|
|
63
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=ve(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=ve(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)}},he=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 ne{options;renderer;textRenderer;constructor(t){this.options=t||I,this.options.renderer=this.options.renderer||new Z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new he}static parse(t,s){return new ne(s).parse(t)}static parseInline(t,s){return new ne(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,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){s+=o||"";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 o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=o||"";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 o='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}},_=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}},Ut=class{defaults=ie();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=S;Renderer=Z;TextRenderer=he;Lexer=y;Tokenizer=
|
|
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 Ut;function b(e,t){return C.parse(e,t)}b.options=b.setOptions=function(e){return C.setOptions(e),b.defaults=C.defaults,Pe(b.defaults),b};b.getDefaults=ie;b.defaults=I;b.use=function(...e){return C.use(...e),b.defaults=C.defaults,Pe(b.defaults),b};b.walkTokens=function(e,t){return C.walkTokens(e,t)};b.parseInline=C.parseInline;b.Parser=S;b.parser=S.parse;b.Renderer=Z;b.TextRenderer=he;b.Lexer=y;b.lexer=y.lex;b.Tokenizer=
|
|
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=ve(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=ve(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)}},he=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 ne{options;renderer;textRenderer;constructor(t){this.options=t||I,this.options.renderer=this.options.renderer||new Z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new he}static parse(t,s){return new ne(s).parse(t)}static parseInline(t,s){return new ne(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,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){s+=o||"";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 o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=o||"";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 o='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}},_=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}},Ut=class{defaults=ie();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=S;Renderer=Z;TextRenderer=he;Lexer=y;Tokenizer=F;Hooks=_;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 o=r.renderer.apply(this,a);return o===!1&&(o=i.apply(this,a)),o}: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 Z(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,o=s.renderer[a],c=r[a];r[a]=(...l)=>{let p=o.apply(r,l);return p===!1&&(p=c.apply(r,l)),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,o=s.tokenizer[a],c=r[a];r[a]=(...l)=>{let p=o.apply(r,l);return p===!1&&(p=c.apply(r,l)),p}}n.tokenizer=r}if(s.hooks){let r=this.defaults.hooks||new _;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,o=s.hooks[a],c=r[a];_.passThroughHooks.has(i)?r[a]=l=>{if(this.defaults.async&&_.passThroughHooksRespectAsync.has(i))return(async()=>{let d=await o.call(r,l);return c.call(r,d)})();let p=o.call(r,l);return c.call(r,p)}:r[a]=(...l)=>{if(this.defaults.async)return(async()=>{let d=await o.apply(r,l);return d===!1&&(d=await c.apply(r,l)),d})();let p=o.apply(r,l);return p===!1&&(p=c.apply(r,l)),p}}n.hooks=r}if(s.walkTokens){let r=this.defaults.walkTokens,i=s.walkTokens;n.walkTokens=function(a){let o=[];return o.push(i.call(this,a)),r&&(o=o.concat(r.call(this,a))),o}}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,o=await(r.hooks?await r.hooks.provideLexer(e):e?y.lex:y.lexInline)(a,r),c=r.hooks?await r.hooks.processAllTokens(o):o;r.walkTokens&&await Promise.all(this.walkTokens(c,r.walkTokens));let l=await(r.hooks?await r.hooks.provideParser(e):e?S.parse:S.parseInline)(c,r);return r.hooks?await r.hooks.postprocess(l):l})().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 o=(r.hooks?r.hooks.provideParser(e):e?S.parse:S.parseInline)(a,r);return r.hooks&&(o=r.hooks.postprocess(o)),o}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 Ut;function b(e,t){return C.parse(e,t)}b.options=b.setOptions=function(e){return C.setOptions(e),b.defaults=C.defaults,Pe(b.defaults),b};b.getDefaults=ie;b.defaults=I;b.use=function(...e){return C.use(...e),b.defaults=C.defaults,Pe(b.defaults),b};b.walkTokens=function(e,t){return C.walkTokens(e,t)};b.parseInline=C.parseInline;b.Parser=S;b.parser=S.parse;b.Renderer=Z;b.TextRenderer=he;b.Lexer=y;b.lexer=y.lex;b.Tokenizer=F;b.Hooks=_;b.parse=b;b.options;b.setOptions;b.use;b.walkTokens;b.parseInline;S.parse;y.lex;function _t(e){return"averageAxisScore"in e}const Oe={service:[{maxSeconds:2,score:100},{maxSeconds:5,score:90},{maxSeconds:10,score:80},{maxSeconds:25,score:60},{maxSeconds:null,score:40}],environment:[{maxSeconds:.5,score:100},{maxSeconds:2,score:90},{maxSeconds:5,score:80},{maxSeconds:10,score:60},{maxSeconds:null,score:40}],agent:[{maxSeconds:2,score:100},{maxSeconds:5,score:90},{maxSeconds:15,score:80},{maxSeconds:30,score:60},{maxSeconds:null,score:40}]};function jt(e){return e.includes("service")?"service":e.includes("environment")?"environment":"agent"}function Nt(e){return Oe[e]}function Dt(e,t){if(e===null||e<=0)return 0;const s=e/1e3,n=Oe[t];for(let r=0;r<n.length;r++){const i=n[r];if(i.maxSeconds===null||s<=i.maxSeconds)return r}return n.length-1}function ye(e){return e<1?`${e*1e3}ms`:Number.isInteger(e)?`${e}s`:`${e.toFixed(1)}s`}function Ht(e,t){if(e.maxSeconds===null){const s=t?.maxSeconds;return s!=null?`> ${ye(s)}`:"any"}return`≤ ${ye(e.maxSeconds)}`}const Ot={service:"Service",environment:"Environment",agent:"Agent"};function Ft(e){return Ot[e]}b.setOptions({gfm:!0,breaks:!1});function Zt(e){try{const t=b.parse(e,{async:!1});return Kt(t)}catch{return`<pre>${u(e)}</pre>`}}function Kt(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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function $(e){return!Number.isFinite(e)||e<0?"—":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function K(e){return e===void 0||e<=0?"—":`$${e.toFixed(4)}`}function Se(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 Gt(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 Qt(e){return e>=90?"score-green":e>=80?"score-yellow":e>=70?"score-orange":"score-red"}function Wt(e){return e>=90?"fill-green":e>=80?"fill-yellow":e>=70?"fill-orange":"fill-red"}function Fe(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 Ze(e){return e.replace(/ \[[^\]]+\]$/,"")}function re(e){const t=G(e.scenarioKey);return t?`${e.agentName} @${t}`:e.agentName}function Ke(e){const t=new Map;for(const n of e){const r=Fe(n.scenarioKey);let i=t.get(r);i||(i={scenarioKey:r,scenarioName:Ze(n.scenarioName),entries:[],prompt:n.prompt,judge:n.judge??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 o=G(r.scenarioKey)??"",c=G(i.scenarioKey)??"";return o.localeCompare(c)});return s.sort((n,r)=>n.scenarioKey.localeCompare(r.scenarioKey)),s}function P(e,t=!1){return e===void 0?`<span class="score-badge score-na${t?" score-badge-lg":""}">—</span>`:`<span class="score-badge ${Qt(e)}${t?" score-badge-lg":""}">${e}</span>`}function fe(e,t=100){const s=Math.max(0,Math.min(100,e/t*100));return`<div class="progress-bar"><div class="fill ${Wt(s)}" style="width: ${s}%"></div></div>`}function Ae(e,t){return`
|
|
66
66
|
<div class="dimension-item">
|
|
67
67
|
<span class="dimension-label">${u(e)}</span>
|
|
68
68
|
${fe(t)}
|
|
69
69
|
<span class="dimension-value">${t}</span>
|
|
70
|
-
</div>`}function
|
|
70
|
+
</div>`}function Vt(e){const t=Ke(e.results).flatMap(n=>n.entries),s={...e,results:t};return`
|
|
71
71
|
<div class="container">
|
|
72
|
-
${
|
|
72
|
+
${Jt(s)}
|
|
73
73
|
${Xt(s)}
|
|
74
|
+
<footer class="report-footer">
|
|
75
|
+
AXIS is OSS maintained by <a href="https://www.netlify.com" target="_blank" rel="noopener">Netlify</a> and the open source contributors.
|
|
76
|
+
</footer>
|
|
74
77
|
</div>
|
|
75
|
-
${ys(t)}`}function
|
|
78
|
+
${ys(t)}`}function Jt(e){const t=_t(e.summary),s=e.results.reduce((n,r)=>n+(r.totalCostUsd??0),0);return`
|
|
76
79
|
<header class="report-header">
|
|
77
80
|
<div class="header-left">
|
|
78
81
|
<div class="report-branding">
|
|
79
|
-
<
|
|
82
|
+
<svg class="axis-logo" width="181" height="44" viewBox="0 0 181 44" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="AXIS"><path d="M133.883 13.68C133.883 6 141.443 0 156.863 0C170.423 0 178.883 3.9 180.803 13.56L165.743 13.44C165.023 9.18 161.603 7.2 156.983 7.2C152.423 7.2 149.783 9 149.783 11.52C149.783 14.58 152.963 15.36 159.623 16.32L162.683 16.74C176.423 18.66 180.983 23.04 180.983 30C180.983 37.98 173.303 43.8 157.703 43.8C143.603 43.8 134.543 39.6 132.863 29.58L148.163 29.7C149.063 34.08 152.423 36.42 157.583 36.42C161.963 36.42 164.903 34.8 164.903 32.1C164.903 28.8 161.603 28.2 154.223 27L151.463 26.58C138.323 24.66 133.883 20.94 133.883 13.68Z" fill="#353A3E"/><path d="M113 42.9V0.900024H128V42.9H113Z" fill="#353A3E"/><path d="M55.597 42.9L73.477 22.74L56.197 0.900024H74.437L84.757 14.34L96.217 0.900024H109.177L91.957 20.94L109.777 42.9H91.357L80.617 29.34L68.737 42.9H55.597Z" fill="#353A3E"/><path d="M0 42.9L19.62 0.900024H36.6L56.28 42.9H40.14L36.3 34.32H15.12L11.28 42.9H0ZM18.78 26.1H32.64L25.68 10.56L18.78 26.1Z" fill="#353A3E"/></svg>
|
|
80
83
|
<span class="report-badge">Report</span>
|
|
81
84
|
</div>
|
|
82
85
|
<div class="report-meta">
|
|
@@ -215,9 +218,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
215
218
|
<div class="detail-sections">
|
|
216
219
|
${e.sparseIndex?gs(e.sparseIndex,t):""}
|
|
217
220
|
${as(e.goalAchievement)}
|
|
218
|
-
${
|
|
219
|
-
${
|
|
220
|
-
${
|
|
221
|
+
${J("Environment",e.environment,e.sparseIndex)}
|
|
222
|
+
${J("Service",e.service,e.sparseIndex)}
|
|
223
|
+
${J("Agent",e.agent,e.sparseIndex)}
|
|
221
224
|
${e.sparseIndex?$s(e.sparseIndex):""}
|
|
222
225
|
</div>`}function D(e,t){return`
|
|
223
226
|
<div class="category-bar-row">
|
|
@@ -241,7 +244,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
241
244
|
</div>
|
|
242
245
|
<div class="criterion-bar">${fe(e.score,10)}</div>
|
|
243
246
|
${t?"":`<div class="criterion-rationale">${u(e.rationale)}</div>`}
|
|
244
|
-
</div>`}function
|
|
247
|
+
</div>`}function J(e,t,s){const n=`<h3>${u(e)}${ls(e)}</h3>`;if(t.interactionCount===0)return`
|
|
245
248
|
<div class="detail-section">
|
|
246
249
|
<div class="section-header">
|
|
247
250
|
${n}
|
|
@@ -271,23 +274,23 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
271
274
|
<span class="cat-deduction-rationale">${u(i.rationale)}</span>
|
|
272
275
|
</div>`:"",f=c.map(d).join(""),w=l.map(d).join(""),A=l.length?`
|
|
273
276
|
<button class="audits-toggle">Show ${l.length} other passing interaction${l.length!==1?"s":""}</button>
|
|
274
|
-
<div class="audits-list">${w}</div>`:"",
|
|
277
|
+
<div class="audits-list">${w}</div>`:"",L=!!m||f.length>0||l.length>0;return`
|
|
275
278
|
<div class="dimensions-grid">${e.map(g=>Ae(g.label,g.value)).join("")}</div>
|
|
276
|
-
${
|
|
279
|
+
${L?`<div class="deductions-summary">
|
|
277
280
|
<div class="deductions-header">Score breakdown</div>
|
|
278
281
|
${m}
|
|
279
282
|
${f}
|
|
280
283
|
${A}
|
|
281
|
-
</div>`:""}`}function ps(e,t,s){return[{label:"Success",value:e.success},{label:"Speed",value:e.speed},...t?[{label:"Relevance",value:e.contextRelevance}]:[]].filter(r=>r.value<1).map(r=>r.label==="Speed"?hs(r.value,s):`<span class="dim-score-tag">${r.label}: ${Ge(r.value)}</span>`).join("")}function hs(e,t){const s=t?fs(t):"";return`<span class="${s?"dim-score-tag speed-tag":"dim-score-tag"}">Speed: ${Ge(e)}${s}</span>`}function fs(e){const t=jt(e.categories),s=Nt(t),n=Dt(e.durationMs,t),r=e.durationMs!==null&&e.durationMs>0?$(e.durationMs):"no timing data",i=s.map((a,o)=>{const c=o===n,l=
|
|
284
|
+
</div>`:""}`}function ps(e,t,s){return[{label:"Success",value:e.success},{label:"Speed",value:e.speed},...t?[{label:"Relevance",value:e.contextRelevance}]:[]].filter(r=>r.value<1).map(r=>r.label==="Speed"?hs(r.value,s):`<span class="dim-score-tag">${r.label}: ${Ge(r.value)}</span>`).join("")}function hs(e,t){const s=t?fs(t):"";return`<span class="${s?"dim-score-tag speed-tag":"dim-score-tag"}">Speed: ${Ge(e)}${s}</span>`}function fs(e){const t=jt(e.categories),s=Nt(t),n=Dt(e.durationMs,t),r=e.durationMs!==null&&e.durationMs>0?$(e.durationMs):"no timing data",i=s.map((a,o)=>{const c=o===n,l=Ht(a,o>0?s[o-1]:void 0);return`<span class="speed-tooltip-row${c?" speed-tooltip-row-active":""}">
|
|
282
285
|
<span class="speed-tooltip-range">${u(l)}</span>
|
|
283
286
|
<span class="speed-tooltip-score">${a.score}</span>
|
|
284
287
|
</span>`}).join("");return`<span class="speed-tooltip" role="tooltip">
|
|
285
288
|
<span class="speed-tooltip-header">
|
|
286
|
-
<strong>${u(
|
|
289
|
+
<strong>${u(Ft(t))} speed</strong>
|
|
287
290
|
<span class="speed-tooltip-actual">${u(r)}</span>
|
|
288
291
|
</span>
|
|
289
292
|
<span class="speed-tooltip-tiers">${i}</span>
|
|
290
|
-
</span>`}function Ge(e){return(e*100).toFixed(0)}const X=30;function gs(e,t){const{interactions:s}=e;if(!s.some(d=>d.startMs!==null)||s.length===0)return"";const r=e.stats.wallClockMs||(t>0?t:xs(s));if(r<=0)return"";const i=ws(r),a=s.length>X,o=a?s.slice(0,X):s,c=a?s.slice(X):[],l=e.stats.startupMs&&e.stats.startupMs>0?
|
|
293
|
+
</span>`}function Ge(e){return(e*100).toFixed(0)}const X=30;function gs(e,t){const{interactions:s}=e;if(!s.some(d=>d.startMs!==null)||s.length===0)return"";const r=e.stats.wallClockMs||(t>0?t:xs(s));if(r<=0)return"";const i=ws(r),a=s.length>X,o=a?s.slice(0,X):s,c=a?s.slice(X):[],l=e.stats.startupMs&&e.stats.startupMs>0?Ee("agent startup",0,e.stats.startupMs,r):"",p=e.stats.shutdownMs&&e.stats.shutdownMs>0?Ee("agent shutdown",r-e.stats.shutdownMs,e.stats.shutdownMs,r):"";return`
|
|
291
294
|
<div class="detail-section">
|
|
292
295
|
<div class="section-header">
|
|
293
296
|
<h3>Timeline</h3>
|
|
@@ -305,8 +308,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
305
308
|
</div>
|
|
306
309
|
<div class="waterfall-body">
|
|
307
310
|
${l}
|
|
308
|
-
${o.map(d=>
|
|
309
|
-
${a?`<div class="wf-overflow" style="display:none">${c.map(d=>
|
|
311
|
+
${o.map(d=>Le(d,r)).join("")}
|
|
312
|
+
${a?`<div class="wf-overflow" style="display:none">${c.map(d=>Le(d,r)).join("")}${p}</div>`:p}
|
|
310
313
|
</div>
|
|
311
314
|
${a?`<button class="wf-show-all">Show all ${s.length} interactions</button>`:""}
|
|
312
315
|
<div class="wf-legend">
|
|
@@ -315,7 +318,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
315
318
|
<span class="wf-legend-item"><span class="wf-legend-dot wf-agent"></span>Agent</span>
|
|
316
319
|
</div>
|
|
317
320
|
</div>
|
|
318
|
-
</div>`}function
|
|
321
|
+
</div>`}function Le(e,t){const s=e.startMs??0,n=e.durationMs??0,r=s/t*100,i=Math.max(.4,n/t*100),a=bs(e),o=e.hasError?" wf-bar-error":"",c=e.toolName??"thinking",l=e.categories.includes("environment")?"env":e.categories.includes("service")?"svc":"agent";return`
|
|
319
322
|
<div class="wf-row ${a}">
|
|
320
323
|
<div class="wf-label-col">
|
|
321
324
|
<a class="wf-id interaction-link" data-interaction-id="${e.id}" title="Jump to this interaction in the transcript">#${e.id}</a>
|
|
@@ -339,7 +342,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
339
342
|
</div>
|
|
340
343
|
<div class="wf-tooltip-meta">${n.join("")}</div>
|
|
341
344
|
${r?`<pre class="wf-tooltip-snippet">${u(r)}</pre>`:""}
|
|
342
|
-
</div>`}function ks(e,t){const s=e.trim();return s.length<=t?s:s.slice(0,t-1)+"…"}function
|
|
345
|
+
</div>`}function ks(e,t){const s=e.trim();return s.length<=t?s:s.slice(0,t-1)+"…"}function Ee(e,t,s,n){const r=t/n*100,i=Math.max(.4,s/n*100),a=`${e} — ${$(s)}`;return`
|
|
343
346
|
<div class="wf-row wf-lifecycle">
|
|
344
347
|
<div class="wf-label-col">
|
|
345
348
|
<span class="wf-id">—</span>
|
|
@@ -363,7 +366,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
363
366
|
${t?'<button class="sparse-expand-all">Expand all</button>':""}
|
|
364
367
|
<div class="sparse-index-content">${s}</div>
|
|
365
368
|
</div>
|
|
366
|
-
</div>`}function ys(e){const t=e.map((n,r)=>!n.prompt&&!n.agentConfig&&!n.resolvedConfig?"":Ss(n,r)).join(""),s=e.map((n,r)=>n.error?zs(n,r):"").join("");return t+s}function Ss(e,t){const s=G(e.scenarioKey),n=
|
|
369
|
+
</div>`}function ys(e){const t=e.map((n,r)=>!n.prompt&&!n.agentConfig&&!n.resolvedConfig?"":Ss(n,r)).join(""),s=e.map((n,r)=>n.error?zs(n,r):"").join("");return t+s}function Ss(e,t){const s=G(e.scenarioKey),n=Fe(e.scenarioKey),r=Ze(e.scenarioName),i=e.resolvedConfig;return`
|
|
367
370
|
<div class="modal-backdrop" data-modal-index="${t}">
|
|
368
371
|
<div class="modal">
|
|
369
372
|
<div class="modal-header">
|
|
@@ -377,13 +380,13 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
377
380
|
<div class="modal-body">
|
|
378
381
|
${e.agentConfig?As(e.agentConfig,e.agentName):""}
|
|
379
382
|
${i?Rs(i.limits):""}
|
|
380
|
-
${i?.skills?.length?
|
|
381
|
-
${i?.mcpServers&&Object.keys(i.mcpServers).length?
|
|
382
|
-
${e.prompt?
|
|
383
|
+
${i?.skills?.length?Ls(i.skills):""}
|
|
384
|
+
${i?.mcpServers&&Object.keys(i.mcpServers).length?Es(i.mcpServers):""}
|
|
385
|
+
${e.prompt?Ts(e.prompt):""}
|
|
383
386
|
${e.judge??e.rubric?Is(e.judge??e.rubric):""}
|
|
384
387
|
${e.score?.judging?Cs(e.score.judging):""}
|
|
385
|
-
${i?.setup?.length?
|
|
386
|
-
${i?.teardown?.length?
|
|
388
|
+
${i?.setup?.length?Te("Setup",i.setup):""}
|
|
389
|
+
${i?.teardown?.length?Te("Teardown",i.teardown):""}
|
|
387
390
|
</div>
|
|
388
391
|
</div>
|
|
389
392
|
</div>`}function As(e,t){const s=[],n=(r,i)=>{s.push(`
|
|
@@ -398,11 +401,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
398
401
|
<div class="modal-section">
|
|
399
402
|
<h4>Limits</h4>
|
|
400
403
|
<p class="modal-config-line">${t.join(" · ")}</p>
|
|
401
|
-
</div>`}function
|
|
404
|
+
</div>`}function Ls(e){return`
|
|
402
405
|
<div class="modal-section">
|
|
403
406
|
<h4>Skills</h4>
|
|
404
407
|
<ul class="modal-config-list">${e.map(s=>`<li><code>${u(s)}</code></li>`).join("")}</ul>
|
|
405
|
-
</div>`}function
|
|
408
|
+
</div>`}function Te(e,t){const s=t.map(n=>{const r=n.action==="copy"?`<code>${u(n.match)}</code> → <code>${u(n.destination)}</code>`:`<code>${u(n.command)}</code>`;return`
|
|
406
409
|
<li>
|
|
407
410
|
<span class="modal-config-label-inline">${u(n.action)}</span>
|
|
408
411
|
${r}
|
|
@@ -410,11 +413,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
410
413
|
<div class="modal-section">
|
|
411
414
|
<h4>${u(e)}</h4>
|
|
412
415
|
<ul class="modal-config-list">${s}</ul>
|
|
413
|
-
</div>`}function
|
|
416
|
+
</div>`}function Es(e){return`
|
|
414
417
|
<div class="modal-section">
|
|
415
418
|
<h4>MCP servers</h4>
|
|
416
419
|
<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>
|
|
417
|
-
</div>`}function
|
|
420
|
+
</div>`}function Ts(e){return`
|
|
418
421
|
<div class="modal-section">
|
|
419
422
|
<h4>Prompt</h4>
|
|
420
423
|
<pre class="modal-prompt">${u(e)}</pre>
|
|
@@ -454,11 +457,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
454
457
|
</div>
|
|
455
458
|
</div>
|
|
456
459
|
</div>
|
|
457
|
-
</div>`}const Ps=[[/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 Ms(e){for(const[t,s]of Ps)if(t.test(e))return s;return e.length>80?e.slice(0,77)+"...":e}function
|
|
460
|
+
</div>`}const Ps=[[/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 Ms(e){for(const[t,s]of Ps)if(t.test(e))return s;return e.length>80?e.slice(0,77)+"...":e}function Bs(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 qs(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 o=r[a];let c=i.children.find(l=>l.type==="dir"&&l.name===o);c||(c={type:"dir",name:o,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 Us='<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>',Qe='<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 We(e,t){const s=`padding-left:${8+t*16}px;`;if(e.type==="file"){const r=u(e.name);return`
|
|
458
461
|
<li class="art-tree-file">
|
|
459
462
|
<div class="art-tree-row" style="${s}">
|
|
460
463
|
<span class="art-tree-name" title="${r}">${r}</span>
|
|
461
|
-
<span class="art-tree-size">${
|
|
464
|
+
<span class="art-tree-size">${Bs(e.size)}</span>
|
|
462
465
|
<button class="art-tree-eye" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Preview ${r}" title="Preview">${Us}</button>
|
|
463
466
|
<button class="art-tree-download" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Download ${r}" title="Download">${Qe}</button>
|
|
464
467
|
</div>
|
|
@@ -487,7 +490,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
487
490
|
<div class="artifact-modal-preview" data-artifacts-key="${e}"></div>
|
|
488
491
|
</div>
|
|
489
492
|
</div>
|
|
490
|
-
</div>`}function js(e,t){const n=
|
|
493
|
+
</div>`}function js(e,t){const n=qs(e).children.map(i=>We(i,0)).join(""),r=JSON.stringify(e).replace(/</g,"\\u003c").replace(/>/g,"\\u003e");return`
|
|
491
494
|
<div class="detail-section artifacts-section" data-artifacts-key="${t}">
|
|
492
495
|
<div class="section-header">
|
|
493
496
|
<h3>Artifacts <span class="artifacts-count">(${e.length})</span></h3>
|
|
@@ -499,8 +502,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
499
502
|
<ul class="art-tree-root" data-artifacts-key="${t}" hidden>${n}</ul>
|
|
500
503
|
<script type="application/json" class="artifacts-data" data-artifacts-key="${t}">${r}<\/script>
|
|
501
504
|
${_s(t)}
|
|
502
|
-
</div>`}function Ce(){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 Ns(){Ce(),window.addEventListener("resize",Ce),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 o=a.id.replace("detail-","");document.querySelector(`.result-row[data-index="${o}"]`)?.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(),!t.target.closest(".sparse-line-content")&&((window.getSelection()?.toString().length??0)>0||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"})}),Ks()}function
|
|
505
|
+
</div>`}function Ce(){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 Ns(){Ce(),window.addEventListener("resize",Ce),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 o=a.id.replace("detail-","");document.querySelector(`.result-row[data-index="${o}"]`)?.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(),!t.target.closest(".sparse-line-content")&&((window.getSelection()?.toString().length??0)>0||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"})}),Ks()}function H(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 ge(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 Ve(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 Ds(e){const t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Y(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Hs(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 Os(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 Ie(e){const t=ge(e.content),s=new Blob([new Uint8Array(t)],{type:e.mimeType});Ve(s,Ds(e.path))}function Fs(e,t){const s=ge(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="${Y(e.path)}" src="${r}" />`;return}if(Hs(e.mimeType)){let n;try{n=new TextDecoder("utf-8",{fatal:!1}).decode(s)}catch{n=""}t.innerHTML=`<pre class="artifact-text">${Y(n)}</pre>`;return}t.innerHTML=`
|
|
503
506
|
<div class="artifact-not-previewable">
|
|
504
507
|
<p>This file type can’t be previewed inline.</p>
|
|
505
508
|
<p class="artifact-not-previewable-meta">${Y(e.mimeType)}</p>
|
|
506
|
-
</div>`}function Zs(e,t,s){const n=
|
|
509
|
+
</div>`}function Zs(e,t,s){const n=H(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"),o=i.querySelector(".artifact-modal-meta"),c=i.querySelector(".artifact-modal-preview"),l=i.querySelector(".artifact-modal-download");!a||!o||!c||(a.textContent=r.path,o.textContent=`${r.mimeType} · ${Os(r.size)}`,Fs(r,c),l&&(l.dataset.artifactIndex=String(s)),i.classList.add("visible"))}function Ks(){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&&Zs(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=H(n);if(!i)return;const a=i[Number(r)];a&&Ie(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=H(s);if(!r)return;const i=r[Number(n)];i&&Ie(i)})}),document.querySelectorAll(".artifacts-download-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey;if(!s)return;const n=H(s);if(!n||n.length===0)return;const r=n.map(o=>({path:o.path,bytes:ge(o.content)})),i=Gs(r),a=new Blob([new Uint8Array(i)],{type:"application/zip"});Ve(a,`artifacts-${s}.zip`)})})}function Gs(e){const t=new TextEncoder,s=[],n=[];let r=0;const i=Vs(new Date);for(const m of e){const f=t.encode(m.path),w=Ws(m.bytes),A=m.bytes.length,L=new Uint8Array(30+f.length),g=new DataView(L.buffer);g.setUint32(0,67324752,!0),g.setUint16(4,20,!0),g.setUint16(6,0,!0),g.setUint16(8,0,!0),g.setUint16(10,i.time,!0),g.setUint16(12,i.date,!0),g.setUint32(14,w,!0),g.setUint32(18,A,!0),g.setUint32(22,A,!0),g.setUint16(26,f.length,!0),g.setUint16(28,0,!0),L.set(f,30),s.push(L,m.bytes);const B=new Uint8Array(46+f.length),v=new DataView(B.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,w,!0),v.setUint32(20,A,!0),v.setUint32(24,A,!0),v.setUint16(28,f.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),B.set(f,46),n.push(B),r+=L.length+A}const a=r;let o=0;for(const m of n)o+=m.length;const c=new Uint8Array(22),l=new DataView(c.buffer);l.setUint32(0,101010256,!0),l.setUint16(4,0,!0),l.setUint16(6,0,!0),l.setUint16(8,e.length,!0),l.setUint16(10,e.length,!0),l.setUint32(12,o,!0),l.setUint32(16,a,!0),l.setUint16(20,0,!0);const p=a+o+c.length,d=new Uint8Array(p);let h=0;for(const m of s)d.set(m,h),h+=m.length;for(const m of n)d.set(m,h),h+=m.length;return d.set(c,h),d}const Qs=(()=>{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 Ws(e){let t=4294967295;for(let s=0;s<e.length;s++)t=Qs[(t^e[s])&255]^t>>>8;return(t^4294967295)>>>0}function Vs(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 ze(e){const t=document.getElementById("app");t&&(t.innerHTML=Vt(e),document.title=`AXIS Report — ${u(e.reportId)}`,Ns())}const Js=document.getElementById("axis-data"),ee=Js?.textContent?.trim();if(ee&&ee!=="__AXIS_REPORT_DATA__")try{ze(JSON.parse(ee))}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=>ze(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>
|
|
@@ -25,5 +25,5 @@ export interface AnimatedTokensProps {
|
|
|
25
25
|
* counts down — if `target` regresses (it shouldn't, by design), the displayed
|
|
26
26
|
* value simply holds until target catches up.
|
|
27
27
|
*/
|
|
28
|
-
export declare function AnimatedTokens({ target, active, isFinal }: AnimatedTokensProps): import("react
|
|
28
|
+
export declare function AnimatedTokens({ target, active, isFinal }: AnimatedTokensProps): import("react").JSX.Element | null;
|
|
29
29
|
//# sourceMappingURL=AnimatedTokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimatedTokens.d.ts","sourceRoot":"","sources":["../../src/ui/AnimatedTokens.tsx"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"AnimatedTokens.d.ts","sourceRoot":"","sources":["../../src/ui/AnimatedTokens.tsx"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,mBAAmB,sCAoC9E"}
|
package/dist/ui/App.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import type { JobState } from "../types/output.js";
|
|
|
2
2
|
export interface AppProps {
|
|
3
3
|
subscribe: (cb: (jobs: JobState[], skipped: number) => void) => void;
|
|
4
4
|
}
|
|
5
|
-
export declare function App({ subscribe }: AppProps): import("react
|
|
5
|
+
export declare function App({ subscribe }: AppProps): import("react").JSX.Element | null;
|
|
6
6
|
//# sourceMappingURL=App.d.ts.map
|
package/dist/ui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;CACtE;AAED,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;CACtE;AAED,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,sCAgB1C"}
|
|
@@ -16,5 +16,5 @@ export interface LiveDurationProps {
|
|
|
16
16
|
* a live-ticking elapsed counter computed from `startedAt`. The timer stays
|
|
17
17
|
* visible in every state so users see how long each agent took / is taking.
|
|
18
18
|
*/
|
|
19
|
-
export declare function LiveDuration({ startedAt, finalMs, active, color }: LiveDurationProps): import("react
|
|
19
|
+
export declare function LiveDuration({ startedAt, finalMs, active, color }: LiveDurationProps): import("react").JSX.Element | null;
|
|
20
20
|
//# sourceMappingURL=LiveDuration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveDuration.d.ts","sourceRoot":"","sources":["../../src/ui/LiveDuration.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"LiveDuration.d.ts","sourceRoot":"","sources":["../../src/ui/LiveDuration.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,sCAkBpF"}
|
package/dist/ui/LiveStatus.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ interface LiveStatusProps {
|
|
|
3
3
|
jobs: JobState[];
|
|
4
4
|
skippedCount?: number;
|
|
5
5
|
}
|
|
6
|
-
export declare function LiveStatus({ jobs, skippedCount }: LiveStatusProps): import("react
|
|
6
|
+
export declare function LiveStatus({ jobs, skippedCount }: LiveStatusProps): import("react").JSX.Element;
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=LiveStatus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStatus.d.ts","sourceRoot":"","sources":["../../src/ui/LiveStatus.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,YAAgB,EAAE,EAAE,eAAe
|
|
1
|
+
{"version":3,"file":"LiveStatus.d.ts","sourceRoot":"","sources":["../../src/ui/LiveStatus.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,YAAgB,EAAE,EAAE,eAAe,+BA8CrE"}
|