@hexclave/next 1.0.13 → 1.0.15

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 (189) hide show
  1. package/dist/clickmap/clickmap-core.d.ts +15 -0
  2. package/dist/clickmap/clickmap-core.d.ts.map +1 -0
  3. package/dist/clickmap/clickmap-core.js +1527 -0
  4. package/dist/clickmap/clickmap-core.js.map +1 -0
  5. package/dist/clickmap/clickmap-styles.d.ts +5 -0
  6. package/dist/clickmap/clickmap-styles.d.ts.map +1 -0
  7. package/dist/clickmap/clickmap-styles.js +1095 -0
  8. package/dist/clickmap/clickmap-styles.js.map +1 -0
  9. package/dist/clickmap/index.d.ts +16 -0
  10. package/dist/clickmap/index.d.ts.map +1 -0
  11. package/dist/clickmap/index.js +74 -0
  12. package/dist/clickmap/index.js.map +1 -0
  13. package/dist/components/api-key-dialogs.js +2 -2
  14. package/dist/components/credential-sign-in.js +1 -1
  15. package/dist/components/credential-sign-up.js +1 -1
  16. package/dist/components/magic-link-sign-in.js +1 -1
  17. package/dist/components/message-cards/known-error-message-card.d.ts +1 -1
  18. package/dist/components/team-switcher.js +1 -1
  19. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
  20. package/dist/components-page/account-settings/email-and-auth/emails-section.js +1 -1
  21. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
  22. package/dist/components-page/account-settings/email-and-auth/password-section.js +1 -1
  23. package/dist/components-page/account-settings/teams/team-creation-page.js +1 -1
  24. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +1 -1
  25. package/dist/components-page/auth-page.js +1 -1
  26. package/dist/components-page/cli-auth-confirm.js +1 -1
  27. package/dist/components-page/cli-auth-confirm.test.js +1 -1
  28. package/dist/components-page/forgot-password.d.ts.map +1 -1
  29. package/dist/components-page/forgot-password.js +2 -3
  30. package/dist/components-page/forgot-password.js.map +1 -1
  31. package/dist/components-page/hexclave-handler-client.d.ts +1 -1
  32. package/dist/components-page/mfa.js +4 -19
  33. package/dist/components-page/mfa.js.map +1 -1
  34. package/dist/components-page/oauth-callback.js +1 -1
  35. package/dist/components-page/onboarding.js +1 -1
  36. package/dist/components-page/password-reset.d.ts.map +1 -1
  37. package/dist/components-page/password-reset.js +5 -7
  38. package/dist/components-page/password-reset.js.map +1 -1
  39. package/dist/components-page/team-creation.js +1 -1
  40. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
  41. package/dist/dev-tool/dev-tool-core.js +258 -262
  42. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  43. package/dist/dev-tool/dev-tool-styles.d.ts +1 -1
  44. package/dist/dev-tool/dev-tool-styles.d.ts.map +1 -1
  45. package/dist/dev-tool/dev-tool-styles.js +13 -143
  46. package/dist/dev-tool/dev-tool-styles.js.map +1 -1
  47. package/dist/dev-tool/index.d.ts.map +1 -1
  48. package/dist/dev-tool/index.js +5 -12
  49. package/dist/dev-tool/index.js.map +1 -1
  50. package/dist/esm/clickmap/clickmap-core.d.ts +15 -0
  51. package/dist/esm/clickmap/clickmap-core.d.ts.map +1 -0
  52. package/dist/esm/clickmap/clickmap-core.js +1525 -0
  53. package/dist/esm/clickmap/clickmap-core.js.map +1 -0
  54. package/dist/esm/clickmap/clickmap-styles.d.ts +5 -0
  55. package/dist/esm/clickmap/clickmap-styles.d.ts.map +1 -0
  56. package/dist/esm/clickmap/clickmap-styles.js +1093 -0
  57. package/dist/esm/clickmap/clickmap-styles.js.map +1 -0
  58. package/dist/esm/clickmap/index.d.ts +16 -0
  59. package/dist/esm/clickmap/index.d.ts.map +1 -0
  60. package/dist/esm/clickmap/index.js +72 -0
  61. package/dist/esm/clickmap/index.js.map +1 -0
  62. package/dist/esm/components/api-key-dialogs.js +2 -2
  63. package/dist/esm/components/credential-sign-in.js +1 -1
  64. package/dist/esm/components/credential-sign-up.js +1 -1
  65. package/dist/esm/components/magic-link-sign-in.js +1 -1
  66. package/dist/esm/components/team-switcher.js +1 -1
  67. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
  68. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +1 -1
  69. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
  70. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +1 -1
  71. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +1 -1
  72. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +1 -1
  73. package/dist/esm/components-page/auth-page.js +1 -1
  74. package/dist/esm/components-page/cli-auth-confirm.js +1 -1
  75. package/dist/esm/components-page/cli-auth-confirm.test.js +1 -1
  76. package/dist/esm/components-page/forgot-password.d.ts.map +1 -1
  77. package/dist/esm/components-page/forgot-password.js +2 -3
  78. package/dist/esm/components-page/forgot-password.js.map +1 -1
  79. package/dist/esm/components-page/hexclave-handler-client.d.ts +1 -1
  80. package/dist/esm/components-page/mfa.js +4 -19
  81. package/dist/esm/components-page/mfa.js.map +1 -1
  82. package/dist/esm/components-page/oauth-callback.js +1 -1
  83. package/dist/esm/components-page/onboarding.js +1 -1
  84. package/dist/esm/components-page/password-reset.d.ts.map +1 -1
  85. package/dist/esm/components-page/password-reset.js +5 -7
  86. package/dist/esm/components-page/password-reset.js.map +1 -1
  87. package/dist/esm/components-page/team-creation.js +1 -1
  88. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
  89. package/dist/esm/dev-tool/dev-tool-core.js +35 -39
  90. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  91. package/dist/esm/dev-tool/dev-tool-styles.d.ts +1 -1
  92. package/dist/esm/dev-tool/dev-tool-styles.d.ts.map +1 -1
  93. package/dist/esm/dev-tool/dev-tool-styles.js +13 -143
  94. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
  95. package/dist/esm/dev-tool/index.d.ts.map +1 -1
  96. package/dist/esm/dev-tool/index.js +2 -9
  97. package/dist/esm/dev-tool/index.js.map +1 -1
  98. package/dist/esm/generated/global-css.d.ts +1 -1
  99. package/dist/esm/generated/global-css.js +1 -1
  100. package/dist/esm/generated/global-css.js.map +1 -1
  101. package/dist/esm/generated/quetzal-translations.d.ts +2 -2
  102. package/dist/esm/in-page-ui/base-styles.d.ts +5 -0
  103. package/dist/esm/in-page-ui/base-styles.d.ts.map +1 -0
  104. package/dist/esm/in-page-ui/base-styles.js +166 -0
  105. package/dist/esm/in-page-ui/base-styles.js.map +1 -0
  106. package/dist/esm/in-page-ui/dom.d.ts +15 -0
  107. package/dist/esm/in-page-ui/dom.d.ts.map +1 -0
  108. package/dist/esm/in-page-ui/dom.js +44 -0
  109. package/dist/esm/in-page-ui/dom.js.map +1 -0
  110. package/dist/esm/lib/auth.js +1 -1
  111. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +5 -1
  112. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  113. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js +20 -0
  114. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  115. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  116. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js +4 -2
  117. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  118. package/dist/esm/lib/hexclave-app/apps/implementations/common.js +2 -2
  119. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts +13 -0
  120. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -1
  121. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js +146 -14
  122. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -1
  123. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js +221 -0
  124. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -1
  125. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +1 -1
  126. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js +1 -1
  127. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js +1 -1
  128. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts +5 -0
  129. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -1
  130. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -1
  131. package/dist/esm/providers/theme-provider.js +1 -1
  132. package/dist/generated/global-css.d.ts +1 -1
  133. package/dist/generated/global-css.js +1 -1
  134. package/dist/generated/global-css.js.map +1 -1
  135. package/dist/generated/quetzal-translations.d.ts +2 -2
  136. package/dist/in-page-ui/base-styles.d.ts +5 -0
  137. package/dist/in-page-ui/base-styles.d.ts.map +1 -0
  138. package/dist/in-page-ui/base-styles.js +168 -0
  139. package/dist/in-page-ui/base-styles.js.map +1 -0
  140. package/dist/in-page-ui/dom.d.ts +15 -0
  141. package/dist/in-page-ui/dom.d.ts.map +1 -0
  142. package/dist/in-page-ui/dom.js +51 -0
  143. package/dist/in-page-ui/dom.js.map +1 -0
  144. package/dist/index.d.ts +1 -1
  145. package/dist/integrations/convex/component/convex.config.d.ts +1 -1
  146. package/dist/lib/auth.js +1 -1
  147. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +5 -1
  148. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  149. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js +20 -0
  150. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  151. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  152. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js +4 -2
  153. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  154. package/dist/lib/hexclave-app/apps/implementations/common.js +2 -2
  155. package/dist/lib/hexclave-app/apps/implementations/event-tracker.d.ts +13 -0
  156. package/dist/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -1
  157. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js +146 -14
  158. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -1
  159. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js +221 -0
  160. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -1
  161. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +1 -1
  162. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js +1 -1
  163. package/dist/lib/hexclave-app/apps/implementations/session-replay.js +1 -1
  164. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts +5 -0
  165. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -1
  166. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -1
  167. package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts +1 -1
  168. package/dist/lib/hexclave-app/common.d.ts +1 -1
  169. package/dist/providers/hexclave-provider-client.d.ts +1 -1
  170. package/dist/providers/theme-provider.js +1 -1
  171. package/dist/{storage-CKzvsBxG.d.ts → storage-ksajV_p6.d.ts} +1 -1
  172. package/dist/{storage-CKzvsBxG.d.ts.map → storage-ksajV_p6.d.ts.map} +1 -1
  173. package/package.json +4 -4
  174. package/src/clickmap/clickmap-core.ts +1997 -0
  175. package/src/clickmap/clickmap-styles.ts +1102 -0
  176. package/src/clickmap/index.ts +95 -0
  177. package/src/components-page/forgot-password.tsx +1 -2
  178. package/src/components-page/mfa.tsx +12 -21
  179. package/src/components-page/password-reset.tsx +4 -6
  180. package/src/dev-tool/dev-tool-core.ts +38 -65
  181. package/src/dev-tool/dev-tool-styles.ts +13 -142
  182. package/src/dev-tool/index.ts +1 -14
  183. package/src/in-page-ui/base-styles.ts +171 -0
  184. package/src/in-page-ui/dom.ts +80 -0
  185. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +23 -1
  186. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +7 -0
  187. package/src/lib/hexclave-app/apps/implementations/event-tracker.test.ts +287 -0
  188. package/src/lib/hexclave-app/apps/implementations/event-tracker.ts +226 -16
  189. package/src/lib/hexclave-app/apps/interfaces/admin-app.ts +3 -0
@@ -0,0 +1,1102 @@
1
+
2
+ //===========================================
3
+ // THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template
4
+ //===========================================
5
+ // CSS for the standalone clickmap overlay.
6
+ //
7
+ // The clickmap is fully independent from the dev tool: it ships its own
8
+ // stylesheet and panel chrome so the dev tool (and its stylesheet) can be
9
+ // removed without affecting the clickmap. Class names keep the shared `sdt-`
10
+ // prefix on purpose — the analytics ingest/query layers exclude self-clicks by
11
+ // that prefix (see @hexclave/shared/dist/utils/dev-tool).
12
+ // Uses the .hexclave-clickmap scope to avoid conflicts with host app styles.
13
+ // Design tokens + base reset come from the shared in-page-ui module.
14
+
15
+ import { getInPageUiBaseCSS } from "../in-page-ui/base-styles";
16
+
17
+ export const clickmapCSS = getInPageUiBaseCSS('.hexclave-clickmap') + `
18
+ /* Bottom-centered floating panel (the clickmap's only chrome) */
19
+ .hexclave-clickmap .sdt-hm-panel {
20
+ position: fixed;
21
+ left: 50%;
22
+ bottom: 18px;
23
+ z-index: 2147483647;
24
+ width: min(680px, calc(100vw - 24px));
25
+ max-width: calc(100vw - 24px);
26
+ max-height: calc(100vh - 36px);
27
+ transform: translateX(-50%);
28
+ display: flex;
29
+ flex-direction: column;
30
+ overflow: visible;
31
+ }
32
+
33
+ .hexclave-clickmap .sdt-hm-panel-inner {
34
+ display: flex;
35
+ flex-direction: column;
36
+ width: 100%;
37
+ animation: sdt-hm-panel-enter 0.2s ease-out;
38
+ }
39
+
40
+ @keyframes sdt-hm-panel-enter {
41
+ from {
42
+ opacity: 0;
43
+ transform: scale(0.95) translateY(8px);
44
+ }
45
+ to {
46
+ opacity: 1;
47
+ transform: scale(1) translateY(0);
48
+ }
49
+ }
50
+
51
+ /* --- Clickmaps --- */
52
+
53
+ .hexclave-clickmap .sdt-hm {
54
+ height: auto;
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: 8px;
58
+ overflow: visible;
59
+ background: transparent;
60
+ }
61
+
62
+ /* One spacing rhythm across the pill: a tight 2px base gap so adjacent
63
+ controls read as clusters, with the wider between-group separation
64
+ coming only from the metrics block's own padding (and the title's
65
+ trailing padding). Item-level whitespace inside ghost icon buttons
66
+ already provides the rest of the breathing room. */
67
+ .hexclave-clickmap .sdt-hm-toolbar {
68
+ position: relative;
69
+ z-index: 4;
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 2px;
73
+ min-height: 44px;
74
+ padding: 6px 8px;
75
+ border: 1px solid var(--sdt-border);
76
+ border-radius: 999px;
77
+ background: var(--sdt-overlay-bg);
78
+ box-shadow: 0 18px 48px rgba(0, 0, 0, 0.24);
79
+ backdrop-filter: blur(18px);
80
+ }
81
+
82
+ .hexclave-clickmap .sdt-hm-toolbar-title {
83
+ flex-shrink: 0;
84
+ padding: 0 6px 0 2px;
85
+ font-size: 13px;
86
+ font-weight: 650;
87
+ color: var(--sdt-text);
88
+ line-height: 1.1;
89
+ }
90
+
91
+ .hexclave-clickmap .sdt-hm-toolbar-filters {
92
+ flex: 1;
93
+ min-width: 0;
94
+ display: flex;
95
+ align-items: center;
96
+ gap: 6px;
97
+ }
98
+
99
+ .hexclave-clickmap .sdt-hm-toolbar-filters .sdt-hm-filter-input {
100
+ height: 28px;
101
+ border-radius: 999px;
102
+ font-size: 11.5px;
103
+ }
104
+
105
+ .hexclave-clickmap .sdt-hm-toolbar-filters > .sdt-hm-filter-input {
106
+ flex-shrink: 0;
107
+ width: auto;
108
+ max-width: 120px;
109
+ padding-right: 4px;
110
+ }
111
+
112
+ .hexclave-clickmap .sdt-hm-toolbar-url {
113
+ position: relative;
114
+ flex: 1;
115
+ min-width: 0;
116
+ display: flex;
117
+ align-items: center;
118
+ /* The revert/info ghost buttons hug the input they belong to. */
119
+ gap: 2px;
120
+ }
121
+
122
+ .hexclave-clickmap .sdt-hm-toolbar-url .sdt-hm-filter-input {
123
+ flex: 1;
124
+ }
125
+
126
+ .hexclave-clickmap .sdt-hm-mode {
127
+ flex-shrink: 0;
128
+ display: inline-flex;
129
+ align-items: center;
130
+ gap: 2px;
131
+ padding: 2px;
132
+ border-radius: 999px;
133
+ background: var(--sdt-bg-elevated);
134
+ border: 1px solid var(--sdt-border-subtle);
135
+ }
136
+
137
+ .hexclave-clickmap .sdt-hm-mode-btn {
138
+ min-width: 24px;
139
+ height: 20px;
140
+ display: inline-flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ border: 0;
144
+ border-radius: 999px;
145
+ background: transparent;
146
+ color: var(--sdt-text-tertiary);
147
+ padding: 0 7px;
148
+ font: inherit;
149
+ font-family: var(--sdt-font-mono, ui-monospace, monospace);
150
+ font-size: 11px;
151
+ font-weight: 600;
152
+ cursor: pointer;
153
+ }
154
+
155
+ .hexclave-clickmap .sdt-hm-mode-btn:not(.sdt-hm-mode-btn-active):hover {
156
+ color: var(--sdt-text);
157
+ }
158
+
159
+ .hexclave-clickmap .sdt-hm-mode-btn-active {
160
+ background: var(--sdt-accent);
161
+ color: white;
162
+ }
163
+
164
+ .hexclave-clickmap .sdt-hm-filter-input-error,
165
+ .hexclave-clickmap .sdt-hm-filter-input-error:focus {
166
+ border-color: var(--sdt-error);
167
+ }
168
+
169
+ .hexclave-clickmap .sdt-hm-filter-info {
170
+ flex-shrink: 0;
171
+ width: 20px;
172
+ height: 20px;
173
+ display: inline-flex;
174
+ align-items: center;
175
+ justify-content: center;
176
+ border: 0;
177
+ border-radius: 999px;
178
+ background: transparent;
179
+ color: var(--sdt-text-tertiary);
180
+ cursor: pointer;
181
+ padding: 0;
182
+ }
183
+
184
+ .hexclave-clickmap .sdt-hm-filter-info:hover,
185
+ .hexclave-clickmap .sdt-hm-filter-info[aria-expanded="true"] {
186
+ background: var(--sdt-bg-hover);
187
+ color: var(--sdt-text);
188
+ }
189
+
190
+ .hexclave-clickmap .sdt-hm-url-help {
191
+ display: none;
192
+ position: absolute;
193
+ bottom: calc(100% + 10px);
194
+ right: 0;
195
+ z-index: 6;
196
+ width: 320px;
197
+ max-width: min(320px, calc(100vw - 32px));
198
+ box-sizing: border-box;
199
+ padding: 14px;
200
+ border: 1px solid var(--sdt-border);
201
+ border-radius: var(--sdt-radius-lg);
202
+ background: var(--sdt-bg);
203
+ box-shadow: 0 18px 48px rgba(0, 0, 0, 0.28);
204
+ backdrop-filter: blur(18px);
205
+ cursor: default;
206
+ }
207
+
208
+ .hexclave-clickmap .sdt-hm-url-help-open {
209
+ display: block;
210
+ }
211
+
212
+ .hexclave-clickmap .sdt-hm-url-help-title {
213
+ font-size: 12px;
214
+ font-weight: 650;
215
+ color: var(--sdt-text);
216
+ margin-bottom: 6px;
217
+ }
218
+
219
+ .hexclave-clickmap .sdt-hm-url-help-body {
220
+ font-size: 11.5px;
221
+ line-height: 1.5;
222
+ color: var(--sdt-text-secondary);
223
+ }
224
+
225
+ .hexclave-clickmap .sdt-hm-url-help-rows {
226
+ display: flex;
227
+ flex-direction: column;
228
+ gap: 6px;
229
+ margin-top: 12px;
230
+ padding-top: 12px;
231
+ border-top: 1px solid var(--sdt-border-subtle);
232
+ }
233
+
234
+ .hexclave-clickmap .sdt-hm-url-help-row {
235
+ display: flex;
236
+ align-items: baseline;
237
+ gap: 10px;
238
+ }
239
+
240
+ .hexclave-clickmap .sdt-hm-url-help-code {
241
+ flex-shrink: 0;
242
+ border-radius: var(--sdt-radius);
243
+ background: var(--sdt-bg-elevated);
244
+ border: 1px solid var(--sdt-border-subtle);
245
+ padding: 1px 6px;
246
+ font-family: var(--sdt-font-mono, ui-monospace, monospace);
247
+ font-size: 11px;
248
+ color: var(--sdt-text);
249
+ white-space: nowrap;
250
+ }
251
+
252
+ .hexclave-clickmap .sdt-hm-url-help-desc {
253
+ font-size: 11px;
254
+ line-height: 1.4;
255
+ color: var(--sdt-text-secondary);
256
+ }
257
+
258
+ .hexclave-clickmap .sdt-hm-toolbar-metrics {
259
+ flex-shrink: 0;
260
+ display: flex;
261
+ align-items: center;
262
+ gap: 8px;
263
+ /* Side padding is what separates the metrics group from the url field
264
+ on its left and the toggle cluster on its right. */
265
+ padding: 0 8px;
266
+ }
267
+
268
+ .hexclave-clickmap .sdt-hm-toolbar-metric {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ gap: 4px;
272
+ color: var(--sdt-text-secondary);
273
+ }
274
+
275
+ .hexclave-clickmap .sdt-hm-toolbar-metric-value {
276
+ font-size: 12px;
277
+ font-weight: 700;
278
+ color: var(--sdt-text);
279
+ font-variant-numeric: tabular-nums;
280
+ }
281
+
282
+ .hexclave-clickmap .sdt-hm-toolbar-metric-icon {
283
+ display: inline-flex;
284
+ align-items: center;
285
+ color: var(--sdt-text-tertiary);
286
+ }
287
+
288
+ .hexclave-clickmap .sdt-hm-icon-btn {
289
+ width: 28px;
290
+ height: 28px;
291
+ display: inline-flex;
292
+ align-items: center;
293
+ justify-content: center;
294
+ flex-shrink: 0;
295
+ border: 0;
296
+ border-radius: 999px;
297
+ background: transparent;
298
+ color: var(--sdt-text-secondary);
299
+ cursor: pointer;
300
+ }
301
+
302
+ .hexclave-clickmap .sdt-hm-icon-btn:hover {
303
+ background: var(--sdt-bg-hover);
304
+ color: var(--sdt-text);
305
+ }
306
+
307
+ /* Presses must always target the button itself: the chevron svg is replaced
308
+ when the panel toggles, and a press whose mousedown landed on a since-
309
+ detached svg never produces a click. */
310
+ .hexclave-clickmap .sdt-hm-icon-btn svg {
311
+ pointer-events: none;
312
+ }
313
+
314
+ /* Styled tooltips for toolbar controls, driven by a data-sdt-tip attribute
315
+ instead of native title so they match the overlay theme and also show on
316
+ keyboard focus. The hover transition-delay acts as a hover-intent gate so
317
+ tooltips don't flash while the pointer crosses the toolbar; hover-out has
318
+ no delay, so they dismiss instantly. */
319
+ .hexclave-clickmap [data-sdt-tip] {
320
+ position: relative;
321
+ }
322
+
323
+ .hexclave-clickmap [data-sdt-tip]::after {
324
+ content: attr(data-sdt-tip);
325
+ position: absolute;
326
+ bottom: calc(100% + 8px);
327
+ left: 50%;
328
+ transform: translateX(-50%) translateY(2px);
329
+ padding: 4px 8px;
330
+ border: 1px solid var(--sdt-border);
331
+ border-radius: var(--sdt-radius);
332
+ background: var(--sdt-overlay-bg);
333
+ backdrop-filter: blur(18px);
334
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24);
335
+ color: var(--sdt-text);
336
+ font-size: 11px;
337
+ font-weight: 600;
338
+ line-height: 1.2;
339
+ white-space: nowrap;
340
+ pointer-events: none;
341
+ opacity: 0;
342
+ transition: opacity 0.12s ease, transform 0.12s ease;
343
+ z-index: 3;
344
+ }
345
+
346
+ .hexclave-clickmap [data-sdt-tip]:hover::after,
347
+ .hexclave-clickmap [data-sdt-tip]:focus-visible::after {
348
+ opacity: 1;
349
+ transform: translateX(-50%) translateY(0);
350
+ transition-delay: 0.35s;
351
+ }
352
+
353
+ /* The info button's tooltip would sit on top of its own help popover. */
354
+ .hexclave-clickmap .sdt-hm-filter-info[aria-expanded="true"]::after {
355
+ opacity: 0;
356
+ }
357
+
358
+ .hexclave-clickmap .sdt-hm-details {
359
+ display: none;
360
+ position: relative;
361
+ z-index: 1;
362
+ max-height: min(460px, calc(100vh - 98px));
363
+ overflow: hidden;
364
+ border: 1px solid var(--sdt-border);
365
+ border-radius: var(--sdt-radius-lg);
366
+ background: var(--sdt-bg);
367
+ box-shadow: 0 18px 48px rgba(0, 0, 0, 0.22);
368
+ }
369
+
370
+ .hexclave-clickmap .sdt-hm-expanded .sdt-hm-details {
371
+ display: flex;
372
+ flex-direction: column;
373
+ }
374
+
375
+ .hexclave-clickmap .sdt-hm-head {
376
+ flex-shrink: 0;
377
+ display: flex;
378
+ flex-direction: column;
379
+ gap: 14px;
380
+ padding: 16px;
381
+ border-bottom: 1px solid var(--sdt-border-subtle);
382
+ }
383
+
384
+ .hexclave-clickmap .sdt-hm-filters {
385
+ display: flex;
386
+ flex-direction: column;
387
+ gap: 12px;
388
+ }
389
+
390
+ .hexclave-clickmap .sdt-hm-filter-row {
391
+ display: grid;
392
+ grid-template-columns: repeat(2, minmax(0, 1fr));
393
+ gap: 12px;
394
+ }
395
+
396
+ .hexclave-clickmap .sdt-hm-seg {
397
+ position: relative;
398
+ display: flex;
399
+ align-items: stretch;
400
+ gap: 2px;
401
+ height: 30px;
402
+ padding: 3px;
403
+ border-radius: var(--sdt-radius);
404
+ border: 1px solid var(--sdt-border-subtle);
405
+ background: var(--sdt-bg-elevated);
406
+ box-sizing: border-box;
407
+ }
408
+
409
+ .hexclave-clickmap .sdt-hm-seg-thumb {
410
+ position: absolute;
411
+ top: 3px;
412
+ left: 0;
413
+ bottom: 3px;
414
+ width: 0;
415
+ border-radius: calc(var(--sdt-radius) - 2px);
416
+ background: var(--sdt-bg);
417
+ border: 1px solid var(--sdt-border);
418
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
419
+ transform: translateX(0);
420
+ transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1), width 220ms cubic-bezier(0.22, 1, 0.36, 1);
421
+ pointer-events: none;
422
+ }
423
+
424
+ .hexclave-clickmap .sdt-hm-seg-btn {
425
+ position: relative;
426
+ z-index: 1;
427
+ flex: 1 1 0;
428
+ min-width: 0;
429
+ border: 0;
430
+ background: transparent;
431
+ color: var(--sdt-text-tertiary);
432
+ font: inherit;
433
+ font-family: var(--sdt-font);
434
+ font-size: 11px;
435
+ font-weight: 600;
436
+ line-height: 1;
437
+ padding: 0 4px;
438
+ border-radius: calc(var(--sdt-radius) - 2px);
439
+ cursor: pointer;
440
+ white-space: nowrap;
441
+ overflow: hidden;
442
+ text-overflow: ellipsis;
443
+ transition: color 160ms ease;
444
+ }
445
+
446
+ .hexclave-clickmap .sdt-hm-seg-btn:hover {
447
+ color: var(--sdt-text-secondary);
448
+ }
449
+
450
+ .hexclave-clickmap .sdt-hm-seg-btn[aria-checked="true"] {
451
+ color: var(--sdt-text);
452
+ }
453
+
454
+ .hexclave-clickmap .sdt-hm-seg-btn:focus-visible {
455
+ outline: 2px solid var(--sdt-accent);
456
+ outline-offset: -2px;
457
+ }
458
+
459
+ @media (prefers-reduced-motion: reduce) {
460
+ .hexclave-clickmap .sdt-hm-seg-thumb {
461
+ transition: none;
462
+ }
463
+ }
464
+
465
+ .hexclave-clickmap .sdt-hm-filter-field {
466
+ display: flex;
467
+ flex-direction: column;
468
+ gap: 5px;
469
+ min-width: 0;
470
+ }
471
+
472
+ .hexclave-clickmap .sdt-hm-filter-label-row {
473
+ display: flex;
474
+ align-items: center;
475
+ justify-content: space-between;
476
+ gap: 6px;
477
+ min-height: 13px;
478
+ }
479
+
480
+ .hexclave-clickmap .sdt-hm-filter-label {
481
+ font-size: 10px;
482
+ font-weight: 600;
483
+ text-transform: uppercase;
484
+ letter-spacing: 0.04em;
485
+ color: var(--sdt-text-tertiary);
486
+ }
487
+
488
+ .hexclave-clickmap .sdt-hm-filter-reset {
489
+ display: none;
490
+ flex-shrink: 0;
491
+ width: 20px;
492
+ height: 20px;
493
+ align-items: center;
494
+ justify-content: center;
495
+ border: 0;
496
+ border-radius: 999px;
497
+ background: transparent;
498
+ padding: 0;
499
+ color: var(--sdt-accent);
500
+ cursor: pointer;
501
+ }
502
+
503
+ .hexclave-clickmap .sdt-hm-filter-reset:hover {
504
+ background: var(--sdt-bg-hover);
505
+ color: var(--sdt-accent-hover);
506
+ }
507
+
508
+ .hexclave-clickmap .sdt-hm-filter-reset-visible {
509
+ display: inline-flex;
510
+ }
511
+
512
+ .hexclave-clickmap .sdt-hm-filter-input {
513
+ height: 30px;
514
+ border-radius: var(--sdt-radius);
515
+ border: 1px solid var(--sdt-border-subtle);
516
+ background: var(--sdt-bg-elevated);
517
+ color: var(--sdt-text);
518
+ padding: 0 9px;
519
+ font: inherit;
520
+ font-size: 12px;
521
+ font-family: var(--sdt-font);
522
+ min-width: 0;
523
+ width: 100%;
524
+ box-sizing: border-box;
525
+ }
526
+
527
+ .hexclave-clickmap .sdt-hm-filter-input:focus {
528
+ outline: none;
529
+ border-color: var(--sdt-accent);
530
+ }
531
+
532
+ .hexclave-clickmap .sdt-hm-actions {
533
+ display: flex;
534
+ align-items: stretch;
535
+ gap: 10px;
536
+ }
537
+
538
+ .hexclave-clickmap .sdt-hm-actions .sdt-hm-btn {
539
+ height: auto;
540
+ flex-shrink: 0;
541
+ white-space: nowrap;
542
+ padding: 0 16px;
543
+ }
544
+
545
+ .hexclave-clickmap .sdt-hm-btn {
546
+ height: 30px;
547
+ border-radius: var(--sdt-radius);
548
+ border: 1px solid var(--sdt-border-subtle);
549
+ background: var(--sdt-bg-elevated);
550
+ color: var(--sdt-text-secondary);
551
+ padding: 0 10px;
552
+ font: inherit;
553
+ font-size: 12px;
554
+ cursor: pointer;
555
+ transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
556
+ }
557
+
558
+ .hexclave-clickmap .sdt-hm-btn:hover {
559
+ background: var(--sdt-bg-hover);
560
+ color: var(--sdt-text);
561
+ transition: none;
562
+ }
563
+
564
+ .hexclave-clickmap .sdt-hm-btn-primary {
565
+ background: var(--sdt-accent);
566
+ border-color: var(--sdt-accent);
567
+ color: white;
568
+ }
569
+
570
+ .hexclave-clickmap .sdt-hm-btn-primary:hover {
571
+ background: var(--sdt-accent);
572
+ border-color: var(--sdt-accent);
573
+ color: white;
574
+ transition: none;
575
+ }
576
+
577
+ .hexclave-clickmap .sdt-hm-btn-sm {
578
+ height: 24px;
579
+ flex-shrink: 0;
580
+ border-radius: 999px;
581
+ padding: 0 10px;
582
+ font-size: 11px;
583
+ font-weight: 600;
584
+ white-space: nowrap;
585
+ }
586
+
587
+ .hexclave-clickmap .sdt-hm-btn:disabled {
588
+ opacity: 0.45;
589
+ pointer-events: none;
590
+ }
591
+
592
+ /* Dead-clicks-only filter toggle (toolbar icon button + expanded-panel
593
+ button). Active state borrows the error tint used by the dead chips so
594
+ the mode reads as "you are looking at failures". */
595
+ .hexclave-clickmap .sdt-hm-dead-toggle {
596
+ display: inline-flex;
597
+ align-items: center;
598
+ justify-content: center;
599
+ gap: 6px;
600
+ }
601
+
602
+ .hexclave-clickmap .sdt-hm-dead-toggle-icon {
603
+ display: inline-flex;
604
+ align-items: center;
605
+ }
606
+
607
+ .hexclave-clickmap .sdt-hm-dead-toggle-active,
608
+ .hexclave-clickmap .sdt-hm-dead-toggle-active:hover {
609
+ background: var(--sdt-error-muted);
610
+ border-color: var(--sdt-error);
611
+ color: var(--sdt-error);
612
+ transition: none;
613
+ }
614
+
615
+ /* Toolbar overlay toggle while the overlay is hidden: tinted so the off
616
+ state reads at a glance, eye-off icon carries the meaning. */
617
+ .hexclave-clickmap .sdt-hm-overlay-mini-off,
618
+ .hexclave-clickmap .sdt-hm-overlay-mini-off:hover {
619
+ background: var(--sdt-accent-muted);
620
+ color: var(--sdt-accent-hover);
621
+ }
622
+
623
+ .hexclave-clickmap .sdt-hm-stats {
624
+ flex: 1;
625
+ min-width: 0;
626
+ display: grid;
627
+ grid-template-columns: repeat(3, minmax(0, 1fr));
628
+ gap: 8px;
629
+ }
630
+
631
+ .hexclave-clickmap .sdt-hm-stat {
632
+ min-width: 0;
633
+ display: flex;
634
+ flex-direction: column;
635
+ gap: 2px;
636
+ border-radius: var(--sdt-radius);
637
+ background: var(--sdt-bg-elevated);
638
+ padding: 7px 10px;
639
+ }
640
+
641
+ .hexclave-clickmap .sdt-hm-stat-label {
642
+ font-size: 9.5px;
643
+ font-weight: 600;
644
+ text-transform: uppercase;
645
+ letter-spacing: 0.04em;
646
+ color: var(--sdt-text-tertiary);
647
+ }
648
+
649
+ .hexclave-clickmap .sdt-hm-stat-value {
650
+ font-size: 15px;
651
+ font-weight: 650;
652
+ color: var(--sdt-text);
653
+ font-variant-numeric: tabular-nums;
654
+ }
655
+
656
+ /* No top padding on the scroller: the sticky list header pins at top 0,
657
+ and scroller padding reads as a see-through strip above it while the
658
+ list scrolls (Chromium offsets sticky insets by the scroll container's
659
+ padding). The status line below carries the 12px instead. */
660
+ .hexclave-clickmap .sdt-hm-body {
661
+ flex: 1;
662
+ min-height: 0;
663
+ overflow: auto;
664
+ display: flex;
665
+ flex-direction: column;
666
+ gap: 10px;
667
+ padding: 0 16px 14px;
668
+ }
669
+
670
+ .hexclave-clickmap .sdt-hm-token-status {
671
+ color: var(--sdt-text-secondary);
672
+ padding: 12px 2px 0;
673
+ font-size: 11.5px;
674
+ line-height: 1.45;
675
+ }
676
+
677
+ .hexclave-clickmap .sdt-hm-token-status-error {
678
+ color: var(--sdt-error);
679
+ }
680
+
681
+ .hexclave-clickmap .sdt-hm-viewport-warning {
682
+ display: none;
683
+ gap: 8px;
684
+ padding: 10px;
685
+ border-radius: var(--sdt-radius);
686
+ border: 1px solid rgba(234, 179, 8, 0.24);
687
+ background: var(--sdt-warning-muted);
688
+ color: var(--sdt-text);
689
+ }
690
+
691
+ .hexclave-clickmap .sdt-hm-viewport-warning-visible {
692
+ display: flex;
693
+ flex-direction: column;
694
+ }
695
+
696
+ .hexclave-clickmap .sdt-hm-viewport-warning-title {
697
+ font-size: 12px;
698
+ font-weight: 650;
699
+ color: var(--sdt-text);
700
+ line-height: 1.2;
701
+ }
702
+
703
+ .hexclave-clickmap .sdt-hm-viewport-warning-body {
704
+ font-size: 11.5px;
705
+ line-height: 1.45;
706
+ color: var(--sdt-text-secondary);
707
+ }
708
+
709
+ .hexclave-clickmap .sdt-hm-viewport-warning-actions {
710
+ display: flex;
711
+ flex-wrap: wrap;
712
+ gap: 8px;
713
+ }
714
+
715
+ .hexclave-clickmap .sdt-hm-viewport-warning-action {
716
+ min-width: 0;
717
+ display: inline-flex;
718
+ align-items: center;
719
+ gap: 6px;
720
+ border-radius: var(--sdt-radius);
721
+ border: 1px solid var(--sdt-border-subtle);
722
+ background: var(--sdt-bg-elevated);
723
+ padding: 4px 5px 4px 8px;
724
+ }
725
+
726
+ .hexclave-clickmap .sdt-hm-viewport-warning-label {
727
+ font-size: 10px;
728
+ font-weight: 600;
729
+ text-transform: uppercase;
730
+ letter-spacing: 0.04em;
731
+ color: var(--sdt-text-tertiary);
732
+ }
733
+
734
+ .hexclave-clickmap .sdt-hm-viewport-warning-code {
735
+ font-family: var(--sdt-font-mono);
736
+ font-size: 11.5px;
737
+ font-weight: 650;
738
+ color: var(--sdt-text);
739
+ font-variant-numeric: tabular-nums;
740
+ }
741
+
742
+ .hexclave-clickmap .sdt-hm-copy-btn {
743
+ height: 22px;
744
+ border: 1px solid var(--sdt-border-subtle);
745
+ border-radius: 999px;
746
+ background: var(--sdt-bg);
747
+ color: var(--sdt-text-secondary);
748
+ padding: 0 8px;
749
+ font: inherit;
750
+ font-size: 10.5px;
751
+ font-weight: 600;
752
+ cursor: pointer;
753
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
754
+ }
755
+
756
+ .hexclave-clickmap .sdt-hm-copy-btn:hover {
757
+ background: var(--sdt-bg-hover);
758
+ border-color: var(--sdt-border);
759
+ color: var(--sdt-text);
760
+ transition: none;
761
+ }
762
+
763
+ .hexclave-clickmap .sdt-hm-list {
764
+ display: flex;
765
+ flex-direction: column;
766
+ gap: 2px;
767
+ }
768
+
769
+ /* Datagrid-style header above the element list. Sticky inside the
770
+ scrolling body (full-bleed via negative margins) so select-all and the
771
+ bulk show/hide actions stay reachable while the list scrolls. The 24px
772
+ left padding lines its master checkbox up with the row checkboxes
773
+ (16px body padding + 8px row padding). */
774
+ .hexclave-clickmap .sdt-hm-list-header {
775
+ display: none;
776
+ position: sticky;
777
+ top: 0;
778
+ z-index: 2;
779
+ align-items: center;
780
+ gap: 8px;
781
+ margin: 0 -16px;
782
+ padding: 8px 24px;
783
+ background: var(--sdt-bg);
784
+ border-bottom: 1px solid var(--sdt-border-subtle);
785
+ }
786
+
787
+ .hexclave-clickmap .sdt-hm-list-header-visible {
788
+ display: flex;
789
+ }
790
+
791
+ .hexclave-clickmap .sdt-hm-list-header-summary {
792
+ flex: 1;
793
+ min-width: 0;
794
+ overflow: hidden;
795
+ text-overflow: ellipsis;
796
+ white-space: nowrap;
797
+ font-size: 11px;
798
+ font-weight: 600;
799
+ color: var(--sdt-text-secondary);
800
+ font-variant-numeric: tabular-nums;
801
+ }
802
+
803
+ /* Element search, compacted to header height. Shrinks before the summary
804
+ does, but never below a usable width. */
805
+ .hexclave-clickmap .sdt-hm-list-header .sdt-hm-filter-input {
806
+ flex: 0 1 220px;
807
+ width: auto;
808
+ min-width: 90px;
809
+ height: 24px;
810
+ border-radius: 999px;
811
+ font-size: 11px;
812
+ padding: 0 10px;
813
+ }
814
+
815
+ .hexclave-clickmap .sdt-hm-empty {
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ min-height: 140px;
820
+ border-radius: var(--sdt-radius);
821
+ border: 1px dashed var(--sdt-border);
822
+ color: var(--sdt-text-tertiary);
823
+ font-size: 12px;
824
+ text-align: center;
825
+ padding: 0 16px;
826
+ }
827
+
828
+ .hexclave-clickmap .sdt-hm-row {
829
+ width: 100%;
830
+ display: grid;
831
+ grid-template-columns: 16px minmax(42px, auto) minmax(0, 1fr) 24px;
832
+ align-items: center;
833
+ gap: 10px;
834
+ border: 0;
835
+ border-radius: var(--sdt-radius);
836
+ background: transparent;
837
+ color: var(--sdt-text);
838
+ padding: 8px;
839
+ text-align: left;
840
+ cursor: pointer;
841
+ font-family: var(--sdt-font);
842
+ user-select: none;
843
+ }
844
+
845
+ .hexclave-clickmap .sdt-hm-row:hover {
846
+ background: var(--sdt-bg-hover);
847
+ transition: none;
848
+ }
849
+
850
+ .hexclave-clickmap .sdt-hm-row:focus-visible {
851
+ outline: 2px solid var(--sdt-accent);
852
+ outline-offset: 2px;
853
+ }
854
+
855
+ .hexclave-clickmap .sdt-hm-row-muted {
856
+ opacity: 0.52;
857
+ }
858
+
859
+ .hexclave-clickmap .sdt-hm-row-highlighted {
860
+ background: rgba(250, 204, 21, 0.12);
861
+ }
862
+
863
+ /* Declared after -highlighted and with a :hover pair so the selection tint
864
+ wins over both the lead-highlight wash and the plain hover background. */
865
+ .hexclave-clickmap .sdt-hm-row-selected,
866
+ .hexclave-clickmap .sdt-hm-row-selected:hover {
867
+ background: var(--sdt-accent-muted);
868
+ }
869
+
870
+ /* Row checkbox (also reused as the list header's master checkbox). A
871
+ button with role=checkbox instead of a native input so it can render the
872
+ overlay-themed check/indeterminate icons. */
873
+ .hexclave-clickmap .sdt-hm-row-check {
874
+ display: inline-flex;
875
+ align-items: center;
876
+ justify-content: center;
877
+ width: 16px;
878
+ height: 16px;
879
+ flex-shrink: 0;
880
+ border: 1px solid var(--sdt-border);
881
+ border-radius: calc(var(--sdt-radius) - 3px);
882
+ background: var(--sdt-bg-elevated);
883
+ color: white;
884
+ appearance: none;
885
+ padding: 0;
886
+ cursor: pointer;
887
+ }
888
+
889
+ .hexclave-clickmap .sdt-hm-row-check:hover {
890
+ border-color: var(--sdt-accent);
891
+ }
892
+
893
+ .hexclave-clickmap .sdt-hm-row-check[aria-checked="true"],
894
+ .hexclave-clickmap .sdt-hm-row-check[aria-checked="mixed"] {
895
+ background: var(--sdt-accent);
896
+ border-color: var(--sdt-accent);
897
+ }
898
+
899
+ .hexclave-clickmap .sdt-hm-row-check:focus-visible {
900
+ outline: 2px solid var(--sdt-accent);
901
+ outline-offset: 2px;
902
+ }
903
+
904
+ .hexclave-clickmap .sdt-hm-row-check svg {
905
+ pointer-events: none;
906
+ }
907
+
908
+ .hexclave-clickmap .sdt-hm-row-count {
909
+ display: inline-flex;
910
+ align-items: center;
911
+ justify-content: center;
912
+ height: 24px;
913
+ border-radius: calc(var(--sdt-radius) - 2px);
914
+ background: var(--sdt-accent-muted);
915
+ color: var(--sdt-accent-hover);
916
+ padding: 0 7px;
917
+ font-size: 12px;
918
+ font-weight: 700;
919
+ font-variant-numeric: tabular-nums;
920
+ font-family: var(--sdt-font);
921
+ }
922
+
923
+ .hexclave-clickmap .sdt-hm-row-muted .sdt-hm-row-count {
924
+ background: var(--sdt-bg-elevated);
925
+ color: var(--sdt-text-tertiary);
926
+ }
927
+
928
+ .hexclave-clickmap .sdt-hm-row-eye {
929
+ display: inline-flex;
930
+ align-items: center;
931
+ justify-content: center;
932
+ width: 24px;
933
+ height: 24px;
934
+ border: 1px solid var(--sdt-border-subtle);
935
+ border-radius: calc(var(--sdt-radius) - 2px);
936
+ background: var(--sdt-bg-elevated);
937
+ color: var(--sdt-text-secondary);
938
+ appearance: none;
939
+ padding: 0;
940
+ cursor: pointer;
941
+ opacity: 0;
942
+ pointer-events: none;
943
+ }
944
+
945
+ .hexclave-clickmap .sdt-hm-row:hover .sdt-hm-row-eye,
946
+ .hexclave-clickmap .sdt-hm-row:focus-within .sdt-hm-row-eye,
947
+ .hexclave-clickmap .sdt-hm-row-muted .sdt-hm-row-eye {
948
+ opacity: 1;
949
+ pointer-events: auto;
950
+ }
951
+
952
+ .hexclave-clickmap .sdt-hm-row-eye:hover {
953
+ background: var(--sdt-bg-hover);
954
+ border-color: var(--sdt-border);
955
+ color: var(--sdt-text);
956
+ transition: none;
957
+ }
958
+
959
+ .hexclave-clickmap .sdt-hm-row-eye:focus-visible {
960
+ outline: 2px solid var(--sdt-accent);
961
+ outline-offset: 2px;
962
+ }
963
+
964
+ .hexclave-clickmap .sdt-hm-row-meta {
965
+ min-width: 0;
966
+ display: flex;
967
+ flex-direction: column;
968
+ gap: 1px;
969
+ }
970
+
971
+ .hexclave-clickmap .sdt-hm-row-label-row {
972
+ display: flex;
973
+ align-items: center;
974
+ gap: 6px;
975
+ min-width: 0;
976
+ }
977
+
978
+ .hexclave-clickmap .sdt-hm-row-label {
979
+ overflow: hidden;
980
+ text-overflow: ellipsis;
981
+ white-space: nowrap;
982
+ min-width: 0;
983
+ font-size: 12px;
984
+ font-weight: 600;
985
+ }
986
+
987
+ .hexclave-clickmap .sdt-hm-row-dead {
988
+ display: none;
989
+ flex: none;
990
+ align-items: center;
991
+ height: 16px;
992
+ border-radius: calc(var(--sdt-radius) - 3px);
993
+ background: var(--sdt-error-muted);
994
+ color: var(--sdt-error);
995
+ padding: 0 5px;
996
+ font-size: 10px;
997
+ font-weight: 700;
998
+ font-variant-numeric: tabular-nums;
999
+ white-space: nowrap;
1000
+ }
1001
+
1002
+ .hexclave-clickmap .sdt-hm-row-dead-visible {
1003
+ display: inline-flex;
1004
+ }
1005
+
1006
+ .hexclave-clickmap .sdt-hm-row-selector {
1007
+ overflow: hidden;
1008
+ text-overflow: ellipsis;
1009
+ white-space: nowrap;
1010
+ font-family: var(--sdt-font-mono);
1011
+ font-size: 10.5px;
1012
+ color: var(--sdt-text-tertiary);
1013
+ }
1014
+
1015
+ .sdt-hm-overlay-root {
1016
+ position: fixed;
1017
+ inset: 0;
1018
+ z-index: 2147483646;
1019
+ pointer-events: none;
1020
+ --resize-dur: 320ms;
1021
+ --resize-ease: cubic-bezier(0.22, 1, 0.36, 1);
1022
+ }
1023
+
1024
+ .sdt-hm-overlay-root .sdt-hm-marker {
1025
+ position: fixed;
1026
+ transform: translate(-50%, -50%);
1027
+ min-width: 28px;
1028
+ height: 24px;
1029
+ border-radius: 999px;
1030
+ padding: 0 8px;
1031
+ display: flex;
1032
+ align-items: center;
1033
+ justify-content: center;
1034
+ border: 0;
1035
+ color: rgba(10, 10, 11, 0.92);
1036
+ font: 700 12px/1 var(--sdt-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
1037
+ font-variant-numeric: tabular-nums;
1038
+ cursor: pointer;
1039
+ pointer-events: auto;
1040
+ transition: opacity 0.15s ease, transform 0.15s ease, filter 0.15s ease;
1041
+ }
1042
+
1043
+ .sdt-hm-overlay-root .sdt-hm-marker:hover {
1044
+ transform: translate(-50%, -50%) scale(1.06);
1045
+ transition: none;
1046
+ }
1047
+
1048
+ .sdt-hm-overlay-root .sdt-hm-marker-muted {
1049
+ opacity: 0.18;
1050
+ filter: saturate(0.25);
1051
+ text-decoration: line-through;
1052
+ }
1053
+
1054
+ .sdt-hm-overlay-root .sdt-hm-marker-highlighted {
1055
+ transform: translate(-50%, -50%) scale(1.08);
1056
+ }
1057
+
1058
+ .sdt-hm-overlay-root .sdt-hm-outline {
1059
+ position: fixed;
1060
+ border: 1px solid;
1061
+ border-radius: 4px;
1062
+ background: rgba(99, 102, 241, 0.04);
1063
+ transition: opacity 0.15s ease, background 0.15s ease, border-color 0.15s ease;
1064
+ }
1065
+
1066
+ .sdt-hm-overlay-root .sdt-hm-outline-muted {
1067
+ opacity: 0;
1068
+ }
1069
+
1070
+ .sdt-hm-overlay-root .sdt-hm-outline-highlighted {
1071
+ border-color: rgba(250, 204, 21, 0.92) !important;
1072
+ }
1073
+
1074
+ .sdt-hm-overlay-root .sdt-hm-highlight {
1075
+ position: fixed;
1076
+ border-radius: 5px;
1077
+ background: rgba(250, 204, 21, 0.28);
1078
+ box-shadow: 0 0 0 1px rgba(250, 204, 21, 0.7), 0 0 0 9999px rgba(0, 0, 0, 0.04);
1079
+ opacity: 0;
1080
+ will-change: top, left, width, height;
1081
+ transition: opacity 0.18s ease;
1082
+ }
1083
+
1084
+ .sdt-hm-overlay-root .sdt-hm-highlight-visible {
1085
+ opacity: 1;
1086
+ }
1087
+
1088
+ .sdt-hm-overlay-root .sdt-hm-highlight-animating {
1089
+ transition:
1090
+ top var(--resize-dur) var(--resize-ease),
1091
+ left var(--resize-dur) var(--resize-ease),
1092
+ width var(--resize-dur) var(--resize-ease),
1093
+ height var(--resize-dur) var(--resize-ease),
1094
+ opacity 0.18s ease;
1095
+ }
1096
+
1097
+ @media (prefers-reduced-motion: reduce) {
1098
+ .sdt-hm-overlay-root .sdt-hm-highlight-animating {
1099
+ transition: opacity 0.18s ease;
1100
+ }
1101
+ }
1102
+ `;