insikt.js 1.1.0 → 1.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"insikt.es.js","sources":["../insikt.js"],"sourcesContent":["(function() {\n 'use strict';\n\n // ═══════════════════════════════════════════════════════════════\n // 1. INJECT CSS (Scoped to #dc-panel and #dc-fab)\n // ═══════════════════════════════════════════════════════════════\n const css = `\n @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Syne:wght@400;600;700;800&display=swap');\n\n :root {\n --dc-bg0: #0d0d0f;\n --dc-bg1: #141418;\n --dc-bg2: #1c1c22;\n --dc-bg3: #242430;\n --dc-border: #2a2a38;\n --dc-accent: #7c6af7;\n --dc-accent2: #f768a4;\n --dc-green: #3dffa0;\n --dc-orange: #ffb347;\n --dc-red: #ff5c6e;\n --dc-blue: #5bcefa;\n --dc-text0: #f0f0f8;\n --dc-text1: #a8a8c0;\n --dc-text2: #606078;\n --dc-mono: 'JetBrains Mono', monospace;\n --dc-sans: 'Syne', sans-serif;\n }\n\n /* Scope resets strictly to our elements */\n #dc-panel, #dc-fab { box-sizing: border-box; }\n #dc-panel *, #dc-fab * { box-sizing: inherit; }\n\n /* ── FAB ────────────────────────────── */\n #dc-fab {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: var(--dc-accent);\n color: #fff;\n border: none;\n font-size: 18px;\n cursor: pointer;\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 24px rgba(124,106,247,0.5);\n transition: all 0.2s ease;\n font-family: var(--dc-mono);\n padding: 0;\n margin: 0;\n }\n\n #dc-fab:hover { transform: scale(1.05); box-shadow: 0 6px 30px rgba(124,106,247,0.7); }\n #dc-fab:active { transform: scale(0.95); }\n\n .dc-fab-badge {\n position: absolute;\n top: -5px;\n right: -5px;\n min-width: 18px;\n height: 18px;\n background: var(--dc-red);\n color: #fff;\n font-size: 10px;\n font-weight: 700;\n border-radius: 9px;\n display: none;\n align-items: center;\n justify-content: center;\n padding: 0 4px;\n font-family: var(--dc-mono);\n }\n\n /* ── CONSOLE PANEL ───────────────────── */\n #dc-panel {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 320px;\n min-height: 120px;\n max-height: 85vh;\n background: var(--dc-bg1);\n border-top: 1px solid var(--dc-border);\n border-radius: 14px 14px 0 0;\n box-shadow: 0 -12px 50px rgba(0,0,0,0.6);\n display: none;\n flex-direction: column;\n z-index: 99998;\n overflow: hidden;\n font-family: var(--dc-mono);\n color: var(--dc-text0);\n }\n\n #dc-panel.visible {\n display: flex;\n animation: dcSlideUp 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n @keyframes dcSlideUp {\n from { transform: translateY(100%); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n\n /* Drag handle */\n #dc-drag {\n width: 100%;\n height: 22px;\n background: var(--dc-bg2);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: ns-resize;\n border-radius: 14px 14px 0 0;\n flex-shrink: 0;\n touch-action: none;\n user-select: none;\n }\n\n #dc-drag::before {\n content: '';\n width: 36px;\n height: 4px;\n background: var(--dc-border);\n border-radius: 2px;\n transition: background 0.2s;\n }\n\n #dc-drag:hover::before { background: var(--dc-accent); }\n\n /* Header bar */\n #dc-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n #dc-title {\n font-size: 11px;\n font-weight: 700;\n color: var(--dc-accent);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n flex: 1;\n }\n\n .dc-pulse {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--dc-green);\n animation: dcPulse 2s infinite;\n flex-shrink: 0;\n }\n\n @keyframes dcPulse {\n 0%,100% { opacity: 1; box-shadow: 0 0 0 0 rgba(61,255,160,0.4); }\n 50% { opacity: 0.6; box-shadow: 0 0 0 5px rgba(61,255,160,0); }\n }\n\n .dc-hbtn {\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 7px;\n background: var(--dc-bg3);\n color: var(--dc-text1);\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n padding: 0;\n }\n\n .dc-hbtn:hover { background: var(--dc-border); color: var(--dc-text0); }\n\n /* Tabs */\n #dc-tabs {\n display: flex;\n background: var(--dc-bg0);\n border-bottom: 1px solid var(--dc-border);\n overflow-x: auto;\n scrollbar-width: none;\n flex-shrink: 0;\n }\n\n #dc-tabs::-webkit-scrollbar { display: none; }\n\n .dc-tab {\n padding: 10px 14px;\n background: none;\n border: none;\n color: var(--dc-text2);\n font-family: var(--dc-mono);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.05em;\n cursor: pointer;\n white-space: nowrap;\n border-bottom: 2px solid transparent;\n transition: all 0.15s;\n position: relative;\n }\n\n .dc-tab:hover { color: var(--dc-text1); }\n\n .dc-tab.active {\n color: var(--dc-accent);\n border-bottom-color: var(--dc-accent);\n }\n\n .dc-tab-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n background: var(--dc-accent);\n color: #fff;\n font-size: 9px;\n font-weight: 700;\n border-radius: 8px;\n padding: 0 4px;\n margin-left: 5px;\n }\n\n /* Tab panels */\n .dc-panel-content {\n display: none;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n }\n\n .dc-panel-content.active { display: flex; }\n\n .dc-scroll {\n flex: 1;\n overflow-y: auto;\n padding: 10px 12px;\n scrollbar-width: thin;\n scrollbar-color: var(--dc-border) transparent;\n }\n\n .dc-scroll::-webkit-scrollbar { width: 4px; }\n .dc-scroll::-webkit-scrollbar-thumb { background: var(--dc-border); border-radius: 2px; }\n\n /* ── LOG ENTRIES ──────────────────────── */\n .dc-entry {\n display: flex;\n align-items: baseline;\n gap: 8px;\n padding: 5px 8px;\n border-radius: 5px;\n margin-bottom: 3px;\n font-size: 12px;\n line-height: 1.5;\n word-break: break-word;\n animation: dcFadeIn 0.1s ease;\n }\n\n @keyframes dcFadeIn { from { opacity: 0; transform: translateY(2px); } to { opacity: 1; transform: none; } }\n\n .dc-entry-log { color: var(--dc-text0); }\n .dc-entry-warn { color: var(--dc-orange); background: rgba(255,179,71,0.07); border-left: 2px solid var(--dc-orange); }\n .dc-entry-error { color: var(--dc-red); background: rgba(255,92,110,0.07); border-left: 2px solid var(--dc-red); }\n .dc-entry-info { color: var(--dc-blue); background: rgba(91,206,250,0.06); border-left: 2px solid var(--dc-blue); }\n .dc-entry-cmd { color: var(--dc-accent); background: rgba(124,106,247,0.06); }\n\n .dc-ts {\n color: var(--dc-text2);\n font-size: 10px;\n font-weight: 400;\n flex-shrink: 0;\n letter-spacing: 0;\n }\n\n .dc-entry pre {\n white-space: pre-wrap;\n word-break: break-all;\n background: var(--dc-bg0);\n padding: 6px 8px;\n border-radius: 5px;\n margin-top: 4px;\n font-size: 11px;\n color: var(--dc-green);\n width: 100%;\n }\n\n /* ── REPL INPUT ───────────────────────── */\n .dc-repl {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-top: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-input {\n flex: 1;\n padding: 8px 12px;\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n color: var(--dc-text0);\n font-family: var(--dc-mono);\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s;\n }\n\n .dc-input:focus { border-color: var(--dc-accent); box-shadow: 0 0 0 2px rgba(124,106,247,0.15); }\n\n .dc-run-btn {\n padding: 8px 14px;\n background: var(--dc-accent);\n border: none;\n border-radius: 8px;\n color: #fff;\n font-family: var(--dc-mono);\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n transition: all 0.15s;\n letter-spacing: 0.05em;\n }\n\n .dc-run-btn:hover { background: #8f7ffb; }\n .dc-run-btn:active { transform: scale(0.96); }\n\n /* ── NETWORK TAB ──────────────────────── */\n .dc-net-filter {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-filter-input {\n flex: 1;\n padding: 7px 10px;\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n color: var(--dc-text0);\n font-family: var(--dc-mono);\n font-size: 12px;\n outline: none;\n }\n\n .dc-filter-input:focus { border-color: var(--dc-accent); }\n\n .dc-clear-btn {\n padding: 7px 12px;\n background: var(--dc-bg3);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n color: var(--dc-text1);\n font-family: var(--dc-mono);\n font-size: 11px;\n cursor: pointer;\n }\n\n .dc-clear-btn:hover { border-color: var(--dc-red); color: var(--dc-red); }\n\n .dc-req {\n padding: 9px 10px;\n border-radius: 6px;\n margin-bottom: 4px;\n background: var(--dc-bg2);\n cursor: pointer;\n border: 1px solid transparent;\n transition: border-color 0.15s;\n }\n\n .dc-req:hover { border-color: var(--dc-border); }\n .dc-req.expanded { border-color: var(--dc-accent); }\n\n .dc-req-top {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n }\n\n .dc-method {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.05em;\n flex-shrink: 0;\n }\n\n .m-GET { background: rgba(61,255,160,0.15); color: var(--dc-green); }\n .m-POST { background: rgba(91,206,250,0.15); color: var(--dc-blue); }\n .m-PUT { background: rgba(255,179,71,0.15); color: var(--dc-orange); }\n .m-DELETE { background: rgba(255,92,110,0.15); color: var(--dc-red); }\n .m-PATCH { background: rgba(124,106,247,0.15); color: var(--dc-accent); }\n .m-UNK { background: var(--dc-bg3); color: var(--dc-text2); }\n\n .dc-req-url {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dc-text0);\n }\n\n .dc-req-status { flex-shrink: 0; }\n .s-ok { color: var(--dc-green); }\n .s-redir { color: var(--dc-orange); }\n .s-err { color: var(--dc-red); }\n\n .dc-req-meta {\n color: var(--dc-text2);\n font-size: 10px;\n margin-top: 3px;\n }\n\n .dc-req-detail {\n display: none;\n margin-top: 8px;\n background: var(--dc-bg0);\n border-radius: 6px;\n padding: 10px 12px;\n font-size: 11px;\n color: var(--dc-text1);\n }\n\n .dc-req-detail.open { display: block; }\n\n .dc-detail-section { margin-bottom: 10px; }\n .dc-detail-title { color: var(--dc-accent); font-weight: 700; margin-bottom: 4px; font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; }\n .dc-detail-row { padding: 2px 0; word-break: break-all; }\n .dc-detail-key { color: var(--dc-text2); }\n\n /* ── STORAGE TAB ──────────────────────── */\n .dc-storage-nav {\n display: flex;\n gap: 4px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-st-btn {\n padding: 5px 12px;\n border: 1px solid var(--dc-border);\n border-radius: 100px;\n background: none;\n color: var(--dc-text2);\n font-family: var(--dc-mono);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .dc-st-btn.active { background: var(--dc-accent); border-color: var(--dc-accent); color: #fff; }\n .dc-st-btn:hover:not(.active) { border-color: var(--dc-text2); color: var(--dc-text1); }\n\n .dc-storage-actions {\n display: flex;\n justify-content: flex-end;\n padding: 6px 12px;\n flex-shrink: 0;\n }\n\n .dc-db-card {\n background: var(--dc-bg2);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n margin-bottom: 8px;\n overflow: hidden;\n }\n\n .dc-db-header {\n padding: 10px 14px;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--dc-bg3);\n transition: background 0.15s;\n }\n\n .dc-db-header:hover { background: var(--dc-border); }\n\n .dc-db-name { color: var(--dc-blue); font-size: 12px; font-weight: 700; }\n .dc-db-meta { color: var(--dc-text2); font-size: 10px; margin-top: 2px; }\n\n .dc-db-body { display: none; padding: 10px; }\n .dc-db-card.open .dc-db-body { display: block; }\n\n .dc-store-item {\n padding: 8px 10px;\n background: var(--dc-bg0);\n border-radius: 5px;\n margin-bottom: 6px;\n cursor: pointer;\n border: 1px solid transparent;\n transition: border-color 0.15s;\n }\n\n .dc-store-item:hover { border-color: var(--dc-border); }\n .dc-store-name { color: var(--dc-text0); font-size: 12px; font-weight: 600; }\n .dc-store-meta { color: var(--dc-text2); font-size: 10px; margin-top: 2px; }\n\n .dc-data-viewer {\n display: none;\n margin-top: 8px;\n max-height: 180px;\n overflow-y: auto;\n }\n\n .dc-data-viewer.open { display: block; }\n\n .dc-data-row {\n padding: 6px 8px;\n border-bottom: 1px solid var(--dc-border);\n font-size: 11px;\n }\n\n .dc-data-key { color: #ffd700; font-weight: 600; }\n .dc-data-val { color: var(--dc-blue); margin-top: 3px; word-break: break-all; }\n\n .dc-kv-row {\n display: flex;\n gap: 8px;\n align-items: baseline;\n padding: 6px 0;\n border-bottom: 1px solid var(--dc-border);\n font-size: 11px;\n }\n\n .dc-kv-key { color: #ffd700; font-weight: 600; min-width: 100px; word-break: break-all; }\n .dc-kv-val { color: var(--dc-blue); flex: 1; word-break: break-all; }\n\n .dc-empty {\n padding: 24px;\n text-align: center;\n color: var(--dc-text2);\n font-size: 12px;\n }\n\n /* ── DOM TAB ──────────────────────────────────── */\n .dc-dom-toolbar {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-dom-btn {\n padding: 5px 12px;\n border: 1px solid var(--dc-border);\n border-radius: 100px;\n background: none;\n color: var(--dc-text2);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .dc-dom-btn:hover { border-color: var(--dc-accent); color: var(--dc-accent); }\n .dc-dom-btn.picking { background: var(--dc-accent2); border-color: var(--dc-accent2); color: #fff; }\n\n .dc-tree { font-size: 12px; }\n\n .dc-node-label {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 3px 4px;\n border-radius: 4px;\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n user-select: none;\n transition: background 0.1s;\n }\n\n .dc-node-label:hover { background: var(--dc-bg3); }\n\n .dc-arrow { color: var(--dc-text2); width: 12px; flex-shrink: 0; font-size: 9px; }\n .dc-tag { color: var(--dc-accent2); font-weight: 600; }\n .dc-id { color: var(--dc-blue); }\n .dc-cls { color: var(--dc-orange); }\n .dc-txt-preview { color: var(--dc-text2); font-size: 10px; max-width: 150px; overflow: hidden; text-overflow: ellipsis; }\n\n .dc-children { margin-left: 16px; display: none; }\n .dc-children.open { display: block; }\n\n .dc-node-detail {\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 6px;\n padding: 12px;\n margin: 8px 0;\n font-size: 11px;\n }\n\n .dc-attr-row { padding: 3px 0; }\n .dc-attr-name { color: var(--dc-blue); }\n .dc-attr-val { color: var(--dc-green); }\n\n /* ── SYSTEM TAB ───────────────────────────────── */\n .dc-sys-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n padding: 10px 12px;\n }\n\n .dc-sys-card {\n background: var(--dc-bg2);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n padding: 12px 14px;\n }\n\n .dc-sys-label {\n color: var(--dc-text2);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n margin-bottom: 5px;\n }\n\n .dc-sys-val {\n color: var(--dc-text0);\n font-size: 11px;\n line-height: 1.4;\n }\n\n .dc-sys-full { grid-column: 1 / -1; }\n\n /* ── SETTINGS TAB ─────────────────────────────── */\n .dc-settings-body { padding: 10px 12px; }\n\n .dc-setting-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 0;\n border-bottom: 1px solid var(--dc-border);\n }\n\n .dc-setting-row:last-child { border-bottom: none; }\n\n .dc-setting-info { flex: 1; }\n .dc-setting-name { color: var(--dc-text0); font-size: 12px; font-weight: 600; }\n .dc-setting-desc { color: var(--dc-text2); font-size: 10px; margin-top: 2px; }\n\n .dc-toggle {\n position: relative;\n width: 40px;\n height: 22px;\n flex-shrink: 0;\n }\n\n .dc-toggle input { opacity: 0; width: 0; height: 0; }\n\n .dc-toggle-track {\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n background: var(--dc-border);\n border-radius: 11px;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .dc-toggle input:checked + .dc-toggle-track { background: var(--dc-accent); }\n\n .dc-toggle-track::after {\n content: '';\n position: absolute;\n width: 16px;\n height: 16px;\n background: white;\n border-radius: 50%;\n top: 3px; left: 3px;\n transition: transform 0.2s;\n }\n\n .dc-toggle input:checked + .dc-toggle-track::after { transform: translateX(18px); }\n\n .dc-select {\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 6px;\n color: var(--dc-text0);\n font-size: 12px;\n padding: 6px 10px;\n outline: none;\n }\n\n /* ── PICK highlight ───────────────────────────── */\n .dc-pick-highlight {\n outline: 2px dashed var(--dc-accent2) !important;\n outline-offset: 2px;\n background: rgba(247,104,164,0.08) !important;\n }\n `;\n\n const style = document.createElement('style');\n style.textContent = css;\n document.head.appendChild(style);\n\n // ═══════════════════════════════════════════════════════════════\n // 2. INJECT HTML\n // ═══════════════════════════════════════════════════════════════\n const html = `\n <button id=\"dc-fab\" title=\"DevConsole\">\n <span id=\"dc-fab-icon\">⌥</span>\n <span class=\"dc-fab-badge\" id=\"dc-error-badge\">0</span>\n </button>\n\n <div id=\"dc-panel\">\n <div id=\"dc-drag\"></div>\n <div id=\"dc-header\">\n <span id=\"dc-title\">DevConsole</span>\n <span class=\"dc-pulse\"></span>\n <button class=\"dc-hbtn\" id=\"dc-clear-btn\" title=\"Clear active tab\">🗑</button>\n <button class=\"dc-hbtn\" id=\"dc-copy-btn\" title=\"Copy logs to clipboard\">📋</button>\n <button class=\"dc-hbtn\" id=\"dc-minimize-btn\" title=\"Minimize\">−</button>\n </div>\n\n <div id=\"dc-tabs\">\n <button class=\"dc-tab active\" data-tab=\"console\">Console<span class=\"dc-tab-count\" id=\"cnt-console\" style=\"display:none\"></span></button>\n <button class=\"dc-tab\" data-tab=\"network\">Network<span class=\"dc-tab-count\" id=\"cnt-network\" style=\"display:none\"></span></button>\n <button class=\"dc-tab\" data-tab=\"storage\">Storage</button>\n <button class=\"dc-tab\" data-tab=\"dom\">DOM</button>\n <button class=\"dc-tab\" data-tab=\"system\">System</button>\n <button class=\"dc-tab\" data-tab=\"settings\">⚙</button>\n </div>\n\n <div class=\"dc-panel-content active\" id=\"panel-console\">\n <div class=\"dc-scroll\" id=\"console-output\"></div>\n <div class=\"dc-repl\">\n <input class=\"dc-input\" id=\"repl-input\" placeholder=\"▶ execute javascript…\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\">\n <button class=\"dc-run-btn\" id=\"repl-run\">RUN</button>\n </div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-network\">\n <div class=\"dc-net-filter\">\n <input class=\"dc-filter-input\" id=\"net-filter\" placeholder=\"Filter by URL or method…\">\n <button class=\"dc-clear-btn\" id=\"net-clear\">Clear</button>\n </div>\n <div class=\"dc-scroll\" id=\"network-output\"></div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-storage\">\n <div class=\"dc-storage-nav\">\n <button class=\"dc-st-btn active\" data-storage=\"indexeddb\">IndexedDB</button>\n <button class=\"dc-st-btn\" data-storage=\"localstorage\">LocalStorage</button>\n <button class=\"dc-st-btn\" data-storage=\"sessionstorage\">SessionStorage</button>\n </div>\n <div class=\"dc-storage-actions\">\n <button class=\"dc-clear-btn\" id=\"storage-refresh\">↺ Refresh</button>\n </div>\n <div class=\"dc-scroll\" id=\"storage-output\"></div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-dom\">\n <div class=\"dc-dom-toolbar\">\n <button class=\"dc-dom-btn\" id=\"dom-refresh-btn\">↺ Refresh tree</button>\n <button class=\"dc-dom-btn\" id=\"dom-pick-btn\">⊕ Pick element</button>\n <button class=\"dc-dom-btn\" id=\"dom-collapse-btn\">Collapse all</button>\n </div>\n <div class=\"dc-scroll\" id=\"dom-output\"></div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-system\">\n <div class=\"dc-scroll\">\n <div class=\"dc-sys-grid\" id=\"system-output\"></div>\n </div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-settings\">\n <div class=\"dc-scroll dc-settings-body\" id=\"settings-output\"></div>\n </div>\n </div>\n `;\n \n document.body.insertAdjacentHTML('beforeend', html);\n\n // ═══════════════════════════════════════════════════════════════\n // 3. LOGIC\n // ═══════════════════════════════════════════════════════════════\n \n const S = {\n logs: [],\n network: [],\n dbs: [],\n activeTab: 'console',\n activeStorage: 'indexeddb',\n isPicking: false,\n replHistory: [],\n replHistoryIdx: -1,\n errorCount: 0,\n settings: {\n timestamps: true,\n autoScroll: true,\n maxEntries: 500,\n fontSize: 12,\n monitorNetwork: true,\n captureErrors: true,\n theme: 'dark',\n }\n };\n\n function saveSettings() {\n try { localStorage.setItem('__dc_settings', JSON.stringify(S.settings)); } catch(e) {}\n }\n\n function loadSettings() {\n try {\n const saved = localStorage.getItem('__dc_settings');\n if (saved) S.settings = { ...S.settings, ...JSON.parse(saved) };\n } catch(e) {}\n }\n loadSettings();\n\n const el = {\n fab: () => document.getElementById('dc-fab'),\n panel: () => document.getElementById('dc-panel'),\n consOut: () => document.getElementById('console-output'),\n netOut: () => document.getElementById('network-output'),\n storOut: () => document.getElementById('storage-output'),\n domOut: () => document.getElementById('dom-output'),\n sysOut: () => document.getElementById('system-output'),\n settOut: () => document.getElementById('settings-output'),\n replIn: () => document.getElementById('repl-input'),\n netFlt: () => document.getElementById('net-filter'),\n badge: () => document.getElementById('dc-error-badge'),\n cntC: () => document.getElementById('cnt-console'),\n cntN: () => document.getElementById('cnt-network'),\n };\n\n function ts() {\n const d = new Date();\n return `${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}:${String(d.getSeconds()).padStart(2,'0')}.${String(d.getMilliseconds()).padStart(3,'0')}`;\n }\n\n function escHtml(s) {\n return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n }\n\n function formatArg(a) {\n if (a === null) return '<span style=\"color:#aaa\">null</span>';\n if (a === undefined) return '<span style=\"color:#aaa\">undefined</span>';\n if (typeof a === 'object') {\n try {\n const s = JSON.stringify(a, null, 2);\n return `<pre>${escHtml(s)}</pre>`;\n } catch(e) { return String(a); }\n }\n return escHtml(String(a));\n }\n\n function truncUrl(url, max=55) {\n if (!url || url.length <= max) return url;\n try {\n const u = new URL(url);\n const tail = u.pathname.split('/').pop() || '';\n return `${u.hostname}/…/${tail}`;\n } catch(e) {\n return url.slice(0,max)+'…';\n }\n }\n\n function statusClass(code) {\n if (!code) return '';\n if (code < 300) return 's-ok';\n if (code < 400) return 's-redir';\n return 's-err';\n }\n\n function methodClass(m) {\n return `m-${['GET','POST','PUT','DELETE','PATCH'].includes(m) ? m : 'UNK'}`;\n }\n\n // ══ CONSOLE INTERCEPT ═════════════════════════════════════════════\n const _orig = {};\n ['log','warn','error','info'].forEach(level => {\n _orig[level] = console[level].bind(console);\n console[level] = (...args) => {\n _orig[level](...args);\n addLog(level, args);\n };\n });\n\n function addLog(type, args) {\n if (type === 'error') {\n S.errorCount++;\n const b = el.badge();\n if (b) { b.textContent = S.errorCount > 99 ? '99+' : S.errorCount; b.style.display = 'flex'; }\n }\n S.logs.push({ type, args, ts: ts() });\n if (S.logs.length > S.settings.maxEntries) S.logs.shift();\n updateTabCount('console', S.logs.length);\n if (S.activeTab === 'console') renderConsole();\n }\n\n function renderConsole() {\n const o = el.consOut(); if (!o) return;\n const frag = document.createDocumentFragment();\n S.logs.forEach(log => {\n const d = document.createElement('div');\n d.className = `dc-entry dc-entry-${log.type}`;\n const tsHtml = S.settings.timestamps ? `<span class=\"dc-ts\">${log.ts}</span>` : '';\n const msgHtml = log.args.map(formatArg).join(' ');\n d.innerHTML = `${tsHtml}<span>${msgHtml}</span>`;\n d.style.fontSize = S.settings.fontSize + 'px';\n frag.appendChild(d);\n });\n o.innerHTML = '';\n o.appendChild(frag);\n if (S.settings.autoScroll) o.scrollTop = o.scrollHeight;\n }\n\n // ══ ERROR CAPTURE ═════════════════════════════════════════════════\n if (S.settings.captureErrors) {\n window.onerror = (msg, src, line, col) => {\n addLog('error', [`${msg} @ ${src}:${line}:${col}`]);\n return false;\n };\n window.addEventListener('unhandledrejection', e => {\n addLog('error', [`Unhandled Promise Rejection: ${e.reason}`]);\n });\n }\n\n // ══ NETWORK INTERCEPT ═════════════════════════════════════════════\n const _origFetch = window.fetch;\n window.fetch = async (...args) => {\n const startTime = Date.now();\n let method = 'GET';\n let url = args[0] instanceof Request ? args[0].url : String(args[0]);\n if (args[1] && args[1].method) method = args[1].method.toUpperCase();\n if (args[0] instanceof Request) method = args[0].method.toUpperCase();\n const req = { method, url, ts: ts(), startTime, status: null, duration: null, headers: {}, error: null };\n\n try {\n const res = await _origFetch(...args);\n req.status = res.status;\n req.statusText = res.statusText;\n req.duration = Date.now() - startTime;\n try { res.headers.forEach((v,k) => { req.headers[k] = v; }); } catch(e) {}\n addNetReq(req);\n return res;\n } catch(e) {\n req.error = e.message;\n req.duration = Date.now() - startTime;\n addNetReq(req);\n throw e;\n }\n };\n\n const _origOpen = XMLHttpRequest.prototype.open;\n const _origSend = XMLHttpRequest.prototype.send;\n\n XMLHttpRequest.prototype.open = function(method, url) {\n this.__dcReq = { method: method.toUpperCase(), url: String(url), ts: ts(), startTime: 0 };\n return _origOpen.apply(this, arguments);\n };\n\n XMLHttpRequest.prototype.send = function(body) {\n if (this.__dcReq) {\n const req = this.__dcReq;\n req.startTime = Date.now();\n this.addEventListener('loadend', () => {\n req.status = this.status;\n req.statusText = this.statusText;\n req.duration = Date.now() - req.startTime;\n req.headers = {};\n const raw = this.getAllResponseHeaders();\n if (raw) raw.split('\\r\\n').filter(Boolean).forEach(line => {\n const i = line.indexOf(': ');\n if (i > 0) req.headers[line.slice(0,i)] = line.slice(i+2);\n });\n req.error = this.status === 0 ? 'Request failed' : null;\n addNetReq(req);\n });\n }\n return _origSend.apply(this, arguments);\n };\n\n function addNetReq(req) {\n S.network.unshift(req);\n if (S.network.length > S.settings.maxEntries) S.network.pop();\n updateTabCount('network', S.network.length);\n if (S.activeTab === 'network') renderNetwork();\n }\n\n function renderNetwork(filter) {\n const o = el.netOut(); if (!o) return;\n filter = filter !== undefined ? filter : (el.netFlt() ? el.netFlt().value : '');\n const filtered = filter\n ? S.network.filter(r => r.url.toLowerCase().includes(filter.toLowerCase()) || r.method.toLowerCase().includes(filter.toLowerCase()))\n : S.network;\n\n o.innerHTML = filtered.map((req, i) => {\n const sc = req.error ? 's-err' : statusClass(req.status);\n const mc = methodClass(req.method);\n const statusLabel = req.status ? `<span class=\"dc-req-status ${sc}\">${req.status}</span>` : (req.error ? `<span class=\"dc-req-status s-err\">ERR</span>` : '<span class=\"dc-req-status\" style=\"color:var(--dc-text2)\">…</span>');\n const durLabel = req.duration != null ? `${req.duration}ms · ` : '';\n const headersHtml = Object.keys(req.headers).length\n ? Object.entries(req.headers).map(([k,v]) => `<div class=\"dc-detail-row\"><span class=\"dc-detail-key\">${escHtml(k)}: </span>${escHtml(v)}</div>`).join('')\n : '<div class=\"dc-detail-row\" style=\"color:var(--dc-text2)\">none</div>';\n return `<div class=\"dc-req\" id=\"req-${i}\" onclick=\"window.__dcToggleReq(${i})\">\n <div class=\"dc-req-top\">\n <span class=\"dc-method ${mc}\">${req.method}</span>\n <span class=\"dc-req-url\" title=\"${escHtml(req.url)}\">${escHtml(truncUrl(req.url))}</span>\n ${statusLabel}\n </div>\n <div class=\"dc-req-meta\">${durLabel}${req.ts}${req.error ? ' · ' + escHtml(req.error) : ''}</div>\n <div class=\"dc-req-detail\" id=\"req-detail-${i}\">\n <div class=\"dc-detail-section\">\n <div class=\"dc-detail-title\">General</div>\n <div class=\"dc-detail-row\"><span class=\"dc-detail-key\">URL: </span>${escHtml(req.url)}</div>\n <div class=\"dc-detail-row\"><span class=\"dc-detail-key\">Method: </span>${req.method}</div>\n <div class=\"dc-detail-row\"><span class=\"dc-detail-key\">Status: </span>${req.status || req.error || '–'} ${req.statusText || ''}</div>\n <div class=\"dc-detail-row\"><span class=\"dc-detail-key\">Duration: </span>${req.duration != null ? req.duration+'ms' : '–'}</div>\n </div>\n <div class=\"dc-detail-section\">\n <div class=\"dc-detail-title\">Response Headers</div>\n ${headersHtml}\n </div>\n </div>\n </div>`;\n\n }).join('') || '<div class=\"dc-empty\">No requests captured yet</div>';\n }\n\n window.__dcToggleReq = function(i) {\n const detail = document.getElementById(`req-detail-${i}`);\n const card = document.getElementById(`req-${i}`);\n if (!detail) return;\n const isOpen = detail.classList.contains('open');\n detail.classList.toggle('open', !isOpen);\n card.classList.toggle('expanded', !isOpen);\n };\n\n // ══ STORAGE ═══════════════════════════════════════════════════════\n async function loadStorage() {\n S.dbs = [];\n if (!window.indexedDB) return;\n try {\n if (indexedDB.databases) {\n const list = await indexedDB.databases();\n for (const d of list) {\n try { await inspectDb(d.name, d.version); } catch(e) {}\n }\n }\n } catch(e) {}\n renderStorage();\n }\n\n function inspectDb(name, version) {\n return new Promise((res, rej) => {\n const req = indexedDB.open(name, version);\n req.onerror = () => rej(req.error);\n req.onsuccess = () => {\n const db = req.result;\n const info = { name: db.name, version: db.version, stores: [] };\n const storeNames = [...db.objectStoreNames];\n let pending = storeNames.length;\n if (!pending) { db.close(); S.dbs.push(info); return res(info); }\n\n storeNames.forEach(storeName => {\n inspectStore(db, storeName).then(storeInfo => {\n info.stores.push(storeInfo);\n if (--pending === 0) { db.close(); S.dbs.push(info); res(info); }\n }).catch(() => {\n info.stores.push({ name: storeName, count: 0, keyPath: null, data: [] });\n if (--pending === 0) { db.close(); S.dbs.push(info); res(info); }\n });\n });\n };\n });\n }\n\n function inspectStore(db, storeName) {\n return new Promise((res, rej) => {\n const tx = db.transaction([storeName], 'readonly');\n const store = tx.objectStore(storeName);\n const cntReq = store.count();\n cntReq.onsuccess = () => {\n const info = { name: storeName, count: cntReq.result, keyPath: store.keyPath, data: [] };\n const getReq = store.getAll(undefined, 20);\n getReq.onsuccess = () => { info.data = getReq.result; res(info); };\n getReq.onerror = () => res(info);\n };\n cntReq.onerror = () => res({ name: storeName, count: 0, keyPath: null, data: [] });\n });\n }\n\n function renderStorage() {\n const o = el.storOut(); if (!o) return;\n switch (S.activeStorage) {\n case 'indexeddb': renderIDB(o); break;\n case 'localstorage': renderKV(o, localStorage, 'localStorage'); break;\n case 'sessionstorage': renderKV(o, sessionStorage, 'sessionStorage'); break;\n }\n }\n\n function renderIDB(o) {\n if (!S.dbs.length) { o.innerHTML = '<div class=\"dc-empty\">No IndexedDB databases found</div>'; return; }\n o.innerHTML = S.dbs.map((db, di) => `<div class=\"dc-db-card\" id=\"db-card-${di}\">\n <div class=\"dc-db-header\" onclick=\"window.__dcToggleDb(${di})\">\n <div>\n <div class=\"dc-db-name\">${escHtml(db.name)}</div>\n <div class=\"dc-db-meta\">v${db.version} · ${db.stores.length} store${db.stores.length !== 1 ? 's' : ''}</div>\n </div>\n <span style=\"color:var(--dc-text2);font-size:11px\">▼</span>\n </div>\n <div class=\"dc-db-body\">\n ${db.stores.map((st, si) => `\n <div class=\"dc-store-item\" onclick=\"window.__dcToggleStore(${di},${si})\">\n <div class=\"dc-store-name\">${escHtml(st.name)}</div>\n <div class=\"dc-store-meta\">${st.count} records · keyPath: ${st.keyPath || 'none'}</div>\n <div class=\"dc-data-viewer\" id=\"store-${di}-${si}\">\n ${st.data.length ? st.data.slice(0,20).map(item => `\n <div class=\"dc-data-row\">\n <div class=\"dc-data-key\">· ${escHtml(getKey(item, st.keyPath))}</div>\n <div class=\"dc-data-val\">${escHtml(fmtVal(item))}</div>\n </div>`).join('') : '<div style=\"color:var(--dc-text2);font-size:11px;padding:8px\">Empty store</div>'}\n </div>\n </div>`).join('')}\n </div>\n </div>`).join('');\n }\n\n function getKey(obj, keyPath) {\n if (!keyPath) return '—';\n return typeof keyPath === 'string' ? String(obj[keyPath] ?? '—') : JSON.stringify(keyPath);\n }\n\n function fmtVal(v) {\n if (typeof v === 'object' && v !== null) {\n const s = JSON.stringify(v, null, 2);\n return s.length > 300 ? s.slice(0, 300) + '…' : s;\n }\n const s = String(v);\n return s.length > 200 ? s.slice(0,200)+'…' : s;\n }\n\n function renderKV(o, storage, name) {\n const items = [];\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n items.push({ k, v: storage.getItem(k) });\n }\n if (!items.length) { o.innerHTML = `<div class=\"dc-empty\">No ${name} items</div>`; return; }\n o.innerHTML = `<div style=\"padding:4px 0\">` + items.map(({k,v}) => `\n <div class=\"dc-kv-row\">\n <span class=\"dc-kv-key\">${escHtml(k)}</span>\n <span class=\"dc-kv-val\">${escHtml(fmtVal(v))}</span>\n </div>`).join('') + `</div>`;\n }\n\n window.__dcToggleDb = function(di) {\n const card = document.getElementById(`db-card-${di}`);\n if (card) card.classList.toggle('open');\n };\n\n window.__dcToggleStore = function(di, si) {\n const viewer = document.getElementById(`store-${di}-${si}`);\n if (viewer) viewer.classList.toggle('open');\n };\n\n // ══ DOM TREE ══════════════════════════════════════════════════════\n function renderDomTree() {\n const o = el.domOut(); if (!o) return;\n o.innerHTML = '';\n const tree = document.createElement('div');\n tree.className = 'dc-tree';\n tree.appendChild(buildNode(document.body));\n o.appendChild(tree);\n }\n\n function buildNode(nodeEl) {\n const wrap = document.createElement('div');\n const children = [...nodeEl.children];\n const hasChildren = children.length > 0;\n\n const label = document.createElement('div');\n label.className = 'dc-node-label';\n\n const arrow = document.createElement('span');\n arrow.className = 'dc-arrow';\n arrow.textContent = hasChildren ? '▶' : ' ';\n label.appendChild(arrow);\n\n const tag = document.createElement('span');\n tag.className = 'dc-tag';\n tag.textContent = `<${nodeEl.tagName.toLowerCase()}`;\n label.appendChild(tag);\n\n if (nodeEl.id) {\n const id = document.createElement('span');\n id.className = 'dc-id';\n id.textContent = ` #${nodeEl.id}`;\n label.appendChild(id);\n }\n\n if (nodeEl.className && typeof nodeEl.className === 'string' && nodeEl.className.trim()) {\n const cls = document.createElement('span');\n cls.className = 'dc-cls';\n const clsStr = nodeEl.className.trim().split(/\\s+/).slice(0,3).map(c => `.${c}`).join('');\n cls.textContent = clsStr;\n label.appendChild(cls);\n }\n\n const close = document.createElement('span');\n close.className = 'dc-tag';\n close.textContent = '>';\n label.appendChild(close);\n\n const txtContent = nodeEl.childNodes.length ? ([...nodeEl.childNodes].find(n => n.nodeType === 3 && n.textContent.trim())) : null;\n if (txtContent) {\n const preview = document.createElement('span');\n preview.className = 'dc-txt-preview';\n preview.textContent = ' ' + txtContent.textContent.trim().slice(0,30);\n label.appendChild(preview);\n }\n\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n if (hasChildren) {\n const childDiv = wrap.querySelector(':scope > .dc-children');\n const isOpen = childDiv && childDiv.classList.contains('open');\n if (childDiv) childDiv.classList.toggle('open', !isOpen);\n arrow.textContent = (!isOpen) ? '▼' : '▶';\n }\n showNodeDetail(nodeEl);\n });\n\n wrap.appendChild(label);\n\n if (hasChildren) {\n const childDiv = document.createElement('div');\n childDiv.className = 'dc-children';\n children.forEach(child => childDiv.appendChild(buildNode(child)));\n wrap.appendChild(childDiv);\n }\n\n return wrap;\n }\n\n function showNodeDetail(targetEl) {\n const existing = document.getElementById('dc-node-detail');\n if (existing) existing.remove();\n\n const d = document.createElement('div');\n d.className = 'dc-node-detail';\n d.id = 'dc-node-detail';\n\n const tag = `<${targetEl.tagName.toLowerCase()}>`;\n const attrs = [...targetEl.attributes];\n const styles = window.getComputedStyle(targetEl);\n\n d.innerHTML = `<div style=\"color:var(--dc-accent2);font-size:12px;font-weight:700;margin-bottom:8px\">${escHtml(tag)}</div>\n ${attrs.length ? `<div class=\"dc-detail-title\">Attributes</div>${attrs.map(a => `<div class=\"dc-attr-row\"><span class=\"dc-attr-name\">${escHtml(a.name)}</span>=<span class=\"dc-attr-val\">\"${escHtml(a.value)}\"</span></div>`).join('')}` : ''}\n <div class=\"dc-detail-title\" style=\"margin-top:8px\">Geometry</div>\n <div class=\"dc-attr-row\"><span class=\"dc-attr-name\">size: </span><span class=\"dc-attr-val\">${Math.round(targetEl.offsetWidth)}×${Math.round(targetEl.offsetHeight)}</span></div>\n <div class=\"dc-attr-row\"><span class=\"dc-attr-name\">display: </span><span class=\"dc-attr-val\">${styles.display}</span></div>\n <div class=\"dc-attr-row\"><span class=\"dc-attr-name\">position: </span><span class=\"dc-attr-val\">${styles.position}</span></div>`;\n \n el.domOut().prepend(d);\n }\n\n let _pickHandler = null;\n let _pickedEl = null;\n\n function startPicking() {\n S.isPicking = true;\n document.getElementById('dom-pick-btn').classList.add('picking');\n\n _pickHandler = (e) => {\n if (e.target.closest('#dc-panel') || e.target.closest('#dc-fab')) return;\n e.preventDefault(); e.stopPropagation();\n if (_pickedEl) _pickedEl.classList.remove('dc-pick-highlight');\n _pickedEl = e.target;\n _pickedEl.classList.add('dc-pick-highlight');\n showNodeDetail(_pickedEl);\n stopPicking();\n };\n\n document.addEventListener('click', _pickHandler, true);\n document.addEventListener('mouseover', (e) => {\n if (!S.isPicking) return;\n if (e.target.closest('#dc-panel') || e.target.closest('#dc-fab')) return;\n if (_pickedEl) _pickedEl.classList.remove('dc-pick-highlight');\n _pickedEl = e.target;\n _pickedEl.classList.add('dc-pick-highlight');\n }, true);\n }\n\n function stopPicking() {\n S.isPicking = false;\n const btn = document.getElementById('dom-pick-btn');\n if (btn) btn.classList.remove('picking');\n if (_pickHandler) { document.removeEventListener('click', _pickHandler, true); _pickHandler = null; }\n }\n\n // ══ SYSTEM INFO ═══════════════════════════════════════════════════\n function renderSystem() {\n const o = el.sysOut(); if (!o) return;\n const nav = navigator;\n const perf = window.performance;\n const mem = perf && perf.memory;\n const conn = nav.connection || nav.mozConnection || nav.webkitConnection;\n\n const cards = [\n ['Screen', `${screen.width}×${screen.height} (devicePR: ${window.devicePixelRatio})`],\n ['Viewport', `${window.innerWidth}×${window.innerHeight}`],\n ['Platform', nav.platform || '—'],\n ['Language', nav.language || '—'],\n ['Online', nav.onLine ? '✅ Online' : '❌ Offline'],\n ['Cookies', nav.cookieEnabled ? 'Enabled' : 'Disabled'],\n ['HW Concurrency', nav.hardwareConcurrency || '—'],\n ];\n\n if (conn) {\n cards.push(['Connection', `${conn.effectiveType || '—'} · ${conn.downlink || '—'} Mbps`]);\n cards.push(['RTT', conn.rtt != null ? `${conn.rtt}ms` : '—']);\n }\n\n if (mem) {\n const mb = v => (v / 1048576).toFixed(1) + ' MB';\n cards.push(['Heap Used', mb(mem.usedJSHeapSize)]);\n cards.push(['Heap Limit', mb(mem.jsHeapSizeLimit)]);\n }\n\n if (perf) {\n const nav2 = perf.getEntriesByType && perf.getEntriesByType('navigation')[0];\n if (nav2) {\n cards.push(['Page Load', `${Math.round(nav2.loadEventEnd)}ms`]);\n cards.push(['DOM Ready', `${Math.round(nav2.domContentLoadedEventEnd)}ms`]);\n }\n }\n\n o.innerHTML = cards.map(([label, val]) =>\n `<div class=\"dc-sys-card\"><div class=\"dc-sys-label\">${label}</div><div class=\"dc-sys-val\">${escHtml(String(val))}</div></div>`\n ).join('') +\n `<div class=\"dc-sys-card dc-sys-full\"><div class=\"dc-sys-label\">User Agent</div><div class=\"dc-sys-val\" style=\"word-break:break-all;font-size:10px\">${escHtml(nav.userAgent)}</div></div>`;\n }\n\n // ══ SETTINGS RENDER ═══════════════════════════════════════════════\n function renderSettings() {\n const o = el.settOut(); if (!o) return;\n o.innerHTML = `\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">Timestamps</div>\n <div class=\"dc-setting-desc\">Show time prefix on each log entry</div>\n </div>\n <label class=\"dc-toggle\"><input type=\"checkbox\" id=\"s-ts\" ${S.settings.timestamps ? 'checked' : ''}><span class=\"dc-toggle-track\"></span></label>\n </div>\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">Auto-scroll</div>\n <div class=\"dc-setting-desc\">Scroll to latest entry automatically</div>\n </div>\n <label class=\"dc-toggle\"><input type=\"checkbox\" id=\"s-as\" ${S.settings.autoScroll ? 'checked' : ''}><span class=\"dc-toggle-track\"></span></label>\n </div>\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">Capture Global Errors</div>\n <div class=\"dc-setting-desc\">window.onerror + unhandledrejection</div>\n </div>\n <label class=\"dc-toggle\"><input type=\"checkbox\" id=\"s-ce\" ${S.settings.captureErrors ? 'checked' : ''}><span class=\"dc-toggle-track\"></span></label>\n </div>\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">Monitor Network</div>\n <div class=\"dc-setting-desc\">Intercept fetch + XHR requests</div>\n </div>\n <label class=\"dc-toggle\"><input type=\"checkbox\" id=\"s-mn\" ${S.settings.monitorNetwork ? 'checked' : ''}><span class=\"dc-toggle-track\"></span></label>\n </div>\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">Font Size</div>\n <div class=\"dc-setting-desc\">Console output font size (px)</div>\n </div>\n <select class=\"dc-select\" id=\"s-fs\">\n ${[10,11,12,13,14].map(s => `<option value=\"${s}\" ${S.settings.fontSize===s?'selected':''}>${s}px</option>`).join('')}\n </select>\n </div>\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">Max Log Entries</div>\n <div class=\"dc-setting-desc\">Older entries are discarded</div>\n </div>\n <select class=\"dc-select\" id=\"s-me\">\n ${[100,250,500,1000,2000].map(s => `<option value=\"${s}\" ${S.settings.maxEntries===s?'selected':''}>${s}</option>`).join('')}\n </select>\n </div>\n <div class=\"dc-setting-row\" style=\"border:none\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\" style=\"color:var(--dc-red)\">Clear All Data</div>\n <div class=\"dc-setting-desc\">Wipe logs and network history</div>\n </div>\n <button class=\"dc-clear-btn\" onclick=\"window.__dcClearAll()\">Clear</button>\n </div>`;\n\n document.getElementById('s-ts').onchange = e => { S.settings.timestamps = e.target.checked; saveSettings(); renderConsole(); };\n document.getElementById('s-as').onchange = e => { S.settings.autoScroll = e.target.checked; saveSettings(); };\n document.getElementById('s-ce').onchange = e => { S.settings.captureErrors = e.target.checked; saveSettings(); };\n document.getElementById('s-mn').onchange = e => { S.settings.monitorNetwork = e.target.checked; saveSettings(); };\n document.getElementById('s-fs').onchange = e => { S.settings.fontSize = parseInt(e.target.value); saveSettings(); if (S.activeTab === 'console') renderConsole(); };\n document.getElementById('s-me').onchange = e => { S.settings.maxEntries = parseInt(e.target.value); saveSettings(); };\n }\n\n window.__dcClearAll = function() {\n S.logs = []; S.network = []; S.errorCount = 0;\n const b = el.badge(); if (b) { b.style.display = 'none'; }\n updateTabCount('console', 0);\n updateTabCount('network', 0);\n if (S.activeTab === 'console') renderConsole();\n if (S.activeTab === 'network') renderNetwork();\n };\n\n // ══ TABS ══════════════════════════════════════════════════════════\n function switchTab(name) {\n S.activeTab = name;\n document.querySelectorAll('.dc-tab').forEach(b => b.classList.toggle('active', b.dataset.tab === name));\n document.querySelectorAll('.dc-panel-content').forEach(p => p.classList.toggle('active', p.id === `panel-${name}`));\n\n switch(name) {\n case 'console': renderConsole(); break;\n case 'network': renderNetwork(); break;\n case 'storage': loadStorage(); break;\n case 'dom': renderDomTree(); break;\n case 'system': renderSystem(); break;\n case 'settings': renderSettings(); break;\n }\n }\n\n function updateTabCount(tab, n) {\n const el2 = document.getElementById(`cnt-${tab}`);\n if (!el2) return;\n if (n > 0) { el2.textContent = n > 999 ? '999+' : n; el2.style.display = 'inline-flex'; }\n else el2.style.display = 'none';\n }\n\n // ══ PANEL TOGGLE ══════════════════════════════════════════════════\n let _panelOpen = false;\n\n function togglePanel() {\n _panelOpen = !_panelOpen;\n const panel = el.panel();\n if (_panelOpen) {\n panel.style.display = 'flex';\n requestAnimationFrame(() => { panel.classList.add('visible'); });\n switchTab(S.activeTab);\n } else {\n panel.classList.remove('visible');\n setTimeout(() => { panel.style.display = 'none'; }, 260);\n }\n \n if (_panelOpen) {\n el.fab().innerHTML = `✕<span class=\"dc-fab-badge\" id=\"dc-error-badge\" style=\"display:${S.errorCount>0?'flex':'none'}\">${S.errorCount}</span>`;\n } else {\n el.fab().innerHTML = `⌥<span class=\"dc-fab-badge\" id=\"dc-error-badge\" style=\"display:${S.errorCount>0?'flex':'none'}\">${S.errorCount}</span>`;\n }\n }\n\n // ══ DRAG RESIZE ═══════════════════════════════════════════════════\n (function initDrag() {\n const handle = document.getElementById('dc-drag');\n const panel = document.getElementById('dc-panel');\n let dragging = false, startY = 0, startH = 0;\n\n function onStart(e) {\n dragging = true;\n startY = e.clientY || (e.touches && e.touches[0].clientY);\n startH = panel.offsetHeight;\n document.body.style.userSelect = 'none';\n }\n function onMove(e) {\n if (!dragging) return;\n const y = e.clientY || (e.touches && e.touches[0].clientY);\n const newH = Math.max(120, Math.min(window.innerHeight * 0.85, startH + (startY - y)));\n panel.style.height = newH + 'px';\n }\n function onEnd() {\n dragging = false;\n document.body.style.userSelect = '';\n }\n\n handle.addEventListener('mousedown', onStart);\n handle.addEventListener('touchstart', onStart, { passive: true });\n document.addEventListener('mousemove', onMove);\n document.addEventListener('touchmove', onMove, { passive: true });\n document.addEventListener('mouseup', onEnd);\n document.addEventListener('touchend', onEnd);\n })();\n\n // ══ REPL ══════════════════════════════════════════════════════════\n function initRepl() {\n const input = el.replIn();\n if (!input) return;\n\n function execute() {\n const code = input.value.trim();\n if (!code) return;\n S.replHistory.unshift(code);\n if (S.replHistory.length > 50) S.replHistory.pop();\n S.replHistoryIdx = -1;\n\n const entry = document.createElement('div');\n entry.className = 'dc-entry dc-entry-cmd';\n entry.style.fontSize = S.settings.fontSize + 'px';\n entry.innerHTML = `<span class=\"dc-ts\">${ts()}</span><span>▶ ${escHtml(code)}</span>`;\n el.consOut().appendChild(entry);\n\n try {\n const result = (0, eval)(code);\n if (result !== undefined) {\n const resEntry = document.createElement('div');\n resEntry.className = 'dc-entry dc-entry-log';\n resEntry.style.fontSize = S.settings.fontSize + 'px';\n resEntry.innerHTML = `<span class=\"dc-ts\">${ts()}</span><span>${formatArg(result)}</span>`;\n el.consOut().appendChild(resEntry);\n }\n } catch(err) {\n const errEntry = document.createElement('div');\n errEntry.className = 'dc-entry dc-entry-error';\n errEntry.style.fontSize = S.settings.fontSize + 'px';\n errEntry.innerHTML = `<span class=\"dc-ts\">${ts()}</span><span>${escHtml(err.toString())}</span>`;\n el.consOut().appendChild(errEntry);\n }\n\n input.value = '';\n if (S.settings.autoScroll) el.consOut().scrollTop = el.consOut().scrollHeight;\n switchTab('console');\n\n }\n\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') { execute(); return; }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n S.replHistoryIdx = Math.min(S.replHistoryIdx + 1, S.replHistory.length - 1);\n input.value = S.replHistory[S.replHistoryIdx] || '';\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n S.replHistoryIdx = Math.max(S.replHistoryIdx - 1, -1);\n input.value = S.replHistoryIdx >= 0 ? S.replHistory[S.replHistoryIdx] : '';\n }\n });\n\n // Run button\n const runBtn = document.getElementById('repl-run');\n if (runBtn) runBtn.addEventListener('click', execute);\n }\n\n // ══ EVENT WIRING ══════════════════════════════════════════════════\n document.getElementById('dc-fab').addEventListener('click', togglePanel);\n document.getElementById('dc-minimize-btn').addEventListener('click', togglePanel);\n\n document.querySelectorAll('.dc-tab').forEach(btn => {\n btn.addEventListener('click', () => switchTab(btn.dataset.tab));\n });\n\n document.getElementById('dc-clear-btn').addEventListener('click', () => {\n switch(S.activeTab) {\n case 'console': S.logs = []; updateTabCount('console', 0); renderConsole(); break;\n case 'network': S.network = []; updateTabCount('network', 0); renderNetwork(); break;\n default: break;\n }\n });\n\n document.getElementById('dc-copy-btn').addEventListener('click', () => {\n let text = '';\n if (S.activeTab === 'console') {\n text = S.logs.map(l => `[${l.ts}] [${l.type.toUpperCase()}] ${l.args.map(a => typeof a === 'object' ? JSON.stringify(a,null,2) : String(a)).join(' ')}`).join('\\n');\n } else if (S.activeTab === 'network') {\n text = S.network.map(r => `[${r.ts}] ${r.method} ${r.url} → ${r.status || 'ERR'} (${r.duration}ms)`).join('\\n');\n }\n if (text) {\n navigator.clipboard ? navigator.clipboard.writeText(text).catch(() => {}) : (() => {})();\n console.log('📋 Copied to clipboard');\n }\n });\n\n // Network filter\n el.netFlt().addEventListener('input', e => renderNetwork(e.target.value));\n document.getElementById('net-clear').addEventListener('click', () => { S.network = []; updateTabCount('network', 0); renderNetwork(); });\n\n // Storage sub-tabs\n document.querySelectorAll('.dc-st-btn').forEach(btn => {\n btn.addEventListener('click', () => {\n S.activeStorage = btn.dataset.storage;\n document.querySelectorAll('.dc-st-btn').forEach(b => b.classList.toggle('active', b === btn));\n renderStorage();\n });\n });\n\n document.getElementById('storage-refresh').addEventListener('click', loadStorage);\n\n // DOM toolbar\n document.getElementById('dom-refresh-btn').addEventListener('click', renderDomTree);\n document.getElementById('dom-pick-btn').addEventListener('click', () => {\n S.isPicking ? stopPicking() : startPicking();\n });\n document.getElementById('dom-collapse-btn').addEventListener('click', () => {\n document.querySelectorAll('.dc-children.open').forEach(c => c.classList.remove('open'));\n document.querySelectorAll('.dc-arrow').forEach(a => { if (a.textContent === '▼') a.textContent = '▶'; });\n });\n\n // ══ SPA / DOM CHANGE WATCHER ══════════════════════════════════════\n let _lastUrl = location.href;\n setInterval(() => {\n if (location.href !== _lastUrl) {\n _lastUrl = location.href;\n addLog('info', ['🔄 SPA navigation detected:', location.href]);\n }\n }, 1000);\n\n // ══ INIT ══════════════════════════════════════════════════════════\n initRepl();\n renderConsole();\n\n addLog('log', ['✅ DevConsole v2.0 loaded — click ⌥ to open']);\n window.insikt = {\n toggle: togglePanel,\n clear: window.__dcClearAll,\n init: () => { /* already auto-inits, guard against double-run */ },\n destroy: () => {\n const fab = el.fab(), panel = el.panel();\n if (fab) fab.remove();\n if (panel) panel.remove();\n ['log','warn','error','info'].forEach(l => { if (_orig[l]) console[l] = _orig[l]; });\n window.fetch = _origFetch;\n XMLHttpRequest.prototype.open = _origOpen;\n XMLHttpRequest.prototype.send = _origSend;\n }\n };\n\n})();\n"],"names":["s"],"mappings":"CAAC,WAAW;AAMV,QAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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"}
1
+ {"version":3,"file":"insikt.es.js","sources":["../insikt.js"],"sourcesContent":["(function() {\n 'use strict';\n\n // ═══════════════════════════════════════════════════════════════\n // INSIKT v1.2\n // Mobile-first browser debugging / inspection console\n // Zero dependencies\n // ═══════════════════════════════════════════════════════════════\n\n const VERSION = '1.2.0';\n const BUFFER_KEY = '__insikt_buffer__';\n const SETTINGS_KEY = '__dc_settings';\n const BODY_DISPLAY_LIMIT = 10 * 1024;\n\n // ═══════════════════════════════════════════════════════════════\n // 1. INJECT CSS\n // ═══════════════════════════════════════════════════════════════\n\n const css = `\n @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Syne:wght@400;600;700;800&display=swap');\n\n :root {\n --dc-bg0: #0d0d0f;\n --dc-bg1: #141418;\n --dc-bg2: #1c1c22;\n --dc-bg3: #242430;\n --dc-border: #2a2a38;\n --dc-accent: #7c6af7;\n --dc-accent2: #f768a4;\n --dc-green: #3dffa0;\n --dc-orange: #ffb347;\n --dc-red: #ff5c6e;\n --dc-blue: #5bcefa;\n --dc-text0: #f0f0f8;\n --dc-text1: #a8a8c0;\n --dc-text2: #606078;\n --dc-mono: 'JetBrains Mono', monospace;\n --dc-sans: 'Syne', sans-serif;\n }\n\n #dc-panel, #dc-fab { box-sizing: border-box; }\n #dc-panel *, #dc-fab * { box-sizing: inherit; }\n\n /* ── FAB ────────────────────────────── */\n\n #dc-fab {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: var(--dc-accent);\n color: #fff;\n border: none;\n font-size: 18px;\n cursor: pointer;\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 24px rgba(124,106,247,0.5);\n transition: all 0.2s ease;\n font-family: var(--dc-mono);\n padding: 0;\n margin: 0;\n }\n\n #dc-fab:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 30px rgba(124,106,247,0.7);\n }\n\n #dc-fab:active { transform: scale(0.95); }\n\n .dc-fab-badge {\n position: absolute;\n top: -5px;\n right: -5px;\n min-width: 18px;\n height: 18px;\n background: var(--dc-red);\n color: #fff;\n font-size: 10px;\n font-weight: 700;\n border-radius: 9px;\n display: none;\n align-items: center;\n justify-content: center;\n padding: 0 4px;\n font-family: var(--dc-mono);\n }\n\n /* ── PANEL ───────────────────────────── */\n\n #dc-panel {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 320px;\n min-height: 120px;\n max-height: 85vh;\n background: var(--dc-bg1);\n border-top: 1px solid var(--dc-border);\n border-radius: 14px 14px 0 0;\n box-shadow: 0 -12px 50px rgba(0,0,0,0.6);\n display: none;\n flex-direction: column;\n z-index: 99998;\n overflow: hidden;\n font-family: var(--dc-mono);\n color: var(--dc-text0);\n }\n\n #dc-panel.visible {\n display: flex;\n animation: dcSlideUp 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n @keyframes dcSlideUp {\n from { transform: translateY(100%); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n\n /* ── DRAG HANDLE ─────────────────────── */\n\n #dc-drag {\n width: 100%;\n height: 22px;\n background: var(--dc-bg2);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: ns-resize;\n border-radius: 14px 14px 0 0;\n flex-shrink: 0;\n touch-action: none;\n user-select: none;\n }\n\n #dc-drag::before {\n content: '';\n width: 36px;\n height: 4px;\n background: var(--dc-border);\n border-radius: 2px;\n transition: background 0.2s;\n }\n\n #dc-drag:hover::before { background: var(--dc-accent); }\n\n /* ── HEADER ──────────────────────────── */\n\n #dc-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n #dc-title {\n font-size: 11px;\n font-weight: 700;\n color: var(--dc-accent);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n flex: 1;\n }\n\n .dc-pulse {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--dc-green);\n animation: dcPulse 2s infinite;\n flex-shrink: 0;\n }\n\n @keyframes dcPulse {\n 0%,100% {\n opacity: 1;\n box-shadow: 0 0 0 0 rgba(61,255,160,0.4);\n }\n 50% {\n opacity: 0.6;\n box-shadow: 0 0 0 5px rgba(61,255,160,0);\n }\n }\n\n .dc-hbtn {\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 7px;\n background: var(--dc-bg3);\n color: var(--dc-text1);\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n padding: 0;\n }\n\n .dc-hbtn:hover {\n background: var(--dc-border);\n color: var(--dc-text0);\n }\n\n /* ── TABS ────────────────────────────── */\n\n #dc-tabs {\n display: flex;\n background: var(--dc-bg0);\n border-bottom: 1px solid var(--dc-border);\n overflow-x: auto;\n scrollbar-width: none;\n flex-shrink: 0;\n }\n\n #dc-tabs::-webkit-scrollbar { display: none; }\n\n .dc-tab {\n padding: 10px 14px;\n background: none;\n border: none;\n color: var(--dc-text2);\n font-family: var(--dc-mono);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.05em;\n cursor: pointer;\n white-space: nowrap;\n border-bottom: 2px solid transparent;\n transition: all 0.15s;\n position: relative;\n }\n\n .dc-tab:hover { color: var(--dc-text1); }\n\n .dc-tab.active {\n color: var(--dc-accent);\n border-bottom-color: var(--dc-accent);\n }\n\n .dc-tab-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n background: var(--dc-accent);\n color: #fff;\n font-size: 9px;\n font-weight: 700;\n border-radius: 8px;\n padding: 0 4px;\n margin-left: 5px;\n }\n\n /* ── PANEL CONTENT ───────────────────── */\n\n .dc-panel-content {\n display: none;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n }\n\n .dc-panel-content.active { display: flex; }\n\n .dc-scroll {\n flex: 1;\n overflow-y: auto;\n padding: 10px 12px;\n scrollbar-width: thin;\n scrollbar-color: var(--dc-border) transparent;\n }\n\n .dc-scroll::-webkit-scrollbar { width: 4px; }\n .dc-scroll::-webkit-scrollbar-thumb {\n background: var(--dc-border);\n border-radius: 2px;\n }\n\n /* ── LOG ENTRIES ──────────────────────── */\n\n .dc-entry {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 5px 8px;\n border-radius: 5px;\n margin-bottom: 3px;\n font-size: 12px;\n line-height: 1.5;\n word-break: break-word;\n animation: dcFadeIn 0.1s ease;\n position: relative;\n }\n\n @keyframes dcFadeIn {\n from {\n opacity: 0;\n transform: translateY(2px);\n }\n to {\n opacity: 1;\n transform: none;\n }\n }\n\n .dc-entry-log {\n color: var(--dc-text0);\n }\n\n .dc-entry-warn {\n color: var(--dc-orange);\n background: rgba(255,179,71,0.07);\n border-left: 2px solid var(--dc-orange);\n }\n\n .dc-entry-error {\n color: var(--dc-red);\n background: rgba(255,92,110,0.07);\n border-left: 2px solid var(--dc-red);\n }\n\n .dc-entry-info {\n color: var(--dc-blue);\n background: rgba(91,206,250,0.06);\n border-left: 2px solid var(--dc-blue);\n }\n\n .dc-entry-cmd {\n color: var(--dc-accent);\n background: rgba(124,106,247,0.06);\n }\n\n .dc-entry-table {\n color: var(--dc-text0);\n background: rgba(124,106,247,0.04);\n border-left: 2px solid var(--dc-accent);\n display: block;\n }\n\n .dc-entry-group {\n color: var(--dc-accent);\n background: rgba(124,106,247,0.05);\n cursor: pointer;\n user-select: none;\n font-weight: 600;\n }\n\n .dc-entry-group:hover {\n background: rgba(124,106,247,0.10);\n }\n\n .dc-group-arrow {\n display: inline-block;\n width: 12px;\n color: var(--dc-text2);\n font-size: 9px;\n transition: transform 0.15s;\n }\n\n .dc-group-arrow.open {\n transform: rotate(90deg);\n }\n\n .dc-group-children {\n display: block;\n }\n\n .dc-group-children.collapsed {\n display: none;\n }\n\n .dc-grouped {\n margin-left: 18px;\n border-left: 1px solid var(--dc-border);\n border-radius: 0;\n }\n\n .dc-ts {\n color: var(--dc-text2);\n font-size: 10px;\n font-weight: 400;\n flex-shrink: 0;\n letter-spacing: 0;\n white-space: nowrap;\n }\n\n .dc-entry-body {\n min-width: 0;\n flex: 1;\n }\n\n /* ── OBJECT INSPECTOR ───────────────── */\n\n .dc-value {\n font-family: var(--dc-mono);\n font-size: inherit;\n line-height: 1.5;\n }\n\n .dc-primitive-string { color: var(--dc-green); }\n .dc-primitive-number { color: var(--dc-blue); }\n .dc-primitive-boolean { color: var(--dc-orange); }\n .dc-primitive-null,\n .dc-primitive-undefined {\n color: var(--dc-text2);\n }\n\n .dc-primitive-bigint { color: var(--dc-blue); }\n .dc-primitive-symbol { color: var(--dc-accent2); }\n .dc-primitive-function { color: var(--dc-accent2); }\n\n .dc-object-node {\n display: inline;\n }\n\n .dc-object-toggle {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n cursor: pointer;\n user-select: none;\n color: var(--dc-text1);\n border-radius: 3px;\n padding: 0 2px;\n }\n\n .dc-object-toggle:hover {\n background: var(--dc-bg3);\n }\n\n .dc-object-arrow {\n color: var(--dc-text2);\n width: 10px;\n font-size: 9px;\n display: inline-block;\n }\n\n .dc-object-summary {\n color: var(--dc-text1);\n }\n\n .dc-object-children {\n display: none;\n margin-left: 14px;\n border-left: 1px solid var(--dc-border);\n padding-left: 8px;\n margin-top: 2px;\n margin-bottom: 2px;\n }\n\n .dc-object-children.open {\n display: block;\n }\n\n .dc-object-row {\n display: block;\n padding: 1px 0;\n }\n\n .dc-object-key {\n color: var(--dc-accent2);\n }\n\n .dc-object-key-index {\n color: var(--dc-text2);\n }\n\n .dc-object-more {\n color: var(--dc-text2);\n font-style: italic;\n }\n\n /* ── TABLE ───────────────────────────── */\n\n .dc-table-wrap {\n overflow-x: auto;\n margin-top: 4px;\n border: 1px solid var(--dc-border);\n border-radius: 6px;\n }\n\n .dc-console-table {\n width: 100%;\n border-collapse: collapse;\n font-family: var(--dc-mono);\n font-size: 10px;\n min-width: 280px;\n }\n\n .dc-console-table th {\n background: var(--dc-bg3);\n color: var(--dc-accent);\n font-weight: 600;\n text-align: left;\n padding: 5px 7px;\n border-bottom: 1px solid var(--dc-border);\n white-space: nowrap;\n }\n\n .dc-console-table td {\n padding: 5px 7px;\n border-bottom: 1px solid var(--dc-border);\n color: var(--dc-text1);\n vertical-align: top;\n }\n\n .dc-console-table tr:last-child td {\n border-bottom: none;\n }\n\n /* ── REPL ────────────────────────────── */\n\n .dc-repl {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-top: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-input {\n flex: 1;\n padding: 8px 12px;\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n color: var(--dc-text0);\n font-family: var(--dc-mono);\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s;\n }\n\n .dc-input:focus {\n border-color: var(--dc-accent);\n box-shadow: 0 0 0 2px rgba(124,106,247,0.15);\n }\n\n .dc-run-btn {\n padding: 8px 14px;\n background: var(--dc-accent);\n border: none;\n border-radius: 8px;\n color: #fff;\n font-family: var(--dc-mono);\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n transition: all 0.15s;\n letter-spacing: 0.05em;\n }\n\n .dc-run-btn:hover { background: #8f7ffb; }\n .dc-run-btn:active { transform: scale(0.96); }\n\n /* ── RELOAD SEPARATOR ────────────────── */\n\n .dc-reload-separator {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 10px 0;\n color: var(--dc-text2);\n font-size: 9px;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n }\n\n .dc-reload-separator::before,\n .dc-reload-separator::after {\n content: '';\n height: 1px;\n background: var(--dc-border);\n flex: 1;\n }\n\n /* ── NETWORK ─────────────────────────── */\n\n .dc-net-filter {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-filter-input {\n flex: 1;\n padding: 7px 10px;\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n color: var(--dc-text0);\n font-family: var(--dc-mono);\n font-size: 12px;\n outline: none;\n }\n\n .dc-filter-input:focus { border-color: var(--dc-accent); }\n\n .dc-clear-btn {\n padding: 7px 12px;\n background: var(--dc-bg3);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n color: var(--dc-text1);\n font-family: var(--dc-mono);\n font-size: 11px;\n cursor: pointer;\n }\n\n .dc-clear-btn:hover {\n border-color: var(--dc-red);\n color: var(--dc-red);\n }\n\n .dc-req {\n padding: 9px 10px;\n border-radius: 6px;\n margin-bottom: 4px;\n background: var(--dc-bg2);\n cursor: pointer;\n border: 1px solid transparent;\n transition: border-color 0.15s;\n }\n\n .dc-req:hover { border-color: var(--dc-border); }\n .dc-req.expanded { border-color: var(--dc-accent); }\n\n .dc-req-top {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n }\n\n .dc-method {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.05em;\n flex-shrink: 0;\n }\n\n .m-GET { background: rgba(61,255,160,0.15); color: var(--dc-green); }\n .m-POST { background: rgba(91,206,250,0.15); color: var(--dc-blue); }\n .m-PUT { background: rgba(255,179,71,0.15); color: var(--dc-orange); }\n .m-DELETE { background: rgba(255,92,110,0.15); color: var(--dc-red); }\n .m-PATCH { background: rgba(124,106,247,0.15); color: var(--dc-accent); }\n .m-UNK { background: var(--dc-bg3); color: var(--dc-text2); }\n\n .dc-req-url {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dc-text0);\n }\n\n .dc-req-status { flex-shrink: 0; }\n .s-ok { color: var(--dc-green); }\n .s-redir { color: var(--dc-orange); }\n .s-err { color: var(--dc-red); }\n\n .dc-req-meta {\n color: var(--dc-text2);\n font-size: 10px;\n margin-top: 3px;\n }\n\n .dc-req-detail {\n display: none;\n margin-top: 8px;\n background: var(--dc-bg0);\n border-radius: 6px;\n padding: 10px 12px;\n font-size: 11px;\n color: var(--dc-text1);\n }\n\n .dc-req-detail.open { display: block; }\n\n .dc-detail-section { margin-bottom: 10px; }\n\n .dc-detail-title {\n color: var(--dc-accent);\n font-weight: 700;\n margin-bottom: 4px;\n font-size: 10px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .dc-detail-row {\n padding: 2px 0;\n word-break: break-all;\n }\n\n .dc-detail-key { color: var(--dc-text2); }\n\n .dc-body-block {\n background: var(--dc-bg1);\n border: 1px solid var(--dc-border);\n border-radius: 5px;\n padding: 7px;\n margin-top: 5px;\n }\n\n .dc-body-pre {\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 160px;\n overflow: auto;\n margin: 0;\n font-family: var(--dc-mono);\n font-size: 10px;\n color: var(--dc-green);\n }\n\n .dc-body-truncated {\n color: var(--dc-orange);\n font-size: 9px;\n margin-top: 5px;\n }\n\n .dc-body-full {\n display: none;\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 400px;\n overflow: auto;\n margin: 6px 0 0;\n font-family: var(--dc-mono);\n font-size: 10px;\n color: var(--dc-green);\n }\n\n .dc-body-full.open { display: block; }\n\n .dc-body-toggle {\n margin-top: 5px;\n padding: 4px 7px;\n background: var(--dc-bg3);\n border: 1px solid var(--dc-border);\n border-radius: 4px;\n color: var(--dc-text1);\n font-family: var(--dc-mono);\n font-size: 9px;\n cursor: pointer;\n }\n\n /* ── STORAGE ─────────────────────────── */\n\n .dc-storage-nav {\n display: flex;\n gap: 4px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-st-btn {\n padding: 5px 12px;\n border: 1px solid var(--dc-border);\n border-radius: 100px;\n background: none;\n color: var(--dc-text2);\n font-family: var(--dc-mono);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .dc-st-btn.active {\n background: var(--dc-accent);\n border-color: var(--dc-accent);\n color: #fff;\n }\n\n .dc-st-btn:hover:not(.active) {\n border-color: var(--dc-text2);\n color: var(--dc-text1);\n }\n\n .dc-storage-actions {\n display: flex;\n justify-content: flex-end;\n padding: 6px 12px;\n flex-shrink: 0;\n }\n\n .dc-db-card {\n background: var(--dc-bg2);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n margin-bottom: 8px;\n overflow: hidden;\n }\n\n .dc-db-header {\n padding: 10px 14px;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--dc-bg3);\n transition: background 0.15s;\n }\n\n .dc-db-header:hover { background: var(--dc-border); }\n\n .dc-db-name {\n color: var(--dc-blue);\n font-size: 12px;\n font-weight: 700;\n }\n\n .dc-db-meta {\n color: var(--dc-text2);\n font-size: 10px;\n margin-top: 2px;\n }\n\n .dc-db-body {\n display: none;\n padding: 10px;\n }\n\n .dc-db-card.open .dc-db-body { display: block; }\n\n .dc-store-item {\n padding: 8px 10px;\n background: var(--dc-bg0);\n border-radius: 5px;\n margin-bottom: 6px;\n cursor: pointer;\n border: 1px solid transparent;\n transition: border-color 0.15s;\n }\n\n .dc-store-item:hover { border-color: var(--dc-border); }\n\n .dc-store-name {\n color: var(--dc-text0);\n font-size: 12px;\n font-weight: 600;\n }\n\n .dc-store-meta {\n color: var(--dc-text2);\n font-size: 10px;\n margin-top: 2px;\n }\n\n .dc-data-viewer {\n display: none;\n margin-top: 8px;\n max-height: 180px;\n overflow-y: auto;\n }\n\n .dc-data-viewer.open { display: block; }\n\n .dc-data-row {\n padding: 6px 8px;\n border-bottom: 1px solid var(--dc-border);\n font-size: 11px;\n }\n\n .dc-data-key {\n color: #ffd700;\n font-weight: 600;\n }\n\n .dc-data-val {\n color: var(--dc-blue);\n margin-top: 3px;\n word-break: break-all;\n }\n\n .dc-kv-row {\n display: flex;\n gap: 8px;\n align-items: baseline;\n padding: 6px 0;\n border-bottom: 1px solid var(--dc-border);\n font-size: 11px;\n }\n\n .dc-kv-key {\n color: #ffd700;\n font-weight: 600;\n min-width: 100px;\n word-break: break-all;\n }\n\n .dc-kv-val {\n color: var(--dc-blue);\n flex: 1;\n word-break: break-all;\n }\n\n .dc-empty {\n padding: 24px;\n text-align: center;\n color: var(--dc-text2);\n font-size: 12px;\n }\n\n /* ── DOM ─────────────────────────────── */\n\n .dc-dom-toolbar {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: var(--dc-bg2);\n border-bottom: 1px solid var(--dc-border);\n flex-shrink: 0;\n }\n\n .dc-dom-btn {\n padding: 5px 12px;\n border: 1px solid var(--dc-border);\n border-radius: 100px;\n background: none;\n color: var(--dc-text2);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .dc-dom-btn:hover {\n border-color: var(--dc-accent);\n color: var(--dc-accent);\n }\n\n .dc-dom-btn.picking {\n background: var(--dc-accent2);\n border-color: var(--dc-accent2);\n color: #fff;\n }\n\n .dc-tree { font-size: 12px; }\n\n .dc-node-label {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 3px 4px;\n border-radius: 4px;\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n user-select: none;\n transition: background 0.1s;\n }\n\n .dc-node-label:hover { background: var(--dc-bg3); }\n\n .dc-arrow {\n color: var(--dc-text2);\n width: 12px;\n flex-shrink: 0;\n font-size: 9px;\n }\n\n .dc-tag {\n color: var(--dc-accent2);\n font-weight: 600;\n }\n\n .dc-id { color: var(--dc-blue); }\n .dc-cls { color: var(--dc-orange); }\n\n .dc-txt-preview {\n color: var(--dc-text2);\n font-size: 10px;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .dc-children {\n margin-left: 16px;\n display: none;\n }\n\n .dc-children.open { display: block; }\n\n .dc-node-detail {\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 6px;\n padding: 12px;\n margin: 8px 0;\n font-size: 11px;\n }\n\n .dc-attr-row { padding: 3px 0; }\n .dc-attr-name { color: var(--dc-blue); }\n .dc-attr-val { color: var(--dc-green); }\n\n /* ── SYSTEM ──────────────────────────── */\n\n .dc-sys-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n padding: 10px 12px;\n }\n\n .dc-sys-card {\n background: var(--dc-bg2);\n border: 1px solid var(--dc-border);\n border-radius: 8px;\n padding: 12px 14px;\n }\n\n .dc-sys-label {\n color: var(--dc-text2);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n margin-bottom: 5px;\n }\n\n .dc-sys-val {\n color: var(--dc-text0);\n font-size: 11px;\n line-height: 1.4;\n }\n\n .dc-sys-full { grid-column: 1 / -1; }\n\n /* ── SETTINGS ───────────────────────── */\n\n .dc-settings-body { padding: 10px 12px; }\n\n .dc-setting-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 0;\n border-bottom: 1px solid var(--dc-border);\n }\n\n .dc-setting-row:last-child { border-bottom: none; }\n\n .dc-setting-info { flex: 1; }\n\n .dc-setting-name {\n color: var(--dc-text0);\n font-size: 12px;\n font-weight: 600;\n }\n\n .dc-setting-desc {\n color: var(--dc-text2);\n font-size: 10px;\n margin-top: 2px;\n }\n\n .dc-toggle {\n position: relative;\n width: 40px;\n height: 22px;\n flex-shrink: 0;\n }\n\n .dc-toggle input {\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .dc-toggle-track {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--dc-border);\n border-radius: 11px;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .dc-toggle input:checked + .dc-toggle-track {\n background: var(--dc-accent);\n }\n\n .dc-toggle-track::after {\n content: '';\n position: absolute;\n width: 16px;\n height: 16px;\n background: white;\n border-radius: 50%;\n top: 3px;\n left: 3px;\n transition: transform 0.2s;\n }\n\n .dc-toggle input:checked + .dc-toggle-track::after {\n transform: translateX(18px);\n }\n\n .dc-select {\n background: var(--dc-bg0);\n border: 1px solid var(--dc-border);\n border-radius: 6px;\n color: var(--dc-text0);\n font-size: 12px;\n padding: 6px 10px;\n outline: none;\n }\n\n /* ── PICK ─────────────────────────────── */\n\n .dc-pick-highlight {\n outline: 2px dashed var(--dc-accent2) !important;\n outline-offset: 2px;\n background: rgba(247,104,164,0.08) !important;\n }\n `;\n\n const style = document.createElement('style');\n style.textContent = css;\n document.head.appendChild(style);\n\n // ═══════════════════════════════════════════════════════════════\n // 2. INJECT HTML\n // ═══════════════════════════════════════════════════════════════\n\n const html = `\n <button id=\"dc-fab\" title=\"INSIKT\">\n <span id=\"dc-fab-icon\">⌥</span>\n <span class=\"dc-fab-badge\" id=\"dc-error-badge\">0</span>\n </button>\n\n <div id=\"dc-panel\">\n <div id=\"dc-drag\"></div>\n\n <div id=\"dc-header\">\n <span id=\"dc-title\">INSIKT</span>\n <span class=\"dc-pulse\"></span>\n <button class=\"dc-hbtn\" id=\"dc-clear-btn\" title=\"Clear active tab\">🗑</button>\n <button class=\"dc-hbtn\" id=\"dc-copy-btn\" title=\"Copy active tab\">📋</button>\n <button class=\"dc-hbtn\" id=\"dc-minimize-btn\" title=\"Minimize\">−</button>\n </div>\n\n <div id=\"dc-tabs\">\n <button class=\"dc-tab active\" data-tab=\"console\">\n Console<span class=\"dc-tab-count\" id=\"cnt-console\" style=\"display:none\"></span>\n </button>\n <button class=\"dc-tab\" data-tab=\"network\">\n Network<span class=\"dc-tab-count\" id=\"cnt-network\" style=\"display:none\"></span>\n </button>\n <button class=\"dc-tab\" data-tab=\"storage\">Storage</button>\n <button class=\"dc-tab\" data-tab=\"dom\">DOM</button>\n <button class=\"dc-tab\" data-tab=\"system\">System</button>\n <button class=\"dc-tab\" data-tab=\"settings\">⚙</button>\n </div>\n\n <div class=\"dc-panel-content active\" id=\"panel-console\">\n <div class=\"dc-scroll\" id=\"console-output\"></div>\n\n <div class=\"dc-repl\">\n <input\n class=\"dc-input\"\n id=\"repl-input\"\n placeholder=\"▶ execute javascript…\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n >\n <button class=\"dc-run-btn\" id=\"repl-run\">RUN</button>\n </div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-network\">\n <div class=\"dc-net-filter\">\n <input\n class=\"dc-filter-input\"\n id=\"net-filter\"\n placeholder=\"Filter by URL or method…\"\n >\n <button class=\"dc-clear-btn\" id=\"net-clear\">Clear</button>\n </div>\n <div class=\"dc-scroll\" id=\"network-output\"></div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-storage\">\n <div class=\"dc-storage-nav\">\n <button class=\"dc-st-btn active\" data-storage=\"indexeddb\">IndexedDB</button>\n <button class=\"dc-st-btn\" data-storage=\"localstorage\">LocalStorage</button>\n <button class=\"dc-st-btn\" data-storage=\"sessionstorage\">SessionStorage</button>\n </div>\n\n <div class=\"dc-storage-actions\">\n <button class=\"dc-clear-btn\" id=\"storage-refresh\">↺ Refresh</button>\n </div>\n\n <div class=\"dc-scroll\" id=\"storage-output\"></div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-dom\">\n <div class=\"dc-dom-toolbar\">\n <button class=\"dc-dom-btn\" id=\"dom-refresh-btn\">↺ Refresh tree</button>\n <button class=\"dc-dom-btn\" id=\"dom-pick-btn\">⊕ Pick element</button>\n <button class=\"dc-dom-btn\" id=\"dom-collapse-btn\">Collapse all</button>\n </div>\n <div class=\"dc-scroll\" id=\"dom-output\"></div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-system\">\n <div class=\"dc-scroll\">\n <div class=\"dc-sys-grid\" id=\"system-output\"></div>\n </div>\n </div>\n\n <div class=\"dc-panel-content\" id=\"panel-settings\">\n <div class=\"dc-scroll dc-settings-body\" id=\"settings-output\"></div>\n </div>\n </div>\n `;\n\n document.body.insertAdjacentHTML('beforeend', html);\n\n // ═══════════════════════════════════════════════════════════════\n // 3. STATE\n // ═══════════════════════════════════════════════════════════════\n\n const S = {\n logs: [],\n network: [],\n dbs: [],\n activeTab: 'console',\n activeStorage: 'indexeddb',\n isPicking: false,\n replHistory: [],\n replHistoryIdx: -1,\n errorCount: 0,\n groupDepth: 0,\n nextLogId: 1,\n settings: {\n timestamps: true,\n autoScroll: true,\n maxEntries: 500,\n fontSize: 12,\n monitorNetwork: true,\n captureErrors: true,\n persistBuffer: false,\n theme: 'dark'\n }\n };\n\n // ═══════════════════════════════════════════════════════════════\n // 4. HELPERS\n // ═══════════════════════════════════════════════════════════════\n\n function saveSettings() {\n try {\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(S.settings));\n } catch(e) {}\n }\n\n function loadSettings() {\n try {\n const saved = localStorage.getItem(SETTINGS_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n S.settings = { ...S.settings, ...parsed };\n }\n } catch(e) {}\n }\n\n loadSettings();\n\n const el = {\n fab: () => document.getElementById('dc-fab'),\n panel: () => document.getElementById('dc-panel'),\n consOut: () => document.getElementById('console-output'),\n netOut: () => document.getElementById('network-output'),\n storOut: () => document.getElementById('storage-output'),\n domOut: () => document.getElementById('dom-output'),\n sysOut: () => document.getElementById('system-output'),\n settOut: () => document.getElementById('settings-output'),\n replIn: () => document.getElementById('repl-input'),\n netFlt: () => document.getElementById('net-filter'),\n badge: () => document.getElementById('dc-error-badge'),\n cntC: () => document.getElementById('cnt-console'),\n cntN: () => document.getElementById('cnt-network')\n };\n\n function ts() {\n const d = new Date();\n\n return (\n `${String(d.getHours()).padStart(2,'0')}:` +\n `${String(d.getMinutes()).padStart(2,'0')}:` +\n `${String(d.getSeconds()).padStart(2,'0')}.` +\n `${String(d.getMilliseconds()).padStart(3,'0')}`\n );\n }\n\n function escHtml(s) {\n return String(s)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n }\n\n function truncUrl(url, max=55) {\n if (!url || url.length <= max) return url;\n\n try {\n const u = new URL(url);\n const tail = u.pathname.split('/').pop() || '';\n return `${u.hostname}/…/${tail}`;\n } catch(e) {\n return url.slice(0, max) + '…';\n }\n }\n\n function statusClass(code) {\n if (!code) return '';\n if (code < 300) return 's-ok';\n if (code < 400) return 's-redir';\n return 's-err';\n }\n\n function methodClass(m) {\n return `m-${['GET','POST','PUT','DELETE','PATCH'].includes(m) ? m : 'UNK'}`;\n }\n\n function updateTabCount(tab, n) {\n const el2 = document.getElementById(`cnt-${tab}`);\n if (!el2) return;\n\n if (n > 0) {\n el2.textContent = n > 999 ? '999+' : n;\n el2.style.display = 'inline-flex';\n } else {\n el2.style.display = 'none';\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 5. SERIALIZABLE VALUE SNAPSHOT\n // ═══════════════════════════════════════════════════════════════\n\n /*\n * Console objects cannot safely be stored directly:\n *\n * - circular references\n * - DOM nodes\n * - functions\n * - symbols\n * - BigInt\n * - objects changing after console.log()\n *\n * Therefore INSIKT creates a compact inspection representation.\n *\n * depth 0 = root\n * depth 1 = first children\n * depth 2 = second children\n *\n * The UI can still expand deeper nodes because the representation\n * is generated recursively up to SNAPSHOT_DEPTH.\n */\n\n const SNAPSHOT_DEPTH = 8;\n const SNAPSHOT_KEYS = 100;\n\n function snapshotValue(value, depth=0, seen=new WeakSet()) {\n if (value === null) {\n return { kind: 'null' };\n }\n\n if (value === undefined) {\n return { kind: 'undefined' };\n }\n\n const type = typeof value;\n\n if (type === 'string') {\n return { kind: 'string', value };\n }\n\n if (type === 'number') {\n if (Number.isNaN(value)) return { kind: 'number', value: 'NaN' };\n if (value === Infinity) return { kind: 'number', value: 'Infinity' };\n if (value === -Infinity) return { kind: 'number', value: '-Infinity' };\n return { kind: 'number', value };\n }\n\n if (type === 'boolean') {\n return { kind: 'boolean', value };\n }\n\n if (type === 'bigint') {\n return { kind: 'bigint', value: value.toString() + 'n' };\n }\n\n if (type === 'symbol') {\n return { kind: 'symbol', value: String(value) };\n }\n\n if (type === 'function') {\n return {\n kind: 'function',\n value: value.name ? `[Function ${value.name}]` : '[Function]'\n };\n }\n\n if (type !== 'object') {\n return { kind: 'string', value: String(value) };\n }\n\n if (seen.has(value)) {\n return { kind: 'circular' };\n }\n\n if (depth >= SNAPSHOT_DEPTH) {\n return {\n kind: 'object',\n ctor: getConstructorName(value),\n entries: [],\n truncated: true\n };\n }\n\n seen.add(value);\n\n // Date\n if (value instanceof Date) {\n return {\n kind: 'date',\n value: isNaN(value.getTime()) ? 'Invalid Date' : value.toISOString()\n };\n }\n\n // RegExp\n if (value instanceof RegExp) {\n return {\n kind: 'regexp',\n value: String(value)\n };\n }\n\n // Error\n if (value instanceof Error) {\n const result = {\n kind: 'error',\n ctor: value.name || 'Error',\n message: String(value.message || ''),\n stack: value.stack ? String(value.stack) : '',\n entries: []\n };\n\n try {\n Object.keys(value).slice(0, SNAPSHOT_KEYS).forEach(key => {\n result.entries.push({\n key,\n value: snapshotValue(value[key], depth + 1, seen)\n });\n });\n } catch(e) {}\n\n return result;\n }\n\n // Array\n if (Array.isArray(value)) {\n const result = {\n kind: 'array',\n length: value.length,\n entries: [],\n truncated: false\n };\n\n const limit = Math.min(value.length, SNAPSHOT_KEYS);\n\n for (let i = 0; i < limit; i++) {\n try {\n result.entries.push({\n key: String(i),\n index: true,\n value: snapshotValue(value[i], depth + 1, seen)\n });\n } catch(e) {\n result.entries.push({\n key: String(i),\n index: true,\n value: { kind: 'string', value: '[Uninspectable]' }\n });\n }\n }\n\n if (value.length > limit) result.truncated = true;\n\n seen.delete(value);\n return result;\n }\n\n // Generic object\n const result = {\n kind: 'object',\n ctor: getConstructorName(value),\n entries: [],\n truncated: false\n };\n\n let keys = [];\n\n try {\n keys = Object.keys(value);\n } catch(e) {}\n\n const limit = Math.min(keys.length, SNAPSHOT_KEYS);\n\n for (let i = 0; i < limit; i++) {\n const key = keys[i];\n\n try {\n result.entries.push({\n key,\n value: snapshotValue(value[key], depth + 1, seen)\n });\n } catch(e) {\n result.entries.push({\n key,\n value: { kind: 'string', value: '[Uninspectable]' }\n });\n }\n }\n\n if (keys.length > limit) result.truncated = true;\n\n seen.delete(value);\n return result;\n }\n\n function getConstructorName(value) {\n try {\n if (value && value.constructor && value.constructor.name) {\n return value.constructor.name;\n }\n } catch(e) {}\n\n return 'Object';\n }\n\n function snapshotArgs(args) {\n return args.map(a => snapshotValue(a));\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 6. OBJECT INSPECTOR\n // ═══════════════════════════════════════════════════════════════\n\n function renderValue(value, options={}) {\n const node = document.createElement('span');\n node.className = 'dc-value';\n\n if (!value || typeof value.kind !== 'string') {\n node.textContent = String(value);\n return node;\n }\n\n switch(value.kind) {\n case 'null':\n node.classList.add('dc-primitive-null');\n node.textContent = 'null';\n return node;\n\n case 'undefined':\n node.classList.add('dc-primitive-undefined');\n node.textContent = 'undefined';\n return node;\n\n case 'string':\n node.classList.add('dc-primitive-string');\n node.textContent = `\"${value.value}\"`;\n return node;\n\n case 'number':\n node.classList.add('dc-primitive-number');\n node.textContent = String(value.value);\n return node;\n\n case 'boolean':\n node.classList.add('dc-primitive-boolean');\n node.textContent = String(value.value);\n return node;\n\n case 'bigint':\n node.classList.add('dc-primitive-bigint');\n node.textContent = String(value.value);\n return node;\n\n case 'symbol':\n node.classList.add('dc-primitive-symbol');\n node.textContent = String(value.value);\n return node;\n\n case 'function':\n node.classList.add('dc-primitive-function');\n node.textContent = String(value.value);\n return node;\n\n case 'date':\n node.classList.add('dc-primitive-string');\n node.textContent = `Date(\"${value.value}\")`;\n return node;\n\n case 'regexp':\n node.classList.add('dc-primitive-string');\n node.textContent = value.value;\n return node;\n\n case 'circular':\n node.classList.add('dc-primitive-null');\n node.textContent = '[Circular]';\n return node;\n\n case 'error':\n return renderExpandableValue(value, {\n summary: `${value.ctor || 'Error'}: ${value.message || ''}`,\n prefix: ''\n });\n\n case 'array':\n return renderExpandableValue(value, {\n summary: `[${value.length != null ? value.length + ' items' : '…'}]`,\n prefix: ''\n });\n\n case 'object':\n return renderExpandableValue(value, {\n summary: `{${value.ctor && value.ctor !== 'Object' ? value.ctor + ' ' : ''}…}`,\n prefix: ''\n });\n\n default:\n node.textContent = '[Unknown]';\n return node;\n }\n }\n\n function renderExpandableValue(value, options={}) {\n const wrap = document.createElement('span');\n wrap.className = 'dc-object-node';\n\n const toggle = document.createElement('span');\n toggle.className = 'dc-object-toggle';\n\n const arrow = document.createElement('span');\n arrow.className = 'dc-object-arrow';\n arrow.textContent = '▶';\n\n const summary = document.createElement('span');\n summary.className = 'dc-object-summary';\n summary.textContent = options.summary || '{…}';\n\n toggle.appendChild(arrow);\n toggle.appendChild(summary);\n\n const children = document.createElement('div');\n children.className = 'dc-object-children';\n\n const entries = Array.isArray(value.entries) ? value.entries : [];\n\n entries.forEach(entry => {\n const row = document.createElement('div');\n row.className = 'dc-object-row';\n\n const key = document.createElement('span');\n key.className = entry.index\n ? 'dc-object-key-index'\n : 'dc-object-key';\n\n key.textContent = entry.index\n ? `[${entry.key}] `\n : `${entry.key}: `;\n\n row.appendChild(key);\n row.appendChild(renderValue(entry.value, {\n depth: (options.depth || 0) + 1\n }));\n\n children.appendChild(row);\n });\n\n if (value.truncated) {\n const more = document.createElement('div');\n more.className = 'dc-object-more';\n more.textContent = '… more';\n children.appendChild(more);\n }\n\n if (value.kind === 'error' && value.stack) {\n const stack = document.createElement('div');\n stack.className = 'dc-object-more';\n stack.style.whiteSpace = 'pre-wrap';\n stack.style.marginTop = '4px';\n stack.textContent = value.stack;\n children.appendChild(stack);\n }\n\n toggle.addEventListener('click', e => {\n e.stopPropagation();\n\n const open = children.classList.toggle('open');\n arrow.textContent = open ? '▼' : '▶';\n });\n\n wrap.appendChild(toggle);\n\n if (entries.length || value.truncated || value.stack) {\n wrap.appendChild(children);\n }\n\n return wrap;\n }\n\n function renderArgsInto(container, args) {\n if (!args || !args.length) {\n container.textContent = '';\n return;\n }\n\n args.forEach((arg, index) => {\n if (index > 0) {\n container.appendChild(document.createTextNode(' '));\n }\n\n container.appendChild(renderValue(arg));\n });\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 7. CONSOLE INTERCEPTION\n // ═══════════════════════════════════════════════════════════════\n\n const _orig = {};\n\n ['log','warn','error','info','table','group','groupCollapsed','groupEnd'].forEach(level => {\n if (typeof console[level] === 'function') {\n _orig[level] = console[level].bind(console);\n }\n });\n\n ['log','warn','error','info'].forEach(level => {\n if (!_orig[level]) return;\n\n console[level] = (...args) => {\n _orig[level](...args);\n addLog(level, args);\n };\n });\n\n if (_orig.table) {\n console.table = (...args) => {\n _orig.table(...args);\n addTableLog(args);\n };\n }\n\n if (_orig.group) {\n console.group = (...args) => {\n _orig.group(...args);\n addGroupLog(false, args);\n };\n }\n\n if (_orig.groupCollapsed) {\n console.groupCollapsed = (...args) => {\n _orig.groupCollapsed(...args);\n addGroupLog(true, args);\n };\n }\n\n if (_orig.groupEnd) {\n console.groupEnd = (...args) => {\n _orig.groupEnd(...args);\n S.groupDepth = Math.max(0, S.groupDepth - 1);\n };\n }\n\n function addLog(type, args, options={}) {\n if (type === 'error') {\n S.errorCount++;\n\n const b = el.badge();\n\n if (b) {\n b.textContent = S.errorCount > 99 ? '99+' : S.errorCount;\n b.style.display = 'flex';\n }\n }\n\n const entry = {\n id: S.nextLogId++,\n type,\n args: snapshotArgs(args),\n ts: ts(),\n groupDepth: options.groupDepth != null\n ? options.groupDepth\n : S.groupDepth,\n restored: false\n };\n\n S.logs.push(entry);\n trimLogs();\n persistBuffer();\n\n updateTabCount('console', S.logs.length);\n\n if (S.activeTab === 'console') {\n renderConsole();\n }\n }\n\n function addTableLog(args) {\n const source = args.length > 0 ? args[0] : undefined;\n\n const entry = {\n id: S.nextLogId++,\n type: 'table',\n args: snapshotArgs(args),\n table: buildTableSnapshot(source),\n ts: ts(),\n groupDepth: S.groupDepth,\n restored: false\n };\n\n S.logs.push(entry);\n trimLogs();\n persistBuffer();\n\n updateTabCount('console', S.logs.length);\n\n if (S.activeTab === 'console') {\n renderConsole();\n }\n }\n\n function addGroupLog(collapsed, args) {\n const depth = S.groupDepth;\n\n const entry = {\n id: S.nextLogId++,\n type: 'group',\n args: snapshotArgs(args),\n ts: ts(),\n groupDepth: depth,\n collapsed: !!collapsed,\n restored: false\n };\n\n S.logs.push(entry);\n\n S.groupDepth++;\n\n trimLogs();\n persistBuffer();\n\n updateTabCount('console', S.logs.length);\n\n if (S.activeTab === 'console') {\n renderConsole();\n }\n }\n\n function buildTableSnapshot(source) {\n if (!Array.isArray(source)) {\n return {\n tabular: false,\n value: snapshotValue(source)\n };\n }\n\n const rows = source.slice(0, SNAPSHOT_KEYS).map((row, index) => {\n const cells = {};\n\n if (row && typeof row === 'object' && !Array.isArray(row)) {\n Object.keys(row).slice(0, SNAPSHOT_KEYS).forEach(key => {\n cells[key] = snapshotValue(row[key]);\n });\n } else {\n cells.value = snapshotValue(row);\n }\n\n return {\n index,\n cells\n };\n });\n\n return {\n tabular: true,\n rows,\n truncated: source.length > rows.length\n };\n }\n\n function trimLogs() {\n const max = Math.max(1, Number(S.settings.maxEntries) || 500);\n\n while (S.logs.length > max) {\n S.logs.shift();\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 8. CONSOLE RENDERING\n // ═══════════════════════════════════════════════════════════════\n\n function renderConsole() {\n const o = el.consOut();\n if (!o) return;\n\n o.innerHTML = '';\n\n if (!S.logs.length) {\n o.innerHTML = '<div class=\"dc-empty\">No console entries yet</div>';\n return;\n }\n\n const frag = document.createDocumentFragment();\n\n let previousRestored = null;\n let skipUntil = -1;\n\n S.logs.forEach((log, index) => {\n if (!log.restored && previousRestored === true) {\n frag.appendChild(createReloadSeparator());\n }\n\n previousRestored = !!log.restored;\n\n if (index < skipUntil) return;\n\n const entry = createConsoleEntry(log, index);\n\n if (entry) {\n frag.appendChild(entry);\n\n if (log.type === 'group' && entry.dataset.groupEnd) {\n skipUntil = parseInt(entry.dataset.groupEnd, 10);\n }\n }\n });\n\n\n\n o.appendChild(frag);\n\n if (S.settings.autoScroll) {\n o.scrollTop = o.scrollHeight;\n }\n }\n\n function createReloadSeparator() {\n const separator = document.createElement('div');\n separator.className = 'dc-reload-separator';\n separator.textContent = 'reloaded';\n return separator;\n }\n\n function createConsoleEntry(log, index) {\n if (log.type === 'group') {\n return createGroupEntry(log, index);\n }\n\n if (log.type === 'table') {\n return createTableEntry(log, index);\n }\n\n const d = document.createElement('div');\n\n d.className = `dc-entry dc-entry-${log.type}`;\n\n if (log.groupDepth > 0) {\n d.classList.add('dc-grouped');\n }\n\n d.style.fontSize = S.settings.fontSize + 'px';\n\n if (S.settings.timestamps) {\n const timestamp = document.createElement('span');\n timestamp.className = 'dc-ts';\n timestamp.textContent = log.ts;\n d.appendChild(timestamp);\n }\n\n const body = document.createElement('span');\n body.className = 'dc-entry-body';\n\n renderArgsInto(body, log.args);\n\n d.appendChild(body);\n\n return d;\n }\n\n function createGroupEntry(log, index) {\n const d = document.createElement('div');\n\n d.className = 'dc-entry dc-entry-group';\n d.style.fontSize = S.settings.fontSize + 'px';\n\n const arrow = document.createElement('span');\n arrow.className = 'dc-group-arrow';\n arrow.textContent = '▶';\n\n const label = document.createElement('span');\n label.className = 'dc-entry-body';\n\n renderArgsInto(label, log.args);\n\n if (S.settings.timestamps) {\n const timestamp = document.createElement('span');\n timestamp.className = 'dc-ts';\n timestamp.textContent = log.ts;\n d.appendChild(timestamp);\n }\n\n d.appendChild(arrow);\n d.appendChild(label);\n\n const children = document.createElement('div');\n children.className = 'dc-group-children';\n\n const end = findGroupEnd(index, log.groupDepth);\n\n if (end > index + 1) {\n const childFrag = document.createDocumentFragment();\n\n for (let i = index + 1; i < end; i++) {\n const child = createConsoleEntry(S.logs[i], i);\n if (child) {\n childFrag.appendChild(child);\n }\n }\n\n children.appendChild(childFrag);\n\n if (log.collapsed) {\n children.classList.add('collapsed');\n } else {\n arrow.classList.add('open');\n }\n\n d.addEventListener('click', e => {\n e.stopPropagation();\n\n const collapsed = children.classList.toggle('collapsed');\n arrow.classList.toggle('open', !collapsed);\n });\n\n /*\n * The caller must skip child entries when the group itself\n * is rendered. This is handled in renderConsole().\n */\n d.dataset.groupEnd = String(end);\n d.appendChild(children);\n }\n\n return d;\n }\n\n function findGroupEnd(index, depth) {\n for (let i = index + 1; i < S.logs.length; i++) {\n const candidate = S.logs[i];\n\n if (\n candidate.type === 'group' &&\n candidate.groupDepth <= depth\n ) {\n return i;\n }\n\n if (\n candidate.groupDepth < depth\n ) {\n return i;\n }\n }\n\n return S.logs.length;\n }\n\n function createTableEntry(log) {\n const d = document.createElement('div');\n\n d.className = 'dc-entry dc-entry-table';\n\n if (log.groupDepth > 0) {\n d.classList.add('dc-grouped');\n }\n\n d.style.fontSize = S.settings.fontSize + 'px';\n\n if (S.settings.timestamps) {\n const timestamp = document.createElement('span');\n timestamp.className = 'dc-ts';\n timestamp.textContent = log.ts;\n d.appendChild(timestamp);\n }\n\n const body = document.createElement('div');\n body.className = 'dc-entry-body';\n\n const tableData = log.table;\n\n if (!tableData || !tableData.tabular) {\n renderArgsInto(body, log.args);\n d.appendChild(body);\n return d;\n }\n\n const wrap = document.createElement('div');\n wrap.className = 'dc-table-wrap';\n\n const table = document.createElement('table');\n table.className = 'dc-console-table';\n\n const columns = new Set();\n\n tableData.rows.forEach(row => {\n Object.keys(row.cells).forEach(key => columns.add(key));\n });\n\n const columnList = [...columns];\n\n const thead = document.createElement('thead');\n const headRow = document.createElement('tr');\n\n const indexHead = document.createElement('th');\n indexHead.textContent = '(index)';\n headRow.appendChild(indexHead);\n\n columnList.forEach(column => {\n const th = document.createElement('th');\n th.textContent = column;\n headRow.appendChild(th);\n });\n\n thead.appendChild(headRow);\n table.appendChild(thead);\n\n const tbody = document.createElement('tbody');\n\n tableData.rows.forEach(row => {\n const tr = document.createElement('tr');\n\n const indexCell = document.createElement('td');\n indexCell.textContent = String(row.index);\n tr.appendChild(indexCell);\n\n columnList.forEach(column => {\n const td = document.createElement('td');\n\n if (row.cells[column]) {\n td.appendChild(renderValue(row.cells[column]));\n } else {\n td.textContent = '—';\n }\n\n tr.appendChild(td);\n });\n\n tbody.appendChild(tr);\n });\n\n table.appendChild(tbody);\n wrap.appendChild(table);\n body.appendChild(wrap);\n\n if (tableData.truncated) {\n const note = document.createElement('div');\n note.className = 'dc-object-more';\n note.textContent = '… more rows';\n body.appendChild(note);\n }\n\n d.appendChild(body);\n\n return d;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 9. ERROR CAPTURE\n // ═══════════════════════════════════════════════════════════════\n\n let _origOnError = window.onerror;\n\n function installErrorCapture() {\n if (!S.settings.captureErrors) return;\n\n _origOnError = window.onerror;\n\n window.onerror = function(msg, src, line, col, error) {\n addLog('error', [\n error || `${msg} @ ${src}:${line}:${col}`\n ]);\n\n if (typeof _origOnError === 'function') {\n try {\n return _origOnError.apply(this, arguments);\n } catch(e) {}\n }\n\n return false;\n };\n\n window.addEventListener('unhandledrejection', onUnhandledRejection);\n }\n\n function onUnhandledRejection(e) {\n addLog('error', [\n e.reason instanceof Error\n ? e.reason\n : `Unhandled Promise Rejection: ${String(e.reason)}`\n ]);\n }\n\n installErrorCapture();\n\n // ═══════════════════════════════════════════════════════════════\n // 10. NETWORK INTERCEPTION\n // ═══════════════════════════════════════════════════════════════\n\n const _origFetch = window.fetch;\n\n function isBinaryContentType(contentType) {\n if (!contentType) return false;\n\n const type = contentType.toLowerCase();\n\n return (\n type.includes('application/octet-stream') ||\n type.includes('image/') ||\n type.includes('audio/') ||\n type.includes('video/') ||\n type.includes('application/pdf') ||\n type.includes('application/zip') ||\n type.includes('application/gzip') ||\n type.includes('application/wasm')\n );\n }\n\n function shouldCaptureTextBody(contentType) {\n if (!contentType) return true;\n return !isBinaryContentType(contentType);\n }\n\n async function captureRequestBody(input, init) {\n try {\n if (init && init.body != null) {\n return serializeRequestBody(init.body);\n }\n\n if (input instanceof Request) {\n const clone = input.clone();\n\n if (\n clone.bodyUsed ||\n !shouldCaptureTextBody(clone.headers.get('content-type'))\n ) {\n return null;\n }\n\n return await clone.text();\n }\n } catch(e) {}\n\n return null;\n }\n\n function serializeRequestBody(body) {\n if (body == null) return null;\n\n if (typeof body === 'string') {\n return body;\n }\n\n if (body instanceof URLSearchParams) {\n return body.toString();\n }\n\n if (body instanceof FormData) {\n const result = {};\n\n try {\n body.forEach((value, key) => {\n if (value instanceof File) {\n result[key] = `[File ${value.name}, ${value.size} bytes]`;\n } else {\n result[key] = String(value);\n }\n });\n } catch(e) {\n return '[FormData]';\n }\n\n return JSON.stringify(result, null, 2);\n }\n\n if (body instanceof Blob) {\n return isBinaryContentType(body.type)\n ? null\n : `[Blob ${body.type || 'unknown'}, ${body.size} bytes]`;\n }\n\n if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {\n return null;\n }\n\n try {\n return JSON.stringify(body, null, 2);\n } catch(e) {\n return String(body);\n }\n }\n\n async function captureResponseBody(response) {\n try {\n const contentType = response.headers.get('content-type') || '';\n\n if (!shouldCaptureTextBody(contentType)) {\n return null;\n }\n\n const clone = response.clone();\n\n if (clone.bodyUsed) return null;\n\n return await clone.text();\n } catch(e) {\n return null;\n }\n }\n\n if (_origFetch) {\n window.fetch = async (...args) => {\n if (!S.settings.monitorNetwork) {\n return _origFetch.apply(window, args);\n }\n\n const startTime = Date.now();\n\n let method = 'GET';\n let url = '';\n\n try {\n url = args[0] instanceof Request\n ? args[0].url\n : String(args[0]);\n\n if (args[1] && args[1].method) {\n method = String(args[1].method).toUpperCase();\n }\n\n if (args[0] instanceof Request) {\n method = args[0].method.toUpperCase();\n }\n } catch(e) {\n url = String(args[0]);\n }\n\n const req = {\n method,\n url,\n ts: ts(),\n startTime,\n status: null,\n statusText: '',\n duration: null,\n headers: {},\n requestHeaders: {},\n requestBody: null,\n responseBody: null,\n error: null\n };\n\n // Capture request headers\n try {\n const request = args[0] instanceof Request\n ? args[0]\n : new Request(url, args[1]);\n\n request.headers.forEach((v,k) => {\n req.requestHeaders[k] = v;\n });\n } catch(e) {}\n\n // Capture request body without consuming the actual body.\n req.requestBody = await captureRequestBody(args[0], args[1]);\n\n try {\n const res = await _origFetch.apply(window, args);\n\n req.status = res.status;\n req.statusText = res.statusText;\n req.duration = Date.now() - startTime;\n\n try {\n res.headers.forEach((v,k) => {\n req.headers[k] = v;\n });\n } catch(e) {}\n\n /*\n * Add the request immediately so the network entry appears\n * without waiting for potentially large response bodies.\n */\n addNetReq(req);\n\n /*\n * Response clone is independent of the application's response.\n * Capturing happens in the background.\n */\n captureResponseBody(res).then(body => {\n if (body == null) return;\n\n req.responseBody = body;\n\n if (S.activeTab === 'network') {\n renderNetwork();\n }\n\n persistBuffer();\n }).catch(() => {});\n\n return res;\n } catch(e) {\n req.error = e && e.message\n ? e.message\n : String(e);\n\n req.duration = Date.now() - startTime;\n\n addNetReq(req);\n\n throw e;\n }\n };\n }\n\n const _origOpen = XMLHttpRequest.prototype.open;\n const _origSend = XMLHttpRequest.prototype.send;\n\n XMLHttpRequest.prototype.open = function(method, url) {\n if (!S.settings.monitorNetwork) {\n return _origOpen.apply(this, arguments);\n }\n\n this.__dcReq = {\n method: String(method).toUpperCase(),\n url: String(url),\n ts: ts(),\n startTime: 0,\n requestBody: null,\n responseBody: null,\n requestHeaders: {}\n };\n\n return _origOpen.apply(this, arguments);\n };\n\n const _origSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;\n\n XMLHttpRequest.prototype.setRequestHeader = function(name, value) {\n if (this.__dcReq) {\n this.__dcReq.requestHeaders[name] = String(value);\n }\n\n return _origSetRequestHeader.apply(this, arguments);\n };\n\n XMLHttpRequest.prototype.send = function(body) {\n if (!S.settings.monitorNetwork || !this.__dcReq) {\n return _origSend.apply(this, arguments);\n }\n\n const req = this.__dcReq;\n\n req.startTime = Date.now();\n req.requestBody = serializeRequestBody(body);\n\n this.addEventListener('loadend', () => {\n req.status = this.status;\n req.statusText = this.statusText;\n req.duration = Date.now() - req.startTime;\n req.headers = {};\n\n try {\n const raw = this.getAllResponseHeaders();\n\n if (raw) {\n raw\n .split('\\r\\n')\n .filter(Boolean)\n .forEach(line => {\n const i = line.indexOf(': ');\n\n if (i > 0) {\n req.headers[line.slice(0,i)] = line.slice(i+2);\n }\n });\n }\n } catch(e) {}\n\n req.error = this.status === 0\n ? 'Request failed'\n : null;\n\n /*\n * Never attempt responseText for binary response types.\n */\n try {\n const responseType = this.responseType || '';\n\n if (\n responseType === '' ||\n responseType === 'text'\n ) {\n const contentType = req.headers['content-type'] || '';\n\n if (shouldCaptureTextBody(contentType)) {\n req.responseBody = this.responseText || null;\n }\n }\n } catch(e) {}\n\n addNetReq(req);\n });\n\n return _origSend.apply(this, arguments);\n };\n\n function addNetReq(req) {\n S.network.unshift(req);\n\n if (S.network.length > S.settings.maxEntries) {\n S.network.pop();\n }\n\n persistBuffer();\n\n updateTabCount('network', S.network.length);\n\n if (S.activeTab === 'network') {\n renderNetwork();\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 11. NETWORK RENDERING\n // ═══════════════════════════════════════════════════════════════\n\n function renderNetwork(filter) {\n const o = el.netOut();\n if (!o) return;\n\n filter = filter !== undefined\n ? filter\n : (el.netFlt() ? el.netFlt().value : '');\n\n const needle = filter.trim().toLowerCase();\n\n const filtered = needle\n ? S.network.filter(r =>\n String(r.url).toLowerCase().includes(needle) ||\n String(r.method).toLowerCase().includes(needle)\n )\n : S.network;\n\n o.innerHTML = '';\n\n if (!filtered.length) {\n o.innerHTML = '<div class=\"dc-empty\">No requests captured yet</div>';\n return;\n }\n\n filtered.forEach(req => {\n o.appendChild(createNetworkEntry(req));\n });\n }\n\n function createNetworkEntry(req) {\n const card = document.createElement('div');\n card.className = 'dc-req';\n\n const top = document.createElement('div');\n top.className = 'dc-req-top';\n\n const method = document.createElement('span');\n method.className = `dc-method ${methodClass(req.method)}`;\n method.textContent = req.method;\n\n const url = document.createElement('span');\n url.className = 'dc-req-url';\n url.title = req.url;\n url.textContent = truncUrl(req.url);\n\n const status = document.createElement('span');\n status.className = `dc-req-status ${\n req.error ? 's-err' : statusClass(req.status)\n }`;\n\n status.textContent = req.status\n ? String(req.status)\n : req.error\n ? 'ERR'\n : '…';\n\n top.appendChild(method);\n top.appendChild(url);\n top.appendChild(status);\n\n const meta = document.createElement('div');\n meta.className = 'dc-req-meta';\n\n const dur = req.duration != null\n ? `${req.duration}ms · `\n : '';\n\n meta.textContent =\n `${dur}${req.ts}` +\n (req.error ? ` · ${req.error}` : '');\n\n const detail = document.createElement('div');\n detail.className = 'dc-req-detail';\n\n buildNetworkDetail(detail, req);\n\n card.appendChild(top);\n card.appendChild(meta);\n card.appendChild(detail);\n\n card.addEventListener('click', e => {\n /*\n * Do not collapse when interacting with body \"show full\".\n */\n if (e.target.closest('.dc-body-toggle')) return;\n\n const open = detail.classList.toggle('open');\n card.classList.toggle('expanded', open);\n });\n\n return card;\n }\n\n function buildNetworkDetail(detail, req) {\n addDetailSection(detail, 'General', [\n ['URL', req.url],\n ['Method', req.method],\n ['Status', `${req.status || req.error || '–'} ${req.statusText || ''}`],\n ['Duration', req.duration != null ? `${req.duration}ms` : '–']\n ]);\n\n addHeaderSection(\n detail,\n 'Request Headers',\n req.requestHeaders\n );\n\n addBodySection(\n detail,\n 'Request Body',\n req.requestBody\n );\n\n addHeaderSection(\n detail,\n 'Response Headers',\n req.headers\n );\n\n addBodySection(\n detail,\n 'Response Body',\n req.responseBody\n );\n }\n\n function addDetailSection(parent, title, rows) {\n const section = document.createElement('div');\n section.className = 'dc-detail-section';\n\n const heading = document.createElement('div');\n heading.className = 'dc-detail-title';\n heading.textContent = title;\n\n section.appendChild(heading);\n\n rows.forEach(([key, value]) => {\n const row = document.createElement('div');\n row.className = 'dc-detail-row';\n\n const keyEl = document.createElement('span');\n keyEl.className = 'dc-detail-key';\n keyEl.textContent = `${key}: `;\n\n row.appendChild(keyEl);\n row.appendChild(document.createTextNode(String(value ?? '–')));\n\n section.appendChild(row);\n });\n\n parent.appendChild(section);\n }\n\n function addHeaderSection(parent, title, headers) {\n const section = document.createElement('div');\n section.className = 'dc-detail-section';\n\n const heading = document.createElement('div');\n heading.className = 'dc-detail-title';\n heading.textContent = title;\n\n section.appendChild(heading);\n\n const entries = headers\n ? Object.entries(headers)\n : [];\n\n if (!entries.length) {\n const empty = document.createElement('div');\n empty.className = 'dc-detail-row';\n empty.style.color = 'var(--dc-text2)';\n empty.textContent = 'none';\n section.appendChild(empty);\n } else {\n entries.forEach(([key, value]) => {\n const row = document.createElement('div');\n row.className = 'dc-detail-row';\n\n const keyEl = document.createElement('span');\n keyEl.className = 'dc-detail-key';\n keyEl.textContent = `${key}: `;\n\n row.appendChild(keyEl);\n row.appendChild(document.createTextNode(String(value)));\n\n section.appendChild(row);\n });\n }\n\n parent.appendChild(section);\n }\n\n function addBodySection(parent, title, body) {\n if (body == null || body === '') return;\n\n const section = document.createElement('div');\n section.className = 'dc-detail-section';\n\n const heading = document.createElement('div');\n heading.className = 'dc-detail-title';\n heading.textContent = title;\n\n section.appendChild(heading);\n\n const block = document.createElement('div');\n block.className = 'dc-body-block';\n\n const text = String(body);\n\n if (text.length <= BODY_DISPLAY_LIMIT) {\n const pre = document.createElement('pre');\n pre.className = 'dc-body-pre';\n pre.textContent = formatBodyForDisplay(text);\n block.appendChild(pre);\n } else {\n const preview = document.createElement('pre');\n preview.className = 'dc-body-pre';\n preview.textContent =\n formatBodyForDisplay(text.slice(0, BODY_DISPLAY_LIMIT)) +\n '\\n…';\n\n const full = document.createElement('pre');\n full.className = 'dc-body-full';\n full.textContent = formatBodyForDisplay(text);\n\n const note = document.createElement('div');\n note.className = 'dc-body-truncated';\n note.textContent =\n `Showing first 10 KB of ${formatBytes(text.length)}.`;\n\n const toggle = document.createElement('button');\n toggle.className = 'dc-body-toggle';\n toggle.textContent = 'Show full';\n\n toggle.addEventListener('click', e => {\n e.stopPropagation();\n\n const open = full.classList.toggle('open');\n\n toggle.textContent = open\n ? 'Hide full'\n : 'Show full';\n });\n\n block.appendChild(preview);\n block.appendChild(note);\n block.appendChild(toggle);\n block.appendChild(full);\n }\n\n section.appendChild(block);\n parent.appendChild(section);\n }\n\n function formatBodyForDisplay(text) {\n const trimmed = text.trim();\n\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n } catch(e) {}\n }\n\n return text;\n }\n\n function formatBytes(bytes) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 12. PERSISTENT BUFFER\n // ═══════════════════════════════════════════════════════════════\n\n function persistBuffer() {\n if (!S.settings.persistBuffer) return;\n\n try {\n const payload = {\n version: VERSION,\n savedAt: Date.now(),\n logs: S.logs.slice(-S.settings.maxEntries),\n network: S.network.slice(0, S.settings.maxEntries)\n };\n\n sessionStorage.setItem(\n BUFFER_KEY,\n JSON.stringify(payload)\n );\n } catch(e) {\n /*\n * Storage may fail due to quota/private browsing/etc.\n * Debugging must never break the application.\n */\n }\n }\n\n function restoreBuffer() {\n if (!S.settings.persistBuffer) return;\n\n try {\n const raw = sessionStorage.getItem(BUFFER_KEY);\n if (!raw) return;\n\n const payload = JSON.parse(raw);\n\n if (!payload || typeof payload !== 'object') return;\n\n if (Array.isArray(payload.logs)) {\n S.logs = payload.logs.map(log => ({\n ...log,\n restored: true\n }));\n }\n\n if (Array.isArray(payload.network)) {\n S.network = payload.network;\n }\n\n S.logs.forEach(log => {\n if (log.id >= S.nextLogId) {\n S.nextLogId = log.id + 1;\n }\n });\n\n /*\n * Restored entries should be followed by a new reload\n * separator. The separator is generated visually when a\n * fresh entry follows restored entries.\n */\n updateTabCount('console', S.logs.length);\n updateTabCount('network', S.network.length);\n } catch(e) {\n try {\n sessionStorage.removeItem(BUFFER_KEY);\n } catch(err) {}\n }\n }\n\n function clearPersistentBuffer() {\n try {\n sessionStorage.removeItem(BUFFER_KEY);\n } catch(e) {}\n }\n\n restoreBuffer();\n\n // ═══════════════════════════════════════════════════════════════\n // 13. STORAGE\n // ═══════════════════════════════════════════════════════════════\n\n async function loadStorage() {\n S.dbs = [];\n\n if (!window.indexedDB) return;\n\n try {\n if (indexedDB.databases) {\n const list = await indexedDB.databases();\n\n for (const d of list) {\n try {\n await inspectDb(d.name, d.version);\n } catch(e) {}\n }\n }\n } catch(e) {}\n\n renderStorage();\n }\n\n function inspectDb(name, version) {\n return new Promise((res, rej) => {\n const req = indexedDB.open(name, version);\n\n req.onerror = () => rej(req.error);\n\n req.onsuccess = () => {\n const db = req.result;\n\n const info = {\n name: db.name,\n version: db.version,\n stores: []\n };\n\n const storeNames = [...db.objectStoreNames];\n let pending = storeNames.length;\n\n if (!pending) {\n db.close();\n S.dbs.push(info);\n return res(info);\n }\n\n storeNames.forEach(storeName => {\n inspectStore(db, storeName)\n .then(storeInfo => {\n info.stores.push(storeInfo);\n\n if (--pending === 0) {\n db.close();\n S.dbs.push(info);\n res(info);\n }\n })\n .catch(() => {\n info.stores.push({\n name: storeName,\n count: 0,\n keyPath: null,\n data: []\n });\n\n if (--pending === 0) {\n db.close();\n S.dbs.push(info);\n res(info);\n }\n });\n });\n };\n });\n }\n\n function inspectStore(db, storeName) {\n return new Promise((res, rej) => {\n const tx = db.transaction([storeName], 'readonly');\n const store = tx.objectStore(storeName);\n\n const cntReq = store.count();\n\n cntReq.onsuccess = () => {\n const info = {\n name: storeName,\n count: cntReq.result,\n keyPath: store.keyPath,\n data: []\n };\n\n const getReq = store.getAll(undefined, 20);\n\n getReq.onsuccess = () => {\n info.data = getReq.result;\n res(info);\n };\n\n getReq.onerror = () => res(info);\n };\n\n cntReq.onerror = () => res({\n name: storeName,\n count: 0,\n keyPath: null,\n data: []\n });\n });\n }\n\n function renderStorage() {\n const o = el.storOut();\n if (!o) return;\n\n switch(S.activeStorage) {\n case 'indexeddb':\n renderIDB(o);\n break;\n\n case 'localstorage':\n renderKV(o, localStorage, 'localStorage');\n break;\n\n case 'sessionstorage':\n renderKV(o, sessionStorage, 'sessionStorage');\n break;\n }\n }\n\n function renderIDB(o) {\n if (!S.dbs.length) {\n o.innerHTML =\n '<div class=\"dc-empty\">No IndexedDB databases found</div>';\n return;\n }\n\n o.innerHTML = S.dbs.map((db, di) => `\n <div class=\"dc-db-card\" id=\"db-card-${di}\">\n <div class=\"dc-db-header\" onclick=\"window.__dcToggleDb(${di})\">\n <div>\n <div class=\"dc-db-name\">${escHtml(db.name)}</div>\n <div class=\"dc-db-meta\">\n v${db.version} ·\n ${db.stores.length}\n store${db.stores.length !== 1 ? 's' : ''}\n </div>\n </div>\n <span style=\"color:var(--dc-text2);font-size:11px\">▼</span>\n </div>\n\n <div class=\"dc-db-body\">\n ${db.stores.map((st, si) => `\n <div class=\"dc-store-item\" onclick=\"window.__dcToggleStore(${di},${si})\">\n <div class=\"dc-store-name\">${escHtml(st.name)}</div>\n <div class=\"dc-store-meta\">\n ${st.count} records ·\n keyPath: ${st.keyPath || 'none'}\n </div>\n\n <div class=\"dc-data-viewer\" id=\"store-${di}-${si}\">\n ${\n st.data.length\n ? st.data.slice(0,20).map(item => `\n <div class=\"dc-data-row\">\n <div class=\"dc-data-key\">\n · ${escHtml(getKey(item, st.keyPath))}\n </div>\n <div class=\"dc-data-val\">\n ${escHtml(fmtVal(item))}\n </div>\n </div>\n `).join('')\n : '<div style=\"color:var(--dc-text2);font-size:11px;padding:8px\">Empty store</div>'\n }\n </div>\n </div>\n `).join('')}\n </div>\n </div>\n `).join('');\n }\n\n function getKey(obj, keyPath) {\n if (!keyPath) return '—';\n\n return typeof keyPath === 'string'\n ? String(obj[keyPath] ?? '—')\n : JSON.stringify(keyPath);\n }\n\n function fmtVal(v) {\n if (typeof v === 'object' && v !== null) {\n try {\n const s = JSON.stringify(v, null, 2);\n return s.length > 300\n ? s.slice(0,300) + '…'\n : s;\n } catch(e) {\n return '[Unserializable]';\n }\n }\n\n const s = String(v);\n\n return s.length > 200\n ? s.slice(0,200) + '…'\n : s;\n }\n\n window.__dcToggleDb = function(di) {\n const card = document.getElementById(`db-card-${di}`);\n\n if (card) {\n card.classList.toggle('open');\n }\n };\n\n window.__dcToggleStore = function(di, si) {\n const viewer =\n document.getElementById(`store-${di}-${si}`);\n\n if (viewer) {\n viewer.classList.toggle('open');\n }\n };\n\n // ═══════════════════════════════════════════════════════════════\n // 14. DOM TREE\n // ═══════════════════════════════════════════════════════════════\n\n function renderDomTree() {\n const o = el.domOut();\n if (!o) return;\n\n o.innerHTML = '';\n\n const tree = document.createElement('div');\n tree.className = 'dc-tree';\n\n tree.appendChild(buildNode(document.body));\n\n o.appendChild(tree);\n }\n\n function buildNode(nodeEl) {\n const wrap = document.createElement('div');\n\n const children = [...nodeEl.children];\n const hasChildren = children.length > 0;\n\n const label = document.createElement('div');\n label.className = 'dc-node-label';\n\n const arrow = document.createElement('span');\n arrow.className = 'dc-arrow';\n arrow.textContent = hasChildren ? '▶' : ' ';\n label.appendChild(arrow);\n\n const tag = document.createElement('span');\n tag.className = 'dc-tag';\n tag.textContent = `<${nodeEl.tagName.toLowerCase()}`;\n label.appendChild(tag);\n\n if (nodeEl.id) {\n const id = document.createElement('span');\n id.className = 'dc-id';\n id.textContent = ` #${nodeEl.id}`;\n label.appendChild(id);\n }\n\n if (\n nodeEl.className &&\n typeof nodeEl.className === 'string' &&\n nodeEl.className.trim()\n ) {\n const cls = document.createElement('span');\n cls.className = 'dc-cls';\n\n const clsStr = nodeEl.className\n .trim()\n .split(/\\s+/)\n .slice(0,3)\n .map(c => `.${c}`)\n .join('');\n\n cls.textContent = clsStr;\n label.appendChild(cls);\n }\n\n const close = document.createElement('span');\n close.className = 'dc-tag';\n close.textContent = '>';\n label.appendChild(close);\n\n const txtContent = nodeEl.childNodes.length\n ? [...nodeEl.childNodes]\n .find(n =>\n n.nodeType === 3 &&\n n.textContent.trim()\n )\n : null;\n\n if (txtContent) {\n const preview = document.createElement('span');\n preview.className = 'dc-txt-preview';\n preview.textContent =\n ' ' +\n txtContent.textContent\n .trim()\n .slice(0,30);\n\n label.appendChild(preview);\n }\n\n label.addEventListener('click', e => {\n e.stopPropagation();\n\n if (hasChildren) {\n const childDiv =\n wrap.querySelector(':scope > .dc-children');\n\n const isOpen =\n childDiv &&\n childDiv.classList.contains('open');\n\n if (childDiv) {\n childDiv.classList.toggle('open', !isOpen);\n }\n\n arrow.textContent = !isOpen ? '▼' : '▶';\n }\n\n showNodeDetail(nodeEl);\n });\n\n wrap.appendChild(label);\n\n if (hasChildren) {\n const childDiv = document.createElement('div');\n childDiv.className = 'dc-children';\n\n children.forEach(child => {\n childDiv.appendChild(buildNode(child));\n });\n\n wrap.appendChild(childDiv);\n }\n\n return wrap;\n }\n\n function showNodeDetail(targetEl) {\n const existing =\n document.getElementById('dc-node-detail');\n\n if (existing) existing.remove();\n\n const d = document.createElement('div');\n\n d.className = 'dc-node-detail';\n d.id = 'dc-node-detail';\n\n const tag =\n `<${targetEl.tagName.toLowerCase()}>`;\n\n const attrs = [...targetEl.attributes];\n const styles = window.getComputedStyle(targetEl);\n\n d.innerHTML = `\n <div style=\"color:var(--dc-accent2);font-size:12px;font-weight:700;margin-bottom:8px\">\n ${escHtml(tag)}\n </div>\n\n ${\n attrs.length\n ? `\n <div class=\"dc-detail-title\">Attributes</div>\n ${\n attrs.map(a => `\n <div class=\"dc-attr-row\">\n <span class=\"dc-attr-name\">${escHtml(a.name)}</span>=\n <span class=\"dc-attr-val\">\"${escHtml(a.value)}\"</span>\n </div>\n `).join('')\n }\n `\n : ''\n }\n\n <div class=\"dc-detail-title\" style=\"margin-top:8px\">\n Geometry\n </div>\n\n <div class=\"dc-attr-row\">\n <span class=\"dc-attr-name\">size: </span>\n <span class=\"dc-attr-val\">\n ${Math.round(targetEl.offsetWidth)}×${Math.round(targetEl.offsetHeight)}\n </span>\n </div>\n\n <div class=\"dc-attr-row\">\n <span class=\"dc-attr-name\">display: </span>\n <span class=\"dc-attr-val\">${styles.display}</span>\n </div>\n\n <div class=\"dc-attr-row\">\n <span class=\"dc-attr-name\">position: </span>\n <span class=\"dc-attr-val\">${styles.position}</span>\n </div>\n `;\n\n el.domOut().prepend(d);\n }\n\n let _pickHandler = null;\n let _pickHoverHandler = null;\n let _pickedEl = null;\n\n function startPicking() {\n S.isPicking = true;\n\n const button =\n document.getElementById('dom-pick-btn');\n\n if (button) button.classList.add('picking');\n\n _pickHandler = e => {\n if (\n e.target.closest('#dc-panel') ||\n e.target.closest('#dc-fab')\n ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n if (_pickedEl) {\n _pickedEl.classList.remove('dc-pick-highlight');\n }\n\n _pickedEl = e.target;\n _pickedEl.classList.add('dc-pick-highlight');\n\n showNodeDetail(_pickedEl);\n stopPicking();\n };\n\n _pickHoverHandler = e => {\n if (!S.isPicking) return;\n\n if (\n e.target.closest('#dc-panel') ||\n e.target.closest('#dc-fab')\n ) {\n return;\n }\n\n if (_pickedEl) {\n _pickedEl.classList.remove('dc-pick-highlight');\n }\n\n _pickedEl = e.target;\n _pickedEl.classList.add('dc-pick-highlight');\n };\n\n document.addEventListener(\n 'click',\n _pickHandler,\n true\n );\n\n document.addEventListener(\n 'mouseover',\n _pickHoverHandler,\n true\n );\n }\n\n function stopPicking() {\n S.isPicking = false;\n\n const button =\n document.getElementById('dom-pick-btn');\n\n if (button) {\n button.classList.remove('picking');\n }\n\n if (_pickHandler) {\n document.removeEventListener(\n 'click',\n _pickHandler,\n true\n );\n\n _pickHandler = null;\n }\n\n if (_pickHoverHandler) {\n document.removeEventListener(\n 'mouseover',\n _pickHoverHandler,\n true\n );\n\n _pickHoverHandler = null;\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 15. SYSTEM INFO\n // ═══════════════════════════════════════════════════════════════\n\n function renderSystem() {\n const o = el.sysOut();\n if (!o) return;\n\n const nav = navigator;\n const perf = window.performance;\n const mem = perf && perf.memory;\n const conn =\n nav.connection ||\n nav.mozConnection ||\n nav.webkitConnection;\n\n const cards = [\n ['Screen', `${screen.width}×${screen.height} (devicePR: ${window.devicePixelRatio})`],\n ['Viewport', `${window.innerWidth}×${window.innerHeight}`],\n ['Platform', nav.platform || '—'],\n ['Language', nav.language || '—'],\n ['Online', nav.onLine ? '✅ Online' : '❌ Offline'],\n ['Cookies', nav.cookieEnabled ? 'Enabled' : 'Disabled'],\n ['HW Concurrency', nav.hardwareConcurrency || '—']\n ];\n\n if (conn) {\n cards.push([\n 'Connection',\n `${conn.effectiveType || '—'} · ${conn.downlink || '—'} Mbps`\n ]);\n\n cards.push([\n 'RTT',\n conn.rtt != null ? `${conn.rtt}ms` : '—'\n ]);\n }\n\n if (mem) {\n const mb = v =>\n (v / 1048576).toFixed(1) + ' MB';\n\n cards.push([\n 'Heap Used',\n mb(mem.usedJSHeapSize)\n ]);\n\n cards.push([\n 'Heap Limit',\n mb(mem.jsHeapSizeLimit)\n ]);\n }\n\n if (perf) {\n const nav2 =\n perf.getEntriesByType &&\n perf.getEntriesByType('navigation')[0];\n\n if (nav2) {\n cards.push([\n 'Page Load',\n `${Math.round(nav2.loadEventEnd)}ms`\n ]);\n\n cards.push([\n 'DOM Ready',\n `${Math.round(nav2.domContentLoadedEventEnd)}ms`\n ]);\n }\n }\n\n o.innerHTML =\n cards.map(([label, val]) => `\n <div class=\"dc-sys-card\">\n <div class=\"dc-sys-label\">${escHtml(label)}</div>\n <div class=\"dc-sys-val\">${escHtml(String(val))}</div>\n </div>\n `).join('') +\n\n `\n <div class=\"dc-sys-card dc-sys-full\">\n <div class=\"dc-sys-label\">User Agent</div>\n <div\n class=\"dc-sys-val\"\n style=\"word-break:break-all;font-size:10px\"\n >\n ${escHtml(nav.userAgent)}\n </div>\n </div>\n `;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 16. SETTINGS\n // ═══════════════════════════════════════════════════════════════\n\n function makeToggle(id, name, desc, checked) {\n return `\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">${name}</div>\n <div class=\"dc-setting-desc\">${desc}</div>\n </div>\n <label class=\"dc-toggle\">\n <input type=\"checkbox\" id=\"${id}\" ${checked ? 'checked' : ''}>\n <span class=\"dc-toggle-track\"></span>\n </label>\n </div>`;\n }\n\n function makeSelect(id, name, desc, options, current) {\n return `\n <div class=\"dc-setting-row\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\">${name}</div>\n <div class=\"dc-setting-desc\">${desc}</div>\n </div>\n <select class=\"dc-select\" id=\"${id}\">\n ${options.map(v => `<option value=\"${v}\" ${current === v ? 'selected' : ''}>${v}</option>`).join('')}\n </select>\n </div>`;\n }\n\n function renderSettings() {\n const o = el.settOut();\n if (!o) return;\n\n const ss = S.settings;\n\n o.innerHTML =\n makeToggle('s-ts', 'Timestamps', 'Show time prefix on each log entry', ss.timestamps) +\n makeToggle('s-as', 'Auto-scroll', 'Scroll to latest entry automatically', ss.autoScroll) +\n makeToggle('s-ce', 'Capture Global Errors','window.onerror + unhandledrejection', ss.captureErrors) +\n makeToggle('s-mn', 'Monitor Network', 'Intercept fetch + XHR requests', ss.monitorNetwork) +\n makeToggle('s-pb', 'Persist Across Reload','Keep console and network history in sessionStorage', ss.persistBuffer) +\n makeSelect('s-fs', 'Font Size', 'Console output font size (px)', [10,11,12,13,14], ss.fontSize) +\n makeSelect('s-me', 'Max Log Entries', 'Older entries are discarded', [100,250,500,1000,2000], ss.maxEntries) +\n `<div class=\"dc-setting-row\" style=\"border:none\">\n <div class=\"dc-setting-info\">\n <div class=\"dc-setting-name\" style=\"color:var(--dc-red)\">Clear All Data</div>\n <div class=\"dc-setting-desc\">Wipe logs, network history and persistent buffer</div>\n </div>\n <button class=\"dc-clear-btn\" id=\"dc-settings-clear\">Clear</button>\n </div>`;\n\n document.getElementById('s-ts').onchange = e => { ss.timestamps = e.target.checked; saveSettings(); renderConsole(); };\n document.getElementById('s-as').onchange = e => { ss.autoScroll = e.target.checked; saveSettings(); };\n document.getElementById('s-ce').onchange = e => { ss.captureErrors = e.target.checked; saveSettings(); };\n document.getElementById('s-mn').onchange = e => { ss.monitorNetwork= e.target.checked; saveSettings(); };\n document.getElementById('s-pb').onchange = e => {\n ss.persistBuffer = e.target.checked;\n saveSettings();\n ss.persistBuffer ? persistBuffer() : clearPersistentBuffer();\n };\n document.getElementById('s-fs').onchange = e => {\n ss.fontSize = parseInt(e.target.value, 10);\n saveSettings();\n if (S.activeTab === 'console') renderConsole();\n };\n document.getElementById('s-me').onchange = e => {\n ss.maxEntries = parseInt(e.target.value, 10);\n trimLogs();\n if (S.network.length > ss.maxEntries) S.network = S.network.slice(0, ss.maxEntries);\n saveSettings();\n persistBuffer();\n updateTabCount('console', S.logs.length);\n updateTabCount('network', S.network.length);\n renderConsole();\n };\n document.getElementById('dc-settings-clear').addEventListener('click', window.__dcClearAll);\n }\n\n\n\n window.__dcClearAll = function() {\n S.logs = [];\n S.network = [];\n S.errorCount = 0;\n S.groupDepth = 0;\n\n clearPersistentBuffer();\n\n const b = el.badge();\n\n if (b) {\n b.style.display = 'none';\n b.textContent = '0';\n }\n\n updateTabCount('console', 0);\n updateTabCount('network', 0);\n\n renderConsole();\n renderNetwork();\n };\n\n // ═══════════════════════════════════════════════════════════════\n // 17. TABS\n // ═══════════════════════════════════════════════════════════════\n\n function switchTab(name) {\n S.activeTab = name;\n\n document.querySelectorAll('.dc-tab')\n .forEach(b =>\n b.classList.toggle(\n 'active',\n b.dataset.tab === name\n )\n );\n\n document.querySelectorAll('.dc-panel-content')\n .forEach(p =>\n p.classList.toggle(\n 'active',\n p.id === `panel-${name}`\n )\n );\n\n switch(name) {\n case 'console':\n renderConsole();\n break;\n\n case 'network':\n renderNetwork();\n break;\n\n case 'storage':\n loadStorage();\n break;\n\n case 'dom':\n renderDomTree();\n break;\n\n case 'system':\n renderSystem();\n break;\n\n case 'settings':\n renderSettings();\n break;\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 18. PANEL TOGGLE\n // ═══════════════════════════════════════════════════════════════\n\n let _panelOpen = false;\n\n function updateFab() {\n const fab = el.fab();\n if (!fab) return;\n\n fab.innerHTML =\n `${_panelOpen ? '✕' : '⌥'}` +\n `<span class=\"dc-fab-badge\" id=\"dc-error-badge\" ` +\n `style=\"display:${S.errorCount > 0 ? 'flex' : 'none'}\">` +\n `${S.errorCount}` +\n `</span>`;\n }\n\n function togglePanel() {\n _panelOpen = !_panelOpen;\n\n const panel = el.panel();\n\n if (_panelOpen) {\n panel.style.display = 'flex';\n\n requestAnimationFrame(() => {\n panel.classList.add('visible');\n });\n\n switchTab(S.activeTab);\n } else {\n panel.classList.remove('visible');\n\n setTimeout(() => {\n if (!_panelOpen) {\n panel.style.display = 'none';\n }\n }, 260);\n }\n\n updateFab();\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 19. DRAG RESIZE\n // ═══════════════════════════════════════════════════════════════\n\n (function initDrag() {\n const handle =\n document.getElementById('dc-drag');\n\n const panel =\n document.getElementById('dc-panel');\n\n let dragging = false;\n let startY = 0;\n let startH = 0;\n\n function onStart(e) {\n dragging = true;\n\n startY =\n e.clientY ||\n (e.touches && e.touches[0].clientY);\n\n startH = panel.offsetHeight;\n\n document.body.style.userSelect = 'none';\n }\n\n function onMove(e) {\n if (!dragging) return;\n\n const y =\n e.clientY ||\n (e.touches && e.touches[0].clientY);\n\n const newH = Math.max(\n 120,\n Math.min(\n window.innerHeight * 0.85,\n startH + (startY - y)\n )\n );\n\n panel.style.height = newH + 'px';\n }\n\n function onEnd() {\n dragging = false;\n document.body.style.userSelect = '';\n }\n\n handle.addEventListener(\n 'mousedown',\n onStart\n );\n\n handle.addEventListener(\n 'touchstart',\n onStart,\n { passive: true }\n );\n\n document.addEventListener(\n 'mousemove',\n onMove\n );\n\n document.addEventListener(\n 'touchmove',\n onMove,\n { passive: true }\n );\n\n document.addEventListener(\n 'mouseup',\n onEnd\n );\n\n document.addEventListener(\n 'touchend',\n onEnd\n );\n })();\n\n // ═══════════════════════════════════════════════════════════════\n // 20. REPL\n // ═══════════════════════════════════════════════════════════════\n\n function initRepl() {\n const input = el.replIn();\n\n if (!input) return;\n\n function execute() {\n const code = input.value.trim();\n\n if (!code) return;\n\n S.replHistory.unshift(code);\n\n if (S.replHistory.length > 50) {\n S.replHistory.pop();\n }\n\n S.replHistoryIdx = -1;\n\n const entry = document.createElement('div');\n\n entry.className =\n 'dc-entry dc-entry-cmd';\n\n entry.style.fontSize =\n S.settings.fontSize + 'px';\n\n if (S.settings.timestamps) {\n const timestamp = document.createElement('span');\n timestamp.className = 'dc-ts';\n timestamp.textContent = ts();\n entry.appendChild(timestamp);\n }\n\n const body = document.createElement('span');\n body.className = 'dc-entry-body';\n\n body.textContent = `▶ ${code}`;\n\n entry.appendChild(body);\n\n el.consOut().appendChild(entry);\n\n try {\n const result = (0, eval)(code);\n\n if (result !== undefined) {\n const resEntry =\n document.createElement('div');\n\n resEntry.className =\n 'dc-entry dc-entry-log';\n\n resEntry.style.fontSize =\n S.settings.fontSize + 'px';\n\n if (S.settings.timestamps) {\n const timestamp =\n document.createElement('span');\n\n timestamp.className = 'dc-ts';\n timestamp.textContent = ts();\n\n resEntry.appendChild(timestamp);\n }\n\n const resultBody =\n document.createElement('span');\n\n resultBody.className =\n 'dc-entry-body';\n\n resultBody.appendChild(\n renderValue(snapshotValue(result))\n );\n\n resEntry.appendChild(resultBody);\n\n el.consOut().appendChild(resEntry);\n }\n } catch(err) {\n const errEntry =\n document.createElement('div');\n\n errEntry.className =\n 'dc-entry dc-entry-error';\n\n errEntry.style.fontSize =\n S.settings.fontSize + 'px';\n\n if (S.settings.timestamps) {\n const timestamp =\n document.createElement('span');\n\n timestamp.className = 'dc-ts';\n timestamp.textContent = ts();\n\n errEntry.appendChild(timestamp);\n }\n\n const body =\n document.createElement('span');\n\n body.className =\n 'dc-entry-body';\n\n body.appendChild(\n renderValue(snapshotValue(err))\n );\n\n errEntry.appendChild(body);\n\n el.consOut().appendChild(errEntry);\n }\n\n input.value = '';\n\n if (S.settings.autoScroll) {\n el.consOut().scrollTop =\n el.consOut().scrollHeight;\n }\n\n switchTab('console');\n }\n\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') {\n execute();\n return;\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n\n S.replHistoryIdx =\n Math.min(\n S.replHistoryIdx + 1,\n S.replHistory.length - 1\n );\n\n input.value =\n S.replHistory[S.replHistoryIdx] || '';\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n\n S.replHistoryIdx =\n Math.max(\n S.replHistoryIdx - 1,\n -1\n );\n\n input.value =\n S.replHistoryIdx >= 0\n ? S.replHistory[S.replHistoryIdx]\n : '';\n }\n });\n\n const runBtn =\n document.getElementById('repl-run');\n\n if (runBtn) {\n runBtn.addEventListener(\n 'click',\n execute\n );\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 21. EVENT WIRING\n // ═══════════════════════════════════════════════════════════════\n\n document\n .getElementById('dc-fab')\n .addEventListener(\n 'click',\n togglePanel\n );\n\n document\n .getElementById('dc-minimize-btn')\n .addEventListener(\n 'click',\n togglePanel\n );\n\n document.querySelectorAll('.dc-tab')\n .forEach(btn => {\n btn.addEventListener(\n 'click',\n () => switchTab(btn.dataset.tab)\n );\n });\n\n document\n .getElementById('dc-clear-btn')\n .addEventListener(\n 'click',\n () => {\n switch(S.activeTab) {\n case 'console':\n S.logs = [];\n S.groupDepth = 0;\n clearPersistentBuffer();\n updateTabCount('console', 0);\n renderConsole();\n break;\n\n case 'network':\n S.network = [];\n clearPersistentBuffer();\n updateTabCount('network', 0);\n renderNetwork();\n break;\n\n default:\n break;\n }\n }\n );\n\n document\n .getElementById('dc-copy-btn')\n .addEventListener(\n 'click',\n () => {\n let text = '';\n\n if (S.activeTab === 'console') {\n text = S.logs\n .map(l =>\n `[${l.ts}] [${String(l.type).toUpperCase()}] ${formatLogForCopy(l)}`\n )\n .join('\\n');\n }\n\n else if (S.activeTab === 'network') {\n text = S.network\n .map(r =>\n `[${r.ts}] ${r.method} ${r.url} → ` +\n `${r.status || 'ERR'} (${r.duration}ms)` +\n (r.requestBody\n ? `\\nRequest: ${r.requestBody}`\n : '') +\n (r.responseBody\n ? `\\nResponse: ${r.responseBody}`\n : '')\n )\n .join('\\n\\n');\n }\n\n if (!text) return;\n\n if (\n navigator.clipboard &&\n navigator.clipboard.writeText\n ) {\n navigator.clipboard\n .writeText(text)\n .catch(() => {});\n }\n }\n );\n\n function formatLogForCopy(log) {\n if (log.type === 'table' && log.table) {\n try {\n return JSON.stringify(log.table, null, 2);\n } catch(e) {}\n }\n\n return (log.args || [])\n .map(snapshotToText)\n .join(' ');\n }\n\n function snapshotToText(value) {\n if (!value) return '';\n\n switch(value.kind) {\n case 'string':\n return `\"${value.value}\"`;\n\n case 'null':\n case 'undefined':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n case 'function':\n return String(value.value ?? value.kind);\n\n case 'date':\n case 'regexp':\n case 'circular':\n return String(value.value || `[${value.kind}]`);\n\n case 'error':\n return `${value.ctor}: ${value.message}`;\n\n case 'array':\n case 'object':\n try {\n return JSON.stringify(value, null, 2);\n } catch(e) {\n return '[Object]';\n }\n\n default:\n return '[Unknown]';\n }\n }\n\n // Network filter\n el.netFlt().addEventListener(\n 'input',\n e => renderNetwork(e.target.value)\n );\n\n document\n .getElementById('net-clear')\n .addEventListener(\n 'click',\n () => {\n S.network = [];\n clearPersistentBuffer();\n updateTabCount('network', 0);\n renderNetwork();\n }\n );\n\n // Storage sub-tabs\n document.querySelectorAll('.dc-st-btn')\n .forEach(btn => {\n btn.addEventListener(\n 'click',\n () => {\n S.activeStorage =\n btn.dataset.storage;\n\n document\n .querySelectorAll('.dc-st-btn')\n .forEach(b =>\n b.classList.toggle(\n 'active',\n b === btn\n )\n );\n\n renderStorage();\n }\n );\n });\n\n document\n .getElementById('storage-refresh')\n .addEventListener(\n 'click',\n loadStorage\n );\n\n // DOM toolbar\n document\n .getElementById('dom-refresh-btn')\n .addEventListener(\n 'click',\n renderDomTree\n );\n\n document\n .getElementById('dom-pick-btn')\n .addEventListener(\n 'click',\n () => {\n S.isPicking\n ? stopPicking()\n : startPicking();\n }\n );\n\n document\n .getElementById('dom-collapse-btn')\n .addEventListener(\n 'click',\n () => {\n document\n .querySelectorAll('.dc-children.open')\n .forEach(c =>\n c.classList.remove('open')\n );\n\n document\n .querySelectorAll('.dc-arrow')\n .forEach(a => {\n if (a.textContent === '▼') {\n a.textContent = '▶';\n }\n });\n }\n );\n\n // ═══════════════════════════════════════════════════════════════\n // 22. SPA NAVIGATION WATCHER\n // ═══════════════════════════════════════════════════════════════\n\n let _lastUrl = location.href;\n\n setInterval(() => {\n if (location.href !== _lastUrl) {\n _lastUrl = location.href;\n\n addLog(\n 'info',\n ['🔄 SPA navigation detected:', location.href]\n );\n }\n }, 1000);\n\n // ═══════════════════════════════════════════════════════════════\n // 23. INIT\n // ═══════════════════════════════════════════════════════════════\n\n initRepl();\n\n renderConsole();\n\n /*\n * Only generate the startup entry for a genuinely new session.\n * If persisted entries were restored, the separator is more useful\n * than another generic startup log.\n */\n if (!S.logs.length) {\n addLog(\n 'log',\n [`✅ INSIKT v${VERSION} loaded — click ⌥ to open`]\n );\n } else {\n /*\n * Mark all restored entries and then add a new live entry.\n * renderConsole() will place the separator between them.\n */\n S.logs.forEach(log => {\n log.restored = true;\n });\n\n addLog(\n 'info',\n [`🔄 INSIKT v${VERSION} resumed after reload`]\n );\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 24. PUBLIC API\n // ═══════════════════════════════════════════════════════════════\n\n window.insikt = {\n version: VERSION,\n\n toggle: togglePanel,\n\n clear: window.__dcClearAll,\n\n init: () => {\n /*\n * Already initialized automatically.\n * Kept for API compatibility.\n */\n },\n\n destroy: () => {\n const fab = el.fab();\n const panel = el.panel();\n\n if (fab) fab.remove();\n if (panel) panel.remove();\n\n ['log','warn','error','info','table','group','groupCollapsed','groupEnd']\n .forEach(level => {\n if (_orig[level]) {\n console[level] = _orig[level];\n }\n });\n\n if (_origFetch) {\n window.fetch = _origFetch;\n }\n\n XMLHttpRequest.prototype.open = _origOpen;\n XMLHttpRequest.prototype.send = _origSend;\n XMLHttpRequest.prototype.setRequestHeader =\n _origSetRequestHeader;\n\n window.onerror = _origOnError;\n\n window.removeEventListener(\n 'unhandledrejection',\n onUnhandledRejection\n );\n\n stopPicking();\n\n if (style && style.parentNode) {\n style.parentNode.removeChild(style);\n }\n\n delete window.__dcToggleReq;\n delete window.__dcToggleDb;\n delete window.__dcToggleStore;\n delete window.__dcClearAll;\n\n delete window.insikt;\n }\n };\n\n})();\n"],"names":["result","limit","s","body"],"mappings":"CAAC,WAAW;AASV,QAAM,UAAU;AAChB,QAAM,aAAa;AACnB,QAAM,eAAe;AACrB,QAAM,qBAAqB,KAAK;AAMhC,QAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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"}