@hanzo/browser-extension 1.7.5 → 1.9.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/LICENSE +9 -18
  2. package/dist/browser-extension/README.md +1 -1
  3. package/dist/browser-extension/background-firefox.js +4184 -491
  4. package/dist/browser-extension/background.js +6938 -2413
  5. package/dist/browser-extension/browser-control.js +652 -18
  6. package/dist/browser-extension/chrome/background.js +6938 -2413
  7. package/dist/browser-extension/chrome/content-script.js +1642 -123
  8. package/dist/browser-extension/chrome/icon128.png +0 -0
  9. package/dist/browser-extension/chrome/icon16.png +0 -0
  10. package/dist/browser-extension/chrome/icon48.png +0 -0
  11. package/dist/browser-extension/chrome/manifest.json +20 -11
  12. package/dist/browser-extension/chrome/popup.css +352 -110
  13. package/dist/browser-extension/chrome/popup.html +159 -48
  14. package/dist/browser-extension/chrome/popup.js +1418 -46
  15. package/dist/browser-extension/chrome/sidebar.css +772 -156
  16. package/dist/browser-extension/chrome/sidebar.html +268 -85
  17. package/dist/browser-extension/chrome/sidebar.js +25846 -84
  18. package/dist/browser-extension/cli.js +2 -2
  19. package/dist/browser-extension/content-script.js +1642 -123
  20. package/dist/browser-extension/firefox/background.js +4184 -491
  21. package/dist/browser-extension/firefox/content-script.js +1642 -123
  22. package/dist/browser-extension/firefox/icon128.png +0 -0
  23. package/dist/browser-extension/firefox/icon16.png +0 -0
  24. package/dist/browser-extension/firefox/icon48.png +0 -0
  25. package/dist/browser-extension/firefox/manifest.json +24 -13
  26. package/dist/browser-extension/firefox/popup.css +352 -110
  27. package/dist/browser-extension/firefox/popup.html +159 -48
  28. package/dist/browser-extension/firefox/popup.js +1418 -46
  29. package/dist/browser-extension/firefox/sidebar.css +772 -156
  30. package/dist/browser-extension/firefox/sidebar.html +268 -85
  31. package/dist/browser-extension/firefox/sidebar.js +25846 -84
  32. package/dist/browser-extension/icon128.png +0 -0
  33. package/dist/browser-extension/icon16.png +0 -0
  34. package/dist/browser-extension/icon48.png +0 -0
  35. package/dist/browser-extension/manifest.json +20 -11
  36. package/dist/browser-extension/package.json +1 -1
  37. package/dist/browser-extension/popup.js +1418 -46
  38. package/dist/browser-extension/safari/Info.plist +3 -3
  39. package/dist/browser-extension/safari/background.js +6938 -2413
  40. package/dist/browser-extension/safari/content-script.js +1642 -123
  41. package/dist/browser-extension/safari/icon128.png +0 -0
  42. package/dist/browser-extension/safari/icon16.png +0 -0
  43. package/dist/browser-extension/safari/icon48.png +0 -0
  44. package/dist/browser-extension/safari/popup.css +352 -110
  45. package/dist/browser-extension/safari/popup.html +159 -48
  46. package/dist/browser-extension/safari/popup.js +1418 -46
  47. package/dist/browser-extension/safari/sidebar.css +772 -156
  48. package/dist/browser-extension/safari/sidebar.html +268 -85
  49. package/dist/browser-extension/safari/sidebar.js +25846 -84
  50. package/dist/browser-extension/sidebar.js +25846 -84
  51. package/dist/browser-extension/webgpu-ai.js +78 -5
  52. package/images/icon128.png +0 -0
  53. package/images/icon16.png +0 -0
  54. package/images/icon48.png +0 -0
  55. package/manifest.json +7 -2
  56. package/package.json +27 -10
  57. package/src/chat-widget.tsx +96 -0
  58. package/src/gui-primitives.tsx +116 -0
  59. package/src/icon128.png +0 -0
  60. package/src/icon16.png +0 -0
  61. package/src/icon32.png +0 -0
  62. package/src/icon48.png +0 -0
  63. package/src/manifest-firefox.json +23 -12
  64. package/src/manifest.json +19 -10
  65. package/src/package.json +1 -1
  66. package/src/popup.css +352 -110
  67. package/src/popup.html +159 -48
  68. package/src/popup.js +196 -0
  69. package/src/sidebar.css +772 -156
  70. package/src/sidebar.html +268 -85
  71. package/src/sidebar.js +885 -0
  72. package/.github/workflows/docs.yml +0 -44
  73. package/.github/workflows/release.yml +0 -55
  74. package/README.md +0 -126
  75. package/dist/browser-extension/ai-worker.js +0 -30
  76. package/dist/browser-extension/cdp-bridge-server.js +0 -444
  77. package/dist/browser-extension/chrome/icon32.png +0 -0
  78. package/dist/browser-extension/firefox/icon32.png +0 -0
  79. package/dist/browser-extension/hanzo-browser-extension-firefox-1.1.0.zip +0 -0
  80. package/dist/browser-extension/icon32.png +0 -0
  81. package/dist/browser-extension/popup.css +0 -468
  82. package/dist/browser-extension/popup.html +0 -191
  83. package/dist/browser-extension/safari/icon32.png +0 -0
  84. package/dist/browser-extension/sidebar.css +0 -718
  85. package/dist/browser-extension/sidebar.html +0 -184
  86. package/dist/cdp-bridge-server.js +0 -411
  87. package/dist/hanzo-ai-chrome-1.7.2.zip +0 -0
  88. package/dist/hanzo-ai-chrome-1.7.3.zip +0 -0
  89. package/dist/hanzo-ai-firefox-1.7.2.zip +0 -0
  90. package/dist/hanzo-ai-firefox-1.7.3.zip +0 -0
  91. package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.pbxproj +0 -1047
  92. package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  93. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  94. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  95. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png +0 -0
  96. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png +0 -0
  97. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png +0 -0
  98. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png +0 -0
  99. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png +0 -0
  100. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png +0 -0
  101. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png +0 -0
  102. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png +0 -0
  103. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png +0 -0
  104. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png +0 -0
  105. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/universal-icon-1024@1x.png +0 -0
  106. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/Contents.json +0 -6
  107. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/Contents.json +0 -21
  108. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/icon128.png +0 -0
  109. package/dist/safari/Hanzo AI/Shared (App)/Resources/Base.lproj/Main.html +0 -20
  110. package/dist/safari/Hanzo AI/Shared (App)/Resources/Icon.png +0 -0
  111. package/dist/safari/Hanzo AI/Shared (App)/Resources/Script.js +0 -24
  112. package/dist/safari/Hanzo AI/Shared (App)/Resources/Style.css +0 -61
  113. package/dist/safari/Hanzo AI/Shared (App)/ViewController.swift +0 -81
  114. package/dist/safari/Hanzo AI/Shared (Extension)/SafariWebExtensionHandler.swift +0 -42
  115. package/dist/safari/Hanzo AI/iOS (App)/AppDelegate.swift +0 -24
  116. package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/LaunchScreen.storyboard +0 -36
  117. package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/Main.storyboard +0 -38
  118. package/dist/safari/Hanzo AI/iOS (App)/Info.plist +0 -27
  119. package/dist/safari/Hanzo AI/iOS (App)/SceneDelegate.swift +0 -18
  120. package/dist/safari/Hanzo AI/iOS (Extension)/Info.plist +0 -13
  121. package/dist/safari/Hanzo AI/macOS (App)/AppDelegate.swift +0 -21
  122. package/dist/safari/Hanzo AI/macOS (App)/Base.lproj/Main.storyboard +0 -124
  123. package/dist/safari/Hanzo AI/macOS (App)/Info.plist +0 -8
  124. package/dist/safari/Hanzo AI/macOS (Extension)/Info.plist +0 -13
  125. package/docs/_config.yml +0 -13
  126. package/docs/_layouts/default.html +0 -435
  127. package/docs/index.md +0 -54
  128. package/install-extension.sh +0 -75
  129. package/test/claude-integration.test.ts +0 -251
  130. package/test/server-frameworks-edge-cases.test.ts +0 -145
  131. package/test/server-frameworks.test.ts +0 -395
  132. package/test-cdp-connection.js +0 -140
  133. package/tsconfig.json +0 -19
@@ -20,48 +20,132 @@
20
20
  </header>
21
21
 
22
22
  <!-- Login Section -->
23
- <div id="login-section" class="section">
24
- <h2>Sign In</h2>
25
- <p class="subtitle">Connect to your Hanzo AI account</p>
26
- <button id="login-btn" class="btn btn-primary">Sign in with Hanzo</button>
27
- <p class="help-text">
28
- <a href="https://hanzo.id/register" target="_blank">Create account</a> •
29
- <a href="https://hanzo.id/forgot" target="_blank">Forgot password?</a>
30
- </p>
23
+ <div id="login-section" class="section login-section">
24
+ <div class="login-card">
25
+ <svg class="login-logo" viewBox="0 0 67 67" xmlns="http://www.w3.org/2000/svg">
26
+ <path d="M22.21 67V44.6369H0V67H22.21Z" fill="currentColor"/>
27
+ <path d="M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z" fill="currentColor"/>
28
+ <path d="M22.21 0H0V22.3184H22.21V0Z" fill="currentColor"/>
29
+ <path d="M66.7198 0H44.5098V22.3184H66.7198V0Z" fill="currentColor"/>
30
+ <path d="M66.7198 67V44.6369H44.5098V67H66.7198Z" fill="currentColor"/>
31
+ </svg>
32
+ <h2 class="login-headline">Sign in to Hanzo AI</h2>
33
+ <p class="login-sub">Chat with AI, use browser tools, and build with agents.</p>
34
+ <button id="login-btn" class="login-signin-btn">Sign In</button>
35
+ <button id="signup-btn-popup" class="login-create-btn">Create account</button>
36
+ <p class="login-note">
37
+ Browser tools work without sign-in. <a href="https://docs.hanzo.ai" target="_blank">Learn more</a>
38
+ </p>
39
+ </div>
31
40
  </div>
32
41
 
33
42
  <!-- Main Section (shown after login) -->
34
43
  <div id="main-section" class="section hidden">
35
- <div class="user-info">
36
- <img id="user-avatar" class="avatar" src="" alt="">
37
- <div>
38
- <div id="user-name" class="user-name"></div>
39
- <div id="user-email" class="user-email"></div>
44
+ <div id="user-info-section" class="hidden">
45
+ <div class="user-info">
46
+ <img id="user-avatar" class="avatar" src="" alt="">
47
+ <div>
48
+ <div id="user-name" class="user-name"></div>
49
+ <div id="user-email" class="user-email"></div>
50
+ </div>
51
+ <button id="logout-btn" class="btn-icon" title="Sign out">
52
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor">
53
+ <path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9"/>
54
+ </svg>
55
+ </button>
40
56
  </div>
41
- <button id="logout-btn" class="btn-icon" title="Sign out">
42
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor">
43
- <path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9"/>
44
- </svg>
45
- </button>
57
+ <div class="divider"></div>
46
58
  </div>
47
59
 
48
- <div class="divider"></div>
49
-
50
- <!-- Open Chat Panel -->
51
- <button id="open-panel" class="btn btn-primary" style="margin-bottom: 16px;">
60
+ <!-- Actions: single Open Chat button + on-page surface settings. -->
61
+ <button id="open-panel" class="btn btn-secondary" style="margin-bottom: 8px;">
52
62
  <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor">
53
63
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
54
64
  </svg>
55
- Open Chat Panel
56
- </button>
57
- <button id="open-page-overlay" class="btn btn-secondary" style="margin-bottom: 16px;">
58
- <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor">
59
- <path d="M4 4h16v12H8l-4 4V4z"/>
60
- </svg>
61
- Toggle On-Page Overlay
65
+ Open Chat
62
66
  </button>
63
67
 
68
+ <!-- On-page chat config -->
69
+ <div class="onpage-config" style="display:flex;flex-direction:column;gap:6px;margin-bottom:12px;font-size:11px;">
70
+ <div class="feature-toggle" style="display:flex;justify-content:space-between;align-items:center;">
71
+ <label style="display:flex;align-items:center;gap:6px;cursor:pointer;">
72
+ <input type="checkbox" id="overlay-enabled" checked>
73
+ <span>On-page chat panel</span>
74
+ </label>
75
+ <span style="color:var(--text-muted,#888);font-size:10px;">overlay vs new tab</span>
76
+ </div>
77
+
78
+ <div id="overlay-side-row" class="side-picker" style="display:flex;gap:6px;align-items:center;">
79
+ <span style="color:var(--text-muted,#888);">Pin:</span>
80
+ <button id="pin-left" class="btn btn-ghost" style="flex:1;padding:4px 8px;font-size:11px;">Left</button>
81
+ <button id="pin-right" class="btn btn-ghost" style="flex:1;padding:4px 8px;font-size:11px;" data-active="true">Right</button>
82
+ </div>
83
+
84
+ <div id="overlay-width-row" style="display:flex;gap:6px;align-items:center;">
85
+ <span style="color:var(--text-muted,#888);">Width:</span>
86
+ <button class="btn btn-ghost width-btn" data-width="compact" style="flex:1;padding:4px 8px;font-size:11px;">Compact</button>
87
+ <button class="btn btn-ghost width-btn" data-width="default" style="flex:1;padding:4px 8px;font-size:11px;" data-active="true">Default</button>
88
+ <button class="btn btn-ghost width-btn" data-width="wide" style="flex:1;padding:4px 8px;font-size:11px;">Wide</button>
89
+ </div>
90
+
91
+ <span style="color:var(--text-muted,#888);font-size:10px;line-height:1.4;">
92
+ FF native sidebar: View → Sidebar → Hanzo AI.<br>
93
+ Disable to fall back to a standalone tab — useful on sites with strict CSP.
94
+ </span>
95
+ </div>
96
+
97
+ <div class="divider"></div>
98
+
99
+ <!-- Tools -->
100
+ <h3>Tools</h3>
101
+ <div class="tools-grid">
102
+ <button id="tool-picker" class="tool-btn" title="Pick an element on the page">
103
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
104
+ <path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"/>
105
+ <path d="M13 13l6 6"/>
106
+ </svg>
107
+ <span>Selector</span>
108
+ </button>
109
+ <button id="tool-screenshot" class="tool-btn" title="Capture visible page">
110
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
111
+ <path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/>
112
+ <circle cx="12" cy="13" r="4"/>
113
+ </svg>
114
+ <span>Screenshot</span>
115
+ </button>
116
+ <button id="tool-pageinfo" class="tool-btn" title="Copy page info to clipboard">
117
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
118
+ <circle cx="12" cy="12" r="10"/>
119
+ <path d="M12 16v-4M12 8h.01"/>
120
+ </svg>
121
+ <span>Page Info</span>
122
+ </button>
123
+ <button id="tool-accessibility" class="tool-btn" title="Run accessibility audit">
124
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
125
+ <circle cx="12" cy="4" r="2"/>
126
+ <path d="M12 6v6M8 8l4 2 4-2M8 22l2-6h4l2 6"/>
127
+ </svg>
128
+ <span>A11y Audit</span>
129
+ </button>
130
+ <button id="tool-performance" class="tool-btn" title="Run performance audit">
131
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
132
+ <path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/>
133
+ </svg>
134
+ <span>Perf Audit</span>
135
+ </button>
136
+ <button id="tool-console" class="tool-btn" title="Evaluate JS in page context">
137
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
138
+ <polyline points="4 17 10 11 4 5"/>
139
+ <line x1="12" y1="19" x2="20" y2="19"/>
140
+ </svg>
141
+ <span>Console</span>
142
+ </button>
143
+ </div>
144
+
145
+ <div class="divider"></div>
146
+
64
147
  <!-- Features -->
148
+ <h3>Features</h3>
65
149
  <div class="features">
66
150
  <div class="feature-toggle">
67
151
  <label>
@@ -112,7 +196,7 @@
112
196
 
113
197
  <!-- Browser Backend -->
114
198
  <div class="setting-group backend-picker">
115
- <h3>Browser Backend</h3>
199
+ <h3>Backend</h3>
116
200
  <div class="backend-select-wrapper">
117
201
  <select id="browser-backend">
118
202
  <option value="auto">Auto (default)</option>
@@ -131,22 +215,23 @@
131
215
  <div class="divider"></div>
132
216
 
133
217
  <!-- Connection Status -->
218
+ <h3>Status</h3>
134
219
  <div class="status">
135
220
  <div class="status-item">
136
221
  <span class="status-dot" id="zap-status"></span>
137
- <span>ZAP Protocol</span>
222
+ <span>ZAP Bridge</span>
138
223
  <span id="zap-detail" class="status-detail">Discovering...</span>
139
224
  </div>
140
- <div class="status-item">
141
- <span class="status-dot" id="mcp-status"></span>
142
- <span>MCP Server</span>
143
- <span id="mcp-port" class="status-detail">Fallback</span>
144
- </div>
145
225
  <div class="status-item">
146
226
  <span class="status-dot" id="cdp-status"></span>
147
227
  <span>CDP Bridge</span>
148
228
  <span id="cdp-detail" class="status-detail">Checking...</span>
149
229
  </div>
230
+ <div class="status-item">
231
+ <span class="status-dot" id="mcp-status"></span>
232
+ <span>MCP Bridge</span>
233
+ <span id="mcp-port" class="status-detail">:9224</span>
234
+ </div>
150
235
  <div class="status-item">
151
236
  <span class="status-dot" id="gpu-status"></span>
152
237
  <span>WebGPU</span>
@@ -158,15 +243,19 @@
158
243
 
159
244
  <!-- Actions -->
160
245
  <div class="actions">
161
- <button id="test-connection" class="btn btn-secondary">Test Connection</button>
162
- <button id="open-settings" class="btn btn-secondary">Settings</button>
246
+ <button id="test-connection" class="btn btn-ghost">Test Connection</button>
247
+ <button id="open-settings" class="btn btn-ghost">Settings</button>
163
248
  </div>
164
249
 
165
250
  <!-- Quick Guide -->
166
- <div class="guide" style="margin-top: 16px;">
167
- <h3>Quick Guide</h3>
168
- <p><kbd>Alt</kbd> + <kbd>Click</kbd> any element to navigate to source</p>
169
- <p><kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd> to open Hanzo AI panel</p>
251
+ <div class="guide" style="margin-top: 12px;">
252
+ <h3 style="text-transform: none; letter-spacing: 0; color: var(--text);">Shortcuts</h3>
253
+ <p>
254
+ <kbd id="inspect-shortcut-display">Ctrl</kbd> + <kbd>Click</kbd>
255
+ any element to jump to source
256
+ <button id="record-inspect-shortcut" class="btn-link" style="margin-left:6px;font-size:11px;">edit</button>
257
+ </p>
258
+ <p><kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd> open Hanzo panel</p>
170
259
  </div>
171
260
  </div>
172
261
 
@@ -226,15 +315,37 @@
226
315
  </label>
227
316
  </div>
228
317
 
229
- <button id="save-settings" class="btn btn-primary">Save Settings</button>
318
+ <div class="setting-group">
319
+ <h3>Keyboard</h3>
320
+ <label>
321
+ Inspect modifier
322
+ <div style="display:flex;gap:8px;align-items:center;margin-top:4px;">
323
+ <kbd id="inspect-shortcut-current" style="flex:1;font-family:monospace;padding:4px 8px;background:var(--surface-2,#222);border-radius:4px;font-size:12px;">Ctrl</kbd>
324
+ <button id="inspect-shortcut-record" type="button" class="btn btn-ghost" style="padding:4px 10px;">Record</button>
325
+ <button id="inspect-shortcut-reset" type="button" class="btn btn-ghost" style="padding:4px 10px;">Reset</button>
326
+ </div>
327
+ <small style="color:var(--text-muted,#888);font-size:11px;">
328
+ Hold + click any element on a page to jump to its source. Default
329
+ is Ctrl (or ⌘ on Mac). Click "Record" then press the chord you
330
+ want — modifiers alone or modifier+letter both work.
331
+ </small>
332
+ </label>
333
+ </div>
230
334
 
231
- <p class="help-text" style="margin-top: 16px;">
232
- <a href="https://console.hanzo.ai" target="_blank">Console</a> •
233
- <a href="https://billing.hanzo.ai" target="_blank">Billing</a> •
234
- <a href="https://docs.hanzo.ai" target="_blank">Docs</a>
235
- </p>
335
+ <button id="save-settings" class="btn btn-primary">Save Settings</button>
236
336
  </div>
237
337
  </div>
338
+
339
+ <!-- Footer: version + nav links -->
340
+ <div class="footer-version" style="text-align:center;font-size:10px;color:var(--text-muted,#888);margin-top:14px;letter-spacing:0.04em;">
341
+ Hanzo AI <span id="footer-version">…</span>
342
+ </div>
343
+ <div class="footer-links">
344
+ <a href="https://docs.hanzo.ai" target="_blank">Docs</a>
345
+ <a href="https://console.hanzo.ai" target="_blank">Console</a>
346
+ <a href="https://github.com/hanzoai/extension" target="_blank">GitHub</a>
347
+ <a href="https://hanzo.ai" target="_blank">hanzo.ai</a>
348
+ </div>
238
349
  </div>
239
350
 
240
351
  <script src="popup.js"></script>