@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.
Files changed (106) hide show
  1. package/README.md +56 -54
  2. package/bin/cli.cjs +5 -2
  3. package/bin/export-context.cjs +50 -0
  4. package/bin/mcp.cjs +19 -0
  5. package/bin/symbolize.cjs +214 -66
  6. package/dist/capturers/browser.d.ts +18 -0
  7. package/dist/capturers/console.d.ts +0 -1
  8. package/dist/capturers/errors.d.ts +3 -2
  9. package/dist/capturers/index.d.ts +0 -1
  10. package/dist/capturers/navigation.d.ts +0 -1
  11. package/dist/capturers/network.d.ts +11 -2
  12. package/dist/capturers/performance.d.ts +0 -1
  13. package/dist/capturers/route-matcher.d.ts +0 -1
  14. package/dist/capturers/rrweb.d.ts +2 -1
  15. package/dist/capturers/sanitizer.d.ts +1 -1
  16. package/dist/core/flight-recorder.d.ts +9 -1
  17. package/dist/core/state-machine.d.ts +0 -1
  18. package/dist/dev-server/index.d.ts +0 -1
  19. package/dist/dev-server/middleware.d.ts +0 -1
  20. package/dist/dev-server.cjs +3 -7
  21. package/dist/dev-server.js +128 -91
  22. package/dist/incident-reports-9iXHIaBD.js +1242 -0
  23. package/dist/incident-reports-Cjos7N-u.cjs +51 -0
  24. package/dist/index.cjs +53 -39
  25. package/dist/index.d.ts +4 -1
  26. package/dist/index.js +2357 -2080
  27. package/dist/mcp/server.d.ts +5 -0
  28. package/dist/mcp.cjs +2 -0
  29. package/dist/mcp.js +203 -0
  30. package/dist/storage/batch-writer.d.ts +6 -1
  31. package/dist/storage/db.d.ts +0 -1
  32. package/dist/storage/incident-manager.d.ts +10 -7
  33. package/dist/storage/index.d.ts +0 -1
  34. package/dist/storage/retention.d.ts +0 -1
  35. package/dist/storage/session.d.ts +0 -1
  36. package/dist/types/artifact.d.ts +50 -1
  37. package/dist/types/browser-context.d.ts +34 -0
  38. package/dist/types/chunk.d.ts +0 -1
  39. package/dist/types/health.d.ts +0 -1
  40. package/dist/types/incident.d.ts +0 -1
  41. package/dist/types/index.d.ts +1 -1
  42. package/dist/types/options.d.ts +15 -1
  43. package/dist/types/timeline.d.ts +11 -1
  44. package/dist/types/transport.d.ts +0 -1
  45. package/dist/types/visual-proposal.d.ts +1 -0
  46. package/dist/utils/compression.d.ts +0 -1
  47. package/dist/utils/context-package.d.ts +4 -0
  48. package/dist/utils/gist-uploader.d.ts +0 -1
  49. package/dist/utils/incident-query.d.ts +93 -0
  50. package/dist/utils/incident-reports.d.ts +18 -0
  51. package/dist/utils/interactions.d.ts +13 -0
  52. package/dist/utils/markdown.d.ts +3 -1
  53. package/dist/validation/structure.d.ts +11 -0
  54. package/dist/validation/validate.d.ts +3 -2
  55. package/dist/viewer/assets/index-BNTvj2zy.js +337 -0
  56. package/dist/viewer/assets/{index-092olPra.css → index-DXHvcqkw.css} +1 -1
  57. package/dist/viewer/index.html +2 -2
  58. package/dist/widget/annotator.d.ts +0 -1
  59. package/dist/widget/element-editor.d.ts +7 -0
  60. package/dist/widget/styles.d.ts +0 -1
  61. package/dist/widget/widget.d.ts +9 -3
  62. package/package.json +113 -90
  63. package/dist/capturers/console.d.ts.map +0 -1
  64. package/dist/capturers/errors.d.ts.map +0 -1
  65. package/dist/capturers/index.d.ts.map +0 -1
  66. package/dist/capturers/navigation.d.ts.map +0 -1
  67. package/dist/capturers/network.d.ts.map +0 -1
  68. package/dist/capturers/performance.d.ts.map +0 -1
  69. package/dist/capturers/route-matcher.d.ts.map +0 -1
  70. package/dist/capturers/rrweb.d.ts.map +0 -1
  71. package/dist/capturers/sanitizer.d.ts.map +0 -1
  72. package/dist/core/flight-recorder.d.ts.map +0 -1
  73. package/dist/core/state-machine.d.ts.map +0 -1
  74. package/dist/dev-server/index.d.ts.map +0 -1
  75. package/dist/dev-server/middleware.d.ts.map +0 -1
  76. package/dist/dev-server.cjs.map +0 -1
  77. package/dist/dev-server.js.map +0 -1
  78. package/dist/index.cjs.map +0 -1
  79. package/dist/index.d.ts.map +0 -1
  80. package/dist/index.js.map +0 -1
  81. package/dist/markdown-Ao5Ah9MF.cjs +0 -9
  82. package/dist/markdown-Ao5Ah9MF.cjs.map +0 -1
  83. package/dist/markdown-D3C94OlY.js +0 -494
  84. package/dist/markdown-D3C94OlY.js.map +0 -1
  85. package/dist/storage/batch-writer.d.ts.map +0 -1
  86. package/dist/storage/db.d.ts.map +0 -1
  87. package/dist/storage/incident-manager.d.ts.map +0 -1
  88. package/dist/storage/index.d.ts.map +0 -1
  89. package/dist/storage/retention.d.ts.map +0 -1
  90. package/dist/storage/session.d.ts.map +0 -1
  91. package/dist/types/artifact.d.ts.map +0 -1
  92. package/dist/types/chunk.d.ts.map +0 -1
  93. package/dist/types/health.d.ts.map +0 -1
  94. package/dist/types/incident.d.ts.map +0 -1
  95. package/dist/types/index.d.ts.map +0 -1
  96. package/dist/types/options.d.ts.map +0 -1
  97. package/dist/types/timeline.d.ts.map +0 -1
  98. package/dist/types/transport.d.ts.map +0 -1
  99. package/dist/utils/compression.d.ts.map +0 -1
  100. package/dist/utils/gist-uploader.d.ts.map +0 -1
  101. package/dist/utils/markdown.d.ts.map +0 -1
  102. package/dist/validation/validate.d.ts.map +0 -1
  103. package/dist/viewer/assets/index-D8m3bwRf.js +0 -197
  104. package/dist/widget/annotator.d.ts.map +0 -1
  105. package/dist/widget/styles.d.ts.map +0 -1
  106. 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%}}
@@ -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-D8m3bwRf.js"></script>
14
- <link rel="stylesheet" crossorigin href="/assets/index-092olPra.css">
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>
@@ -82,4 +82,3 @@ export declare class ScreenAnnotator {
82
82
  private clear;
83
83
  close(): void;
84
84
  }
85
- //# sourceMappingURL=annotator.d.ts.map
@@ -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
+ }
@@ -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
@@ -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.2",
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
- "bin",
28
- "dev-server",
29
- "README.md",
30
- "LICENSE"
31
- ],
32
- "sideEffects": false,
33
- "scripts": {
34
- "build:lib": "vite build && tsc -p tsconfig.build.json",
35
- "build:viewer": "vite build viewer --outDir ../dist/viewer --emptyOutDir",
36
- "build": "npm run build:lib && npm run build:viewer",
37
- "build:site": "tsx scripts/build-site.ts",
38
- "preview:site": "vite preview --outDir dist/site --port 4174 --strictPort",
39
- "test": "vitest run",
40
- "test:e2e": "playwright test",
41
- "gate:0": "tsx scripts/verify-fixture.ts",
42
- "gate:1": "tsx scripts/verify-lote1.ts",
43
- "gate:2": "tsx scripts/verify-lote2.ts",
44
- "gate:3": "tsx scripts/verify-lote3.ts",
45
- "viewer": "vite viewer --host",
46
- "typecheck": "tsc --noEmit"
47
- },
48
- "keywords": [
49
- "backtrack",
50
- "flight-recorder",
51
- "rrweb",
52
- "blackbox",
53
- "debugging",
54
- "incident",
55
- "error-tracking",
56
- "browser",
57
- "session-replay"
58
- ],
59
- "author": "Matheus Moorete",
60
- "license": "SEE LICENSE IN LICENSE",
61
- "repository": {
62
- "type": "git",
63
- "url": "git+https://github.com/MatheusMoorete/Backtrack-JS.git"
64
- },
65
- "bugs": {
66
- "url": "https://github.com/MatheusMoorete/Backtrack-JS/issues"
67
- },
68
- "homepage": "https://github.com/MatheusMoorete/Backtrack-JS#readme",
69
- "dependencies": {
70
- "@jridgewell/trace-mapping": "^0.3.31",
71
- "@rrweb/record": "^2.1.6"
72
- },
73
- "devDependencies": {
74
- "@playwright/test": "1.61.0",
75
- "@rrweb/replay": "^2.1.6",
76
- "@testing-library/react": "^16.3.3",
77
- "@types/node": "^20.11.0",
78
- "@types/react": "^18.3.31",
79
- "@types/react-dom": "^18.3.7",
80
- "@vitejs/plugin-react": "^4.7.0",
81
- "fake-indexeddb": "^6.2.5",
82
- "happy-dom": "^20.14.5",
83
- "react": "^19.3.0",
84
- "react-dom": "^19.3.0",
85
- "tsx": "^4.7.1",
86
- "typescript": "^5.4.0",
87
- "vite": "^5.2.0",
88
- "vitest": "^1.5.0"
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"}