dev-inspector 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +22 -1
  2. package/lib/init.d.ts +5 -2
  3. package/lib/init.js +5 -2
  4. package/lib/integrations/index.d.ts +2 -0
  5. package/lib/integrations/index.js +7 -0
  6. package/lib/integrations/jira/adf.d.ts +11 -0
  7. package/lib/integrations/jira/adf.js +17 -0
  8. package/lib/integrations/jira/client.d.ts +4 -0
  9. package/lib/integrations/jira/client.js +113 -0
  10. package/lib/integrations/jira/errors.d.ts +10 -0
  11. package/lib/integrations/jira/errors.js +13 -0
  12. package/lib/integrations/jira/index.d.ts +2 -0
  13. package/lib/integrations/jira/index.js +8 -0
  14. package/lib/integrations/types.d.ts +54 -0
  15. package/lib/integrations/types.js +2 -0
  16. package/lib/logger/networkLogger.js +41 -11
  17. package/lib/storage/localStorage.d.ts +30 -0
  18. package/lib/storage/localStorage.js +166 -0
  19. package/lib/ui/logList/createLogList.d.ts +2 -0
  20. package/lib/ui/logList/createLogList.js +67 -0
  21. package/lib/ui/logList/index.d.ts +2 -0
  22. package/lib/ui/logList/index.js +5 -0
  23. package/lib/ui/logList/networkDetails/copy.d.ts +2 -0
  24. package/lib/ui/logList/networkDetails/copy.js +101 -0
  25. package/lib/ui/logList/{networkDetails.d.ts → networkDetails/createNetworkDetails.d.ts} +1 -1
  26. package/lib/ui/logList/networkDetails/createNetworkDetails.js +61 -0
  27. package/lib/ui/logList/networkDetails/index.d.ts +1 -0
  28. package/lib/ui/logList/networkDetails/index.js +5 -0
  29. package/lib/ui/logList/networkDetails/renderValue.d.ts +2 -0
  30. package/lib/ui/logList/{networkDetails.js → networkDetails/renderValue.js} +32 -32
  31. package/lib/ui/logList/shared/consoleInspect.d.ts +1 -0
  32. package/lib/ui/logList/shared/consoleInspect.js +17 -0
  33. package/lib/ui/logList/shared/index.d.ts +3 -0
  34. package/lib/ui/logList/shared/index.js +11 -0
  35. package/lib/ui/logList/shared/time.d.ts +1 -0
  36. package/lib/ui/logList/shared/time.js +10 -0
  37. package/lib/ui/logList/shared/tone.d.ts +6 -0
  38. package/lib/ui/logList/shared/tone.js +36 -0
  39. package/lib/ui/logList/types.d.ts +6 -0
  40. package/lib/ui/logList/types.js +2 -0
  41. package/lib/ui/panel/behavior/setupPanelBehavior.d.ts +4 -1
  42. package/lib/ui/panel/behavior/setupPanelBehavior.js +48 -1
  43. package/lib/ui/panel/bindings/bindStorageToPanelView.d.ts +2 -0
  44. package/lib/ui/panel/bindings/bindStorageToPanelView.js +50 -6
  45. package/lib/ui/panel/bindings/matchesQuery.d.ts +2 -0
  46. package/lib/ui/panel/bindings/matchesQuery.js +54 -0
  47. package/lib/ui/panel/bindings/types.d.ts +2 -0
  48. package/lib/ui/panel/dom/buildPanelDOM.js +65 -6
  49. package/lib/ui/panel/dom/constants.d.ts +5 -1
  50. package/lib/ui/panel/dom/constants.js +35 -20
  51. package/lib/ui/panel/dom/types.d.ts +6 -0
  52. package/lib/ui/panel/index.d.ts +4 -0
  53. package/lib/ui/panel/index.js +8 -3
  54. package/lib/ui/panel/integrations/icons.d.ts +1 -0
  55. package/lib/ui/panel/integrations/icons.js +7 -0
  56. package/lib/ui/panel/integrations/index.d.ts +1 -0
  57. package/lib/ui/panel/integrations/index.js +5 -0
  58. package/lib/ui/panel/integrations/jiraDialog.d.ts +6 -0
  59. package/lib/ui/panel/integrations/jiraDialog.js +234 -0
  60. package/lib/ui/panel/integrations/screenshot.d.ts +4 -0
  61. package/lib/ui/panel/integrations/screenshot.js +51 -0
  62. package/lib/ui/panel/localStorage/createLocalStorageView.d.ts +4 -0
  63. package/lib/ui/panel/localStorage/createLocalStorageView.js +108 -0
  64. package/lib/ui/panel/localStorage/index.d.ts +3 -0
  65. package/lib/ui/panel/localStorage/index.js +7 -0
  66. package/lib/ui/panel/localStorage/setupLocalStorageSync.d.ts +9 -0
  67. package/lib/ui/panel/localStorage/setupLocalStorageSync.js +30 -0
  68. package/lib/ui/panel/localStorage/types.d.ts +6 -0
  69. package/lib/ui/panel/localStorage/types.js +2 -0
  70. package/lib/ui/panel/state/createPanelState.d.ts +2 -1
  71. package/lib/ui/panel/state/createPanelState.js +5 -1
  72. package/lib/ui/panel/state/types.d.ts +5 -0
  73. package/lib/ui/panel/theme/applyTheme.d.ts +2 -0
  74. package/lib/ui/panel/theme/applyTheme.js +6 -0
  75. package/lib/ui/panel/theme/index.d.ts +3 -0
  76. package/lib/ui/panel/theme/index.js +9 -0
  77. package/lib/ui/panel/theme/storage.d.ts +4 -0
  78. package/lib/ui/panel/theme/storage.js +45 -0
  79. package/lib/ui/panel/theme/types.d.ts +6 -0
  80. package/lib/ui/panel/theme/types.js +2 -0
  81. package/lib/ui/panelStyles.d.ts +1 -1
  82. package/lib/ui/panelStyles.js +557 -116
  83. package/lib/ui/shared/copy.d.ts +2 -0
  84. package/lib/ui/shared/copy.js +101 -0
  85. package/lib/utils/types.d.ts +3 -0
  86. package/package.json +1 -1
@@ -1 +1 @@
1
- export declare const PANEL_CSS = "\n.di-root, .di-root * {\n box-sizing: border-box;\n}\n\n.di-toggle {\n position: fixed;\n right: 12px;\n bottom: 12px;\n z-index: 2147483647;\n border: 1px solid rgba(255,255,255,0.18);\n background: rgba(20,20,20,0.92);\n color: #fff;\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n padding: 8px 10px;\n border-radius: 10px;\n cursor: pointer;\n backdrop-filter: blur(8px);\n box-shadow: 0 10px 30px rgba(0,0,0,0.35);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n}\n\n.di-toggleTitle {\n font-weight: 600;\n}\n\n.di-toggleMeta {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.di-toggleBadge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 999px;\n border: 1px solid rgba(255,255,255,0.16);\n background: rgba(0,0,0,0.28);\n font-size: 11px;\n line-height: 1;\n}\n\n.di-toggleErr {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: 2px;\n padding: 2px 6px;\n border-radius: 999px;\n background: rgba(239, 68, 68, 0.95);\n color: #fff;\n font-size: 11px;\n line-height: 1;\n}\n\n.di-toggleErrIcon {\n font-weight: 700;\n transform: translateY(-0.5px);\n}\n\n.di-toggleIcon {\n width: 14px;\n height: 14px;\n display: inline-block;\n}\n\n.di-panel {\n position: fixed;\n right: 12px;\n bottom: 56px;\n width: min(520px, calc(100vw - 24px));\n height: min(380px, calc(100vh - 84px));\n z-index: 2147483647;\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(16,16,16,0.92);\n color: #eaeaea;\n border-radius: 12px;\n overflow: hidden;\n display: grid;\n grid-template-rows: auto 1fr;\n backdrop-filter: blur(8px);\n box-shadow: 0 10px 30px rgba(0,0,0,0.45);\n}\n\n.di-resizeHandle {\n width: 18px;\n height: 18px;\n flex: 0 0 18px;\n border-radius: 8px;\n cursor: nwse-resize;\n touch-action: none;\n opacity: 0.9;\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(255,255,255,0.06);\n position: relative;\n}\n\n.di-resizeHandle::before {\n content: \"\";\n position: absolute;\n inset: 4px;\n border-radius: 6px;\n background:\n linear-gradient(135deg, rgba(255,255,255,0.65) 0 2px, transparent 0) 0 0 / 6px 6px,\n linear-gradient(135deg, rgba(255,255,255,0.35) 0 2px, transparent 0) 3px 3px / 6px 6px;\n}\n\n.di-resizeHandle:hover {\n opacity: 1;\n border-color: rgba(255,255,255,0.24);\n background: rgba(255,255,255,0.10);\n}\n\n.di-hidden {\n display: none;\n}\n\n.di-header {\n display: grid;\n gap: 8px;\n padding: 10px 12px;\n border-bottom: 1px solid rgba(255,255,255,0.12);\n}\n\n.di-headerRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.di-title {\n font: 600 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n opacity: 0.95;\n}\n\n.di-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.di-btn {\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(255,255,255,0.06);\n color: #fff;\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n padding: 6px 8px;\n border-radius: 10px;\n cursor: pointer;\n}\n\n.di-tabs {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.di-tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(255,255,255,0.06);\n color: #fff;\n padding: 6px 10px;\n border-radius: 999px;\n cursor: pointer;\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n opacity: 0.9;\n}\n\n.di-tab:hover {\n background: rgba(255,255,255,0.10);\n border-color: rgba(255,255,255,0.22);\n}\n\n.di-tabActive {\n opacity: 1;\n background: rgba(255,255,255,0.14);\n border-color: rgba(255,255,255,0.28);\n}\n\n.di-tabIcon {\n width: 14px;\n height: 14px;\n display: inline-block;\n}\n\n.di-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n border: 1px solid rgba(255,255,255,0.16);\n background: rgba(0,0,0,0.28);\n font-size: 11px;\n line-height: 1;\n}\n\n.di-body {\n overflow: auto;\n}\n\n.di-list {\n margin: 0;\n padding: 8px 10px;\n list-style: none;\n display: grid;\n gap: 6px;\n}\n\n.di-item {\n padding: 8px 10px;\n border: 1px solid rgba(255,255,255,0.10);\n border-radius: 10px;\n background: rgba(255,255,255,0.04);\n}\n\n.di-itemToneNeutral {\n border-color: rgba(255,255,255,0.10);\n background: rgba(255,255,255,0.04);\n}\n\n.di-itemToneSuccess {\n border-color: rgba(34, 197, 94, 0.35);\n background: rgba(34, 197, 94, 0.10);\n}\n\n.di-itemToneWarning {\n border-color: rgba(245, 158, 11, 0.42);\n background: rgba(245, 158, 11, 0.12);\n}\n\n.di-itemToneError {\n border-color: rgba(239, 68, 68, 0.45);\n background: rgba(239, 68, 68, 0.12);\n}\n\n.di-meta {\n display: flex;\n gap: 10px;\n font: 11px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n opacity: 0.85;\n margin-bottom: 4px;\n}\n\n.di-statusChip {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n line-height: 1;\n color: #fff;\n}\n\n.di-statusChipSuccess {\n background: rgba(34, 197, 94, 0.95);\n}\n\n.di-statusChipError {\n background: rgba(239, 68, 68, 0.95);\n}\n\n.di-msg {\n white-space: pre-wrap;\n word-break: break-word;\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.di-details {\n margin-top: 8px;\n}\n\n.di-detailsSummary {\n cursor: pointer;\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n opacity: 0.9;\n user-select: none;\n}\n\n.di-detailsBody {\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 10px;\n border: 1px solid rgba(255,255,255,0.10);\n background: rgba(0,0,0,0.22);\n}\n\n.di-netBodies {\n display: grid;\n gap: 10px;\n}\n\n.di-netBodySection {\n display: grid;\n gap: 6px;\n}\n\n.di-netBodyLabel {\n font: 11px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n opacity: 0.85;\n}\n\n.di-netBodyText {\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n white-space: pre-wrap;\n word-break: break-word;\n opacity: 0.95;\n}\n\n.di-jsonRoot {\n font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.di-jsonNode {\n margin-left: 0;\n}\n\n.di-jsonSummary {\n cursor: pointer;\n user-select: none;\n opacity: 0.95;\n}\n\n.di-jsonBody {\n margin-top: 6px;\n padding-left: 12px;\n display: grid;\n gap: 4px;\n}\n\n.di-jsonRow {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 10px;\n align-items: start;\n}\n\n.di-jsonKey {\n opacity: 0.85;\n color: rgba(255,255,255,0.78);\n}\n\n.di-jsonValue {\n opacity: 0.95;\n color: rgba(255,255,255,0.92);\n}\n\n.di-jsonMore, .di-jsonTrunc {\n opacity: 0.75;\n}\n";
1
+ export declare const PANEL_CSS = "\n.di-root {\n --di-font: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --di-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --di-radius-sm: 8px;\n --di-radius-md: 10px;\n --di-radius-lg: 14px;\n --di-radius-pill: 999px;\n --di-z: 2147483647;\n\n --di-bg: #ffffff;\n --di-bg-elev: #f8fafc;\n --di-bg-soft: #f1f5f9;\n --di-bg-hover: #e2e8f0;\n --di-bg-row: #ffffff;\n --di-bg-row-alt: #f8fafc;\n --di-overlay: rgba(15, 23, 42, 0.04);\n\n --di-border: #e2e8f0;\n --di-border-strong: #cbd5e1;\n --di-border-soft: #eef2f6;\n\n --di-text: #0f172a;\n --di-text-muted: #475569;\n --di-text-faint: #94a3b8;\n --di-text-on-accent: #ffffff;\n\n --di-accent: #6366f1;\n --di-accent-hover: #4f46e5;\n --di-accent-soft: rgba(99, 102, 241, 0.10);\n\n --di-success: #059669;\n --di-success-bg: rgba(16, 185, 129, 0.10);\n --di-success-border: rgba(16, 185, 129, 0.32);\n\n --di-warning: #d97706;\n --di-warning-bg: rgba(245, 158, 11, 0.12);\n --di-warning-border: rgba(245, 158, 11, 0.36);\n\n --di-error: #dc2626;\n --di-error-bg: rgba(239, 68, 68, 0.10);\n --di-error-border: rgba(239, 68, 68, 0.34);\n\n --di-shadow: 0 8px 24px rgba(15, 23, 42, 0.10), 0 2px 6px rgba(15, 23, 42, 0.06);\n --di-shadow-lg: 0 18px 48px rgba(15, 23, 42, 0.18), 0 4px 12px rgba(15, 23, 42, 0.08);\n --di-ring: 0 0 0 3px rgba(99, 102, 241, 0.25);\n}\n\n.di-root[data-di-theme=\"dark\"] {\n --di-bg: #0b0e13;\n --di-bg-elev: #11151c;\n --di-bg-soft: #161b23;\n --di-bg-hover: #1e2530;\n --di-bg-row: #14181f;\n --di-bg-row-alt: #181d25;\n --di-overlay: rgba(255, 255, 255, 0.04);\n\n --di-border: #232a35;\n --di-border-strong: #313a48;\n --di-border-soft: #1b212b;\n\n --di-text: #f1f5f9;\n --di-text-muted: #94a3b8;\n --di-text-faint: #64748b;\n --di-text-on-accent: #ffffff;\n\n --di-accent: #818cf8;\n --di-accent-hover: #a5b4fc;\n --di-accent-soft: rgba(129, 140, 248, 0.16);\n\n --di-success: #34d399;\n --di-success-bg: rgba(16, 185, 129, 0.16);\n --di-success-border: rgba(16, 185, 129, 0.40);\n\n --di-warning: #fbbf24;\n --di-warning-bg: rgba(245, 158, 11, 0.16);\n --di-warning-border: rgba(245, 158, 11, 0.42);\n\n --di-error: #f87171;\n --di-error-bg: rgba(239, 68, 68, 0.16);\n --di-error-border: rgba(239, 68, 68, 0.40);\n\n --di-shadow: 0 8px 24px rgba(0, 0, 0, 0.40), 0 2px 6px rgba(0, 0, 0, 0.30);\n --di-shadow-lg: 0 18px 48px rgba(0, 0, 0, 0.55), 0 4px 12px rgba(0, 0, 0, 0.35);\n --di-ring: 0 0 0 3px rgba(129, 140, 248, 0.32);\n}\n\n.di-root, .di-root * {\n box-sizing: border-box;\n}\n\n.di-root {\n font-family: var(--di-font);\n color: var(--di-text);\n}\n\n.di-toggle {\n position: fixed;\n right: 16px;\n bottom: 16px;\n z-index: var(--di-z);\n border: 1px solid var(--di-border);\n background: var(--di-bg);\n color: var(--di-text);\n font-family: var(--di-font);\n font-size: 12px;\n font-weight: 500;\n padding: 8px 12px;\n border-radius: var(--di-radius-pill);\n cursor: pointer;\n box-shadow: var(--di-shadow);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n transition: transform 120ms ease, box-shadow 160ms ease, border-color 160ms ease, background 160ms ease;\n}\n\n.di-toggle:hover {\n border-color: var(--di-border-strong);\n box-shadow: var(--di-shadow-lg);\n transform: translateY(-1px);\n}\n\n.di-toggle:focus-visible {\n outline: none;\n box-shadow: var(--di-shadow), var(--di-ring);\n}\n\n.di-toggleTitle {\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.di-toggleMeta {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.di-toggleBadge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: var(--di-radius-pill);\n background: var(--di-bg-soft);\n color: var(--di-text-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 1;\n}\n\n.di-toggleErr {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: 2px;\n padding: 2px 6px;\n border-radius: var(--di-radius-pill);\n background: var(--di-error);\n color: var(--di-text-on-accent);\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n}\n\n.di-toggleErrIcon {\n font-weight: 700;\n transform: translateY(-0.5px);\n}\n\n.di-toggleIcon {\n width: 14px;\n height: 14px;\n display: inline-block;\n}\n\n.di-panel {\n position: fixed;\n right: 16px;\n bottom: 64px;\n width: min(560px, calc(100vw - 32px));\n height: min(440px, calc(100vh - 96px));\n z-index: var(--di-z);\n border: 1px solid var(--di-border);\n background: var(--di-bg);\n color: var(--di-text);\n border-radius: var(--di-radius-lg);\n overflow: hidden;\n display: grid;\n grid-template-rows: auto 1fr;\n box-shadow: var(--di-shadow-lg);\n}\n\n.di-resizeHandle {\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n border-radius: var(--di-radius-sm);\n cursor: nwse-resize;\n touch-action: none;\n border: 1px solid var(--di-border);\n background: var(--di-bg-soft);\n position: relative;\n transition: background 160ms ease, border-color 160ms ease;\n}\n\n.di-resizeHandle::before {\n content: \"\";\n position: absolute;\n inset: 4px;\n border-radius: 4px;\n background:\n linear-gradient(135deg, var(--di-text-faint) 0 1.5px, transparent 0) 0 0 / 5px 5px,\n linear-gradient(135deg, var(--di-text-faint) 0 1.5px, transparent 0) 2.5px 2.5px / 5px 5px;\n opacity: 0.7;\n}\n\n.di-resizeHandle:hover {\n border-color: var(--di-border-strong);\n background: var(--di-bg-hover);\n}\n\n.di-hidden {\n display: none !important;\n}\n\n.di-header {\n display: grid;\n gap: 10px;\n padding: 12px 14px 10px;\n border-bottom: 1px solid var(--di-border);\n background: var(--di-bg-elev);\n}\n\n.di-headerRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n}\n\n.di-title {\n font-size: 13px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--di-text);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.di-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.di-btn {\n border: 1px solid var(--di-border);\n background: var(--di-bg);\n color: var(--di-text);\n font-family: var(--di-font);\n font-size: 12px;\n font-weight: 500;\n padding: 6px 10px;\n border-radius: var(--di-radius-md);\n cursor: pointer;\n transition: background 160ms ease, border-color 160ms ease, color 160ms ease;\n}\n\n.di-btn:hover {\n background: var(--di-bg-soft);\n border-color: var(--di-border-strong);\n}\n\n.di-btn:focus-visible {\n outline: none;\n box-shadow: var(--di-ring);\n}\n\n.di-iconBtn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n padding: 0;\n border: 1px solid var(--di-border);\n background: var(--di-bg);\n color: var(--di-text-muted);\n border-radius: var(--di-radius-md);\n cursor: pointer;\n transition: background 160ms ease, border-color 160ms ease, color 160ms ease;\n}\n\n.di-iconBtn:hover {\n background: var(--di-bg-soft);\n border-color: var(--di-border-strong);\n color: var(--di-text);\n}\n\n.di-iconBtn:focus-visible {\n outline: none;\n box-shadow: var(--di-ring);\n}\n\n.di-iconBtn svg {\n width: 16px;\n height: 16px;\n display: block;\n}\n\n.di-themeIcon {\n display: none;\n align-items: center;\n justify-content: center;\n}\n\n.di-root[data-di-theme=\"light\"] .di-themeIcon--moon {\n display: inline-flex;\n}\n\n.di-root[data-di-theme=\"dark\"] .di-themeIcon--sun {\n display: inline-flex;\n}\n\n.di-tabs {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.di-tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--di-text-muted);\n padding: 6px 12px;\n border-radius: var(--di-radius-pill);\n cursor: pointer;\n font-family: var(--di-font);\n font-size: 12px;\n font-weight: 500;\n transition: background 160ms ease, color 160ms ease, border-color 160ms ease;\n}\n\n.di-tab:hover {\n background: var(--di-bg-soft);\n color: var(--di-text);\n}\n\n.di-tab:focus-visible {\n outline: none;\n box-shadow: var(--di-ring);\n}\n\n.di-tabActive {\n background: var(--di-accent-soft);\n color: var(--di-accent);\n border-color: transparent;\n}\n\n.di-tabActive:hover {\n background: var(--di-accent-soft);\n color: var(--di-accent);\n}\n\n.di-tabIcon {\n width: 14px;\n height: 14px;\n display: inline-block;\n}\n\n.di-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: var(--di-radius-pill);\n background: var(--di-overlay);\n color: inherit;\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n}\n\n.di-tabActive .di-badge {\n background: var(--di-accent);\n color: var(--di-text-on-accent);\n}\n\n.di-searchRow {\n display: flex;\n}\n\n.di-searchWrap {\n position: relative;\n display: flex;\n align-items: center;\n flex: 1;\n background: var(--di-bg);\n border: 1px solid var(--di-border);\n border-radius: var(--di-radius-md);\n transition: border-color 160ms ease, box-shadow 160ms ease;\n}\n\n.di-searchWrap:focus-within {\n border-color: var(--di-accent);\n box-shadow: var(--di-ring);\n}\n\n.di-searchIconWrap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding-left: 10px;\n color: var(--di-text-faint);\n pointer-events: none;\n}\n\n.di-searchIcon {\n width: 14px;\n height: 14px;\n display: block;\n}\n\n.di-searchInput {\n flex: 1;\n border: 0;\n outline: 0;\n background: transparent;\n color: var(--di-text);\n font-family: var(--di-font);\n font-size: 12px;\n padding: 7px 10px;\n min-width: 0;\n}\n\n.di-searchInput::placeholder {\n color: var(--di-text-faint);\n}\n\n.di-searchInput::-webkit-search-cancel-button {\n -webkit-appearance: none;\n appearance: none;\n}\n\n.di-searchClear {\n display: none;\n border: 0;\n background: transparent;\n color: var(--di-text-faint);\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 4px 10px;\n border-radius: var(--di-radius-md);\n transition: color 120ms ease;\n}\n\n.di-searchClear:hover {\n color: var(--di-text);\n}\n\n.di-searchClear--visible {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.di-bodyWrap {\n position: relative;\n overflow: hidden;\n}\n\n.di-body {\n height: 100%;\n overflow: auto;\n background: var(--di-bg);\n scrollbar-width: thin;\n scrollbar-color: var(--di-border-strong) transparent;\n}\n\n.di-body::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n}\n\n.di-body::-webkit-scrollbar-thumb {\n background: var(--di-border-strong);\n border-radius: var(--di-radius-pill);\n border: 2px solid var(--di-bg);\n}\n\n.di-body::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.di-list {\n margin: 0;\n padding: 10px 12px 14px;\n list-style: none;\n display: grid;\n gap: 6px;\n}\n\n.di-item {\n padding: 10px 12px;\n border: 1px solid var(--di-border);\n border-radius: var(--di-radius-md);\n background: var(--di-bg-row);\n transition: border-color 160ms ease, background 160ms ease;\n}\n\n.di-item:hover {\n border-color: var(--di-border-strong);\n}\n\n.di-itemToneNeutral {\n border-color: var(--di-border);\n background: var(--di-bg-row);\n}\n\n.di-itemToneSuccess {\n border-color: var(--di-success-border);\n background: var(--di-success-bg);\n}\n\n.di-itemToneWarning {\n border-color: var(--di-warning-border);\n background: var(--di-warning-bg);\n}\n\n.di-itemToneError {\n border-color: var(--di-error-border);\n background: var(--di-error-bg);\n}\n\n.di-meta {\n display: flex;\n gap: 10px;\n align-items: center;\n font-family: var(--di-font-mono);\n font-size: 11px;\n color: var(--di-text-muted);\n margin-bottom: 4px;\n}\n\n.di-statusChip {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 8px;\n border-radius: var(--di-radius-pill);\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n color: var(--di-text-on-accent);\n}\n\n.di-statusChipSuccess {\n background: var(--di-success);\n}\n\n.di-statusChipError {\n background: var(--di-error);\n}\n\n.di-msg {\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--di-font-mono);\n font-size: 12px;\n color: var(--di-text);\n line-height: 1.55;\n}\n\n.di-details {\n margin-top: 8px;\n}\n\n.di-detailsSummary {\n cursor: pointer;\n font-family: var(--di-font-mono);\n font-size: 12px;\n color: var(--di-text-muted);\n user-select: none;\n padding: 4px 6px;\n border-radius: var(--di-radius-sm);\n display: inline-block;\n transition: background 160ms ease, color 160ms ease;\n}\n\n.di-detailsSummary:hover {\n background: var(--di-bg-soft);\n color: var(--di-text);\n}\n\n.di-netBodyDetails {\n border: 0;\n border-radius: 0;\n background: transparent;\n overflow: visible;\n}\n\n.di-netBodyDetails > summary.di-netDetailsSummary:hover {\n background: var(--di-bg-soft);\n}\n\n.di-netBodyDetails[open] > summary.di-netDetailsSummary {\n background: var(--di-bg-soft);\n border-bottom: 0;\n}\n\n.di-netBodyDetails[open] > .di-detailsBody {\n margin-top: 1px;\n}\n\n.di-netDetailsWrap {\n display: grid;\n gap: 1px;\n}\n\n.di-netDetailsSummary {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 4px 6px;\n border-radius: var(--di-radius-sm);\n}\n\n.di-netDetailsTitle {\n font-family: var(--di-font-mono);\n font-size: 12px;\n color: var(--di-text);\n}\n\n.di-copyBtn {\n margin-left: auto;\n border: 1px solid var(--di-border);\n background: var(--di-bg);\n color: var(--di-text-muted);\n font-family: var(--di-font);\n font-size: 11px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: var(--di-radius-pill);\n cursor: pointer;\n transition: background 160ms ease, color 160ms ease, border-color 160ms ease;\n}\n\n.di-copyBtn:hover {\n background: var(--di-bg-soft);\n border-color: var(--di-border-strong);\n color: var(--di-text);\n}\n\n.di-copyBtn:active {\n transform: translateY(1px);\n}\n\n.di-netTrunc {\n border: 1px solid var(--di-warning-border);\n background: var(--di-warning-bg);\n color: var(--di-text);\n border-radius: var(--di-radius-md);\n padding: 8px 10px;\n font-family: var(--di-font-mono);\n font-size: 11px;\n margin-bottom: 8px;\n}\n\n.di-detailsBody {\n margin-top: 6px;\n padding: 10px 12px;\n border-radius: var(--di-radius-md);\n border: 1px solid var(--di-border);\n background: var(--di-bg-elev);\n}\n\n.di-netBodyText {\n font-family: var(--di-font-mono);\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--di-text);\n}\n\n.di-jsonRoot {\n font-family: var(--di-font-mono);\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--di-text);\n}\n\n.di-jsonNode {\n margin-left: 0;\n}\n\n.di-jsonSummary {\n cursor: pointer;\n user-select: none;\n color: var(--di-text);\n}\n\n.di-jsonBody {\n margin-top: 6px;\n padding-left: 12px;\n display: grid;\n gap: 4px;\n}\n\n.di-jsonRow {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 10px;\n align-items: start;\n}\n\n.di-jsonKey {\n color: var(--di-accent);\n}\n\n.di-jsonValue {\n color: var(--di-text);\n}\n\n.di-jsonMore, .di-jsonTrunc {\n color: var(--di-text-faint);\n}\n\n.di-jumpBtn {\n position: absolute;\n right: 14px;\n bottom: 14px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: 1px solid var(--di-border-strong);\n background: var(--di-bg);\n color: var(--di-text);\n font-family: var(--di-font);\n font-size: 12px;\n font-weight: 500;\n padding: 6px 12px 6px 10px;\n border-radius: var(--di-radius-pill);\n cursor: pointer;\n box-shadow: var(--di-shadow);\n opacity: 0;\n transform: translateY(6px);\n pointer-events: none;\n transition: opacity 160ms ease, transform 160ms ease, background 160ms ease, color 160ms ease, border-color 160ms ease;\n}\n\n.di-jumpBtn--visible {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n\n.di-jumpBtn--hasNew {\n background: var(--di-accent);\n border-color: var(--di-accent);\n color: var(--di-text-on-accent);\n}\n\n.di-jumpBtn--hasNew:hover {\n background: var(--di-accent-hover);\n border-color: var(--di-accent-hover);\n}\n\n.di-jumpBtn:hover {\n background: var(--di-bg-soft);\n}\n\n.di-jumpBtn:focus-visible {\n outline: none;\n box-shadow: var(--di-ring);\n}\n\n.di-jumpBtnIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.di-jumpBtnIcon svg {\n width: 14px;\n height: 14px;\n display: block;\n}\n\n.di-jumpBtnLabel {\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n";