@backtrack-js/browser 0.5.2 → 0.5.4
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/README.md +56 -54
- package/bin/cli.cjs +5 -2
- package/bin/export-context.cjs +50 -0
- package/bin/mcp.cjs +19 -0
- package/bin/symbolize.cjs +214 -66
- package/dist/capturers/browser.d.ts +18 -0
- package/dist/capturers/console.d.ts +0 -1
- package/dist/capturers/errors.d.ts +3 -2
- package/dist/capturers/index.d.ts +0 -1
- package/dist/capturers/navigation.d.ts +0 -1
- package/dist/capturers/network.d.ts +11 -2
- package/dist/capturers/performance.d.ts +0 -1
- package/dist/capturers/route-matcher.d.ts +0 -1
- package/dist/capturers/rrweb.d.ts +2 -1
- package/dist/capturers/sanitizer.d.ts +1 -1
- package/dist/core/flight-recorder.d.ts +9 -1
- package/dist/core/state-machine.d.ts +0 -1
- package/dist/dev-server/index.d.ts +0 -1
- package/dist/dev-server/middleware.d.ts +0 -1
- package/dist/dev-server.cjs +3 -7
- package/dist/dev-server.js +128 -91
- package/dist/incident-reports-9iXHIaBD.js +1242 -0
- package/dist/incident-reports-Cjos7N-u.cjs +51 -0
- package/dist/index.cjs +53 -39
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2357 -2080
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp.cjs +2 -0
- package/dist/mcp.js +203 -0
- package/dist/storage/batch-writer.d.ts +6 -1
- package/dist/storage/db.d.ts +0 -1
- package/dist/storage/incident-manager.d.ts +10 -7
- package/dist/storage/index.d.ts +0 -1
- package/dist/storage/retention.d.ts +0 -1
- package/dist/storage/session.d.ts +0 -1
- package/dist/types/artifact.d.ts +50 -1
- package/dist/types/browser-context.d.ts +34 -0
- package/dist/types/chunk.d.ts +0 -1
- package/dist/types/health.d.ts +0 -1
- package/dist/types/incident.d.ts +0 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/options.d.ts +15 -1
- package/dist/types/timeline.d.ts +11 -1
- package/dist/types/transport.d.ts +0 -1
- package/dist/types/visual-proposal.d.ts +1 -0
- package/dist/utils/compression.d.ts +0 -1
- package/dist/utils/context-package.d.ts +4 -0
- package/dist/utils/gist-uploader.d.ts +0 -1
- package/dist/utils/incident-query.d.ts +93 -0
- package/dist/utils/incident-reports.d.ts +18 -0
- package/dist/utils/interactions.d.ts +13 -0
- package/dist/utils/markdown.d.ts +3 -1
- package/dist/validation/structure.d.ts +11 -0
- package/dist/validation/validate.d.ts +3 -2
- package/dist/viewer/assets/index-BNTvj2zy.js +337 -0
- package/dist/viewer/assets/{index-092olPra.css → index-DXHvcqkw.css} +1 -1
- package/dist/viewer/index.html +2 -2
- package/dist/widget/annotator.d.ts +0 -1
- package/dist/widget/element-editor.d.ts +7 -0
- package/dist/widget/styles.d.ts +0 -1
- package/dist/widget/widget.d.ts +9 -3
- package/package.json +113 -90
- package/dist/capturers/console.d.ts.map +0 -1
- package/dist/capturers/errors.d.ts.map +0 -1
- package/dist/capturers/index.d.ts.map +0 -1
- package/dist/capturers/navigation.d.ts.map +0 -1
- package/dist/capturers/network.d.ts.map +0 -1
- package/dist/capturers/performance.d.ts.map +0 -1
- package/dist/capturers/route-matcher.d.ts.map +0 -1
- package/dist/capturers/rrweb.d.ts.map +0 -1
- package/dist/capturers/sanitizer.d.ts.map +0 -1
- package/dist/core/flight-recorder.d.ts.map +0 -1
- package/dist/core/state-machine.d.ts.map +0 -1
- package/dist/dev-server/index.d.ts.map +0 -1
- package/dist/dev-server/middleware.d.ts.map +0 -1
- package/dist/dev-server.cjs.map +0 -1
- package/dist/dev-server.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/markdown-Ao5Ah9MF.cjs +0 -9
- package/dist/markdown-Ao5Ah9MF.cjs.map +0 -1
- package/dist/markdown-D3C94OlY.js +0 -494
- package/dist/markdown-D3C94OlY.js.map +0 -1
- package/dist/storage/batch-writer.d.ts.map +0 -1
- package/dist/storage/db.d.ts.map +0 -1
- package/dist/storage/incident-manager.d.ts.map +0 -1
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/retention.d.ts.map +0 -1
- package/dist/storage/session.d.ts.map +0 -1
- package/dist/types/artifact.d.ts.map +0 -1
- package/dist/types/chunk.d.ts.map +0 -1
- package/dist/types/health.d.ts.map +0 -1
- package/dist/types/incident.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/options.d.ts.map +0 -1
- package/dist/types/timeline.d.ts.map +0 -1
- package/dist/types/transport.d.ts.map +0 -1
- package/dist/utils/compression.d.ts.map +0 -1
- package/dist/utils/gist-uploader.d.ts.map +0 -1
- package/dist/utils/markdown.d.ts.map +0 -1
- package/dist/validation/validate.d.ts.map +0 -1
- package/dist/viewer/assets/index-D8m3bwRf.js +0 -197
- package/dist/widget/annotator.d.ts.map +0 -1
- package/dist/widget/styles.d.ts.map +0 -1
- package/dist/widget/widget.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--bg-app: #0f1117;--bg-surface: #161a23;--bg-surface-elevated: #1e2430;--bg-surface-active: #1e2430;--bg-code: #050811;--bg-input: #131720;--border-subtle: #262d3d;--border-strong: #3b4252;--border-focus: #3b82f6;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--text-main: #f8fafc;--text-secondary: #94a3b8;--text-muted: #64748b;--text-dim: #475569;--blue-500: #2563eb;--blue-600: #1d4ed8;--blue-focus: #3b82f6;--red-500: #ef4444;--red-bg: rgba(239, 68, 68, .12);--red-border: rgba(239, 68, 68, .35);--red-text: #f87171;--amber-500: #f59e0b;--amber-bg: rgba(245, 158, 11, .12);--amber-border: rgba(245, 158, 11, .35);--amber-text: #fbbf24;--emerald-500: #10b981;--emerald-text: #34d399;--radius-sm: 6px;--radius-md: 8px}*{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--bg-app);color:var(--text-secondary);font-family:var(--font-sans);font-size:13px;line-height:1.4;height:100vh;overflow:hidden;display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{height:100%;display:flex;flex-direction:column}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#334155;border-radius:var(--radius-sm)}::-webkit-scrollbar-thumb:hover{background:#475569}.app-container{display:flex;flex-direction:column;height:100%;background-color:var(--bg-app);overflow:hidden}.app-header{background-color:var(--bg-surface);border-bottom:1px solid var(--border-subtle);display:flex;flex-direction:column;flex-shrink:0;z-index:30}.header-primary-band{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;border-bottom:1px solid rgba(30,41,59,.8);min-height:42px}.header-brand-wrap{display:flex;align-items:center;gap:8px;min-width:0}.brand-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--blue-focus);flex-shrink:0}.brand-title{font-size:13px;font-weight:600;color:var(--text-main);letter-spacing:-.01em;white-space:nowrap}.brand-version-badge{font-family:var(--font-mono);font-size:10px;font-weight:500;padding:1px 5px;border-radius:var(--radius-sm);background-color:var(--bg-surface-active);color:var(--text-secondary);border:1px solid var(--border-subtle);flex-shrink:0}.incident-status-badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:11px;font-weight:500;background-color:var(--bg-surface-elevated);color:var(--text-secondary);border:1px solid var(--border-subtle);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.header-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:12px}.header-secondary-band{display:flex;align-items:center;padding:4px 14px;background-color:#0b1120;min-height:32px;overflow-x:auto}.incident-meta-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%}.meta-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 7px;border-radius:var(--radius-sm);background-color:var(--bg-surface);border:1px solid var(--border-subtle);font-family:var(--font-mono);font-size:11px;color:var(--text-secondary);white-space:nowrap;flex-shrink:0}.meta-label{color:var(--text-muted)}.meta-value{color:var(--text-main);font-weight:500}.meta-chip-btn{background-color:var(--bg-surface);cursor:pointer;transition:background-color .1s ease,border-color .1s ease;outline:none}.meta-chip-btn:hover{background-color:var(--bg-surface-elevated);border-color:var(--border-strong)}.meta-chip-btn:focus-visible{outline:2px solid var(--border-focus)}.meta-id{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}.meta-copied{color:var(--emerald-text);font-weight:700;margin-left:2px}.meta-chip-host{max-width:220px}.meta-chip-host .meta-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px;display:inline-block;vertical-align:bottom}.meta-chip-drops.is-warning{border-color:var(--red-border);background-color:var(--red-bg)}.meta-chip-drops.is-warning .meta-value{color:var(--red-text)}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:6px;background-color:var(--blue-500);color:#fff;border:1px solid var(--blue-600);border-radius:var(--radius-md);padding:6px 14px;font-family:var(--font-sans);font-size:12px;font-weight:500;cursor:pointer;transition:background-color .1s ease;-webkit-user-select:none;user-select:none;outline:none}.btn-primary:hover{background-color:var(--blue-600)}.btn-primary:focus-visible{outline:2px solid var(--blue-focus);outline-offset:1px}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;gap:6px;background-color:var(--bg-surface-active);color:var(--text-main);border:1px solid var(--border-strong);border-radius:var(--radius-md);padding:4px 10px;font-family:var(--font-sans);font-size:11px;font-weight:500;cursor:pointer;transition:background-color .1s ease,border-color .1s ease;-webkit-user-select:none;user-select:none;outline:none}.btn-secondary:hover{background-color:#27354f;border-color:#475569}.btn-secondary:focus-visible{outline:2px solid var(--blue-focus);outline-offset:1px}.mobile-tab-nav{display:none}@media (max-width: 960px){.mobile-tab-nav{display:flex;background-color:var(--bg-surface);border-bottom:1px solid var(--border-subtle);padding:4px 10px;gap:6px;flex-shrink:0}.mobile-tab-btn{flex:1;background-color:transparent;color:var(--text-muted);border:1px solid transparent;border-radius:var(--radius-md);padding:6px 12px;font-family:var(--font-sans);font-size:12px;font-weight:500;cursor:pointer;text-align:center;transition:background-color .1s ease,color .1s ease;outline:none}.mobile-tab-btn:hover{color:var(--text-main);background-color:var(--bg-surface-elevated)}.mobile-tab-btn.is-active{background-color:var(--bg-surface-active);color:var(--text-main);border-color:var(--border-strong);font-weight:600}.mobile-tab-btn:focus-visible{outline:2px solid var(--blue-focus)}}.main-layout{display:flex;flex:1;overflow:hidden;padding:10px;gap:10px;background-color:var(--bg-app)}.pane-wrapper{display:flex;flex-direction:column;min-height:0}.replay-wrapper{flex:1.35;min-width:0}.timeline-wrapper{width:clamp(300px,30vw,460px);flex-shrink:0}.timeline-toggle{align-self:center;flex:0 0 24px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--bg-surface);color:var(--text-secondary);border:1px solid var(--border-strong);border-radius:var(--radius-sm);cursor:pointer}.timeline-toggle:hover{color:var(--text-main)}.timeline-toggle:focus-visible{outline:2px solid var(--blue-focus)}@media (min-width: 961px){.pane-wrapper.mobile-hidden{display:flex!important}}@media (max-width: 960px){.main-layout{flex-direction:column;padding:6px;gap:6px}.replay-wrapper,.timeline-wrapper{width:100%!important;flex:1}.pane-wrapper.mobile-hidden{display:none!important}}.replay-pane{flex:1;display:flex;flex-direction:column;background-color:var(--bg-surface);border-radius:var(--radius-md);border:1px solid var(--border-subtle);overflow:hidden;min-height:0}.replay-container{flex:1;display:flex;align-items:center;justify-content:center;overflow:auto;position:relative;padding:12px;background-color:#070a12}.replay-scaler-frame{position:relative;background-color:#000;border-radius:var(--radius-md);border:1px solid var(--border-strong);overflow:hidden;flex-shrink:0;transition:width .1s ease,height .1s ease}.replay-top-overlay{position:absolute;top:8px;left:8px;z-index:30;display:flex;align-items:center;gap:6px;pointer-events:none}.scale-pill{display:inline-flex;align-items:center;padding:2px 6px;border-radius:var(--radius-sm);background-color:#090d16d9;border:1px solid var(--border-strong);font-family:var(--font-mono);font-size:11px;color:var(--text-secondary)}.replay-frame-wrapper{transform-origin:top left;position:relative;background-color:#fff}.replayer-wrapper{position:relative!important;width:100%!important;height:100%!important;overflow:hidden}.replayer-wrapper iframe{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important;outline:none!important;background-color:#fff!important;display:block!important;z-index:1!important}.replayer-mouse-tail{position:absolute!important;top:0!important;left:0!important;pointer-events:none!important;z-index:10!important}.replayer-mouse{position:absolute!important;z-index:20!important;pointer-events:none!important}.player-controls-bar{position:relative;background-color:#0b101c;border-top:1px solid var(--border-subtle);padding:8px 12px;display:flex;flex-direction:column;gap:8px;flex-shrink:0;z-index:20}.scrubber-track-container{position:relative;width:100%;height:14px;display:flex;align-items:center;cursor:pointer}.scrubber-track-bg{position:relative;width:100%;height:4px;background-color:#1e293b;border-radius:2px;overflow:visible}.scrubber-fill{height:100%;background-color:var(--blue-500);border-radius:2px;position:relative;pointer-events:none}.scrubber-thumb-indicator{position:absolute;right:-5px;top:50%;transform:translateY(-50%);width:10px;height:10px;border-radius:50%;background-color:#fff;border:2px solid var(--blue-500)}.milestone-marker{position:absolute;top:50%;transform:translate(-50%,-50%);width:7px;height:7px;border-radius:50%;border:1px solid #0b101c;cursor:pointer;transition:transform .1s ease,box-shadow .1s ease;z-index:15;pointer-events:auto}.milestone-marker:hover{transform:translate(-50%,-50%) scale(2);box-shadow:0 0 8px #fff9;z-index:25}.marker-network{background-color:var(--text-secondary)}.marker-console{background-color:var(--amber-500)}.marker-error{background-color:var(--red-500);box-shadow:0 0 5px #ef4444cc}.marker-navigation{background-color:var(--text-secondary)}.marker-generic{background-color:#64748b}.seek-slider-overlay{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;margin:0;z-index:10}.scrubber-hover-tooltip{position:absolute;bottom:calc(100% + 8px);transform:translate(-50%);background-color:#0f172a;color:#f8fafc;border:1px solid #334155;border-radius:4px;padding:4px 8px;font-family:var(--font-mono);font-size:11px;white-space:nowrap;pointer-events:none;z-index:40;box-shadow:0 4px 14px #0009;display:flex;flex-direction:column;align-items:center;gap:2px;max-width:320px;animation:tooltipFadeIn .08s ease-out}.scrubber-hover-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border-width:4px;border-style:solid;border-color:#334155 transparent transparent transparent}@keyframes tooltipFadeIn{0%{opacity:0;transform:translate(-50%,2px)}to{opacity:1;transform:translate(-50%)}}.scrubber-hover-tooltip .tooltip-time{font-weight:700;color:#38bdf8;letter-spacing:.5px}.scrubber-hover-tooltip .tooltip-event{font-family:var(--font-sans);font-size:10px;color:#cbd5e1;max-width:280px;overflow:hidden;text-overflow:ellipsis}.scrubber-hover-tooltip .tooltip-event.is-error{color:#fca5a5;font-weight:600}.jump-feedback-toast{font-size:11px;font-family:var(--font-mono);color:#fca5a5;background-color:#ef444426;border:1px solid rgba(239,68,68,.35);padding:2px 8px;border-radius:var(--radius-sm);max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;animation:tooltipFadeIn .15s ease-out}.btn-jump-error.is-no-error{opacity:.7;border-color:#94a3b84d;color:var(--text-secondary);background-color:#94a3b81a}.btn-jump-error.is-no-error:hover{opacity:1;background-color:#94a3b833;color:var(--text-main);border-color:var(--border-subtle)}.controls-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;overflow-x:auto;white-space:nowrap;padding-right:68px;min-height:30px}.controls-toolbar>div,.controls-left-group>*{flex-shrink:0}.btn-step,.time-display{white-space:nowrap}.btn-play-pause{min-width:65px}.jump-feedback-toast{position:absolute;bottom:100%;left:12px}.replay-options{position:absolute;right:12px;bottom:8px;z-index:30}.replay-options>summary{list-style:none;height:26px;padding:4px 8px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface-active);color:var(--text-main);font-size:11px;cursor:pointer}.replay-options>summary:focus-visible{outline:2px solid var(--blue-focus)}.replay-options-panel{position:absolute;right:0;bottom:34px;width:min(330px,calc(100vw - 48px));max-height:50vh;overflow-y:auto;display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--bg-surface-elevated);border:1px solid var(--border-strong);border-radius:var(--radius-md);box-shadow:0 8px 24px #0008;font-size:12px}.replay-options-panel .control-item,.replay-option{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.replay-options-panel p,.replay-option>span{font-size:11px;line-height:1.6;color:var(--text-secondary)}.controls-left-group{display:flex;align-items:center;gap:8px}.btn-play-pause{height:26px;padding:0 10px;border-radius:var(--radius-sm);background-color:var(--text-main);color:#0b0f17;font-family:var(--font-sans);font-size:11px;font-weight:600;border:1px solid var(--text-main);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:background-color .1s ease;outline:none}.btn-play-pause:hover{background-color:#e2e8f0}.btn-play-pause:focus-visible{outline:2px solid var(--blue-focus)}.step-buttons-group{display:flex;align-items:center;background-color:var(--bg-surface);border-radius:var(--radius-sm);padding:1px;border:1px solid var(--border-subtle)}.btn-step{height:22px;padding:0 6px;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--text-secondary);background:transparent;border:none;border-radius:2px;cursor:pointer;transition:background-color .1s ease,color .1s ease;outline:none}.btn-step:hover{color:var(--text-main);background-color:var(--bg-surface-elevated)}.btn-step:focus-visible{outline:2px solid var(--blue-focus)}.btn-step-frame{font-weight:600;color:#38bdf8;padding:0 7px}.btn-step-frame:hover{background-color:#38bdf826;color:#7dd3fc}.btn-jump-error{height:26px;padding:0 9px;border-radius:var(--radius-sm);background-color:#ef444424;color:#fca5a5;font-family:var(--font-sans);font-size:11px;font-weight:600;border:1px solid rgba(239,68,68,.45);cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all .12s ease;outline:none}.btn-jump-error:hover{background-color:#ef4444;color:#fff;border-color:#ef4444}.btn-jump-error:focus-visible{outline:2px solid var(--red-border)}.step-divider{width:1px;height:12px;background-color:var(--border-subtle);margin:0 1px}.time-display{display:flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-sm);background-color:var(--bg-surface);border:1px solid var(--border-subtle);font-family:var(--font-mono);font-size:11px}.time-current{color:var(--text-main);font-weight:600}.time-divider{color:var(--text-dim)}.time-total{color:var(--text-muted)}.controls-right-group{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px}.control-item{display:flex;align-items:center;gap:4px}.control-label{color:var(--text-muted)}.control-select{background-color:var(--bg-surface);border:1px solid var(--border-subtle);color:var(--text-main);border-radius:var(--radius-sm);padding:2px 6px;font-family:var(--font-mono);font-size:11px;cursor:pointer;outline:none}.control-select:focus-visible{border-color:var(--blue-focus);outline:1px solid var(--blue-focus)}.timeline-pane{flex:1;display:flex;flex-direction:column;background-color:var(--bg-surface);border-radius:var(--radius-md);border:1px solid var(--border-subtle);overflow:hidden;min-height:0}.timeline-header{padding:8px 10px;border-bottom:1px solid var(--border-subtle);background-color:#0b101c;display:flex;flex-direction:column;gap:8px;flex-shrink:0}.search-input-wrap{position:relative;display:flex;align-items:center}.search-icon{position:absolute;left:8px;color:var(--text-muted);pointer-events:none;display:flex}.timeline-search{width:100%;background-color:var(--bg-input);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);color:var(--text-main);font-family:var(--font-sans);font-size:12px;padding:5px 8px 5px 28px;outline:none}.timeline-search:focus{border-color:var(--blue-focus)}.filter-tabs-row{display:flex;align-items:center;gap:3px;overflow-x:auto}.filter-tab{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--text-muted);background-color:transparent;border:1px solid transparent;cursor:pointer;white-space:nowrap;outline:none}.filter-tab:hover{color:var(--text-secondary);background-color:var(--bg-surface-elevated)}.filter-tab.active{background-color:var(--bg-surface-active);color:var(--text-main);border-color:var(--border-strong);font-weight:600}.filter-tab:focus-visible{outline:2px solid var(--blue-focus)}.tab-count{font-family:var(--font-mono);font-size:10px;padding:0 4px;border-radius:2px;background-color:var(--bg-app);color:var(--text-secondary)}.tab-count-error{background-color:var(--red-bg);color:var(--red-text)}.tab-count-network{background-color:var(--bg-surface-active);color:var(--text-secondary)}.timeline-list{flex:1;overflow-y:auto;padding:4px;display:flex;flex-direction:column;gap:1px}.timeline-item{display:flex;flex-direction:column;padding:5px 8px;border-radius:var(--radius-sm);border:1px solid transparent;border-left:3px solid transparent;background-color:transparent;cursor:pointer;outline:none;transition:background-color .1s ease}.timeline-item:hover{background-color:var(--bg-surface-elevated)}.timeline-item.active{background-color:var(--bg-surface-elevated);border-left-color:var(--blue-500)}.timeline-item:focus-visible{outline:2px solid var(--blue-focus)}.timeline-row-main{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;min-width:0}.timeline-col-time{color:var(--text-muted);width:52px;flex-shrink:0}.timeline-col-badge-wrap{flex-shrink:0}.timeline-badge{display:inline-block;padding:1px 4px;border-radius:2px;font-family:var(--font-mono);font-size:10px;font-weight:500;line-height:1.2}.badge-neutral{background-color:var(--bg-surface-active);color:var(--text-secondary);border:1px solid var(--border-subtle)}.badge-warn{background-color:var(--amber-bg);color:var(--amber-text);border:1px solid var(--amber-border)}.badge-error{background-color:var(--red-bg);color:var(--red-text);border:1px solid var(--red-border)}.timeline-col-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary)}.timeline-summary-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.timeline-summary-text.is-error{color:var(--red-text)}.timeline-col-status{flex-shrink:0;text-align:right;font-size:10.5px}.timeline-col-meta{color:var(--text-muted)}.timeline-col-meta.is-error{color:var(--red-text)}.timeline-details-panel{margin-top:6px;padding:6px 8px;background-color:var(--bg-code);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:11px;color:var(--text-secondary)}.details-row{margin-bottom:3px;word-break:break-all}.details-url{color:var(--text-main)}.details-code{margin-top:4px;padding:6px;background-color:var(--bg-app);border-radius:2px;border:1px solid var(--border-subtle);overflow-x:auto;white-space:pre-wrap;word-break:break-all;font-size:10.5px}.details-error-code{color:var(--red-text)}.timeline-empty-message{padding:24px;text-align:center;color:var(--text-muted);font-size:12px}.timeline-footer{padding:6px 10px;border-top:1px solid var(--border-subtle);background-color:#0b101c;display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--text-muted);flex-shrink:0}.timeline-footer-status{color:var(--text-muted)}.timeline-footer-count{font-family:var(--font-mono);color:var(--text-dim)}.importer-wrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:20px;background-color:var(--bg-app)}.dropzone{border:1px dashed var(--border-strong);border-radius:var(--radius-md);padding:40px 24px;text-align:center;max-width:480px;width:100%;background-color:var(--bg-surface);cursor:pointer;transition:border-color .1s ease,background-color .1s ease;outline:none}.dropzone:hover,.dropzone.dragover{border-color:var(--blue-focus);background-color:var(--bg-surface-elevated)}.dropzone:focus-visible{outline:2px solid var(--blue-focus)}.dropzone-icon{margin-bottom:12px;color:var(--blue-focus);display:flex;justify-content:center}.dropzone h2{font-size:16px;font-weight:600;margin-bottom:6px;color:var(--text-main);letter-spacing:-.01em}.dropzone-description{color:var(--text-secondary);font-size:12px;margin-bottom:18px;line-height:1.5}.importer-hint{color:var(--text-muted);font-size:11px;margin-top:14px;line-height:1.4}.import-error{margin-top:14px;background-color:var(--red-bg);color:var(--red-text);border:1px solid var(--red-border);border-radius:var(--radius-md);padding:10px 14px;max-width:480px;width:100%;font-size:11px;font-family:var(--font-mono)}.import-error ul{margin-top:6px;padding-left:16px}.resolved-stack{margin-top:8px;display:flex;flex-direction:column;gap:6px}.resolved-frame{background-color:var(--bg-app);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);overflow:hidden}.resolved-frame>summary{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;cursor:pointer;background-color:var(--bg-surface-elevated);font-family:var(--font-mono);font-size:11px;color:var(--text-main);-webkit-user-select:none;user-select:none}.resolved-frame>summary:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px}.resolved-frame-location{display:flex;align-items:center;gap:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resolved-frame-copy{background:transparent;border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:10px;padding:2px 6px;border-radius:3px;cursor:pointer;font-family:var(--font-sans);white-space:nowrap;flex-shrink:0}.resolved-frame-copy:hover{background:var(--bg-surface-active);color:var(--text-main);border-color:var(--border-strong)}.resolved-frame-copy:focus-visible{outline:2px solid var(--border-focus)}.source-context{overflow-x:auto;background-color:var(--bg-code);font-family:var(--font-mono);font-size:11px;line-height:1.5}.source-context pre{margin:0;padding:6px 0}.source-context code{display:block;font-family:inherit}.source-line{display:flex;padding:0 10px;min-width:fit-content}.source-line-active{background-color:#ef444426;border-left:2px solid var(--red-500)}.source-line-number{display:inline-block;width:44px;text-align:right;padding-right:12px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex-shrink:0;border-right:1px solid var(--border-subtle);margin-right:12px}.source-line-active .source-line-number{color:var(--red-text);font-weight:600}.source-line-content{color:var(--text-secondary);white-space:pre}.source-line-active .source-line-content{color:var(--text-main);font-weight:500}.source-line-pointer .source-line-number{border-right:1px solid transparent}.source-line-pointer .source-line-content{color:var(--red-text);font-weight:700}.details-original-stack{margin-top:8px}.details-original-stack>summary{font-size:11px;color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}@media (min-width: 601px){.mobile-tab-nav{display:none}.main-layout{flex-direction:row;min-height:0;gap:6px}.replay-wrapper{width:auto!important;min-width:0;flex:1}.timeline-wrapper{width:clamp(280px,30vw,460px)!important;flex:0 0 auto}.main-layout .pane-wrapper.mobile-hidden{display:flex!important}.main-layout.timeline-collapsed .timeline-wrapper{width:44px!important}}@media (max-width: 600px){.timeline-toggle{display:none}}.header-primary-band,.header-secondary-band{background:var(--bg-app)}.brand-title{font-size:16px}.timeline-header,.timeline-footer{background:var(--bg-app)}.activity-tabs{gap:8px}.timeline-header{position:relative;z-index:2}.activity-tabs{overflow:visible}.timeline-filter-menu{margin-left:auto;flex-shrink:0;position:static}.timeline-filter-menu .timeline-filter-panel{z-index:5}.timeline-filter-menu>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:30px;height:30px;color:var(--text-secondary);position:relative;border-radius:6px}.timeline-filter-menu>summary:hover{color:var(--text-main);background:var(--bg-surface-elevated)}.timeline-filter-menu>summary:focus-visible{outline:2px solid var(--blue-focus)}.filter-active-dot{position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:#85dfc9}.timeline-filter-panel{position:absolute;right:10px;top:46px;width:min(300px,calc(100vw - 40px));max-height:55vh;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;background:var(--bg-surface-elevated);border:1px solid var(--border-strong);border-radius:8px;box-shadow:0 10px 25px #0009;color:var(--text-main);font-size:12px}.timeline-filter-panel p{color:var(--text-secondary);font-size:11px;line-height:1.5}.timeline-filter-panel fieldset{border:0;display:flex;flex-direction:column;gap:8px}.timeline-filter-panel legend{padding-bottom:10px;color:var(--text-secondary)}.timeline-filter-panel label{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.timeline-filter-panel input[type=checkbox]{accent-color:#85dfc9}.timeline-filter-panel input[type=search]{width:100%;padding:8px;color:var(--text-main);background:var(--bg-input);border:1px solid var(--border-strong);border-radius:6px}.activity-tabs .filter-tab{font-size:13px;padding:7px 10px}.timeline-toggle{align-self:auto;flex:0 0 28px;width:28px;height:30px;border:0;background:transparent}.timeline-pane.is-collapsed .timeline-header{padding:10px 7px}.timeline-pane.is-collapsed .activity-tabs>:not(.timeline-toggle),.timeline-pane.is-collapsed .timeline-header>:not(.activity-tabs),.timeline-pane.is-collapsed .timeline-list,.timeline-pane.is-collapsed .timeline-footer{display:none}.timeline-row-main{font-family:var(--font-sans);font-size:12px}.timeline-col-time,.timeline-col-status{font-family:var(--font-mono);font-size:11px}.timeline-item{padding:8px 10px}.player-controls-bar{padding:10px 18px 12px;gap:5px;background:#111720}.scrubber-track-bg{height:5px;background:#303949}.scrubber-fill{background:#85dfc9}.scrubber-thumb-indicator{width:15px;height:15px;right:-7px;background:#85dfc9;border:0}.marker-error{width:7px;height:7px;border:1px solid #111720;border-radius:50%;background:#ef4444;box-shadow:none}.scrubber-ticks{display:flex;justify-content:space-between;font:11px var(--font-mono);color:var(--text-muted);margin-bottom:4px}.controls-toolbar{min-height:38px;padding-right:110px;gap:16px}.controls-left-group{gap:10px}.btn-play-pause,.btn-jump-error{height:36px;border-radius:8px;padding:0 16px;font-size:15px}.btn-play-pause{min-width:110px;justify-content:center;background:#85dfc9;border-color:#85dfc9;color:#11241f}.btn-play-pause:hover{background:#a0e8d7}.btn-play-pause svg{width:16px;height:16px}.btn-jump-error{font-weight:400;background:transparent;color:#f0a9ab;border-color:#5e383b}.step-buttons-group{background:transparent;border:0;border-left:1px solid var(--border-subtle);border-radius:0;gap:6px;padding-left:12px;height:32px}.step-label{font:12px var(--font-sans);color:var(--text-secondary);margin-right:3px}.btn-step{height:30px;padding:0 6px;color:var(--text-main);font-size:14px}.btn-step-frame{color:var(--text-main)}.time-display{background:transparent;border:0;padding:0 6px;font-size:13px}.controls-right-group>.control-item>label{display:none}.controls-right-group .control-select{height:36px;padding:0 12px;font-size:14px;min-width:76px}.replay-options{right:18px;bottom:13px}.replay-options>summary{height:36px;padding:8px 14px;font-size:13px;background:transparent;border-radius:8px}.replay-options-panel{bottom:44px}.app-header{background:var(--bg-app)}.header-primary-band{padding:10px 18px;min-height:54px;border-bottom:1px solid var(--border-subtle)}.header-brand-wrap{gap:10px}.brand-icon{color:#85dfc9}.brand-title{font-size:17px;font-weight:600}.brand-version-badge{background:transparent;border:0;color:var(--text-muted)}.header-actions{gap:8px}.share-drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;color:var(--text-main);overflow:clip}.share-drawer-overlay[open]{display:flex;justify-content:flex-end}.share-drawer-overlay::backdrop{background:#0f11178c;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.share-drawer{position:absolute;top:0;right:0;width:min(480px,100%);height:100%;background:var(--bg-app);border-left:1px solid var(--border-subtle);box-shadow:-12px 0 40px #0005;display:flex;flex-direction:column}.share-drawer-overlay[open] .share-drawer{animation:share-drawer-in .18s ease-out both}.share-drawer>:first-child{flex-shrink:0}.share-drawer-body{padding:18px 24px;display:flex;flex-direction:column;gap:18px;flex:1;min-height:0;overflow-y:auto}.share-drawer-card{display:flex;flex-direction:column;gap:10px}.share-drawer-card+.share-drawer-card{border-top:1px solid var(--border-subtle);padding-top:16px}.share-drawer-card>.btn-primary,.share-drawer-card>.btn-secondary{min-height:38px;width:100%;justify-content:center;border-radius:8px}.share-format-option{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--bg-surface);cursor:pointer;transition:background-color .12s ease,border-color .12s ease}.share-format-option:hover{background:var(--bg-surface-elevated);border-color:var(--border-strong)}.share-format-option:has(input:checked){background:#2563eb1f;border-color:var(--blue-focus)}.share-format-option:focus-within{outline:2px solid var(--blue-focus);outline-offset:2px}.share-drawer button:focus-visible{outline:2px solid var(--blue-focus);outline-offset:2px}.share-drawer input{min-width:0}#share-drawer-title{font-size:18px;line-height:1.4}.share-drawer-body p,.share-drawer-body div,.share-drawer-body label,.share-drawer-body input{font-size:12px!important;line-height:1.4!important}.share-drawer-card>div:first-child>strong{font-size:14px!important}.share-format-option>div>span{font-size:13px!important}.share-drawer-body button{font-size:13px!important;min-height:36px}@keyframes share-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@media (prefers-reduced-motion: reduce){.share-drawer-overlay[open] .share-drawer{animation:none}}.header-actions .btn-secondary{height:36px;padding:0 12px;gap:8px;font-size:13px;line-height:1;background:transparent;border-color:transparent;color:var(--text-secondary);font-weight:500;white-space:nowrap}.header-actions .btn-secondary svg{width:16px;height:16px;flex-shrink:0}.header-actions .btn-secondary:hover{background:var(--bg-surface-elevated);border-color:var(--border-subtle);color:var(--text-main)}.header-actions .btn-secondary[aria-label="Carregar outro incidente"]{background:#2563eb29;border-color:var(--border-subtle);color:#93c5fd}.header-actions .btn-secondary[aria-label="Carregar outro incidente"]:hover{background:var(--bg-surface-elevated);border-color:var(--blue-focus)}.header-actions .btn-secondary:last-child{background:var(--blue-500);border-color:var(--blue-focus);color:#fff}.header-actions .btn-secondary:last-child:hover{background:var(--blue-600)}.header-actions .btn-secondary:focus-visible{outline-offset:3px}@media (max-width: 760px){.header-primary-band{flex-wrap:wrap;gap:10px}.header-actions{margin-left:0;flex-shrink:1;flex-wrap:wrap;gap:6px}}.header-secondary-band{padding:6px 18px;min-height:34px}.incident-meta-chips{gap:8px}.meta-chip{background:transparent;border-color:transparent;padding:2px 0;gap:6px;align-items:baseline;line-height:18px}.meta-chip+.meta-chip{padding-left:10px;border-left:1px solid var(--border-subtle);border-radius:0}.meta-label{font-family:var(--font-sans);font-size:12px;color:var(--text-secondary)}.meta-value{font-weight:400;font-size:12px;line-height:inherit}.meta-chip-btn:hover{background:var(--bg-surface);border-color:var(--border-subtle)}@media (max-width: 600px){.timeline-pane.is-collapsed .timeline-header>:not(.activity-tabs),.timeline-pane.is-collapsed .timeline-list,.timeline-pane.is-collapsed .timeline-footer{display:flex}.timeline-pane.is-collapsed .activity-tabs>:not(.timeline-toggle){display:inline-flex}}.replayer-wrapper{position:relative}.replayer-mouse{position:absolute;width:20px;height:20px;transition:left .05s linear,top .05s linear;background-size:contain;background-position:center center;background-repeat:no-repeat;background-image:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzMwMHB4JyB3aWR0aD0nMzAwcHgnICBmaWxsPSIjMDAwMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iTGF5ZXIgMSIgdmlld0JveD0iMCAwIDUwIDUwIiB4PSIwcHgiIHk9IjBweCI+PHRpdGxlPkRlc2lnbl90bnA8L3RpdGxlPjxwYXRoIGQ9Ik00OC43MSw0Mi45MUwzNC4wOCwyOC4yOSw0NC4zMywxOEExLDEsMCwwLDAsNDQsMTYuMzlMMi4zNSwxLjA2QTEsMSwwLDAsMCwxLjA2LDIuMzVMMTYuMzksNDRhMSwxLDAsMCwwLDEuNjUuMzZMMjguMjksMzQuMDgsNDIuOTEsNDguNzFhMSwxLDAsMCwwLDEuNDEsMGw0LjM4LTQuMzhBMSwxLDAsMCwwLDQ4LjcxLDQyLjkxWm0tNS4wOSwzLjY3TDI5LDMyYTEsMSwwLDAsMC0xLjQxLDBsLTkuODUsOS44NUwzLjY5LDMuNjlsMzguMTIsMTRMMzIsMjcuNThBMSwxLDAsMCwwLDMyLDI5TDQ2LjU5LDQzLjYyWiI+PC9wYXRoPjwvc3ZnPg==);border-color:transparent}.replayer-mouse:after{content:"";display:inline-block;width:20px;height:20px;background:#4950f6;border-radius:100%;transform:translate(-50%,-50%);opacity:.3}.replayer-mouse.active:after{animation:click .2s ease-in-out 1}.replayer-mouse.touch-device{background-image:none;width:70px;height:70px;border-width:4px;border-style:solid;border-radius:100%;margin-left:-37px;margin-top:-37px;border-color:#4950f600;transition:left 0s linear,top 0s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device:after{opacity:0}.replayer-mouse.touch-device.active:after{animation:touch-click .2s ease-in-out 1}.replayer-mouse-tail{position:absolute;pointer-events:none}@keyframes click{0%{opacity:.3;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}@keyframes touch-click{0%{opacity:0;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}
|
|
1
|
+
:root{--bg-app: #0f1117;--bg-surface: #161a23;--bg-surface-elevated: #1e2430;--bg-surface-active: #1e2430;--bg-code: #050811;--bg-input: #131720;--border-subtle: #262d3d;--border-strong: #3b4252;--border-focus: #3b82f6;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--text-main: #f8fafc;--text-secondary: #94a3b8;--text-muted: #64748b;--text-dim: #475569;--blue-500: #2563eb;--blue-600: #1d4ed8;--blue-focus: #3b82f6;--red-500: #ef4444;--red-bg: rgba(239, 68, 68, .12);--red-border: rgba(239, 68, 68, .35);--red-text: #f87171;--amber-500: #f59e0b;--amber-bg: rgba(245, 158, 11, .12);--amber-border: rgba(245, 158, 11, .35);--amber-text: #fbbf24;--emerald-500: #10b981;--emerald-text: #34d399;--radius-sm: 6px;--radius-md: 8px}*{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--bg-app);color:var(--text-secondary);font-family:var(--font-sans);font-size:13px;line-height:1.4;height:100vh;overflow:hidden;display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{height:100%;display:flex;flex-direction:column}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#334155;border-radius:var(--radius-sm)}::-webkit-scrollbar-thumb:hover{background:#475569}.app-container{display:flex;flex-direction:column;height:100%;background-color:var(--bg-app);overflow:hidden}.app-header{background-color:var(--bg-surface);border-bottom:1px solid var(--border-subtle);display:flex;flex-direction:column;flex-shrink:0;z-index:30}.header-primary-band{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;border-bottom:1px solid rgba(30,41,59,.8);min-height:42px}.header-brand-wrap{display:flex;align-items:center;gap:8px;min-width:0}.brand-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--blue-focus);flex-shrink:0}.brand-title{font-size:13px;font-weight:600;color:var(--text-main);letter-spacing:-.01em;white-space:nowrap}.brand-version-badge{font-family:var(--font-mono);font-size:10px;font-weight:500;padding:1px 5px;border-radius:var(--radius-sm);background-color:var(--bg-surface-active);color:var(--text-secondary);border:1px solid var(--border-subtle);flex-shrink:0}.incident-status-badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:11px;font-weight:500;background-color:var(--bg-surface-elevated);color:var(--text-secondary);border:1px solid var(--border-subtle);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.header-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:12px}.header-secondary-band{display:flex;align-items:center;padding:4px 14px;background-color:#0b1120;min-height:32px;overflow-x:auto}.incident-meta-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%}.meta-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 7px;border-radius:var(--radius-sm);background-color:var(--bg-surface);border:1px solid var(--border-subtle);font-family:var(--font-mono);font-size:11px;color:var(--text-secondary);white-space:nowrap;flex-shrink:0}.meta-label{color:var(--text-muted)}.meta-value{color:var(--text-main);font-weight:500}.meta-chip-btn{background-color:var(--bg-surface);cursor:pointer;transition:background-color .1s ease,border-color .1s ease;outline:none}.meta-chip-btn:hover{background-color:var(--bg-surface-elevated);border-color:var(--border-strong)}.meta-chip-btn:focus-visible{outline:2px solid var(--border-focus)}.meta-id{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}.meta-copied{color:var(--emerald-text);font-weight:700;margin-left:2px}.meta-chip-host{max-width:220px}.meta-chip-host .meta-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px;display:inline-block;vertical-align:bottom}.meta-chip-drops.is-warning{border-color:var(--red-border);background-color:var(--red-bg)}.meta-chip-drops.is-warning .meta-value{color:var(--red-text)}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:6px;background-color:var(--blue-500);color:#fff;border:1px solid var(--blue-600);border-radius:var(--radius-md);padding:6px 14px;font-family:var(--font-sans);font-size:12px;font-weight:500;cursor:pointer;transition:background-color .1s ease;-webkit-user-select:none;user-select:none;outline:none}.btn-primary:hover{background-color:var(--blue-600)}.btn-primary:focus-visible{outline:2px solid var(--blue-focus);outline-offset:1px}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;gap:6px;background-color:var(--bg-surface-active);color:var(--text-main);border:1px solid var(--border-strong);border-radius:var(--radius-md);padding:4px 10px;font-family:var(--font-sans);font-size:11px;font-weight:500;cursor:pointer;transition:background-color .1s ease,border-color .1s ease;-webkit-user-select:none;user-select:none;outline:none}.btn-secondary:hover{background-color:#27354f;border-color:#475569}.btn-secondary:focus-visible{outline:2px solid var(--blue-focus);outline-offset:1px}.mobile-tab-nav{display:none}@media (max-width: 960px){.mobile-tab-nav{display:flex;background-color:var(--bg-surface);border-bottom:1px solid var(--border-subtle);padding:4px 10px;gap:6px;flex-shrink:0}.mobile-tab-btn{flex:1;background-color:transparent;color:var(--text-muted);border:1px solid transparent;border-radius:var(--radius-md);padding:6px 12px;font-family:var(--font-sans);font-size:12px;font-weight:500;cursor:pointer;text-align:center;transition:background-color .1s ease,color .1s ease;outline:none}.mobile-tab-btn:hover{color:var(--text-main);background-color:var(--bg-surface-elevated)}.mobile-tab-btn.is-active{background-color:var(--bg-surface-active);color:var(--text-main);border-color:var(--border-strong);font-weight:600}.mobile-tab-btn:focus-visible{outline:2px solid var(--blue-focus)}}.main-layout{display:flex;flex:1;overflow:hidden;padding:10px;gap:10px;background-color:var(--bg-app)}.pane-wrapper{display:flex;flex-direction:column;min-height:0}.replay-wrapper{flex:1.35;min-width:0}.timeline-wrapper{width:clamp(300px,30vw,460px);flex-shrink:0}.timeline-toggle{align-self:center;flex:0 0 24px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--bg-surface);color:var(--text-secondary);border:1px solid var(--border-strong);border-radius:var(--radius-sm);cursor:pointer}.timeline-toggle:hover{color:var(--text-main)}.timeline-toggle:focus-visible{outline:2px solid var(--blue-focus)}@media (min-width: 961px){.pane-wrapper.mobile-hidden{display:flex!important}}@media (max-width: 960px){.main-layout{flex-direction:column;padding:6px;gap:6px}.replay-wrapper,.timeline-wrapper{width:100%!important;flex:1}.pane-wrapper.mobile-hidden{display:none!important}}.replay-pane{flex:1;display:flex;flex-direction:column;background-color:var(--bg-surface);border-radius:var(--radius-md);border:1px solid var(--border-subtle);overflow:hidden;min-height:0}.replay-container{flex:1;display:flex;align-items:center;justify-content:center;overflow:auto;position:relative;padding:12px;background-color:#070a12}.replay-scaler-frame{position:relative;background-color:#000;border-radius:var(--radius-md);border:1px solid var(--border-strong);overflow:hidden;flex-shrink:0;transition:width .1s ease,height .1s ease}.replay-top-overlay{position:absolute;top:8px;left:8px;z-index:30;display:flex;align-items:center;gap:6px;pointer-events:none}.scale-pill{display:inline-flex;align-items:center;padding:2px 6px;border-radius:var(--radius-sm);background-color:#090d16d9;border:1px solid var(--border-strong);font-family:var(--font-mono);font-size:11px;color:var(--text-secondary)}.replay-frame-wrapper{transform-origin:top left;position:relative;background-color:#fff}.replayer-wrapper{position:relative!important;width:100%!important;height:100%!important;overflow:hidden}.replayer-wrapper iframe{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important;outline:none!important;background-color:#fff!important;display:block!important;z-index:1!important}.replayer-mouse-tail{position:absolute!important;top:0!important;left:0!important;pointer-events:none!important;z-index:10!important}.replayer-mouse{position:absolute!important;z-index:20!important;pointer-events:none!important}.player-controls-bar{position:relative;background-color:#0b101c;border-top:1px solid var(--border-subtle);padding:8px 12px;display:flex;flex-direction:column;gap:8px;flex-shrink:0;z-index:20}.scrubber-track-container{position:relative;width:100%;height:14px;display:flex;align-items:center;cursor:pointer}.scrubber-track-bg{position:relative;width:100%;height:4px;background-color:#1e293b;border-radius:2px;overflow:visible}.scrubber-fill{height:100%;background-color:var(--blue-500);border-radius:2px;position:relative;pointer-events:none}.scrubber-thumb-indicator{position:absolute;right:-5px;top:50%;transform:translateY(-50%);width:10px;height:10px;border-radius:50%;background-color:#fff;border:2px solid var(--blue-500)}.milestone-marker{position:absolute;top:50%;transform:translate(-50%,-50%);width:7px;height:7px;border-radius:50%;border:1px solid #0b101c;cursor:pointer;transition:transform .1s ease,box-shadow .1s ease;z-index:15;pointer-events:auto}.milestone-marker:hover{transform:translate(-50%,-50%) scale(2);box-shadow:0 0 8px #fff9;z-index:25}.marker-network{background-color:var(--text-secondary)}.marker-console{background-color:var(--amber-500)}.marker-error{background-color:var(--red-500);box-shadow:0 0 5px #ef4444cc}.marker-navigation{background-color:var(--text-secondary)}.marker-generic{background-color:#64748b}.seek-slider-overlay{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;margin:0;z-index:10}.scrubber-hover-tooltip{position:absolute;bottom:calc(100% + 8px);transform:translate(-50%);background-color:#0f172a;color:#f8fafc;border:1px solid #334155;border-radius:4px;padding:4px 8px;font-family:var(--font-mono);font-size:11px;white-space:nowrap;pointer-events:none;z-index:40;box-shadow:0 4px 14px #0009;display:flex;flex-direction:column;align-items:center;gap:2px;max-width:320px;animation:tooltipFadeIn .08s ease-out}.scrubber-hover-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border-width:4px;border-style:solid;border-color:#334155 transparent transparent transparent}@keyframes tooltipFadeIn{0%{opacity:0;transform:translate(-50%,2px)}to{opacity:1;transform:translate(-50%)}}.scrubber-hover-tooltip .tooltip-time{font-weight:700;color:#38bdf8;letter-spacing:.5px}.scrubber-hover-tooltip .tooltip-event{font-family:var(--font-sans);font-size:10px;color:#cbd5e1;max-width:280px;overflow:hidden;text-overflow:ellipsis}.scrubber-hover-tooltip .tooltip-event.is-error{color:#fca5a5;font-weight:600}.jump-feedback-toast{font-size:11px;font-family:var(--font-mono);color:#fca5a5;background-color:#ef444426;border:1px solid rgba(239,68,68,.35);padding:2px 8px;border-radius:var(--radius-sm);max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;animation:tooltipFadeIn .15s ease-out}.btn-jump-error.is-no-error{opacity:.7;border-color:#94a3b84d;color:var(--text-secondary);background-color:#94a3b81a}.btn-jump-error.is-no-error:hover{opacity:1;background-color:#94a3b833;color:var(--text-main);border-color:var(--border-subtle)}.controls-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;overflow-x:auto;white-space:nowrap;padding-right:68px;min-height:30px}.controls-toolbar>div,.controls-left-group>*{flex-shrink:0}.btn-step,.time-display{white-space:nowrap}.btn-play-pause{min-width:65px}.jump-feedback-toast{position:absolute;bottom:100%;left:12px}.replay-options{position:absolute;right:12px;bottom:8px;z-index:30}.replay-options>summary{list-style:none;height:26px;padding:4px 8px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface-active);color:var(--text-main);font-size:11px;cursor:pointer}.replay-options>summary:focus-visible{outline:2px solid var(--blue-focus)}.replay-options-panel{position:absolute;right:0;bottom:34px;width:min(330px,calc(100vw - 48px));max-height:50vh;overflow-y:auto;display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--bg-surface-elevated);border:1px solid var(--border-strong);border-radius:var(--radius-md);box-shadow:0 8px 24px #0008;font-size:12px}.replay-options-panel .control-item,.replay-option{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.replay-options-panel p,.replay-option>span{font-size:11px;line-height:1.6;color:var(--text-secondary)}.controls-left-group{display:flex;align-items:center;gap:8px}.btn-play-pause{height:26px;padding:0 10px;border-radius:var(--radius-sm);background-color:var(--text-main);color:#0b0f17;font-family:var(--font-sans);font-size:11px;font-weight:600;border:1px solid var(--text-main);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:background-color .1s ease;outline:none}.btn-play-pause:hover{background-color:#e2e8f0}.btn-play-pause:focus-visible{outline:2px solid var(--blue-focus)}.step-buttons-group{display:flex;align-items:center;background-color:var(--bg-surface);border-radius:var(--radius-sm);padding:1px;border:1px solid var(--border-subtle)}.btn-step{height:22px;padding:0 6px;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--text-secondary);background:transparent;border:none;border-radius:2px;cursor:pointer;transition:background-color .1s ease,color .1s ease;outline:none}.btn-step:hover{color:var(--text-main);background-color:var(--bg-surface-elevated)}.btn-step:focus-visible{outline:2px solid var(--blue-focus)}.btn-step-frame{font-weight:600;color:#38bdf8;padding:0 7px}.btn-step-frame:hover{background-color:#38bdf826;color:#7dd3fc}.btn-jump-error{height:26px;padding:0 9px;border-radius:var(--radius-sm);background-color:#ef444424;color:#fca5a5;font-family:var(--font-sans);font-size:11px;font-weight:600;border:1px solid rgba(239,68,68,.45);cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all .12s ease;outline:none}.btn-jump-error:hover{background-color:#ef4444;color:#fff;border-color:#ef4444}.btn-jump-error:focus-visible{outline:2px solid var(--red-border)}.step-divider{width:1px;height:12px;background-color:var(--border-subtle);margin:0 1px}.time-display{display:flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-sm);background-color:var(--bg-surface);border:1px solid var(--border-subtle);font-family:var(--font-mono);font-size:11px}.time-current{color:var(--text-main);font-weight:600}.time-divider{color:var(--text-dim)}.time-total{color:var(--text-muted)}.controls-right-group{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px}.control-item{display:flex;align-items:center;gap:4px}.control-label{color:var(--text-muted)}.control-select{background-color:var(--bg-surface);border:1px solid var(--border-subtle);color:var(--text-main);border-radius:var(--radius-sm);padding:2px 6px;font-family:var(--font-mono);font-size:11px;cursor:pointer;outline:none}.control-select:focus-visible{border-color:var(--blue-focus);outline:1px solid var(--blue-focus)}.timeline-pane{flex:1;display:flex;flex-direction:column;background-color:var(--bg-surface);border-radius:var(--radius-md);border:1px solid var(--border-subtle);overflow:hidden;min-height:0}.timeline-header{padding:8px 10px;border-bottom:1px solid var(--border-subtle);background-color:#0b101c;display:flex;flex-direction:column;gap:8px;flex-shrink:0}.search-input-wrap{position:relative;display:flex;align-items:center}.search-icon{position:absolute;left:8px;color:var(--text-muted);pointer-events:none;display:flex}.timeline-search{width:100%;background-color:var(--bg-input);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);color:var(--text-main);font-family:var(--font-sans);font-size:12px;padding:5px 8px 5px 28px;outline:none}.timeline-search:focus{border-color:var(--blue-focus)}.filter-tabs-row{display:flex;align-items:center;gap:3px;overflow-x:auto}.filter-tab{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--text-muted);background-color:transparent;border:1px solid transparent;cursor:pointer;white-space:nowrap;outline:none}.filter-tab:hover{color:var(--text-secondary);background-color:var(--bg-surface-elevated)}.filter-tab.active{background-color:var(--bg-surface-active);color:var(--text-main);border-color:var(--border-strong);font-weight:600}.filter-tab:focus-visible{outline:2px solid var(--blue-focus)}.tab-count{font-family:var(--font-mono);font-size:10px;padding:0 4px;border-radius:2px;background-color:var(--bg-app);color:var(--text-secondary)}.tab-count-error{background-color:var(--red-bg);color:var(--red-text)}.tab-count-network{background-color:var(--bg-surface-active);color:var(--text-secondary)}.timeline-list{flex:1;overflow-y:auto;padding:4px;display:flex;flex-direction:column;gap:1px}.timeline-item{display:flex;flex-direction:column;padding:5px 8px;border-radius:var(--radius-sm);border:1px solid transparent;border-left:3px solid transparent;background-color:transparent;cursor:pointer;outline:none;transition:background-color .1s ease}.timeline-item:hover{background-color:var(--bg-surface-elevated)}.timeline-item.active{background-color:var(--bg-surface-elevated);border-left-color:var(--blue-500)}.timeline-item:focus-visible{outline:2px solid var(--blue-focus)}.timeline-row-main{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;min-width:0}.timeline-col-time{color:var(--text-muted);width:52px;flex-shrink:0}.timeline-col-badge-wrap{flex-shrink:0}.timeline-badge{display:inline-block;padding:1px 4px;border-radius:2px;font-family:var(--font-mono);font-size:10px;font-weight:500;line-height:1.2}.badge-neutral{background-color:var(--bg-surface-active);color:var(--text-secondary);border:1px solid var(--border-subtle)}.badge-warn{background-color:var(--amber-bg);color:var(--amber-text);border:1px solid var(--amber-border)}.badge-error{background-color:var(--red-bg);color:var(--red-text);border:1px solid var(--red-border)}.timeline-col-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary)}.timeline-summary-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.timeline-summary-text.is-error{color:var(--red-text)}.timeline-col-status{flex-shrink:0;text-align:right;font-size:10.5px}.timeline-col-meta{color:var(--text-muted)}.timeline-col-meta.is-error{color:var(--red-text)}.timeline-details-panel{margin-top:6px;padding:6px 8px;background-color:var(--bg-code);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:11px;color:var(--text-secondary)}.details-row{margin-bottom:3px;word-break:break-all}.details-url{color:var(--text-main)}.details-code{margin-top:4px;padding:6px;background-color:var(--bg-app);border-radius:2px;border:1px solid var(--border-subtle);overflow-x:auto;white-space:pre-wrap;word-break:break-all;font-size:10.5px}.details-error-code{color:var(--red-text)}.timeline-empty-message{padding:24px;text-align:center;color:var(--text-muted);font-size:12px}.timeline-footer{padding:6px 10px;border-top:1px solid var(--border-subtle);background-color:#0b101c;display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--text-muted);flex-shrink:0}.timeline-footer-status{color:var(--text-muted)}.timeline-footer-count{font-family:var(--font-mono);color:var(--text-dim)}.importer-wrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:20px;background-color:var(--bg-app)}.dropzone{border:1px dashed var(--border-strong);border-radius:var(--radius-md);padding:40px 24px;text-align:center;max-width:480px;width:100%;background-color:var(--bg-surface);cursor:pointer;transition:border-color .1s ease,background-color .1s ease;outline:none}.dropzone:hover,.dropzone.dragover{border-color:var(--blue-focus);background-color:var(--bg-surface-elevated)}.dropzone:focus-visible{outline:2px solid var(--blue-focus)}.dropzone-icon{margin-bottom:12px;color:var(--blue-focus);display:flex;justify-content:center}.dropzone h2{font-size:16px;font-weight:600;margin-bottom:6px;color:var(--text-main);letter-spacing:-.01em}.dropzone-description{color:var(--text-secondary);font-size:12px;margin-bottom:18px;line-height:1.5}.importer-hint{color:var(--text-muted);font-size:11px;margin-top:14px;line-height:1.4}.import-error{margin-top:14px;background-color:var(--red-bg);color:var(--red-text);border:1px solid var(--red-border);border-radius:var(--radius-md);padding:10px 14px;max-width:480px;width:100%;font-size:11px;font-family:var(--font-mono)}.import-error ul{margin-top:6px;padding-left:16px}.resolved-stack{margin-top:8px;display:flex;flex-direction:column;gap:6px}.resolved-frame{background-color:var(--bg-app);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);overflow:hidden}.resolved-frame>summary{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;cursor:pointer;background-color:var(--bg-surface-elevated);font-family:var(--font-mono);font-size:11px;color:var(--text-main);-webkit-user-select:none;user-select:none}.resolved-frame>summary:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px}.resolved-frame-location{display:flex;align-items:center;gap:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resolved-frame-copy{background:transparent;border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:10px;padding:2px 6px;border-radius:3px;cursor:pointer;font-family:var(--font-sans);white-space:nowrap;flex-shrink:0}.resolved-frame-copy:hover{background:var(--bg-surface-active);color:var(--text-main);border-color:var(--border-strong)}.resolved-frame-copy:focus-visible{outline:2px solid var(--border-focus)}.source-context{overflow-x:auto;background-color:var(--bg-code);font-family:var(--font-mono);font-size:11px;line-height:1.5}.source-context pre{margin:0;padding:6px 0}.source-context code{display:block;font-family:inherit}.source-line{display:flex;padding:0 10px;min-width:fit-content}.source-line-active{background-color:#ef444426;border-left:2px solid var(--red-500)}.source-line-number{display:inline-block;width:44px;text-align:right;padding-right:12px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex-shrink:0;border-right:1px solid var(--border-subtle);margin-right:12px}.source-line-active .source-line-number{color:var(--red-text);font-weight:600}.source-line-content{color:var(--text-secondary);white-space:pre}.source-line-active .source-line-content{color:var(--text-main);font-weight:500}.source-line-pointer .source-line-number{border-right:1px solid transparent}.source-line-pointer .source-line-content{color:var(--red-text);font-weight:700}.details-original-stack{margin-top:8px}.details-original-stack>summary{font-size:11px;color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}@media (min-width: 601px){.mobile-tab-nav{display:none}.main-layout{flex-direction:row;min-height:0;gap:6px}.replay-wrapper{width:auto!important;min-width:0;flex:1}.timeline-wrapper{width:clamp(280px,30vw,460px)!important;flex:0 0 auto}.main-layout .pane-wrapper.mobile-hidden{display:flex!important}.main-layout.timeline-collapsed .timeline-wrapper{width:44px!important}}@media (max-width: 600px){.timeline-toggle{display:none}}.header-primary-band,.header-secondary-band{background:var(--bg-app)}.brand-title{font-size:16px}.timeline-header,.timeline-footer{background:var(--bg-app)}.activity-tabs{gap:8px}.timeline-header{position:relative;z-index:2}.activity-tabs{overflow:visible}.timeline-filter-menu{margin-left:auto;flex-shrink:0;position:static}.timeline-filter-menu .timeline-filter-panel{z-index:5}.timeline-filter-menu>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:30px;height:30px;color:var(--text-secondary);position:relative;border-radius:6px}.timeline-filter-menu>summary:hover{color:var(--text-main);background:var(--bg-surface-elevated)}.timeline-filter-menu>summary:focus-visible{outline:2px solid var(--blue-focus)}.filter-active-dot{position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:#85dfc9}.timeline-filter-panel{position:absolute;right:10px;top:46px;width:min(300px,calc(100vw - 40px));max-height:55vh;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;background:var(--bg-surface-elevated);border:1px solid var(--border-strong);border-radius:8px;box-shadow:0 10px 25px #0009;color:var(--text-main);font-size:12px}.timeline-filter-panel p{color:var(--text-secondary);font-size:11px;line-height:1.5}.timeline-filter-panel fieldset{border:0;display:flex;flex-direction:column;gap:8px}.timeline-filter-panel legend{padding-bottom:10px;color:var(--text-secondary)}.timeline-filter-panel label{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.timeline-filter-panel input[type=checkbox]{accent-color:#85dfc9}.timeline-filter-panel input[type=search]{width:100%;padding:8px;color:var(--text-main);background:var(--bg-input);border:1px solid var(--border-strong);border-radius:6px}.activity-tabs .filter-tab{font-size:13px;padding:7px 10px}.timeline-toggle{align-self:auto;flex:0 0 28px;width:28px;height:30px;border:0;background:transparent}.timeline-pane.is-collapsed .timeline-header{padding:10px 7px}.timeline-pane.is-collapsed .activity-tabs>:not(.timeline-toggle),.timeline-pane.is-collapsed .timeline-header>:not(.activity-tabs),.timeline-pane.is-collapsed .timeline-list,.timeline-pane.is-collapsed .timeline-footer{display:none}.timeline-row-main{font-family:var(--font-sans);font-size:12px}.timeline-col-time,.timeline-col-status{font-family:var(--font-mono);font-size:11px}.timeline-item{padding:8px 10px}.player-controls-bar{padding:10px 18px 12px;gap:5px;background:#111720}.scrubber-track-bg{height:5px;background:#303949}.scrubber-fill{background:#85dfc9}.scrubber-thumb-indicator{width:15px;height:15px;right:-7px;background:#85dfc9;border:0}.marker-error{width:7px;height:7px;border:1px solid #111720;border-radius:50%;background:#ef4444;box-shadow:none}.scrubber-ticks{display:flex;justify-content:space-between;font:11px var(--font-mono);color:var(--text-muted);margin-bottom:4px}.controls-toolbar{min-height:38px;padding-right:110px;gap:16px}.controls-left-group{gap:10px}.btn-play-pause,.btn-jump-error{height:36px;border-radius:8px;padding:0 16px;font-size:15px}.btn-play-pause{min-width:110px;justify-content:center;background:#85dfc9;border-color:#85dfc9;color:#11241f}.btn-play-pause:hover{background:#a0e8d7}.btn-play-pause svg{width:16px;height:16px}.btn-jump-error{font-weight:400;background:transparent;color:#f0a9ab;border-color:#5e383b}.step-buttons-group{background:transparent;border:0;border-left:1px solid var(--border-subtle);border-radius:0;gap:6px;padding-left:12px;height:32px}.step-label{font:12px var(--font-sans);color:var(--text-secondary);margin-right:3px}.btn-step{height:30px;padding:0 6px;color:var(--text-main);font-size:14px}.btn-step-frame{color:var(--text-main)}.time-display{background:transparent;border:0;padding:0 6px;font-size:13px}.controls-right-group>.control-item>label{display:none}.controls-right-group .control-select{height:36px;padding:0 12px;font-size:14px;min-width:76px}.replay-options{right:18px;bottom:13px}.replay-options>summary{height:36px;padding:8px 14px;font-size:13px;background:transparent;border-radius:8px}.replay-options-panel{bottom:44px}.app-header{background:var(--bg-app)}.header-primary-band{padding:10px 18px;min-height:54px;border-bottom:1px solid var(--border-subtle)}.header-brand-wrap{gap:10px}.brand-icon{color:#85dfc9}.brand-title{font-size:17px;font-weight:600}.brand-version-badge{background:transparent;border:0;color:var(--text-muted)}.header-actions{gap:8px}.share-drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;color:var(--text-main);overflow:clip}.share-drawer-overlay[open]{display:flex;justify-content:flex-end}.share-drawer-overlay::backdrop{background:#0f11178c;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.share-drawer{position:absolute;top:0;right:0;width:min(480px,100%);height:100%;background:var(--bg-app);border-left:1px solid var(--border-subtle);box-shadow:-12px 0 40px #0005;display:flex;flex-direction:column}.share-drawer-overlay[open] .share-drawer{animation:share-drawer-in .18s ease-out both}.share-drawer>:first-child{flex-shrink:0}.share-drawer-body{padding:18px 24px;display:flex;flex-direction:column;gap:18px;flex:1;min-height:0;overflow-y:auto}.share-drawer-card{display:flex;flex-direction:column;gap:10px}.share-drawer-card+.share-drawer-card{border-top:1px solid var(--border-subtle);padding-top:16px}.share-drawer-card>.btn-primary,.share-drawer-card>.btn-secondary{min-height:38px;width:100%;justify-content:center;border-radius:8px}.share-format-option{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--bg-surface);cursor:pointer;transition:background-color .12s ease,border-color .12s ease}.share-format-option:hover{background:var(--bg-surface-elevated);border-color:var(--border-strong)}.share-format-option:has(input:checked){background:#2563eb1f;border-color:var(--blue-focus)}.share-format-option:focus-within{outline:2px solid var(--blue-focus);outline-offset:2px}.share-drawer button:focus-visible{outline:2px solid var(--blue-focus);outline-offset:2px}.share-drawer input{min-width:0}#share-drawer-title{font-size:18px;line-height:1.4}.share-drawer-body p,.share-drawer-body div,.share-drawer-body label,.share-drawer-body input{font-size:12px!important;line-height:1.4!important}.share-drawer-card>div:first-child>strong{font-size:14px!important}.share-format-option>div>span{font-size:13px!important}.share-drawer-body button{font-size:13px!important;min-height:36px}@keyframes share-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@media (prefers-reduced-motion: reduce){.share-drawer-overlay[open] .share-drawer{animation:none}}.header-actions .btn-secondary{height:36px;padding:0 12px;gap:8px;font-size:13px;line-height:1;background:transparent;border-color:transparent;color:var(--text-secondary);font-weight:500;white-space:nowrap}.header-actions .btn-secondary svg{width:16px;height:16px;flex-shrink:0}.header-actions .btn-secondary:hover{background:var(--bg-surface-elevated);border-color:var(--border-subtle);color:var(--text-main)}.header-actions .btn-secondary[aria-label="Carregar outro incidente"]{background:#2563eb29;border-color:var(--border-subtle);color:#93c5fd}.header-actions .btn-secondary[aria-label="Carregar outro incidente"]:hover{background:var(--bg-surface-elevated);border-color:var(--blue-focus)}.header-actions .btn-secondary:last-child{background:var(--blue-500);border-color:var(--blue-focus);color:#fff}.header-actions .btn-secondary:last-child:hover{background:var(--blue-600)}.header-actions .btn-secondary:focus-visible{outline-offset:3px}@media (max-width: 760px){.header-primary-band{flex-wrap:wrap;gap:10px}.header-actions{margin-left:0;flex-shrink:1;flex-wrap:wrap;gap:6px}}.header-secondary-band{padding:6px 18px;min-height:34px}.incident-meta-chips{gap:8px}.meta-chip{background:transparent;border-color:transparent;padding:2px 0;gap:6px;align-items:baseline;line-height:18px}.meta-chip+.meta-chip{padding-left:10px;border-left:1px solid var(--border-subtle);border-radius:0}.meta-label{font-family:var(--font-sans);font-size:12px;color:var(--text-secondary)}.meta-value{font-weight:400;font-size:12px;line-height:inherit}.meta-chip-btn:hover{background:var(--bg-surface);border-color:var(--border-subtle)}@media (max-width: 600px){.timeline-pane.is-collapsed .timeline-header>:not(.activity-tabs),.timeline-pane.is-collapsed .timeline-list,.timeline-pane.is-collapsed .timeline-footer{display:flex}.timeline-pane.is-collapsed .activity-tabs>:not(.timeline-toggle){display:inline-flex}}.incident-context{background:var(--bg-surface);border-bottom:1px solid var(--border-subtle);padding:12px 24px;color:var(--text-main)}.incident-context summary{cursor:pointer;font-weight:600;font-size:13px;width:fit-content}.incident-context summary:focus-visible{outline:2px solid var(--border-focus);outline-offset:4px}.incident-context p{font-size:12px;line-height:1.5;color:var(--text-secondary);margin:12px 0 0}.incident-context fieldset{border:0;padding:0;margin:12px 0 0;min-width:0}.context-legend{font-size:12px;color:var(--text-secondary);margin-bottom:8px}.context-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.context-fields label{display:flex;flex-direction:column;gap:6px;font-size:12px}.context-fields textarea{width:100%;box-sizing:border-box;padding:10px;font:inherit;color:var(--text-main);background:var(--bg-input);border:1px solid var(--border-strong);border-radius:6px;resize:vertical;min-height:64px}.context-fields textarea:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}.context-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.context-actions button{min-height:36px;padding:8px 12px}.incident-context [role=alert]{color:#fca5a5}@media (max-width: 640px){.incident-context{padding:12px 16px}.context-fields{grid-template-columns:1fr;gap:10px}.context-actions button{min-height:44px}.context-fields textarea{font-size:16px}}.visual-proposal-panel{flex-shrink:0;border-bottom:1px solid var(--border-color, #334155);background:var(--bg-panel, #0f172a);color:var(--text-primary, #e2e8f0);font-size:13px}.visual-proposal-panel summary{cursor:pointer;padding:10px 20px;font-weight:600}.visual-proposal-panel summary:focus-visible{outline:2px solid #38bdf8;outline-offset:-2px}.visual-proposal-content{padding:0 20px 12px;max-height:35vh;overflow:auto}.visual-proposal-content p{margin:8px 0;line-height:1.5}.visual-proposal-content section{margin:12px 0}.visual-proposal-content code{overflow-wrap:anywhere}.visual-proposal-content table{border-collapse:collapse;width:100%}.visual-proposal-content caption{text-align:left;margin:6px 0}.visual-proposal-content th,.visual-proposal-content td{padding:6px;text-align:left;border-bottom:1px solid var(--border-color, #334155);overflow-wrap:anywhere}.replayer-wrapper{position:relative}.replayer-mouse{position:absolute;width:20px;height:20px;transition:left .05s linear,top .05s linear;background-size:contain;background-position:center center;background-repeat:no-repeat;background-image:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzMwMHB4JyB3aWR0aD0nMzAwcHgnICBmaWxsPSIjMDAwMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iTGF5ZXIgMSIgdmlld0JveD0iMCAwIDUwIDUwIiB4PSIwcHgiIHk9IjBweCI+PHRpdGxlPkRlc2lnbl90bnA8L3RpdGxlPjxwYXRoIGQ9Ik00OC43MSw0Mi45MUwzNC4wOCwyOC4yOSw0NC4zMywxOEExLDEsMCwwLDAsNDQsMTYuMzlMMi4zNSwxLjA2QTEsMSwwLDAsMCwxLjA2LDIuMzVMMTYuMzksNDRhMSwxLDAsMCwwLDEuNjUuMzZMMjguMjksMzQuMDgsNDIuOTEsNDguNzFhMSwxLDAsMCwwLDEuNDEsMGw0LjM4LTQuMzhBMSwxLDAsMCwwLDQ4LjcxLDQyLjkxWm0tNS4wOSwzLjY3TDI5LDMyYTEsMSwwLDAsMC0xLjQxLDBsLTkuODUsOS44NUwzLjY5LDMuNjlsMzguMTIsMTRMMzIsMjcuNThBMSwxLDAsMCwwLDMyLDI5TDQ2LjU5LDQzLjYyWiI+PC9wYXRoPjwvc3ZnPg==);border-color:transparent}.replayer-mouse:after{content:"";display:inline-block;width:20px;height:20px;background:#4950f6;border-radius:100%;transform:translate(-50%,-50%);opacity:.3}.replayer-mouse.active:after{animation:click .2s ease-in-out 1}.replayer-mouse.touch-device{background-image:none;width:70px;height:70px;border-width:4px;border-style:solid;border-radius:100%;margin-left:-37px;margin-top:-37px;border-color:#4950f600;transition:left 0s linear,top 0s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device:after{opacity:0}.replayer-mouse.touch-device.active:after{animation:touch-click .2s ease-in-out 1}.replayer-mouse-tail{position:absolute;pointer-events:none}@keyframes click{0%{opacity:.3;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}@keyframes touch-click{0%{opacity:0;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}.replay-options .replay-options-panel{width:min(380px,calc(100vw - 48px));max-height:min(660px,calc(100dvh - 165px));gap:16px;padding:20px;background:#1b2029;border-radius:12px;font-size:13px}.replay-options-heading{display:flex;align-items:center;gap:12px}.replay-options-heading strong{flex:1;font-size:16px;line-height:1.3}.replay-options-panel button{background:transparent;border:1px solid var(--border-strong);border-radius:7px;color:var(--text-main);padding:7px 12px;cursor:pointer;font:inherit}.replay-options-panel button:hover{background:var(--bg-surface-active)}.replay-options-panel button:focus-visible,.replay-options-panel input:focus-visible{outline:2px solid var(--blue-focus);outline-offset:3px}.replay-options-heading button{border:0;padding:0 4px;font-size:23px;color:var(--text-secondary)}.replay-options-panel .replay-option{width:100%;gap:10px}.replay-options-panel .replay-option>span{font-size:12px;line-height:1.5}.trace-selection-actions{display:flex;align-items:center;gap:8px;width:100%;margin:4px 0}.trace-selection-actions>span{flex:1;font-size:10px;color:var(--text-secondary);letter-spacing:.05em}.trace-toggle-row{display:flex;align-items:center;gap:10px;width:100%;cursor:pointer;min-height:26px}.trace-category-name{flex:1;font-weight:600}.trace-category-name small{display:block;font-size:11px;font-weight:400;color:var(--text-secondary);margin-top:2px}.trace-category-count{font:11px var(--font-mono);color:var(--text-secondary)}.trace-category-dot{width:9px;height:9px;border-radius:50%;background:var(--trace-color);flex-shrink:0}.trace-error{--trace-color: #ef4444}.trace-network{--trace-color: #4996ff}.trace-console{--trace-color: #98a2b3}.trace-navigation{--trace-color: #48c58e}.trace-performance{--trace-color: #f5b942}.trace-marker{--trace-color: #aa87f4}.trace-toggle-row input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:34px;height:19px;border:1px solid #48505e;border-radius:20px;background:#11151c;position:relative;margin:0;cursor:pointer;flex-shrink:0}.trace-toggle-row input:after{content:"";position:absolute;width:13px;height:13px;top:2px;left:2px;border-radius:50%;background:#94a3b8;transition:transform .12s ease}.trace-toggle-row input:checked{background:#2563eb;border-color:#3b82f6}.trace-toggle-row input:checked:after{transform:translate(15px);background:#fff}.replay-trust-section{border-top:1px solid var(--border-subtle);padding-top:14px}.replay-section-label{color:var(--text-secondary);font-size:10px;letter-spacing:.05em;margin-bottom:9px}.replay-trust-card{background:#2b2518;border:1px solid #65522a;border-radius:9px;padding:12px;color:#f7cf76}.replay-options-panel .replay-trust-card p{color:#d4b66e;font-size:11px;line-height:1.45;margin:7px 0 10px}.replay-canvas-card{margin-top:10px;padding:12px;border:1px solid var(--border-strong);border-radius:9px;background:var(--bg-input)}.replay-options-panel .replay-canvas-card p{color:var(--text-secondary);font-size:11px;line-height:1.45;margin:7px 0 0}.replay-options-panel .replay-zoom-row{border-top:1px solid var(--border-subtle);padding-top:12px;flex-direction:row;align-items:center;justify-content:space-between;width:100%}.replay-zoom-row .control-label{font-size:10px;letter-spacing:.05em}.replay-zoom-row .control-select{font-size:12px;height:30px}.replay-options-footer{display:flex;align-items:center;justify-content:space-between}.replay-options-footer span{color:var(--text-secondary);font-size:11px}.replay-options-footer button{background:var(--blue-500);border-color:var(--blue-focus)}@media (prefers-reduced-motion: reduce){.trace-toggle-row input:after{transition:none}}.player-controls-bar .scrubber-fill,.player-controls-bar .scrubber-thumb-indicator{background:var(--blue-500)}.player-controls-bar .btn-play-pause{background:var(--blue-500);border-color:var(--blue-focus);color:#fff}.player-controls-bar .btn-play-pause:hover{background:var(--blue-focus)}.timeline-filter-menu .timeline-filter-panel{width:min(380px,calc(100vw - 40px));max-height:calc(100dvh - 180px);padding:20px;gap:14px;background:#1b2029;border-radius:12px;font-size:13px}.filter-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.filter-panel-heading strong{font-size:16px}.timeline-filter-panel .filter-panel-heading button{border:0;padding:0 4px;font-size:23px;color:var(--text-secondary)}.timeline-filter-menu .timeline-filter-panel p{margin:-8px 0 0;font-size:12px}.timeline-filter-panel button{cursor:pointer;font:inherit;color:var(--text-main);background:transparent;border:1px solid var(--border-strong);border-radius:7px;padding:8px 12px}.timeline-filter-panel button:hover{background:var(--bg-surface-active)}.timeline-filter-panel button:focus-visible{outline:2px solid var(--blue-focus);outline-offset:2px}.filter-panel-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px}.filter-panel-toolbar span{color:var(--text-secondary);font-size:11px}.filter-panel-toolbar button.is-active{border-color:#ef4444;background:#ef44441a;color:#fca5a5}.timeline-filter-menu .timeline-filter-panel legend{font-size:10px;letter-spacing:.05em;padding-bottom:12px}.timeline-filter-menu .timeline-filter-panel label{flex-wrap:nowrap;min-height:24px;gap:9px;cursor:pointer}.timeline-filter-menu .timeline-filter-panel input[type=checkbox]{accent-color:#3b82f6;width:15px;height:15px;flex-shrink:0;margin:0}.filter-category-name{flex:1;font-weight:600}.filter-category-count{font:11px var(--font-mono);color:var(--text-secondary)}.filter-category-dot{width:9px;height:9px;border-radius:50%;background:#98a2b3;flex-shrink:0}.filter-category-error .filter-category-dot{background:#ef4444}.filter-category-network .filter-category-dot{background:#4996ff}.filter-category-navigation .filter-category-dot{background:#48c58e}.filter-category-performance .filter-category-dot{background:#f5b942}.filter-category-marker .filter-category-dot{background:#aa87f4}.filter-console-levels{margin-left:12px;padding-left:18px;border-left:1px solid var(--border-subtle);display:flex;flex-direction:column;gap:8px}.timeline-filter-panel label:has(input:disabled){opacity:.45;cursor:default}.filter-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--border-subtle);margin-top:8px;padding-top:16px}.timeline-filter-panel .filter-done{background:#e5e7eb;color:#111827;border-color:#e5e7eb}.timeline-filter-panel .filter-done:hover{background:#fff}.network-details{min-width:0}.network-details .filter-tabs-row{border-bottom:1px solid var(--border-subtle);margin-bottom:10px}.network-details h4{margin:14px 0 6px;color:var(--text-main);font-size:11px}.network-details [role=tabpanel]:focus-visible{outline:2px solid var(--blue-focus);outline-offset:2px}.network-headers{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:5px 12px;margin:0}.network-headers dt{color:var(--text-main);font-weight:600;overflow-wrap:anywhere}.network-headers dd{margin:0;overflow-wrap:anywhere;white-space:pre-wrap}.network-notice{color:var(--text-muted);font-size:10px;line-height:1.5}.network-response,.network-json{max-height:360px;overflow:auto}.network-json-node{padding-left:12px}.network-json-node summary{cursor:pointer;color:var(--text-main);overflow-wrap:anywhere}.network-json-node summary span{color:var(--text-muted)}.network-json-value{padding:3px 0 3px 12px;overflow-wrap:anywhere;white-space:pre-wrap}.saved-visual-screens{flex-shrink:0;padding:8px 20px;border-bottom:1px solid var(--border-color,#334155);background:var(--bg-panel,#0f172a);color:var(--text-primary,#e2e8f0);font-size:13px}.saved-visual-screens button,.visual-screen-editor>header button,.visual-proposal-content>button{font:inherit;color:inherit;border:1px solid #334155;border-radius:8px;padding:8px 12px;background:#1e293b;cursor:pointer}.saved-visual-screens button:focus-visible,.visual-screen-editor button:focus-visible,.visual-proposal-content>button:focus-visible{outline:2px solid #83b6ff;outline-offset:2px}.saved-visual-screens button:disabled{opacity:.5;cursor:default}.saved-visual-screens section{max-height:40vh;overflow:auto;padding-top:8px}.saved-visual-screens article{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid #334155}.saved-visual-screens article>div{flex:1;min-width:0;overflow-wrap:anywhere}.saved-visual-screens p{color:#94a3b8;margin:6px 0;line-height:1.5}.visual-screen-editor{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;display:flex;flex-direction:column;background:#0f1420;color:#e6ebf5}.visual-screen-editor>header{display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid #28344d;flex-shrink:0}.visual-screen-editor h2{font-size:16px;margin:0}.visual-screen-editor header p{font-size:12px;color:#94a3b8;margin:5px 0 0}.visual-screen-editor>[role=alert]{padding:12px 18px;color:#fbbf24}.visual-screen-canvas{flex:1;overflow:auto;min-height:0;padding:12px}.visual-screen-canvas .replayer-wrapper{position:relative;max-width:none!important;transform:none!important}.visual-screen-canvas .replayer-mouse,.visual-screen-canvas .replayer-mouse-tail{display:none!important}.visual-screen-canvas iframe{border:1px solid #28344d;background:#fff;display:block}@media (max-width:600px){.saved-visual-screens article{flex-wrap:wrap}.saved-visual-screens article>div{flex-basis:100%}}
|
package/dist/viewer/index.html
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
/>
|
|
11
11
|
<title>Backtrack Viewer</title>
|
|
12
12
|
<link rel="icon" type="image/png" href="/assets/backtrack-favico-Ds-TMW85.png" />
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-BNTvj2zy.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DXHvcqkw.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="root"></div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ElementEditor as ScreenEditor } from '@backtrack-js/editor';
|
|
2
|
+
import type { VisualProposal } from '@backtrack-js/editor/proposal';
|
|
3
|
+
import type { PrivacyOptions } from '../types/options';
|
|
4
|
+
/** Backtrack adapter: keep recorder privacy policy outside the standalone editor. */
|
|
5
|
+
export declare class ElementEditor extends ScreenEditor {
|
|
6
|
+
constructor(save: (proposal: VisualProposal) => Promise<void>, cancel: () => void, privacy?: PrivacyOptions, document?: Document);
|
|
7
|
+
}
|
package/dist/widget/styles.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export declare const WIDGET_CSS = "\n/* ==========================================================================\n Backtrack Trigger Widget \u2014 Dark Theme Design System (Shadow DOM)\n ========================================================================== */\n\n:host, .backtrack-root {\n --bt-surface-bg: #0f1117;\n --bt-surface-card: #161a23;\n --bt-surface-elevated: #1e2430;\n --bt-surface-input: #131720;\n --bt-border: #262d3d;\n --bt-border-subtle: #1c212c;\n --bt-text-primary: #f8fafc;\n --bt-text-muted: #94a3b8;\n --bt-text-dim: #64748b;\n --bt-accent: #2563eb;\n --bt-accent-hover: #1d4ed8;\n --bt-accent-muted: rgba(37, 99, 235, 0.16);\n --bt-status-online: #22c55e;\n --bt-bg-success: rgba(34, 197, 94, 0.12);\n --bt-text-success: #22c55e;\n --bt-border-success: rgba(34, 197, 94, 0.4);\n --bt-bg-danger: rgba(239, 68, 68, 0.12);\n --bt-text-danger: #ef4444;\n --bt-border-danger: rgba(239, 68, 68, 0.4);\n --bt-radius-lg: 12px;\n --bt-radius-md: 8px;\n --bt-radius-sm: 6px;\n --bt-font: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n --bt-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n\n all: initial;\n position: fixed;\n bottom: max(16px, env(safe-area-inset-bottom, 16px));\n left: max(16px, env(safe-area-inset-left, 16px));\n z-index: 999999;\n font-family: var(--bt-font);\n color: var(--bt-text-primary);\n box-sizing: border-box;\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n.backtrack-root {\n position: relative;\n}\n\n/* Launcher Flutuante */\n.backtrack-launcher-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n padding: 0;\n background-color: var(--bt-surface-bg);\n color: var(--bt-text-primary);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-sm);\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;\n user-select: none;\n touch-action: manipulation;\n outline: none;\n}\n\n.backtrack-launcher-btn:hover {\n background-color: var(--bt-surface-elevated);\n border-color: var(--bt-accent);\n color: var(--bt-accent);\n}\n\n.backtrack-launcher-btn:focus-visible {\n outline: 2px solid var(--bt-accent);\n outline-offset: 1px;\n}\n\n.backtrack-launcher-btn:active {\n transform: translateY(1px);\n}\n\n.backtrack-launcher-status-dot {\n position: absolute;\n bottom: 3px;\n right: 3px;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n border: 1px solid var(--bt-surface-bg);\n display: inline-block;\n pointer-events: none;\n}\n\n.backtrack-status-recording {\n background-color: #22c55e;\n box-shadow: 0 0 5px #22c55e;\n}\n\n.backtrack-status-degraded {\n background-color: #f59e0b;\n box-shadow: 0 0 4px #f59e0b;\n}\n\n.backtrack-status-idle {\n background-color: #64748b;\n}\n\n.backtrack-incident-badge-count {\n position: absolute;\n top: -4px;\n right: -4px;\n background-color: #ef4444;\n color: #ffffff;\n border: 1px solid var(--bt-surface-bg);\n border-radius: 4px;\n padding: 0 4px;\n font-family: var(--bt-font-mono);\n font-size: 9px;\n font-weight: 700;\n line-height: 13px;\n pointer-events: none;\n}\n\n/* Painel Modal / Drawer */\n.backtrack-panel {\n position: fixed;\n bottom: 60px;\n left: 16px;\n width: 340px;\n max-height: 540px;\n background-color: var(--bt-surface-bg);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-lg);\n box-shadow: 0 14px 36px rgba(0, 0, 0, 0.65);\n z-index: 999999;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: var(--bt-font);\n animation: backtrackFadeIn 0.15s ease-out;\n}\n\n@keyframes backtrackFadeIn {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* 1. Cabe\u00E7alho do Painel */\n.backtrack-panel-header {\n background-color: transparent;\n border-bottom: 1px solid var(--bt-border);\n padding: 12px 14px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.backtrack-header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.backtrack-header-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--bt-text-primary);\n letter-spacing: -0.01em;\n}\n\n.backtrack-header-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--bt-status-online);\n flex-shrink: 0;\n}\n\n.backtrack-header-right {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.backtrack-header-icon-btn {\n background: transparent;\n border: none;\n color: var(--bt-text-muted);\n width: 20px;\n height: 20px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n transition: color 0.12s ease;\n outline: none;\n}\n\n.backtrack-header-icon-btn:hover {\n color: var(--bt-text-primary);\n}\n\n.backtrack-storage-tooltip-trigger {\n color: var(--bt-text-muted);\n cursor: help;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: color 0.12s ease;\n}\n\n.backtrack-storage-tooltip-trigger:hover {\n color: var(--bt-text-primary);\n}\n\n/* Menu de 3 Pontos do Cabe\u00E7alho */\n.backtrack-header-menu-wrap {\n position: relative;\n display: inline-flex;\n}\n\n.backtrack-header-menu {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background-color: var(--bt-surface-card);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-md);\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.6);\n min-width: 190px;\n z-index: 1000;\n padding: 5px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.backtrack-header-menu-info {\n padding: 8px 10px 6px 10px;\n font-size: 11px;\n color: var(--bt-text-muted);\n font-family: var(--bt-font-mono);\n border-bottom: 1px solid var(--bt-border);\n margin-bottom: 4px;\n}\n\n.backtrack-header-menu-item {\n background: transparent;\n border: none;\n border-radius: var(--bt-radius-sm);\n padding: 8px 10px;\n color: var(--bt-text-primary);\n font-size: 12px;\n text-align: left;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: background-color 0.1s ease, color 0.1s ease;\n width: 100%;\n}\n\n.backtrack-header-menu-item:hover {\n background-color: var(--bt-surface-elevated);\n color: #ffffff;\n}\n\n/* Corpo do Painel */\n.backtrack-panel-body {\n padding: 12px 14px;\n overflow-y: auto;\n flex: 1;\n scrollbar-width: thin;\n scrollbar-color: #334155 transparent;\n}\n\n.backtrack-panel-body::-webkit-scrollbar {\n width: 5px;\n}\n\n.backtrack-panel-body::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.backtrack-panel-body::-webkit-scrollbar-thumb {\n background-color: #334155;\n border-radius: 4px;\n}\n\n.backtrack-panel-body::-webkit-scrollbar-thumb:hover {\n background-color: #475569;\n}\n\n/* Banner Inline (Sucesso / Falha) */\n.backtrack-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n border-radius: var(--bt-radius-md);\n padding: 10px 12px;\n margin-bottom: 12px;\n font-size: 13px;\n line-height: 1.4;\n animation: backtrackFadeIn 0.15s ease-out;\n}\n\n.backtrack-banner-success {\n background-color: var(--bt-bg-success);\n color: var(--bt-text-success);\n}\n\n.backtrack-banner-danger {\n background-color: var(--bt-bg-danger);\n color: var(--bt-text-danger);\n}\n\n.backtrack-banner-icon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.backtrack-banner-success .backtrack-banner-icon {\n color: var(--bt-text-success);\n}\n\n.backtrack-banner-danger .backtrack-banner-icon {\n color: var(--bt-text-danger);\n}\n\n.backtrack-banner-text {\n flex: 1;\n font-weight: 500;\n font-size: 13px;\n}\n\n.backtrack-banner-close {\n background: transparent;\n border: none;\n padding: 2px 4px;\n cursor: pointer;\n opacity: 0.7;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n transition: opacity 0.12s ease;\n outline: none;\n}\n\n.backtrack-banner-success .backtrack-banner-close {\n color: var(--bt-text-success);\n}\n\n.backtrack-banner-danger .backtrack-banner-close {\n color: var(--bt-text-danger);\n}\n\n.backtrack-banner-close:hover {\n opacity: 1;\n}\n\n/* Toast Flutuante (Sobreposto e Tempor\u00E1rio) */\n.backtrack-toast-wrap {\n position: absolute;\n bottom: 14px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n pointer-events: none;\n width: max-content;\n max-width: calc(100% - 28px);\n animation: backtrackToastIn 0.2s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@keyframes backtrackToastIn {\n from {\n opacity: 0;\n transform: translate(-50%, 6px);\n }\n to {\n opacity: 1;\n transform: translate(-50%, 0);\n }\n}\n\n.backtrack-toast {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n background-color: var(--bt-surface-bg);\n border-radius: var(--bt-radius-md);\n padding: 8px 14px;\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.65);\n pointer-events: auto;\n}\n\n.backtrack-toast-success {\n border: 1px solid var(--bt-border-success);\n}\n\n.backtrack-toast-danger {\n border: 1px solid var(--bt-border-danger);\n}\n\n.backtrack-toast-icon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.backtrack-toast-success .backtrack-toast-icon {\n color: var(--bt-text-success);\n}\n\n.backtrack-toast-danger .backtrack-toast-icon {\n color: var(--bt-text-danger);\n}\n\n.backtrack-toast-text {\n color: var(--bt-text-primary);\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n}\n\n/* 2. Se\u00E7\u00E3o de Controles de Grava\u00E7\u00E3o */\n.backtrack-controls-section {\n margin-bottom: 16px;\n}\n\n.backtrack-section-label-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n}\n\n.backtrack-section-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--bt-text-muted);\n}\n\n.backtrack-help-tooltip-trigger {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--bt-text-muted);\n cursor: help;\n font-size: 11px;\n transition: color 0.15s ease;\n}\n\n.backtrack-help-tooltip-trigger:hover {\n color: var(--bt-text-secondary);\n}\n\n.backtrack-duration-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 6px;\n margin-bottom: 10px;\n}\n\n.backtrack-duration-btn {\n background-color: var(--bt-surface-card);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-md);\n height: 32px;\n font-size: 12px;\n font-weight: 500;\n color: var(--bt-text-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n transition: background-color 0.1s ease, border-color 0.1s ease, color 0.1s ease;\n user-select: none;\n outline: none;\n}\n\n.backtrack-duration-btn:hover {\n background-color: var(--bt-surface-elevated);\n border-color: #3b4252;\n color: #ffffff;\n}\n\n.backtrack-duration-btn.is-selected {\n background-color: var(--bt-accent-muted);\n border-color: var(--bt-accent);\n color: #60a5fa;\n font-weight: 600;\n}\n\n.backtrack-custom-duration-row {\n background-color: var(--bt-surface-card);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-sm);\n padding: 6px 10px;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.backtrack-custom-input-wrap {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.backtrack-custom-duration-input {\n background-color: var(--bt-surface-input);\n border: 1px solid var(--bt-accent);\n border-radius: var(--bt-radius-sm);\n color: var(--bt-text-primary);\n font-family: var(--bt-font-mono);\n font-size: 12px;\n font-weight: 600;\n width: 65px;\n padding: 3px 6px;\n outline: none;\n text-align: right;\n}\n\n.backtrack-custom-duration-input:focus {\n border-color: #60a5fa;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3);\n}\n\n.backtrack-custom-unit {\n font-size: 11px;\n color: var(--bt-text-muted);\n}\n\n.backtrack-custom-hint {\n font-size: 10.5px;\n color: var(--bt-text-dim);\n white-space: nowrap;\n}\n\n/* Linha de A\u00E7\u00F5es */\n.backtrack-actions-row {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.backtrack-btn-save {\n flex: 1;\n height: 36px;\n background-color: var(--bt-accent);\n color: #ffffff;\n border: 1px solid #3b82f6;\n border-radius: var(--bt-radius-md);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: background-color 0.12s ease;\n user-select: none;\n outline: none;\n}\n\n.backtrack-btn-save:hover:not(:disabled) {\n background-color: var(--bt-accent-hover);\n}\n\n.backtrack-btn-save:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.backtrack-btn-icon-square {\n width: 36px;\n height: 36px;\n border-radius: var(--bt-radius-md);\n border: 1px solid var(--bt-border);\n background-color: var(--bt-surface-card);\n color: var(--bt-text-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n flex-shrink: 0;\n transition: background-color 0.1s ease, border-color 0.1s ease, color 0.1s ease;\n outline: none;\n padding: 0;\n}\n\n.backtrack-btn-icon-square:hover:not(:disabled) {\n background-color: var(--bt-surface-elevated);\n border-color: #3b4252;\n color: #ffffff;\n}\n\n.backtrack-btn-icon-square:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* 3. Se\u00E7\u00E3o de Lista de Grava\u00E7\u00F5es Salvas */\n.backtrack-list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.backtrack-list-title {\n font-size: 12px;\n font-weight: 500;\n color: var(--bt-text-muted);\n}\n\n.backtrack-list-count {\n font-size: 12px;\n font-weight: 500;\n color: var(--bt-text-muted);\n}\n\n.backtrack-list-item {\n background-color: var(--bt-surface-card);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-md);\n padding: 9px 12px;\n margin-bottom: 6px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color 0.12s ease, border-color 0.12s ease;\n text-align: left;\n width: 100%;\n box-sizing: border-box;\n}\n\n.backtrack-list-item:hover {\n background-color: var(--bt-surface-elevated);\n border-color: #3b4252;\n}\n\n.backtrack-item-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n overflow: hidden;\n}\n\n.backtrack-item-title {\n font-size: 13px;\n font-weight: 500;\n color: var(--bt-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.backtrack-item-meta {\n font-size: 12px;\n color: var(--bt-text-muted);\n}\n\n.backtrack-item-chevron {\n color: var(--bt-text-muted);\n flex-shrink: 0;\n margin-left: 8px;\n display: flex;\n align-items: center;\n}\n\n/* Estado Vazio */\n.backtrack-empty-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px 16px;\n background-color: var(--bt-surface-card);\n border: 1px dashed var(--bt-border);\n border-radius: var(--bt-radius-md);\n text-align: center;\n}\n\n.backtrack-empty-title {\n font-size: 13px;\n font-weight: 500;\n color: var(--bt-text-primary);\n margin-top: 8px;\n margin-bottom: 2px;\n}\n\n.backtrack-empty-desc {\n font-size: 12px;\n color: var(--bt-text-muted);\n line-height: 1.4;\n}\n\n/* 4. Tela de Detalhe do Incidente */\n.backtrack-detail-view {\n display: flex;\n flex-direction: column;\n}\n\n.backtrack-detail-back-row {\n margin-bottom: 14px;\n}\n\n.backtrack-btn-back {\n background: transparent;\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-sm);\n padding: 5px 10px;\n font-size: 13px;\n font-weight: 400;\n color: var(--bt-text-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n transition: background-color 0.12s ease, border-color 0.12s ease;\n outline: none;\n}\n\n.backtrack-btn-back:hover {\n background-color: var(--bt-surface-elevated);\n border-color: #3b4252;\n}\n\n.backtrack-detail-card {\n background-color: var(--bt-surface-card);\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-md);\n padding: 10px 12px;\n margin-bottom: 18px;\n}\n\n.backtrack-detail-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--bt-text-primary);\n margin-bottom: 4px;\n line-height: 1.3;\n}\n\n.backtrack-detail-meta {\n font-size: 12px;\n color: var(--bt-text-muted);\n font-family: var(--bt-font-mono);\n letter-spacing: -0.01em;\n}\n\n/* CTA principal \u2014 Visualizar replay */\n.backtrack-btn-cta-replay {\n width: 100%;\n height: 40px;\n background-color: var(--bt-accent);\n color: #ffffff;\n border: 1px solid #3b82f6;\n border-radius: var(--bt-radius-md);\n font-size: 13px;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n cursor: pointer;\n transition: background-color 0.12s ease;\n user-select: none;\n outline: none;\n margin-bottom: 18px;\n}\n\n.backtrack-btn-cta-replay:hover {\n background-color: var(--bt-accent-hover);\n}\n\n/* Grupo \"Exportar\" (a\u00E7\u00F5es agrupadas) */\n.backtrack-export-section {\n margin-bottom: 18px;\n}\n\n.backtrack-export-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--bt-text-muted);\n margin-bottom: 8px;\n}\n\n.backtrack-export-group {\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-md);\n overflow: hidden;\n background-color: transparent;\n}\n\n.backtrack-export-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--bt-border);\n color: var(--bt-text-primary);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: background-color 0.12s ease;\n outline: none;\n}\n\n.backtrack-export-item:last-child {\n border-bottom: none;\n}\n\n.backtrack-export-item svg {\n color: var(--bt-text-muted);\n flex-shrink: 0;\n transition: color 0.12s ease;\n}\n\n.backtrack-export-item:hover {\n background-color: var(--bt-surface-elevated);\n}\n\n.backtrack-export-item:hover svg {\n color: var(--bt-text-primary);\n}\n\n/* A\u00E7\u00E3o destrutiva \u2014 Excluir grava\u00E7\u00E3o */\n.backtrack-destructive-section {\n border-top: 1px solid var(--bt-border);\n padding-top: 12px;\n}\n\n.backtrack-btn-delete-ghost {\n width: 100%;\n background: transparent;\n border: none;\n padding: 6px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #ef4444;\n font-size: 13px;\n font-weight: 400;\n cursor: pointer;\n text-align: left;\n transition: opacity 0.12s ease;\n outline: none;\n}\n\n.backtrack-btn-delete-ghost:hover {\n opacity: 0.8;\n}\n\n.backtrack-btn-delete-ghost svg {\n color: #ef4444;\n flex-shrink: 0;\n}\n\n\n/* Modais de Confirma\u00E7\u00E3o (Export, Download, Hide) */\n.backtrack-modal-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--bt-surface-bg);\n display: flex;\n flex-direction: column;\n z-index: 1000;\n border-radius: var(--bt-radius-lg);\n padding: 0;\n overflow: hidden;\n}\n\n.backtrack-modal-card {\n width: 100%;\n height: 100%;\n max-width: 100%;\n background-color: var(--bt-surface-bg);\n border: none;\n border-radius: var(--bt-radius-lg);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.backtrack-modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n border-bottom: 1px solid var(--bt-border);\n background-color: var(--bt-surface-bg);\n}\n\n.backtrack-modal-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n font-weight: 600;\n color: var(--bt-text-primary);\n}\n\n.backtrack-modal-close {\n background: transparent;\n border: none;\n color: var(--bt-text-muted);\n font-size: 14px;\n cursor: pointer;\n padding: 2px 4px;\n line-height: 1;\n}\n\n.backtrack-modal-close:hover {\n color: #f1f5f9;\n}\n\n.backtrack-modal-body {\n padding: 12px 14px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n overflow-y: auto;\n scrollbar-width: thin;\n scrollbar-color: #334155 transparent;\n}\n\n.backtrack-modal-body::-webkit-scrollbar {\n width: 5px;\n}\n\n.backtrack-modal-body::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.backtrack-modal-body::-webkit-scrollbar-thumb {\n background-color: #334155;\n border-radius: 4px;\n}\n\n.backtrack-modal-body::-webkit-scrollbar-thumb:hover {\n background-color: #475569;\n}\n\n.backtrack-modal-checkbox-label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n cursor: pointer;\n user-select: none;\n}\n\n.backtrack-modal-checkbox-label input[type=\"checkbox\"] {\n margin-top: 2px;\n width: 15px;\n height: 15px;\n accent-color: var(--bt-accent);\n cursor: pointer;\n}\n\n.backtrack-modal-checkbox-title {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #f1f5f9;\n}\n\n.backtrack-modal-checkbox-desc {\n margin: 3px 0 0 0;\n font-size: 11px;\n color: var(--bt-text-muted);\n line-height: 1.35;\n}\n\n.backtrack-modal-radio-label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 10px;\n border: 1px solid var(--bt-border);\n border-radius: var(--bt-radius-sm);\n background-color: var(--bt-surface-card);\n cursor: pointer;\n user-select: none;\n transition: border-color 0.1s ease, background-color 0.1s ease;\n}\n\n.backtrack-modal-radio-label:hover {\n background-color: var(--bt-surface-elevated);\n}\n\n.backtrack-modal-radio-label.is-selected {\n border-color: var(--bt-accent);\n background-color: var(--bt-accent-muted);\n}\n\n.backtrack-modal-radio-label input[type=\"radio\"] {\n margin-top: 2px;\n width: 15px;\n height: 15px;\n accent-color: var(--bt-accent);\n cursor: pointer;\n}\n\n.backtrack-modal-radio-title {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #f1f5f9;\n}\n\n.backtrack-modal-radio-desc {\n margin: 3px 0 0 0;\n font-size: 11px;\n color: var(--bt-text-muted);\n line-height: 1.35;\n}\n\n.backtrack-modal-error {\n padding: 6px 8px;\n background: rgba(239, 68, 68, 0.15);\n border: 1px solid rgba(239, 68, 68, 0.3);\n border-radius: 4px;\n color: #fca5a5;\n font-size: 11px;\n}\n\n.backtrack-modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 6px;\n padding: 10px 14px;\n border-top: 1px solid var(--bt-border);\n background-color: var(--bt-surface-bg);\n}\n\n.backtrack-btn-secondary {\n background-color: var(--bt-surface-card);\n border: 1px solid var(--bt-border);\n color: #cbd5e1;\n border-radius: var(--bt-radius-sm);\n padding: 5px 10px;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.backtrack-btn-secondary:hover:not(:disabled) {\n background-color: var(--bt-surface-elevated);\n color: #f8fafc;\n}\n\n.backtrack-btn-primary {\n background-color: var(--bt-accent);\n border: 1px solid #3b82f6;\n color: #ffffff;\n border-radius: var(--bt-radius-sm);\n padding: 5px 12px;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.backtrack-btn-primary:hover:not(:disabled) {\n background-color: var(--bt-accent-hover);\n}\n\n.backtrack-btn-primary:disabled,\n.backtrack-btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Responsividade Mobile e Safe Area */\n@media (max-width: 480px) {\n .backtrack-panel {\n width: calc(100vw - 32px);\n max-width: calc(100vw - 16px);\n left: 8px;\n right: 8px;\n bottom: max(60px, env(safe-area-inset-bottom, 60px));\n }\n}\n\n.backtrack-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n";
|
|
2
|
-
//# sourceMappingURL=styles.d.ts.map
|
package/dist/widget/widget.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { FlightRecorder } from '../types';
|
|
2
|
-
import type { WidgetOptions } from '../types/options';
|
|
2
|
+
import type { WidgetOptions, PrivacyOptions } from '../types/options';
|
|
3
3
|
export declare class BacktrackWidget {
|
|
4
|
+
private privacy;
|
|
4
5
|
private recorder;
|
|
5
6
|
private options;
|
|
6
7
|
private container;
|
|
7
8
|
private shadow;
|
|
9
|
+
private visualEditor;
|
|
10
|
+
private visualDraftId;
|
|
8
11
|
private isOpen;
|
|
9
12
|
private selectedDurationSeconds;
|
|
10
13
|
private isCapturing;
|
|
@@ -29,7 +32,9 @@ export declare class BacktrackWidget {
|
|
|
29
32
|
private wasDragged;
|
|
30
33
|
private pollTimer;
|
|
31
34
|
private handleGlobalKey?;
|
|
32
|
-
constructor(recorder: FlightRecorder, options?: WidgetOptions);
|
|
35
|
+
constructor(recorder: FlightRecorder, options?: WidgetOptions, privacy?: PrivacyOptions);
|
|
36
|
+
/** 0 = Tudo; 60/300 = presets; outros valores finitos = personalizado (5–900s). */
|
|
37
|
+
private applyDefaultDuration;
|
|
33
38
|
mount(): void;
|
|
34
39
|
unmount(): void;
|
|
35
40
|
hide(): void;
|
|
@@ -54,6 +59,8 @@ export declare class BacktrackWidget {
|
|
|
54
59
|
private closeExportModal;
|
|
55
60
|
private confirmCopyMarkdown;
|
|
56
61
|
private handleShareGist;
|
|
62
|
+
private cancelVisualEdit;
|
|
63
|
+
private handleAdjustElement;
|
|
57
64
|
private handleAnnotate;
|
|
58
65
|
private handleDeleteIncident;
|
|
59
66
|
private openInViewer;
|
|
@@ -75,4 +82,3 @@ export declare class BacktrackWidget {
|
|
|
75
82
|
private attachLauncherListeners;
|
|
76
83
|
private attachPanelListeners;
|
|
77
84
|
}
|
|
78
|
-
//# sourceMappingURL=widget.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,90 +1,113 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@backtrack-js/browser",
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"description": "A flight recorder for your web app. Replay the exact moments before a bug, privately and offline.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.cjs",
|
|
7
|
-
"module": "./dist/index.js",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"typings": "./dist/index.d.ts",
|
|
10
|
-
"exports": {
|
|
11
|
-
".": {
|
|
12
|
-
"types": "./dist/index.d.ts",
|
|
13
|
-
"import": "./dist/index.js",
|
|
14
|
-
"require": "./dist/index.cjs"
|
|
15
|
-
},
|
|
16
|
-
"./dev-server": {
|
|
17
|
-
"types": "./dist/dev-server/index.d.ts",
|
|
18
|
-
"import": "./dist/dev-server.js",
|
|
19
|
-
"require": "./dist/dev-server.cjs"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"bin": {
|
|
23
|
-
"backtrack": "./bin/cli.js"
|
|
24
|
-
},
|
|
25
|
-
"files": [
|
|
26
|
-
"dist",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@backtrack-js/browser",
|
|
3
|
+
"version": "0.5.4",
|
|
4
|
+
"description": "A flight recorder for your web app. Replay the exact moments before a bug, privately and offline.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"typings": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.cjs"
|
|
15
|
+
},
|
|
16
|
+
"./dev-server": {
|
|
17
|
+
"types": "./dist/dev-server/index.d.ts",
|
|
18
|
+
"import": "./dist/dev-server.js",
|
|
19
|
+
"require": "./dist/dev-server.cjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"bin": {
|
|
23
|
+
"backtrack": "./bin/cli.js"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/*.js",
|
|
27
|
+
"dist/*.cjs",
|
|
28
|
+
"dist/**/*.d.ts",
|
|
29
|
+
"dist/viewer/index.html",
|
|
30
|
+
"dist/viewer/assets/*.js",
|
|
31
|
+
"dist/viewer/assets/*.css",
|
|
32
|
+
"dist/viewer/assets/*.png",
|
|
33
|
+
"bin/*.js",
|
|
34
|
+
"bin/*.cjs",
|
|
35
|
+
"dev-server/package.json",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build:lib": "npm run build:editor && vite build && tsc -p tsconfig.build.json",
|
|
42
|
+
"build:viewer": "npm run build:editor && vite build viewer --outDir ../dist/viewer --emptyOutDir",
|
|
43
|
+
"build": "npm run build:lib && npm run build:viewer",
|
|
44
|
+
"build:site": "tsx scripts/build-site.ts",
|
|
45
|
+
"check:package": "tsx scripts/verify-package.ts",
|
|
46
|
+
"prepack": "npm run build && npm run check:package",
|
|
47
|
+
"preview:site": "vite preview --outDir dist/site --port 4174 --strictPort",
|
|
48
|
+
"test": "npm run build:editor && vitest run",
|
|
49
|
+
"test:e2e": "npm run build:editor && playwright test",
|
|
50
|
+
"test:benchmark": "npm run build:editor && cross-env RUN_BENCHMARK=1 playwright test tests/e2e/recompression-benchmark.spec.ts",
|
|
51
|
+
"gate:0": "tsx scripts/verify-fixture.ts",
|
|
52
|
+
"gate:1": "tsx scripts/verify-lote1.ts",
|
|
53
|
+
"gate:2": "tsx scripts/verify-lote2.ts",
|
|
54
|
+
"gate:3": "tsx scripts/verify-lote3.ts",
|
|
55
|
+
"viewer": "npm run build:editor && vite viewer --host",
|
|
56
|
+
"typecheck": "npm run build:editor && tsc --noEmit",
|
|
57
|
+
"build:editor": "npm run build --workspace @backtrack-js/editor",
|
|
58
|
+
"lint": "eslint .",
|
|
59
|
+
"size": "size-limit"
|
|
60
|
+
},
|
|
61
|
+
"keywords": [
|
|
62
|
+
"backtrack",
|
|
63
|
+
"flight-recorder",
|
|
64
|
+
"rrweb",
|
|
65
|
+
"blackbox",
|
|
66
|
+
"debugging",
|
|
67
|
+
"incident",
|
|
68
|
+
"error-tracking",
|
|
69
|
+
"browser",
|
|
70
|
+
"session-replay"
|
|
71
|
+
],
|
|
72
|
+
"author": "Matheus Moorete",
|
|
73
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
74
|
+
"repository": {
|
|
75
|
+
"type": "git",
|
|
76
|
+
"url": "git+https://github.com/MatheusMoorete/Backtrack-JS.git"
|
|
77
|
+
},
|
|
78
|
+
"bugs": {
|
|
79
|
+
"url": "https://github.com/MatheusMoorete/Backtrack-JS/issues"
|
|
80
|
+
},
|
|
81
|
+
"homepage": "https://github.com/MatheusMoorete/Backtrack-JS#readme",
|
|
82
|
+
"dependencies": {
|
|
83
|
+
"@backtrack-js/editor": "0.1.0",
|
|
84
|
+
"@jridgewell/trace-mapping": "^0.3.31",
|
|
85
|
+
"@rrweb/record": "^2.1.6"
|
|
86
|
+
},
|
|
87
|
+
"devDependencies": {
|
|
88
|
+
"@eslint/js": "^9.39.5",
|
|
89
|
+
"@playwright/test": "1.61.0",
|
|
90
|
+
"@rrweb/replay": "^2.1.6",
|
|
91
|
+
"@size-limit/file": "^11.2.0",
|
|
92
|
+
"@testing-library/react": "^16.3.3",
|
|
93
|
+
"@types/node": "^20.11.0",
|
|
94
|
+
"@types/react": "^18.3.31",
|
|
95
|
+
"@types/react-dom": "^18.3.7",
|
|
96
|
+
"@vitejs/plugin-react": "^4.7.0",
|
|
97
|
+
"cross-env": "^10.1.0",
|
|
98
|
+
"eslint": "^9.39.5",
|
|
99
|
+
"fake-indexeddb": "^6.2.5",
|
|
100
|
+
"happy-dom": "^20.14.5",
|
|
101
|
+
"react": "^19.3.0",
|
|
102
|
+
"react-dom": "^19.3.0",
|
|
103
|
+
"size-limit": "^11.2.0",
|
|
104
|
+
"tsx": "^4.7.1",
|
|
105
|
+
"typescript": "^5.4.0",
|
|
106
|
+
"typescript-eslint": "^8.71.1",
|
|
107
|
+
"vite": "^5.2.0",
|
|
108
|
+
"vitest": "^1.5.0"
|
|
109
|
+
},
|
|
110
|
+
"workspaces": [
|
|
111
|
+
"packages/editor"
|
|
112
|
+
]
|
|
113
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/capturers/console.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAe;IAEvC,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,aAAa,CAAqC;IAE1D,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,YAAY,CAAqC;IAEzD,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,MAAM;IAKxD,KAAK,IAAI,IAAI;IAuBpB,OAAO,CAAC,aAAa;IAkCd,IAAI,IAAI,IAAI;CAsBpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/capturers/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,YAAY,CAAC,CAA8B;IACnD,OAAO,CAAC,gBAAgB,CAAC,CAAyC;gBAGhE,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,MAAM;IAOzB,KAAK,IAAI,IAAI;IAmBpB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACI,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI;IAmCnG,OAAO,CAAC,qBAAqB;IAoDtB,IAAI,IAAI,IAAI;CAepB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capturers/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/capturers/navigation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;CAC5C;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,iBAAiB,CAAgD;IACzE,OAAO,CAAC,oBAAoB,CAAmD;IAE/E,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,iBAAiB,CAAC,CAAa;gBAGrC,MAAM,EAAE,WAAW,EACnB,gBAAgB,EAAE,MAAM,MAAM,EAC9B,MAAM,CAAC,EAAE,wBAAwB;IAO5B,KAAK,IAAI,IAAI;IAyCpB,OAAO,CAAC,gBAAgB;IAoBjB,IAAI,IAAI,IAAI;CAwBpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/capturers/network.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAClC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO,CAAC,eAAe,CAAqD;IAC5E,OAAO,CAAC,eAAe,CAAqD;IAC5E,OAAO,CAAC,oBAAoB,CAAiE;IAC7F,OAAO,CAAC,WAAW,CAA8C;gBAG/D,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,MAAM,EAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAclC,KAAK,IAAI,IAAI;IAQpB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,eAAe;IAqHvB,OAAO,CAAC,aAAa;IA4HrB,OAAO,CAAC,kBAAkB;IAqDnB,IAAI,IAAI,IAAI;CA6BpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/capturers/performance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAG1B,MAAM,EAAE,WAAW,EACnB,gBAAgB,EAAE,MAAM,MAAM,EAC9B,MAAM,CAAC,EAAE,yBAAyB;IAO7B,KAAK,IAAI,IAAI;IA0Cb,IAAI,IAAI,IAAI;CAWpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../../src/capturers/route-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,OAAO,CAsCT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rrweb.d.ts","sourceRoot":"","sources":["../../src/capturers/rrweb.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,kBAAkB,CAAK;gBAEnB,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,mBAAmB;IAKtD,qBAAqB,IAAI,MAAM;IAI/B,KAAK,IAAI,IAAI;IAkFb,IAAI,IAAI,IAAI;CAapB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/capturers/sanitizer.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;CAC5C;AASD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,MAAM,CA4BzF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAczD;AAUD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CA8HtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,MAAM,CAgB5F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,GAChF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAgCpC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flight-recorder.d.ts","sourceRoot":"","sources":["../../src/core/flight-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAgBjD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAuB,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAQrF,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAmC;IAEhE,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,mBAAmB,CAAoC;IAE/D,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,sBAAsB,CAA+C;IAC7E,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,uBAAuB,CAAC,CAAa;IAC7C,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,0BAA0B,CAAC,CAAS;IAC5C,OAAO,CAAC,uBAAuB,CAAC,CAAS;gBAE7B,OAAO,CAAC,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,gBAAgB;WA2CpD,IAAI,CACtB,OAAO,CAAC,EAAE,qBAAqB,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,kBAAkB,CAAC;WAoBhB,UAAU,IAAI,IAAI;WAiBlB,UAAU,IAAI,IAAI;WAiBlB,YAAY,IAAI,OAAO;WAgBvB,IAAI,IAAI,IAAI;WAIZ,IAAI,IAAI,IAAI;WAIZ,MAAM,IAAI,OAAO;WAIX,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;WAOpC,WAAW,IAAI,kBAAkB,GAAG,IAAI;IAI/C,UAAU,IAAI,IAAI;IAQlB,UAAU,IAAI,IAAI;IAQlB,YAAY,IAAI,OAAO;IAO9B,OAAO,CAAC,YAAY,CAGlB;IAEF,OAAO,CAAC,sBAAsB;IAkCjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8LnC,OAAO,CAAC,iBAAiB;YA8BX,mBAAmB;YA6BnB,gBAAgB;YAoChB,YAAY;IAkB1B,OAAO,CAAC,eAAe,CAAC,CAAgB;IAExC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,sBAAsB;IAWjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqErB,OAAO,CAClB,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IA0CX,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI;IAStF,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAQ3C,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAchE,cAAc,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACtD,OAAO,CAAC,sBAAsB,CAAC;IA0CrB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB5B,SAAS,IAAI,cAAc;IAqB3B,WAAW,IAAI,MAAM;IAIf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAEpF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../src/core/state-machine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,wBAAwB,CAA4B;gBAEhD,YAAY,GAAE,aAAyB;IAI5C,QAAQ,IAAI,aAAa;IAIzB,kBAAkB,IAAI,MAAM,EAAE;IAI9B,UAAU,IAAI,OAAO;IAIrB,WAAW,IAAI,OAAO;IAUtB,UAAU,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa;CAuDjE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dev-server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC3B,MAAM,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/dev-server/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAM5D,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;AAmCxH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,qBAAqB,CAqKpG"}
|