@qaiddev/thumbs-embed 1.8.0 → 1.9.1

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,20 +1,20 @@
1
- import { i as gt, F as vt, T as yt, a as qt, R as xt } from "./annotate-D-o8xCV9.js";
2
- const wt = "button{cursor:pointer}.qaid-buttons{display:flex;gap:.5rem}.qaid-buttons.qaid-vertical{flex-direction:column}.qaid-buttons.qaid-auto-container{position:fixed;z-index:50}.qaid-buttons.qaid-auto-container.qaid-bottom-right{bottom:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-bottom-left{bottom:1rem;left:1rem}.qaid-buttons.qaid-auto-container.qaid-top-right{top:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-top-left{top:1rem;left:1rem}.qaid-buttons.qaid-incognito{opacity:0;transition:opacity .2s ease-in-out}.qaid-buttons.qaid-incognito:hover{opacity:1}.qaid-buttons.qaid-dismissed{display:none!important}.qaid-dismiss-btn{width:20px;height:20px;padding:0;border:none;border-radius:50%;background:#0006;color:#fff;display:flex;align-items:center;justify-content:center;align-self:center;opacity:0;transition:opacity .15s,background .15s;cursor:pointer;pointer-events:auto;-webkit-appearance:none;appearance:none}.qaid-dismiss-btn:hover{background:#0009}.qaid-buttons:hover .qaid-dismiss-btn{opacity:1}button.qaid-btn-structural{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;-webkit-appearance:none;appearance:none}.qaid-icon{width:24px;height:24px}:where(button.qaid-btn-structural)>svg:where(:not(.qaid-icon):not([width])){width:var(--qaid-icon-size, 24px);height:var(--qaid-icon-size, 24px)}.qaid-btn-structural:not(:has(svg)),.qaid-btn:not(:has(svg)){font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-emoji-icon{font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-buttons,.qaid-buttons *,.qaid-modal-container,.qaid-modal-container *{cursor:pointer!important}.qaid-tooltip-wrapper{position:relative}.qaid-tooltip-text{position:fixed;padding:.5rem .75rem;background:#1f2937;color:#fff;font-size:var(--qaid-font-size, 16px);font-weight:600;border-radius:.5rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:99999}.qaid-tooltip-text.qaid-tooltip-visible{opacity:1}.qaid-targeting-overlay{position:fixed;inset:0;z-index:40;pointer-events:none}.qaid-capture-layer{position:fixed;inset:0;pointer-events:none;z-index:9999}@keyframes qaid-slideDown{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.qaid-vignette{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 30%,rgba(0,0,0,.3) 70%,rgba(0,0,0,.6) 100%);z-index:41}.qaid-crosshair-h,.qaid-crosshair-v{position:fixed;pointer-events:none;z-index:42}.qaid-crosshair-h{left:0;right:0;height:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-crosshair-v{top:0;bottom:0;width:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-type-up .qaid-crosshair-h,.qaid-type-up .qaid-crosshair-v{background:color-mix(in srgb,var(--qaid-positive) 60%,transparent)}.qaid-highlight-box{position:fixed;top:0;left:0;pointer-events:none;z-index:41;display:none;border:3px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:2px;background:color-mix(in srgb,var(--qaid-negative) 8%,transparent);will-change:transform,width,height}.qaid-type-up .qaid-highlight-box{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent);background:color-mix(in srgb,var(--qaid-positive) 8%,transparent)}.qaid-scope{position:fixed;width:80px;height:80px;pointer-events:none;z-index:43;transform:translate(-50%,-50%)}.qaid-scope-ring{position:absolute;inset:10px;border:2px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent)}.qaid-scope-ring-inner{position:absolute;inset:20px;border:1px solid color-mix(in srgb,var(--qaid-negative) 50%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring-inner{border-color:color-mix(in srgb,var(--qaid-positive) 50%,transparent)}.qaid-scope-dot{position:absolute;top:50%;left:50%;width:4px;height:4px;background:var(--qaid-negative);border-radius:50%;transform:translate(-50%,-50%)}.qaid-type-up .qaid-scope-dot{background:var(--qaid-positive)}.qaid-selected-marker{position:fixed;border:3px solid var(--qaid-marker, #6365f1);border-radius:50%;pointer-events:none;z-index:44;animation:qaid-markerPulse 1.5s ease-in-out infinite}@keyframes qaid-markerPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.qaid-backdrop{position:fixed;inset:0;z-index:45;background:#0000004d}.qaid-modal-container{position:fixed;z-index:50;display:flex;flex-direction:column;align-items:flex-start;max-height:calc(100vh - 32px);font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-modal-container.qaid-above{flex-direction:column-reverse}.qaid-modal-arrow{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;position:relative;align-self:flex-start}.qaid-modal-container.qaid-below .qaid-modal-arrow{border-bottom:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-container.qaid-above .qaid-modal-arrow{border-top:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5));width:var(--qaid-modal-width, 400px);max-width:calc(100vw - 32px);max-height:calc(100vh - 60px);overflow-y:auto}.qaid-modal-header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1rem}button.qaid-type-toggle{border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;flex-shrink:0;-webkit-appearance:none;appearance:none}button.qaid-type-toggle:hover{transform:scale(1.1)}button.qaid-type-toggle:not(.qaid-type-toggle-custom){width:2.5rem;height:2.5rem;border-radius:50%}button.qaid-type-toggle:not(.qaid-type-toggle-custom) svg{width:1.25rem;height:1.25rem}button.qaid-type-toggle.qaid-type-up{background:var(--qaid-positive);color:#fff}button.qaid-type-toggle.qaid-type-down{background:var(--qaid-negative);color:#fff}.qaid-type-static{width:2.5rem;height:2.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--qaid-marker, #6365f1);color:var(--qaid-marker-text, white)}.qaid-type-static svg{width:1.25rem;height:1.25rem}.qaid-modal-header-text{flex:1;min-width:0}.qaid-modal-title{font-size:calc(var(--qaid-font-size, 16px) * 1.125);font-weight:700;margin:0 0 .25rem;color:light-dark(#1f2937,#f9fafb)}.qaid-modal-subtitle{color:light-dark(#6b7280,#9ca3af);margin:0;font-size:calc(var(--qaid-font-size, 16px) * .875)}.qaid-textarea{width:100%;height:6rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:var(--qaid-font-size, 16px);resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-btn-row{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-btn-submit{padding:.5rem 1rem;background:var(--qaid-marker);color:var(--qaid-marker-text, white);border:none;border-radius:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-btn-submit:hover{filter:brightness(.85)}button.qaid-btn-submit:focus{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 30%,transparent)}.qaid-bottom-sheet{position:fixed;bottom:0;left:0;right:0;z-index:50;animation:qaid-slideUpSheet .3s ease-out;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-bottom-sheet-content{background:light-dark(#ffffff,#1f2937);border-radius:1rem 1rem 0 0;padding:1.5rem;padding-bottom:max(1.5rem,env(safe-area-inset-bottom))}.qaid-bottom-sheet-handle{width:36px;height:4px;background:light-dark(rgba(0,0,0,.2),rgba(255,255,255,.2));border-radius:2px;margin:0 auto 1rem}@keyframes qaid-slideUpSheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}button.qaid-btn-record:hover{background:#dc2626;color:#fff}.qaid-recording-indicator{position:fixed;top:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:light-dark(#1f2937,#374151);color:#fff;border-radius:9999px;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;box-shadow:0 4px 12px #0000004d;z-index:99999;animation:qaid-slideDown .2s ease-out}.qaid-recording-dot{width:10px;height:10px;background:#dc2626;border-radius:50%;animation:qaid-dotPulse 1.5s ease-in-out infinite}@keyframes qaid-dotPulse{0%,to{opacity:1}50%{opacity:.3}}.qaid-recording-time{font-variant-numeric:tabular-nums;min-width:2.5rem;text-align:center}button.qaid-recording-stop{padding:.25rem .75rem;background:#dc2626;color:#fff;border:none;border-radius:9999px;font-size:calc(var(--qaid-font-size, 16px) * .75);font-weight:600;cursor:pointer;transition:background-color .2s;-webkit-appearance:none;appearance:none}button.qaid-recording-stop:hover{background:#b91c1c}.qaid-video-preview{position:fixed;inset:0 0 auto;height:100vh;height:100dvh;display:flex;align-items:center;justify-content:center;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#0009;z-index:99998;animation:qaid-fadeIn .2s ease-out}@keyframes qaid-fadeIn{0%{opacity:0}to{opacity:1}}.qaid-video-preview-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px #00000080;width:560px;max-width:100%;max-height:100%;overflow-y:auto;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-video-preview-box h3{font-size:calc(var(--qaid-font-size, 16px) * 1.125);font-weight:700;margin:0 0 1rem;color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box video{width:100%;max-height:50vh;max-height:50dvh;object-fit:contain;border-radius:.5rem;background:#000;margin-bottom:1rem}.qaid-video-preview-box textarea{width:100%;height:4rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:calc(var(--qaid-font-size, 16px) * .875);resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-video-error{margin:0 0 .75rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;color:light-dark(#b91c1c,#fca5a5)}.qaid-video-preview-actions{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-video-btn{padding:.5rem 1rem;border:none;border-radius:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-video-btn-cancel{background:light-dark(#f3f4f6,#374151);color:light-dark(#374151,#d1d5db)}button.qaid-video-btn-cancel:hover{background:light-dark(#e5e7eb,#4b5563)}button.qaid-video-btn-rerecord{background:light-dark(#fef3c7,#78350f);color:light-dark(#92400e,#fde68a)}button.qaid-video-btn-rerecord:hover{filter:brightness(.9)}button.qaid-video-btn-send{background:var(--qaid-marker);color:var(--qaid-marker-text, white)}button.qaid-video-btn-send:hover{filter:brightness(.85)}button.qaid-video-btn-send:disabled{opacity:.5;cursor:not-allowed}.qaid-video-sending{display:flex;align-items:center;gap:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);color:light-dark(#6b7280,#9ca3af)}.qaid-annotate{position:fixed;inset:0;z-index:2147483000;display:flex;flex-direction:column;gap:.75rem;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#000000d9;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px);animation:qaid-fadeIn .2s ease-out}.qaid-annotate-title{margin:0;font-size:var(--qaid-font-size, 16px);font-weight:700;text-align:center;color:#f9fafb}.qaid-annotate-desc{margin:0;font-size:calc(var(--qaid-font-size, 16px) * .8125);line-height:1.4;text-align:center;color:#f9fafbbf}.qaid-annotate-stage{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;overflow:auto}.qaid-annotate-canvas{max-width:100%;max-height:100%;object-fit:contain;background:light-dark(#ffffff,#111827);border-radius:.5rem;box-shadow:0 10px 30px #00000080;touch-action:none;cursor:crosshair}.qaid-annotate-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:center;padding:.5rem .75rem;background:light-dark(#ffffff,#1f2937);border-radius:.75rem;box-shadow:0 10px 30px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5))}.qaid-annotate-tools,.qaid-annotate-actions{display:flex;gap:.375rem;align-items:center}button.qaid-annotate-tool,button.qaid-annotate-action{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;min-width:44px;min-height:44px;padding:0 .75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;background:light-dark(#f9fafb,#111827);color:light-dark(#1f2937,#f9fafb);font-family:inherit;font-size:calc(var(--qaid-font-size, 16px) * .8125);font-weight:600;cursor:pointer;-webkit-appearance:none;appearance:none;transition:background-color .15s,color .15s,border-color .15s,filter .15s}button.qaid-annotate-tool svg,button.qaid-annotate-action svg{width:20px;height:20px}.qaid-annotate-colors{display:flex;gap:.25rem;align-items:center}button.qaid-annotate-swatch{width:28px;height:28px;min-width:28px;padding:0;border-radius:9999px;border:2px solid light-dark(#d1d5db,#4b5563);background:var(--qaid-swatch, #000);cursor:pointer;-webkit-appearance:none;appearance:none;transition:transform .1s,box-shadow .15s,border-color .15s}button.qaid-annotate-swatch:hover{transform:scale(1.12)}button.qaid-annotate-swatch[aria-pressed=true]{border-color:light-dark(#111827,#f9fafb);box-shadow:0 0 0 2px var(--qaid-swatch)}@media(forced-colors:active){button.qaid-annotate-swatch[aria-pressed=true]{outline:2px solid Highlight;outline-offset:1px}}button.qaid-annotate-tool:hover,button.qaid-annotate-action:hover{background:light-dark(#eef2ff,#312e81)}button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{background:var(--qaid-marker, #6365f1);color:var(--qaid-marker-text, #fff);border-color:var(--qaid-marker, #6365f1)}button.qaid-annotate-done:hover{filter:brightness(.9);background:var(--qaid-marker, #6365f1)}button.qaid-annotate-action:disabled{opacity:.45;cursor:not-allowed}@media(forced-colors:active){button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{border:2px solid Highlight}.qaid-annotate-canvas{border:1px solid CanvasText}}button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible{outline:2px solid var(--qaid-marker, #6365f1);outline-offset:2px}.qaid-textarea:focus-visible,button.qaid-btn-submit:focus-visible,.qaid-video-preview-box textarea:focus-visible{outline:2px solid var(--qaid-marker, #6365f1);outline-offset:2px}.qaid-buttons.qaid-incognito:focus-within{opacity:1}.qaid-buttons:focus-within .qaid-dismiss-btn,.qaid-dismiss-btn:focus-visible{opacity:1}.qaid-dismiss-btn{min-width:24px;min-height:24px}button.qaid-recording-stop{min-height:24px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media(forced-colors:active){button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible,.qaid-textarea:focus,button.qaid-btn-submit:focus,.qaid-video-preview-box textarea:focus{outline:2px solid CanvasText;outline-offset:2px}.qaid-selected-marker,.qaid-highlight-box{border-color:Highlight}}.qaid-confirm{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.5rem;padding:.5rem 0}.qaid-confirm-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:9999px;color:#fff;background:var(--qaid-success, #22c55e);margin-bottom:.25rem;animation:qaid-confirm-pop .28s cubic-bezier(.34,1.56,.64,1)}.qaid-confirm-icon .qaid-icon{width:24px;height:24px}.qaid-confirm-error .qaid-confirm-icon{background:var(--qaid-error, #dc2626)}.qaid-confirm-title{margin:0;font-size:var(--qaid-font-size, 16px);font-weight:600;color:var(--qaid-text, light-dark(#111827, #f9fafb))}.qaid-confirm-title:focus-visible{outline:2px solid var(--qaid-primary, #6365f1);outline-offset:3px;border-radius:4px}.qaid-confirm-message{margin:0;font-size:calc(var(--qaid-font-size, 16px) * .875);color:var(--qaid-text-muted, light-dark(#6b7280, #9ca3af))}.qaid-confirm .qaid-confirm-close{margin-top:.5rem;min-width:96px}@keyframes qaid-confirm-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.qaid-confirm-icon{animation:none}}", kt = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
1
+ import { i as At, F as Tt, T as It, a as Et, R as zt } from "./annotate-D-o8xCV9.js";
2
+ const Dt = "button{cursor:pointer}.qaid-buttons{display:flex;gap:.5rem}.qaid-buttons.qaid-vertical{flex-direction:column}.qaid-buttons.qaid-auto-container{position:fixed;z-index:50}.qaid-buttons.qaid-auto-container.qaid-bottom-right{bottom:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-bottom-left{bottom:1rem;left:1rem}.qaid-buttons.qaid-auto-container.qaid-top-right{top:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-top-left{top:1rem;left:1rem}.qaid-buttons.qaid-incognito{opacity:0;transition:opacity .2s ease-in-out}.qaid-buttons.qaid-incognito:hover{opacity:1}.qaid-buttons.qaid-dismissed{display:none!important}.qaid-dismiss-btn{width:20px;height:20px;padding:0;border:none;border-radius:50%;background:#0006;color:#fff;display:flex;align-items:center;justify-content:center;align-self:center;opacity:0;transition:opacity .15s,background .15s;cursor:pointer;pointer-events:auto;-webkit-appearance:none;appearance:none}.qaid-dismiss-btn:hover{background:#0009}.qaid-buttons:hover .qaid-dismiss-btn{opacity:1}button.qaid-btn-structural{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;-webkit-appearance:none;appearance:none}.qaid-icon{width:24px;height:24px}:where(button.qaid-btn-structural)>svg:where(:not(.qaid-icon):not([width])){width:var(--qaid-icon-size, 24px);height:var(--qaid-icon-size, 24px)}.qaid-btn-structural:not(:has(svg)),.qaid-btn:not(:has(svg)){font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-emoji-icon{font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-buttons,.qaid-buttons *,.qaid-modal-container,.qaid-modal-container *{cursor:pointer!important}.qaid-tooltip-wrapper{position:relative}.qaid-tooltip-text{position:fixed;padding:.5rem .75rem;background:#1f2937;color:#fff;font-size:var(--qaid-font-size, 16px);font-weight:600;border-radius:.5rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:99999}.qaid-tooltip-text.qaid-tooltip-visible{opacity:1}.qaid-targeting-overlay{position:fixed;inset:0;z-index:40;pointer-events:none}.qaid-capture-layer{position:fixed;inset:0;pointer-events:none;z-index:9999}@keyframes qaid-slideDown{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.qaid-vignette{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 30%,rgba(0,0,0,.3) 70%,rgba(0,0,0,.6) 100%);z-index:41}.qaid-crosshair-h,.qaid-crosshair-v{position:fixed;pointer-events:none;z-index:42}.qaid-crosshair-h{left:0;right:0;height:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-crosshair-v{top:0;bottom:0;width:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-type-up .qaid-crosshair-h,.qaid-type-up .qaid-crosshair-v{background:color-mix(in srgb,var(--qaid-positive) 60%,transparent)}.qaid-highlight-box{position:fixed;top:0;left:0;pointer-events:none;z-index:41;display:none;border:3px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:2px;background:color-mix(in srgb,var(--qaid-negative) 8%,transparent);will-change:transform,width,height}.qaid-type-up .qaid-highlight-box{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent);background:color-mix(in srgb,var(--qaid-positive) 8%,transparent)}.qaid-scope{position:fixed;width:80px;height:80px;pointer-events:none;z-index:43;transform:translate(-50%,-50%)}.qaid-scope-ring{position:absolute;inset:10px;border:2px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent)}.qaid-scope-ring-inner{position:absolute;inset:20px;border:1px solid color-mix(in srgb,var(--qaid-negative) 50%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring-inner{border-color:color-mix(in srgb,var(--qaid-positive) 50%,transparent)}.qaid-scope-dot{position:absolute;top:50%;left:50%;width:4px;height:4px;background:var(--qaid-negative);border-radius:50%;transform:translate(-50%,-50%)}.qaid-type-up .qaid-scope-dot{background:var(--qaid-positive)}.qaid-selected-marker{position:fixed;border:3px solid var(--qaid-marker, #6365f1);border-radius:50%;pointer-events:none;z-index:44;animation:qaid-markerPulse 1.5s ease-in-out infinite}@keyframes qaid-markerPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.qaid-backdrop{position:fixed;inset:0;z-index:45;background:#0000004d}.qaid-modal-container{position:fixed;z-index:50;display:flex;flex-direction:column;align-items:flex-start;max-height:calc(100vh - 32px);font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-modal-container.qaid-above{flex-direction:column-reverse}.qaid-modal-arrow{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;position:relative;align-self:flex-start}.qaid-modal-container.qaid-below .qaid-modal-arrow{border-bottom:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-container.qaid-above .qaid-modal-arrow{border-top:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5));width:var(--qaid-modal-width, 400px);max-width:calc(100vw - 32px);max-height:calc(100vh - 60px);overflow-y:auto}.qaid-modal-header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1rem}button.qaid-type-toggle{border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;flex-shrink:0;-webkit-appearance:none;appearance:none}button.qaid-type-toggle:hover{transform:scale(1.1)}button.qaid-type-toggle:not(.qaid-type-toggle-custom){width:2.5rem;height:2.5rem;border-radius:50%}button.qaid-type-toggle:not(.qaid-type-toggle-custom) svg{width:1.25rem;height:1.25rem}button.qaid-type-toggle.qaid-type-up{background:var(--qaid-positive);color:#fff}button.qaid-type-toggle.qaid-type-down{background:var(--qaid-negative);color:#fff}.qaid-type-static{width:2.5rem;height:2.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--qaid-marker, #6365f1);color:var(--qaid-marker-text, white)}.qaid-type-static svg{width:1.25rem;height:1.25rem}.qaid-modal-header-text{flex:1;min-width:0}.qaid-modal-title{font-size:calc(var(--qaid-font-size, 16px) * 1.125);font-weight:700;margin:0 0 .25rem;color:light-dark(#1f2937,#f9fafb)}.qaid-modal-subtitle{color:light-dark(#6b7280,#9ca3af);margin:0;font-size:calc(var(--qaid-font-size, 16px) * .875)}.qaid-textarea{width:100%;height:6rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:var(--qaid-font-size, 16px);resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-btn-row{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-btn-submit{padding:.5rem 1rem;background:var(--qaid-marker);color:var(--qaid-marker-text, white);border:none;border-radius:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-btn-submit:hover{filter:brightness(.85)}button.qaid-btn-submit:focus{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 30%,transparent)}.qaid-bottom-sheet{position:fixed;bottom:0;left:0;right:0;z-index:50;animation:qaid-slideUpSheet .3s ease-out;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-bottom-sheet-content{background:light-dark(#ffffff,#1f2937);border-radius:1rem 1rem 0 0;padding:1.5rem;padding-bottom:max(1.5rem,env(safe-area-inset-bottom))}.qaid-bottom-sheet-handle{width:36px;height:4px;background:light-dark(rgba(0,0,0,.2),rgba(255,255,255,.2));border-radius:2px;margin:0 auto 1rem}@keyframes qaid-slideUpSheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}button.qaid-btn-record:hover{background:#dc2626;color:#fff}.qaid-recording-indicator{position:fixed;pointer-events:auto;top:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:light-dark(#1f2937,#374151);color:#fff;border-radius:9999px;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;box-shadow:0 4px 12px #0000004d;z-index:99999;animation:qaid-slideDown .2s ease-out}.qaid-recording-dot{width:10px;height:10px;background:#dc2626;border-radius:50%;animation:qaid-dotPulse 1.5s ease-in-out infinite}@keyframes qaid-dotPulse{0%,to{opacity:1}50%{opacity:.3}}.qaid-recording-time{font-variant-numeric:tabular-nums;min-width:2.5rem;text-align:center}button.qaid-recording-stop{padding:.25rem .75rem;background:#dc2626;color:#fff;border:none;border-radius:9999px;font-size:calc(var(--qaid-font-size, 16px) * .75);font-weight:600;cursor:pointer;transition:background-color .2s;-webkit-appearance:none;appearance:none}button.qaid-recording-stop:hover{background:#b91c1c}.qaid-video-preview{position:fixed;inset:0 0 auto;height:100vh;height:100dvh;display:flex;align-items:center;justify-content:center;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#0009;z-index:99998;animation:qaid-fadeIn .2s ease-out}@keyframes qaid-fadeIn{0%{opacity:0}to{opacity:1}}.qaid-video-preview-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px #00000080;width:560px;max-width:100%;max-height:100%;overflow-y:auto;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-video-preview-box h3{font-size:calc(var(--qaid-font-size, 16px) * 1.125);font-weight:700;margin:0 0 1rem;color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box video{width:100%;max-height:50vh;max-height:50dvh;object-fit:contain;border-radius:.5rem;background:#000;margin-bottom:1rem}.qaid-video-preview-box textarea{width:100%;height:4rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:calc(var(--qaid-font-size, 16px) * .875);resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-video-error{margin:0 0 .75rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;color:light-dark(#b91c1c,#fca5a5)}.qaid-video-preview-actions{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-video-btn{padding:.5rem 1rem;border:none;border-radius:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-video-btn-cancel{background:light-dark(#f3f4f6,#374151);color:light-dark(#374151,#d1d5db)}button.qaid-video-btn-cancel:hover{background:light-dark(#e5e7eb,#4b5563)}button.qaid-video-btn-rerecord{background:light-dark(#fef3c7,#78350f);color:light-dark(#92400e,#fde68a)}button.qaid-video-btn-rerecord:hover{filter:brightness(.9)}button.qaid-video-btn-send{background:var(--qaid-marker);color:var(--qaid-marker-text, white)}button.qaid-video-btn-send:hover{filter:brightness(.85)}button.qaid-video-btn-send:disabled{opacity:.5;cursor:not-allowed}.qaid-video-sending{display:flex;align-items:center;gap:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);color:light-dark(#6b7280,#9ca3af)}.qaid-annotate{position:fixed;inset:0;z-index:2147483000;display:flex;flex-direction:column;gap:.75rem;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#000000d9;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px);animation:qaid-fadeIn .2s ease-out}.qaid-annotate-title{margin:0;font-size:var(--qaid-font-size, 16px);font-weight:700;text-align:center;color:#f9fafb}.qaid-annotate-desc{margin:0;font-size:calc(var(--qaid-font-size, 16px) * .8125);line-height:1.4;text-align:center;color:#f9fafbbf}.qaid-annotate-stage{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;overflow:auto}.qaid-annotate-canvas{max-width:100%;max-height:100%;object-fit:contain;background:light-dark(#ffffff,#111827);border-radius:.5rem;box-shadow:0 10px 30px #00000080;touch-action:none;cursor:crosshair}.qaid-annotate-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:center;padding:.5rem .75rem;background:light-dark(#ffffff,#1f2937);border-radius:.75rem;box-shadow:0 10px 30px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5))}.qaid-annotate-tools,.qaid-annotate-actions{display:flex;gap:.375rem;align-items:center}button.qaid-annotate-tool,button.qaid-annotate-action{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;min-width:44px;min-height:44px;padding:0 .75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;background:light-dark(#f9fafb,#111827);color:light-dark(#1f2937,#f9fafb);font-family:inherit;font-size:calc(var(--qaid-font-size, 16px) * .8125);font-weight:600;cursor:pointer;-webkit-appearance:none;appearance:none;transition:background-color .15s,color .15s,border-color .15s,filter .15s}button.qaid-annotate-tool svg,button.qaid-annotate-action svg{width:20px;height:20px}.qaid-annotate-colors{display:flex;gap:.25rem;align-items:center}button.qaid-annotate-swatch{width:28px;height:28px;min-width:28px;padding:0;border-radius:9999px;border:2px solid light-dark(#d1d5db,#4b5563);background:var(--qaid-swatch, #000);cursor:pointer;-webkit-appearance:none;appearance:none;transition:transform .1s,box-shadow .15s,border-color .15s}button.qaid-annotate-swatch:hover{transform:scale(1.12)}button.qaid-annotate-swatch[aria-pressed=true]{border-color:light-dark(#111827,#f9fafb);box-shadow:0 0 0 2px var(--qaid-swatch)}@media(forced-colors:active){button.qaid-annotate-swatch[aria-pressed=true]{outline:2px solid Highlight;outline-offset:1px}}button.qaid-annotate-tool:hover,button.qaid-annotate-action:hover{background:light-dark(#eef2ff,#312e81)}button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{background:var(--qaid-marker, #6365f1);color:var(--qaid-marker-text, #fff);border-color:var(--qaid-marker, #6365f1)}button.qaid-annotate-done:hover{filter:brightness(.9);background:var(--qaid-marker, #6365f1)}button.qaid-annotate-action:disabled{opacity:.45;cursor:not-allowed}@media(forced-colors:active){button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{border:2px solid Highlight}.qaid-annotate-canvas{border:1px solid CanvasText}}button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible{outline:2px solid var(--qaid-marker, #6365f1);outline-offset:2px}.qaid-textarea:focus-visible,button.qaid-btn-submit:focus-visible,.qaid-video-preview-box textarea:focus-visible{outline:2px solid var(--qaid-marker, #6365f1);outline-offset:2px}.qaid-buttons.qaid-incognito:focus-within{opacity:1}.qaid-buttons:focus-within .qaid-dismiss-btn,.qaid-dismiss-btn:focus-visible{opacity:1}.qaid-dismiss-btn{min-width:24px;min-height:24px}button.qaid-recording-stop{min-height:24px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media(forced-colors:active){button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible,.qaid-textarea:focus,button.qaid-btn-submit:focus,.qaid-video-preview-box textarea:focus{outline:2px solid CanvasText;outline-offset:2px}.qaid-selected-marker,.qaid-highlight-box{border-color:Highlight}}.qaid-confirm{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.5rem;padding:.5rem 0}.qaid-confirm-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:9999px;color:#fff;background:var(--qaid-success, #22c55e);margin-bottom:.25rem;animation:qaid-confirm-pop .28s cubic-bezier(.34,1.56,.64,1)}.qaid-confirm-icon .qaid-icon{width:24px;height:24px}.qaid-confirm-error .qaid-confirm-icon{background:var(--qaid-error, #dc2626)}.qaid-confirm-title{margin:0;font-size:var(--qaid-font-size, 16px);font-weight:600;color:var(--qaid-text, light-dark(#111827, #f9fafb))}.qaid-confirm-title:focus-visible{outline:2px solid var(--qaid-primary, #6365f1);outline-offset:3px;border-radius:4px}.qaid-confirm-message{margin:0;font-size:calc(var(--qaid-font-size, 16px) * .875);color:var(--qaid-text-muted, light-dark(#6b7280, #9ca3af))}.qaid-confirm .qaid-confirm-close{margin-top:.5rem;min-width:96px}@keyframes qaid-confirm-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.qaid-confirm-icon{animation:none}}", Ht = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
3
3
  let b = 0;
4
- const Ct = "button.qaid-btn{width:var(--qaid-btn-size);height:var(--qaid-btn-size);border-radius:50%;border:none;background:#f3f4f6;color:#374151;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);transition:background-color .2s,color .2s,transform .2s;-webkit-appearance:none;appearance:none;--qaid-hover-up-bg:var(--qaid-positive);--qaid-hover-up-color:#fff;--qaid-hover-down-bg:var(--qaid-negative);--qaid-hover-down-color:#fff}button.qaid-btn:hover{transform:scale(1.05)}button.qaid-btn-up:hover{background:var(--qaid-hover-up-bg);color:var(--qaid-hover-up-color)}button.qaid-btn-down:hover{background:var(--qaid-hover-down-bg);color:var(--qaid-hover-down-color)}button.qaid-btn-feedback:hover{background:var(--qaid-marker,#6365f1);color:var(--qaid-marker-text,#fff)}button.qaid-btn svg{width:var(--qaid-icon-size);height:var(--qaid-icon-size)}", St = {
4
+ const Lt = "button.qaid-btn{width:var(--qaid-btn-size);height:var(--qaid-btn-size);border-radius:50%;border:none;background:#f3f4f6;color:#374151;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);transition:background-color .2s,color .2s,transform .2s;-webkit-appearance:none;appearance:none;--qaid-hover-up-bg:var(--qaid-positive);--qaid-hover-up-color:#fff;--qaid-hover-down-bg:var(--qaid-negative);--qaid-hover-down-color:#fff}button.qaid-btn:hover{transform:scale(1.05)}button.qaid-btn-up:hover{background:var(--qaid-hover-up-bg);color:var(--qaid-hover-up-color)}button.qaid-btn-down:hover{background:var(--qaid-hover-down-bg);color:var(--qaid-hover-down-color)}button.qaid-btn-feedback:hover{background:var(--qaid-marker,#6365f1);color:var(--qaid-marker-text,#fff)}button.qaid-btn svg{width:var(--qaid-icon-size);height:var(--qaid-icon-size)}", Mt = {
5
5
  small: 36,
6
6
  medium: 48,
7
7
  large: 64
8
- }, At = {
8
+ }, Bt = {
9
9
  small: 18,
10
10
  medium: 24,
11
11
  large: 32
12
12
  };
13
- function Tt(e, t, i) {
13
+ function Ot(e, t, i) {
14
14
  const [o, r, n] = [e, t, i].map((a) => (a = a / 255, a <= 0.03928 ? a / 12.92 : Math.pow((a + 0.055) / 1.055, 2.4)));
15
15
  return 0.2126 * o + 0.7152 * r + 0.0722 * n;
16
16
  }
17
- function Et(e) {
17
+ function Rt(e) {
18
18
  if (e.startsWith("#")) {
19
19
  const i = e.slice(1), o = i.length === 3 ? i.split("").map((n) => n + n).join("") : i, r = parseInt(o, 16);
20
20
  return {
@@ -30,11 +30,11 @@ function Et(e) {
30
30
  b: parseInt(t[3])
31
31
  } : null;
32
32
  }
33
- function It(e) {
34
- const t = Et(e);
35
- return t && Tt(t.r, t.g, t.b) > 0.4 ? "black" : "white";
33
+ function Pt(e) {
34
+ const t = Rt(e);
35
+ return t && Ot(t.r, t.g, t.b) > 0.4 ? "black" : "white";
36
36
  }
37
- function zt(e = {}) {
37
+ function Ft(e = {}) {
38
38
  const {
39
39
  positiveColor: t = "rgb(0, 200, 83)",
40
40
  negativeColor: i = "rgb(255, 0, 0)",
@@ -44,7 +44,7 @@ function zt(e = {}) {
44
44
  backdropOpacity: a = 0.3,
45
45
  fontFamily: l = "system-ui, -apple-system, sans-serif",
46
46
  fontSize: c = 16
47
- } = e, d = St[r], s = At[r], u = It(o);
47
+ } = e, d = Mt[r], s = Bt[r], u = Pt(o);
48
48
  return {
49
49
  "--qaid-positive": t,
50
50
  "--qaid-negative": i,
@@ -58,22 +58,22 @@ function zt(e = {}) {
58
58
  "--qaid-font-size": `${c}px`
59
59
  };
60
60
  }
61
- function Dt(e, t) {
61
+ function Ut(e, t) {
62
62
  for (const [i, o] of Object.entries(t))
63
63
  e.style.setProperty(i, o);
64
64
  }
65
- function _() {
66
- return wt + Ct;
65
+ function Q() {
66
+ return Dt + Lt;
67
67
  }
68
- function Ht() {
68
+ function Vt() {
69
69
  if (b++, b > 1) return;
70
70
  const e = document.createElement("style");
71
- e.id = "qaid-styles", e.textContent = kt, document.head.appendChild(e);
71
+ e.id = "qaid-styles", e.textContent = Ht, document.head.appendChild(e);
72
72
  }
73
- function Lt() {
73
+ function _t() {
74
74
  b <= 0 || (b--, b === 0 && document.getElementById("qaid-styles")?.remove());
75
75
  }
76
- const K = "data-qaid-a11y-live", Mt = "position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;", Bt = [
76
+ const W = "data-qaid-a11y-live", $t = "position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;", Kt = [
77
77
  "a[href]",
78
78
  "button",
79
79
  "input",
@@ -81,25 +81,25 @@ const K = "data-qaid-a11y-live", Mt = "position:absolute;width:1px;height:1px;ma
81
81
  "select",
82
82
  "[tabindex]"
83
83
  ].join(",");
84
- function Ot(e) {
84
+ function Nt(e) {
85
85
  return e.ownerDocument || document;
86
86
  }
87
- function Rt(e, t) {
87
+ function jt(e, t) {
88
88
  const i = t ? "assertive" : "polite", o = e.querySelector(
89
- `[${K}="${i}"]`
89
+ `[${W}="${i}"]`
90
90
  );
91
91
  if (o) return o;
92
- const n = Ot(e).createElement("div");
93
- return n.setAttribute(K, i), n.setAttribute("role", t ? "alert" : "status"), n.setAttribute("aria-live", t ? "assertive" : "polite"), n.setAttribute("aria-atomic", "true"), n.style.cssText = Mt, e.appendChild(n), n;
92
+ const n = Nt(e).createElement("div");
93
+ return n.setAttribute(W, i), n.setAttribute("role", t ? "alert" : "status"), n.setAttribute("aria-live", t ? "assertive" : "polite"), n.setAttribute("aria-atomic", "true"), n.style.cssText = $t, e.appendChild(n), n;
94
94
  }
95
- function Pt(e, t, i = {}) {
96
- const o = Rt(e, !!i.assertive);
95
+ function Qt(e, t, i = {}) {
96
+ const o = jt(e, !!i.assertive);
97
97
  o.textContent = "", o.textContent = t;
98
98
  }
99
- function Ft(e) {
99
+ function Wt(e) {
100
100
  return e.hasAttribute("disabled") ? !0 : e.disabled === !0;
101
101
  }
102
- function Ut(e) {
102
+ function Yt(e) {
103
103
  let t = e;
104
104
  for (; t; ) {
105
105
  if (t.hasAttribute("hidden")) return !0;
@@ -110,52 +110,52 @@ function Ut(e) {
110
110
  }
111
111
  return !1;
112
112
  }
113
- function $(e) {
113
+ function Y(e) {
114
114
  return Array.from(
115
- e.querySelectorAll(Bt)
116
- ).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") || Ft(i) || Ut(i)));
115
+ e.querySelectorAll(Kt)
116
+ ).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") || Wt(i) || Yt(i)));
117
117
  }
118
- function Y(e) {
118
+ function tt(e) {
119
119
  let t = e.activeElement;
120
120
  for (; t && t.shadowRoot && t.shadowRoot.activeElement; )
121
121
  t = t.shadowRoot.activeElement;
122
122
  return t instanceof HTMLElement ? t : null;
123
123
  }
124
- function Vt(e) {
124
+ function Xt(e) {
125
125
  const t = e.ownerDocument || document;
126
126
  let i = !1;
127
127
  const o = (n) => {
128
128
  if (n.key !== "Tab") return;
129
- const a = $(e);
129
+ const a = Y(e);
130
130
  if (a.length === 0) {
131
131
  n.preventDefault(), e.focus();
132
132
  return;
133
133
  }
134
- const l = a[0], c = a[a.length - 1], d = Y(t), s = d ? a.indexOf(d) !== -1 : !1;
134
+ const l = a[0], c = a[a.length - 1], d = tt(t), s = d ? a.indexOf(d) !== -1 : !1;
135
135
  n.shiftKey ? (!s || d === l) && (n.preventDefault(), c.focus()) : (!s || d === c) && (n.preventDefault(), l.focus());
136
136
  };
137
137
  e.addEventListener("keydown", o);
138
- const r = $(e);
138
+ const r = Y(e);
139
139
  return r.length > 0 ? r[0].focus() : (e.hasAttribute("tabindex") || (e.setAttribute("tabindex", "-1"), i = !0), e.focus()), {
140
140
  release() {
141
141
  e.removeEventListener("keydown", o), i && (e.removeAttribute("tabindex"), i = !1);
142
142
  }
143
143
  };
144
144
  }
145
- function _t() {
146
- return Y(document);
145
+ function Jt() {
146
+ return tt(document);
147
147
  }
148
- function Kt(e) {
148
+ function Gt(e) {
149
149
  if (!(!e || typeof e.focus != "function"))
150
150
  try {
151
151
  e.focus();
152
152
  } catch {
153
153
  }
154
154
  }
155
- function $t(e, t = {}) {
155
+ function Zt(e, t = {}) {
156
156
  e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "true"), t.labelledbyId && e.setAttribute("aria-labelledby", t.labelledbyId), t.describedbyId && e.setAttribute("aria-describedby", t.describedbyId), t.label && e.setAttribute("aria-label", t.label);
157
157
  }
158
- function Nt(e, t) {
158
+ function te(e, t) {
159
159
  let i = e;
160
160
  for (; i && i !== t; ) {
161
161
  const o = i.parentNode;
@@ -169,11 +169,11 @@ function Nt(e, t) {
169
169
  }
170
170
  return null;
171
171
  }
172
- function jt(e) {
172
+ function ee(e) {
173
173
  const i = (e.ownerDocument || document).body;
174
174
  if (!i) return () => {
175
175
  };
176
- const o = Nt(e, i), r = [];
176
+ const o = te(e, i), r = [];
177
177
  return Array.from(i.children).forEach((n) => {
178
178
  if (!(n instanceof HTMLElement) || o && n === o) return;
179
179
  const a = n.inert === !0, l = n.getAttribute("aria-hidden");
@@ -185,14 +185,14 @@ function jt(e) {
185
185
  }
186
186
  };
187
187
  }
188
- const X = {
188
+ const et = {
189
189
  width: 400,
190
190
  height: 280,
191
191
  arrowHeight: 12,
192
192
  gap: 8,
193
193
  viewportPadding: 16
194
194
  };
195
- function Qt(e, t, i, o, r) {
195
+ function ie(e, t, i, o, r) {
196
196
  const n = e.y, a = t - (e.y + e.height);
197
197
  if (a >= i + o)
198
198
  return {
@@ -211,22 +211,22 @@ function Qt(e, t, i, o, r) {
211
211
  t - i - r
212
212
  ) : c = Math.max(r, e.y - i - o), { top: c, position: l };
213
213
  }
214
- function Wt(e, t, i, o) {
214
+ function oe(e, t, i, o) {
215
215
  let n = e.x + e.width / 2 - i / 2;
216
216
  return n = Math.max(o, Math.min(n, t - i - o)), n;
217
217
  }
218
- function Yt(e, t, i, o = 24, r = 24) {
218
+ function ae(e, t, i, o = 24, r = 24) {
219
219
  const a = e.clickX - t - r / 2;
220
220
  return Math.max(o, Math.min(a, i - o - r / 2));
221
221
  }
222
- function Xt(e, t, i, o = X) {
223
- const r = o.height + o.arrowHeight, n = Qt(
222
+ function ne(e, t, i, o = et) {
223
+ const r = o.height + o.arrowHeight, n = ie(
224
224
  e,
225
225
  i,
226
226
  r,
227
227
  o.gap,
228
228
  o.viewportPadding
229
- ), a = Wt(
229
+ ), a = oe(
230
230
  e,
231
231
  t,
232
232
  o.width,
@@ -238,15 +238,15 @@ function Xt(e, t, i, o = X) {
238
238
  position: n.position
239
239
  };
240
240
  }
241
- function Gt(e, t, i, o = {}) {
241
+ function re(e, t, i, o = {}) {
242
242
  const r = o.gap ?? 8;
243
243
  let n = e.bottom + r;
244
244
  n + t.height > i.height - r && (n = e.top - t.height - r);
245
245
  let a = e.left;
246
246
  return a < r ? a = r : a + t.width > i.width - r && (a = i.width - t.width - r), n < r ? n = r : n + t.height > i.height - r && (n = i.height - t.height - r), { top: n, left: a };
247
247
  }
248
- function pe(e, t, i, o = X) {
249
- const r = Xt(e, t, i, o), n = Yt(
248
+ function Ce(e, t, i, o = et) {
249
+ const r = ne(e, t, i, o), n = ae(
250
250
  e,
251
251
  r.left,
252
252
  o.width
@@ -256,15 +256,15 @@ function pe(e, t, i, o = X) {
256
256
  arrow: { left: n }
257
257
  };
258
258
  }
259
- const Jt = 20;
260
- function Zt(e) {
259
+ const se = 20;
260
+ function de(e) {
261
261
  const t = [], i = console.error, o = console.warn, r = console.log, n = (a, l) => {
262
262
  const c = {
263
263
  message: l.map((d) => String(d)).join(" "),
264
264
  timestamp: Date.now(),
265
265
  level: a
266
266
  };
267
- t.length >= Jt && t.shift(), t.push(c), e && e(c);
267
+ t.length >= se && t.shift(), t.push(c), e && e(c);
268
268
  };
269
269
  return console.error = function(...a) {
270
270
  n("error", a), i.apply(console, a);
@@ -279,7 +279,7 @@ function Zt(e) {
279
279
  }
280
280
  };
281
281
  }
282
- const te = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", ee = (e) => (
282
+ const le = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", ce = (e) => (
283
283
  // The URL is a runtime value, not a static specifier — keep Vite from
284
284
  // trying to analyze/bundle it.
285
285
  import(
@@ -287,19 +287,19 @@ const te = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", ee =
287
287
  e
288
288
  )
289
289
  );
290
- let ie = ee, p = null, w = null;
291
- function oe(e) {
292
- return p && w === e || (w = e, p = Promise.resolve(ie(e)).then((t) => {
290
+ let ue = ce, p = null, k = null;
291
+ function he(e) {
292
+ return p && k === e || (k = e, p = Promise.resolve(ue(e)).then((t) => {
293
293
  const i = t;
294
294
  if (!i || typeof i.QaidQuests != "function")
295
295
  throw new Error("quests module has no QaidQuests export");
296
296
  return i;
297
297
  }).catch((t) => {
298
- throw p = null, w = null, t;
298
+ throw p = null, k = null, t;
299
299
  })), p;
300
300
  }
301
- async function ae(e) {
302
- const t = await oe(e.moduleUrl), i = e.base.replace(/\/+$/, ""), o = e.feedbackId != null ? { feedbackId: e.feedbackId } : void 0;
301
+ async function fe(e) {
302
+ const t = await he(e.moduleUrl), i = e.base.replace(/\/+$/, ""), o = e.feedbackId != null ? { feedbackId: e.feedbackId } : void 0;
303
303
  return new t.QaidQuests({
304
304
  endpoint: `${i}/responses`,
305
305
  configUrl: `${i}/${encodeURIComponent(e.questId)}/definition`,
@@ -308,7 +308,7 @@ async function ae(e) {
308
308
  onClose: e.onClose
309
309
  });
310
310
  }
311
- const N = "qaid_visitor_id", j = "qaid_hide_feedback", ne = [
311
+ const X = "qaid_visitor_id", J = "qaid_hide_feedback", pe = [
312
312
  "#ef4444",
313
313
  "#f59e0b",
314
314
  "#22c55e",
@@ -316,26 +316,26 @@ const N = "qaid_visitor_id", j = "qaid_hide_feedback", ne = [
316
316
  "#111827",
317
317
  "#ffffff"
318
318
  ];
319
- function re() {
319
+ function be() {
320
320
  return typeof window.matchMedia == "function" && window.matchMedia("(pointer: coarse)").matches;
321
321
  }
322
- function k(e) {
323
- return e ? `${j}_${e}` : j;
322
+ function S(e) {
323
+ return e ? `${J}_${e}` : J;
324
324
  }
325
- function se(e) {
325
+ function me(e) {
326
326
  try {
327
- return localStorage.getItem(k(e)) === "1";
327
+ return localStorage.getItem(S(e)) === "1";
328
328
  } catch {
329
329
  return !1;
330
330
  }
331
331
  }
332
- function Q(e, t = !0) {
332
+ function G(e, t = !0) {
333
333
  try {
334
- t ? localStorage.setItem(k(e), "1") : localStorage.removeItem(k(e));
334
+ t ? localStorage.setItem(S(e), "1") : localStorage.removeItem(S(e));
335
335
  } catch {
336
336
  }
337
337
  }
338
- function W() {
338
+ function Z() {
339
339
  const e = typeof crypto < "u" ? crypto : void 0;
340
340
  if (e && typeof e.randomUUID == "function") return e.randomUUID();
341
341
  const t = new Uint8Array(16);
@@ -347,15 +347,15 @@ function W() {
347
347
  const i = Array.from(t, (o) => o.toString(16).padStart(2, "0")).join("");
348
348
  return `${i.slice(0, 8)}-${i.slice(8, 12)}-${i.slice(12, 16)}-${i.slice(16, 20)}-${i.slice(20)}`;
349
349
  }
350
- function de() {
350
+ function ge() {
351
351
  try {
352
- let e = localStorage.getItem(N);
353
- return e || (e = W(), localStorage.setItem(N, e)), e;
352
+ let e = localStorage.getItem(X);
353
+ return e || (e = Z(), localStorage.setItem(X, e)), e;
354
354
  } catch {
355
- return W();
355
+ return Z();
356
356
  }
357
357
  }
358
- class le {
358
+ class ve {
359
359
  config;
360
360
  state = "IDLE";
361
361
  feedbackData = {
@@ -473,7 +473,7 @@ class le {
473
473
  captureScreenshot: t.captureScreenshot ?? !1,
474
474
  annotate: t.annotate ?? !0,
475
475
  annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6365f1",
476
- annotationPalette: t.annotationPalette ?? ne,
476
+ annotationPalette: t.annotationPalette ?? pe,
477
477
  screenshotMethod: t.screenshotMethod ?? "permission",
478
478
  screenshotOptions: {
479
479
  quality: t.screenshotOptions?.quality ?? 0.8,
@@ -500,12 +500,12 @@ class le {
500
500
  video: t.quests?.video ?? "",
501
501
  // Quest service reuses the feedback API key unless overridden.
502
502
  apiKey: t.quests?.apiKey ?? t.apiKey ?? "",
503
- moduleUrl: t.quests?.moduleUrl ?? te
503
+ moduleUrl: t.quests?.moduleUrl ?? le
504
504
  }
505
- }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = de(), this.init();
505
+ }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = ge(), this.init();
506
506
  }
507
507
  applyVars(t) {
508
- Dt(t, this.cssVars);
508
+ Ut(t, this.cssVars);
509
509
  }
510
510
  /**
511
511
  * Announce a message via the shared visually-hidden live regions.
@@ -515,7 +515,7 @@ class le {
515
515
  */
516
516
  announceMsg(t, i = !1) {
517
517
  const o = this.overlayShadowRoot ?? this.shadowRoot;
518
- o && Pt(o, t, { assertive: i });
518
+ o && Qt(o, t, { assertive: i });
519
519
  }
520
520
  /**
521
521
  * Turn a transient surface into an accessible modal dialog: save the
@@ -523,16 +523,16 @@ class le {
523
523
  * background. Paired with closeDialogA11y() on every close path.
524
524
  */
525
525
  openDialogA11y(t, i) {
526
- this.dialogTrigger = _t(), $t(t, i), this.dialogTrap = Vt(t), this.dialogRestoreInert = jt(t);
526
+ this.dialogTrigger = Jt(), Zt(t, i), this.dialogTrap = Xt(t), this.dialogRestoreInert = ee(t);
527
527
  }
528
528
  closeDialogA11y() {
529
- this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Kt(this.dialogTrigger), this.dialogTrigger = null;
529
+ this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Gt(this.dialogTrigger), this.dialogTrigger = null;
530
530
  }
531
531
  clearActiveThumb() {
532
532
  this.activeThumbBtn && (this.activeThumbBtn.setAttribute("aria-pressed", "false"), this.activeThumbBtn = null);
533
533
  }
534
534
  init() {
535
- Ht(), this.cssVars = zt({
535
+ Vt(), this.cssVars = Ft({
536
536
  positiveColor: this.config.colors.positive,
537
537
  negativeColor: this.config.colors.negative,
538
538
  markerColor: this.config.colors.marker,
@@ -541,7 +541,7 @@ class le {
541
541
  backdropOpacity: this.config.backdropOpacity,
542
542
  fontFamily: this.config.fontFamily,
543
543
  fontSize: this.config.fontSize
544
- }), !this.config.hideDismiss && se(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = Zt((t) => {
544
+ }), !this.config.hideDismiss && me(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = de((t) => {
545
545
  this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
546
546
  }), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom(), (this.config.captureVideo && this.videoSupported() || this.config.captureScreenshot) && this.schedulePrewarm(() => {
547
547
  this.config.captureVideo && this.videoSupported() && this.prewarmVideo(), this.config.captureScreenshot && this.prewarmScreenshot();
@@ -554,7 +554,7 @@ class le {
554
554
  * swallowed — a failed preload just falls back to an on-demand load.
555
555
  */
556
556
  prewarmVideo() {
557
- this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-Dx8AX-BC.js").catch(() => {
557
+ this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-CcfOfIC7.js").catch(() => {
558
558
  }), import("./video-Bd_29-rK.js").catch(() => {
559
559
  }));
560
560
  }
@@ -589,7 +589,7 @@ class le {
589
589
  }), this.domObserver.observe(document.body, { childList: !0 });
590
590
  }
591
591
  checkMobile() {
592
- this.isMobile = gt();
592
+ this.isMobile = At();
593
593
  }
594
594
  handleResize() {
595
595
  this.checkMobile();
@@ -599,7 +599,7 @@ class le {
599
599
  let t = null;
600
600
  this.config.container && (t = document.querySelector(this.config.container)), t ? (t.appendChild(this.shadowHost), this.isUserProvidedContainer = !0, this.config.hideDismiss = !0) : (this.shadowHost.style.position = "fixed", this.shadowHost.style.display = "block", this.shadowHost.style.inset = "0", this.shadowHost.style.pointerEvents = "none", this.shadowHost.style.zIndex = String(this.config.zIndex), document.body.appendChild(this.shadowHost)), this.shadowRoot = this.shadowHost.attachShadow({ mode: "open" });
601
601
  const i = document.createElement("style");
602
- if (i.textContent = _(), this.shadowRoot.appendChild(i), this.config.css) {
602
+ if (i.textContent = Q(), this.shadowRoot.appendChild(i), this.config.css) {
603
603
  const d = document.createElement("style");
604
604
  d.textContent = this.config.css, this.shadowRoot.appendChild(d);
605
605
  }
@@ -623,20 +623,20 @@ class le {
623
623
  const d = document.createElement("div");
624
624
  d.className = "qaid-tooltip-wrapper";
625
625
  const s = document.createElement("button");
626
- s.type = "button", s.className = r ? `${n} qaid-btn-feedback` : "qaid-btn qaid-btn-feedback", s.setAttribute("aria-label", this.config.text.feedbackLabel), s.innerHTML = this.config.feedbackIcon || vt, s.addEventListener("click", (u) => this.handleThumbClick("neutral", u.currentTarget, u)), s.addEventListener("mouseenter", () => {
626
+ s.type = "button", s.className = r ? `${n} qaid-btn-feedback` : "qaid-btn qaid-btn-feedback", s.setAttribute("aria-label", this.config.text.feedbackLabel), s.innerHTML = this.config.feedbackIcon || Tt, s.addEventListener("click", (u) => this.handleThumbClick("neutral", u.currentTarget, u)), s.addEventListener("mouseenter", () => {
627
627
  this.prewarmTargeting(), this.showTooltip(s);
628
628
  }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s), this.buttonsContainer.appendChild(d);
629
629
  } else if (!this.config.hideThumbs) {
630
630
  const d = document.createElement("div");
631
631
  d.className = "qaid-tooltip-wrapper";
632
632
  const s = document.createElement("button");
633
- s.type = "button", s.className = r ? `${n} qaid-btn-up` : "qaid-btn qaid-btn-up", s.setAttribute("aria-label", this.config.text.positiveLabel), s.innerHTML = this.config.positiveIcon || yt, s.addEventListener("click", (f) => this.handleThumbClick("up", f.currentTarget, f)), s.addEventListener("mouseenter", () => {
633
+ s.type = "button", s.className = r ? `${n} qaid-btn-up` : "qaid-btn qaid-btn-up", s.setAttribute("aria-label", this.config.text.positiveLabel), s.innerHTML = this.config.positiveIcon || It, s.addEventListener("click", (f) => this.handleThumbClick("up", f.currentTarget, f)), s.addEventListener("mouseenter", () => {
634
634
  this.prewarmTargeting(), this.showTooltip(s);
635
635
  }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s);
636
636
  const u = document.createElement("div");
637
637
  u.className = "qaid-tooltip-wrapper";
638
638
  const h = document.createElement("button");
639
- h.type = "button", h.className = r ? `${n} qaid-btn-down` : "qaid-btn qaid-btn-down", h.setAttribute("aria-label", this.config.text.negativeLabel), h.innerHTML = this.config.negativeIcon || qt, h.addEventListener("click", (f) => this.handleThumbClick("down", f.currentTarget, f)), h.addEventListener("mouseenter", () => {
639
+ h.type = "button", h.className = r ? `${n} qaid-btn-down` : "qaid-btn qaid-btn-down", h.setAttribute("aria-label", this.config.text.negativeLabel), h.innerHTML = this.config.negativeIcon || Et, h.addEventListener("click", (f) => this.handleThumbClick("down", f.currentTarget, f)), h.addEventListener("mouseenter", () => {
640
640
  this.prewarmTargeting(), this.showTooltip(h);
641
641
  }), h.addEventListener("mouseleave", () => this.hideTooltip()), u.appendChild(h), this.buttonsContainer.appendChild(d), this.buttonsContainer.appendChild(u);
642
642
  }
@@ -644,7 +644,7 @@ class le {
644
644
  const d = document.createElement("div");
645
645
  d.className = "qaid-tooltip-wrapper";
646
646
  const s = document.createElement("button");
647
- s.type = "button", s.className = r ? `${n} qaid-btn-record` : "qaid-btn qaid-btn-record", s.setAttribute("aria-label", this.config.text.recordLabel), s.innerHTML = this.config.recordIcon || xt, s.addEventListener("click", () => {
647
+ s.type = "button", s.className = r ? `${n} qaid-btn-record` : "qaid-btn qaid-btn-record", s.setAttribute("aria-label", this.config.text.recordLabel), s.innerHTML = this.config.recordIcon || zt, s.addEventListener("click", () => {
648
648
  this.ensureRecording().then(
649
649
  (h) => this.config.videoOptions.redaction ? h.startPicking() : h.startRecording()
650
650
  );
@@ -668,7 +668,7 @@ class le {
668
668
  if (this.overlayShadowRoot) return this.overlayShadowRoot;
669
669
  this.overlayShadowHost = document.createElement("div"), this.overlayShadowHost.setAttribute("data-qaid-embed-overlay", ""), this.overlayShadowHost.style.position = "fixed", this.overlayShadowHost.style.inset = "0", this.overlayShadowHost.style.pointerEvents = "none", this.overlayShadowHost.style.zIndex = String(this.config.zIndex), document.body.appendChild(this.overlayShadowHost), this.overlayShadowRoot = this.overlayShadowHost.attachShadow({ mode: "open" });
670
670
  const t = document.createElement("style");
671
- if (t.textContent = _(), this.overlayShadowRoot.appendChild(t), this.config.css) {
671
+ if (t.textContent = Q(), this.overlayShadowRoot.appendChild(t), this.config.css) {
672
672
  const i = document.createElement("style");
673
673
  i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
674
674
  }
@@ -678,7 +678,7 @@ class le {
678
678
  showTooltip(t) {
679
679
  const i = this.tooltipElement;
680
680
  i.style.visibility = "hidden", i.classList.add("qaid-tooltip-visible");
681
- const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Gt(
681
+ const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = re(
682
682
  o,
683
683
  r,
684
684
  { width: window.innerWidth, height: window.innerHeight }
@@ -689,10 +689,10 @@ class le {
689
689
  this.tooltipElement.classList.remove("qaid-tooltip-visible");
690
690
  }
691
691
  handleDismiss() {
692
- this.buttonsContainer.classList.add("qaid-dismissed"), Q(this.config.apiKey, !0);
692
+ this.buttonsContainer.classList.add("qaid-dismissed"), G(this.config.apiKey, !0);
693
693
  }
694
694
  handleThumbClick(t, i, o) {
695
- if (this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"), Q(this.config.apiKey, !1)), this.prewarmModal(), this.config.skipTargeting || this.config.feedbackMode === "annotate")
695
+ if (this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"), G(this.config.apiKey, !1)), this.prewarmModal(), this.config.skipTargeting || this.config.feedbackMode === "annotate")
696
696
  this.submitDirectFeedback(t, i);
697
697
  else {
698
698
  this.activeThumbBtn = i, i.setAttribute("aria-pressed", "true");
@@ -725,7 +725,7 @@ class le {
725
725
  * instead of the permission-based Screen Capture API. Explicit "dom" wins;
726
726
  * otherwise DOM is used on touch devices to avoid the getDisplayMedia prompt. */
727
727
  shouldCaptureViaDom() {
728
- return this.config.screenshotMethod === "dom" || re();
728
+ return this.config.screenshotMethod === "dom" || be();
729
729
  }
730
730
  /**
731
731
  * Open the full-screen annotation editor over the captured screenshot,
@@ -842,7 +842,7 @@ class le {
842
842
  const o = this.questIdFor(t);
843
843
  if (!o) return !1;
844
844
  try {
845
- return this.activeQuest?.destroy(), this.activeQuest = await ae({
845
+ return this.activeQuest?.destroy(), this.activeQuest = await fe({
846
846
  questId: o,
847
847
  base: this.config.quests.base,
848
848
  apiKey: this.config.quests.apiKey || void 0,
@@ -871,7 +871,7 @@ class le {
871
871
  */
872
872
  async ensureModal() {
873
873
  if (!this.modal) {
874
- const { ModalController: t } = await import("./modal-CTbqN-h9.js");
874
+ const { ModalController: t } = await import("./modal-CEfcaIQR.js");
875
875
  this.modal = new t(this.makeModalHost());
876
876
  }
877
877
  return this.modal;
@@ -917,7 +917,7 @@ class le {
917
917
  }
918
918
  /** Warm the modal chunk while the user is targeting, so it opens instantly. */
919
919
  prewarmModal() {
920
- this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-CTbqN-h9.js").catch(() => {
920
+ this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-CEfcaIQR.js").catch(() => {
921
921
  }));
922
922
  }
923
923
  /**
@@ -991,7 +991,7 @@ class le {
991
991
  */
992
992
  async ensureRecording() {
993
993
  if (!this.recording) {
994
- const { RecordingController: t } = await import("./recording-Dx8AX-BC.js");
994
+ const { RecordingController: t } = await import("./recording-CcfOfIC7.js");
995
995
  this.recording = new t(this.makeRecordingHost());
996
996
  }
997
997
  return this.recording;
@@ -1047,13 +1047,13 @@ class le {
1047
1047
  const t = window;
1048
1048
  this.prewarmIsTimeout ? clearTimeout(this.prewarmHandle) : t.cancelIdleCallback?.(this.prewarmHandle), this.prewarmHandle = null;
1049
1049
  }
1050
- this.recording?.destroy(), this.recording = null, this.modal?.destroy(), this.modal = null, this.activeQuest?.destroy(), this.activeQuest = null, this.consoleCapture && (this.consoleCapture.restore(), this.consoleCapture = null), window.removeEventListener("resize", this.boundResize), document.removeEventListener("keydown", this.boundKeyDown), document.body.classList.remove("qaid-targeting", "qaid-type-up"), document.body.style.removeProperty("--qaid-positive"), document.body.style.removeProperty("--qaid-negative"), this.shadowHost && (this.shadowHost.remove(), this.shadowHost = null, this.shadowRoot = null), this.overlayShadowHost && (this.overlayShadowHost.remove(), this.overlayShadowHost = null, this.overlayShadowRoot = null), this.buttonsContainer = null, this.dismissBtn = null, this.tooltipElement = null, Lt();
1050
+ this.recording?.destroy(), this.recording = null, this.modal?.destroy(), this.modal = null, this.activeQuest?.destroy(), this.activeQuest = null, this.consoleCapture && (this.consoleCapture.restore(), this.consoleCapture = null), window.removeEventListener("resize", this.boundResize), document.removeEventListener("keydown", this.boundKeyDown), document.body.classList.remove("qaid-targeting", "qaid-type-up"), document.body.style.removeProperty("--qaid-positive"), document.body.style.removeProperty("--qaid-negative"), this.shadowHost && (this.shadowHost.remove(), this.shadowHost = null, this.shadowRoot = null), this.overlayShadowHost && (this.overlayShadowHost.remove(), this.overlayShadowHost = null, this.overlayShadowRoot = null), this.buttonsContainer = null, this.dismissBtn = null, this.tooltipElement = null, _t();
1051
1051
  }
1052
1052
  }
1053
- function G(e) {
1053
+ function it(e) {
1054
1054
  return document.querySelector(e)?.textContent?.trim() ?? "";
1055
1055
  }
1056
- function ce() {
1056
+ function ye() {
1057
1057
  const e = document.querySelector(
1058
1058
  'script[type="application/json"][data-feedback-config]'
1059
1059
  );
@@ -1062,31 +1062,72 @@ function ce() {
1062
1062
  if (!t) return null;
1063
1063
  try {
1064
1064
  const i = JSON.parse(t);
1065
- return i.cssSelector && !i.css && (i.css = G(i.cssSelector), delete i.cssSelector), i;
1065
+ return i.cssSelector && !i.css && (i.css = it(i.cssSelector), delete i.cssSelector), i;
1066
1066
  } catch {
1067
1067
  return null;
1068
1068
  }
1069
1069
  }
1070
- function ue(e) {
1070
+ function ot(e, t, i) {
1071
+ console.warn(`[thumbs-embed] Ignoring ${e}="${t}": expected ${i}.`);
1072
+ }
1073
+ function qe(e) {
1074
+ const t = [];
1075
+ let i = 0, o = "";
1076
+ for (const r of e)
1077
+ r === "(" && i++, r === ")" && (i = Math.max(0, i - 1)), r === "," && i === 0 ? (t.push(o.trim()), o = "") : o += r;
1078
+ return t.push(o.trim()), t;
1079
+ }
1080
+ function xe(e, t) {
1081
+ if (t === null) return;
1082
+ const i = t.trim();
1083
+ let o = null;
1084
+ if (i.startsWith("[") || i.startsWith("{"))
1085
+ try {
1086
+ o = JSON.parse(i);
1087
+ } catch {
1088
+ o = null;
1089
+ }
1090
+ else
1091
+ o = qe(i);
1092
+ if (Array.isArray(o) && o.length > 0 && o.every((r) => typeof r == "string" && r.trim() !== ""))
1093
+ return o.map((r) => r.trim());
1094
+ ot(e, t, "a JSON array of colours or a comma-separated list");
1095
+ }
1096
+ function m(e, t) {
1097
+ if (t !== null) {
1098
+ if (t.trim() === "") {
1099
+ ot(e, t, "a non-empty label");
1100
+ return;
1101
+ }
1102
+ return t;
1103
+ }
1104
+ }
1105
+ function we(e) {
1071
1106
  const t = e.getAttribute("data-endpoint");
1072
1107
  if (!t) return null;
1073
- const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"), r = e.getAttribute("data-positive-color"), n = e.getAttribute("data-negative-color"), a = e.getAttribute("data-marker-color"), l = e.getAttribute("data-container"), c = e.getAttribute("data-button-class"), d = e.getAttribute("data-skip-targeting"), s = e.getAttribute("data-hide-confirmation"), u = e.getAttribute("data-single-button"), h = e.getAttribute("data-feedback-mode"), f = e.getAttribute("data-incognito"), J = e.getAttribute("data-button-size"), m = e.getAttribute("data-offset-x"), g = e.getAttribute("data-offset-y"), C = e.getAttribute("data-modal-width"), S = e.getAttribute("data-backdrop-opacity"), Z = e.getAttribute("data-font-family"), A = e.getAttribute("data-font-size"), T = e.getAttribute("data-tooltip"), E = e.getAttribute("data-modal-title"), I = e.getAttribute("data-confirmation-title"), z = e.getAttribute("data-confirmation-message"), D = e.getAttribute("data-confirmation-close"), H = e.getAttribute("data-error-title"), L = e.getAttribute("data-error-message"), M = e.getAttribute("data-modal-subtitle"), B = e.getAttribute("data-placeholder"), O = e.getAttribute("data-submit-button"), R = e.getAttribute("data-skip-button"), tt = e.getAttribute("data-positive-icon"), et = e.getAttribute("data-negative-icon"), it = e.getAttribute("data-feedback-icon"), P = e.getAttribute("data-feedback-label"), ot = e.getAttribute("data-api-key"), at = e.getAttribute("data-capture-screenshot"), nt = e.getAttribute("data-annotate"), rt = e.getAttribute("data-annotation-color"), v = e.getAttribute("data-screenshot-quality"), y = e.getAttribute("data-screenshot-max-width"), q = e.getAttribute("data-screenshot-max-height"), st = e.getAttribute("data-capture-video"), F = e.getAttribute("data-video-redaction"), dt = e.getAttribute("data-hide-thumbs"), lt = e.getAttribute("data-hide-dismiss"), x = e.getAttribute("data-video-max-duration"), ct = e.getAttribute("data-screenshot-method"), ut = e.getAttribute("data-direction"), U = e.getAttribute("data-css-selector"), V = e.getAttribute("data-quest-base"), ht = e.getAttribute("data-quest-up"), ft = e.getAttribute("data-quest-down"), pt = e.getAttribute("data-quest-video"), bt = e.getAttribute("data-quest-api-key"), mt = e.getAttribute("data-quest-module-url");
1108
+ const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"), r = e.getAttribute("data-positive-color"), n = e.getAttribute("data-negative-color"), a = e.getAttribute("data-marker-color"), l = e.getAttribute("data-container"), c = e.getAttribute("data-button-class"), d = e.getAttribute("data-skip-targeting"), s = e.getAttribute("data-hide-confirmation"), u = e.getAttribute("data-single-button"), h = e.getAttribute("data-feedback-mode"), f = e.getAttribute("data-incognito"), at = e.getAttribute("data-button-size"), g = e.getAttribute("data-offset-x"), v = e.getAttribute("data-offset-y"), C = e.getAttribute("data-modal-width"), A = e.getAttribute("data-backdrop-opacity"), nt = e.getAttribute("data-font-family"), T = e.getAttribute("data-font-size"), I = e.getAttribute("data-tooltip"), E = e.getAttribute("data-modal-title"), z = e.getAttribute("data-confirmation-title"), D = e.getAttribute("data-confirmation-message"), H = e.getAttribute("data-confirmation-close"), L = e.getAttribute("data-error-title"), M = e.getAttribute("data-error-message"), B = e.getAttribute("data-modal-subtitle"), O = e.getAttribute("data-placeholder"), R = e.getAttribute("data-submit-button"), P = e.getAttribute("data-skip-button"), rt = e.getAttribute("data-positive-icon"), st = e.getAttribute("data-negative-icon"), dt = e.getAttribute("data-feedback-icon"), F = e.getAttribute("data-feedback-label"), lt = e.getAttribute("data-api-key"), ct = e.getAttribute("data-capture-screenshot"), ut = e.getAttribute("data-annotate"), ht = e.getAttribute("data-annotation-color"), y = e.getAttribute("data-screenshot-quality"), q = e.getAttribute("data-screenshot-max-width"), x = e.getAttribute("data-screenshot-max-height"), ft = e.getAttribute("data-capture-video"), U = e.getAttribute("data-video-redaction"), pt = e.getAttribute("data-hide-thumbs"), bt = e.getAttribute("data-hide-dismiss"), w = e.getAttribute("data-video-max-duration"), mt = e.getAttribute("data-screenshot-method"), gt = e.getAttribute("data-direction"), V = e.getAttribute("data-css-selector"), vt = e.getAttribute("data-css"), _ = m("data-positive-label", e.getAttribute("data-positive-label")), $ = m("data-negative-label", e.getAttribute("data-negative-label")), K = m("data-record-label", e.getAttribute("data-record-label")), N = m("data-dismiss-label", e.getAttribute("data-dismiss-label")), yt = xe(
1109
+ "data-annotation-palette",
1110
+ e.getAttribute("data-annotation-palette")
1111
+ ), qt = e.getAttribute("data-record-icon"), j = e.getAttribute("data-quest-base"), xt = e.getAttribute("data-quest-up"), wt = e.getAttribute("data-quest-down"), kt = e.getAttribute("data-quest-video"), St = e.getAttribute("data-quest-api-key"), Ct = e.getAttribute("data-quest-module-url");
1074
1112
  return {
1075
1113
  endpoint: t,
1076
- css: U ? G(U) : void 0,
1077
- apiKey: ot ?? void 0,
1078
- captureScreenshot: at === "true" ? !0 : void 0,
1114
+ // Inline CSS wins over a selector, as `css` wins over `cssSelector` in
1115
+ // the JSON block.
1116
+ css: vt || (V ? it(V) : void 0),
1117
+ apiKey: lt ?? void 0,
1118
+ captureScreenshot: ct === "true" ? !0 : void 0,
1079
1119
  // Annotation is on by default; only an explicit "false" disables it.
1080
- annotate: nt === "false" ? !1 : void 0,
1081
- annotationColor: rt ?? void 0,
1082
- screenshotOptions: v || y || q ? {
1083
- quality: v ? parseFloat(v) : void 0,
1084
- maxWidth: y ? parseInt(y, 10) : void 0,
1085
- maxHeight: q ? parseInt(q, 10) : void 0
1120
+ annotate: ut === "false" ? !1 : void 0,
1121
+ annotationColor: ht ?? void 0,
1122
+ annotationPalette: yt,
1123
+ screenshotOptions: y || q || x ? {
1124
+ quality: y ? parseFloat(y) : void 0,
1125
+ maxWidth: q ? parseInt(q, 10) : void 0,
1126
+ maxHeight: x ? parseInt(x, 10) : void 0
1086
1127
  } : void 0,
1087
1128
  container: l ?? void 0,
1088
1129
  buttonClass: c ?? void 0,
1089
- direction: ut ?? void 0,
1130
+ direction: gt ?? void 0,
1090
1131
  position: i ?? void 0,
1091
1132
  zIndex: o ? parseInt(o, 10) : void 0,
1092
1133
  skipTargeting: d === "true" ? !0 : void 0,
@@ -1094,66 +1135,71 @@ function ue(e) {
1094
1135
  singleButton: u === "true" ? !0 : void 0,
1095
1136
  feedbackMode: h ?? void 0,
1096
1137
  incognito: f === "true" ? !0 : void 0,
1097
- buttonSize: J ?? void 0,
1098
- offset: m || g ? {
1099
- x: m ? parseInt(m, 10) : void 0,
1100
- y: g ? parseInt(g, 10) : void 0
1138
+ buttonSize: at ?? void 0,
1139
+ offset: g || v ? {
1140
+ x: g ? parseInt(g, 10) : void 0,
1141
+ y: v ? parseInt(v, 10) : void 0
1101
1142
  } : void 0,
1102
1143
  modalWidth: C ? parseInt(C, 10) : void 0,
1103
- backdropOpacity: S ? parseFloat(S) : void 0,
1104
- fontFamily: Z ?? void 0,
1105
- fontSize: A ? parseInt(A, 10) : void 0,
1144
+ backdropOpacity: A ? parseFloat(A) : void 0,
1145
+ fontFamily: nt ?? void 0,
1146
+ fontSize: T ? parseInt(T, 10) : void 0,
1106
1147
  colors: {
1107
1148
  positive: r ?? void 0,
1108
1149
  negative: n ?? void 0,
1109
1150
  marker: a ?? void 0
1110
1151
  },
1111
- text: T || E || M || B || O || R || P || I || z || D || H || L ? {
1112
- tooltip: T ?? void 0,
1152
+ text: I || E || B || O || R || P || F || z || D || H || L || M || _ || $ || K || N ? {
1153
+ tooltip: I ?? void 0,
1113
1154
  modalTitle: E ?? void 0,
1114
- modalSubtitle: M ?? void 0,
1115
- placeholder: B ?? void 0,
1116
- submitButton: O ?? void 0,
1117
- skipButton: R ?? void 0,
1118
- feedbackLabel: P ?? void 0,
1119
- confirmationTitle: I ?? void 0,
1120
- confirmationMessage: z ?? void 0,
1121
- confirmationClose: D ?? void 0,
1122
- errorTitle: H ?? void 0,
1123
- errorMessage: L ?? void 0
1155
+ modalSubtitle: B ?? void 0,
1156
+ placeholder: O ?? void 0,
1157
+ submitButton: R ?? void 0,
1158
+ skipButton: P ?? void 0,
1159
+ feedbackLabel: F ?? void 0,
1160
+ confirmationTitle: z ?? void 0,
1161
+ confirmationMessage: D ?? void 0,
1162
+ confirmationClose: H ?? void 0,
1163
+ errorTitle: L ?? void 0,
1164
+ errorMessage: M ?? void 0,
1165
+ positiveLabel: _,
1166
+ negativeLabel: $,
1167
+ recordLabel: K,
1168
+ dismissLabel: N
1124
1169
  } : void 0,
1125
- positiveIcon: tt ?? void 0,
1126
- negativeIcon: et ?? void 0,
1127
- feedbackIcon: it ?? void 0,
1128
- screenshotMethod: ct ?? void 0,
1129
- captureVideo: st === "true" ? !0 : void 0,
1130
- hideThumbs: dt === "true" ? !0 : void 0,
1131
- hideDismiss: lt === "true" ? !0 : void 0,
1132
- videoOptions: x || F ? {
1133
- maxDuration: x ? parseInt(x, 10) : void 0,
1134
- redaction: F === "true" ? !0 : void 0
1170
+ positiveIcon: rt ?? void 0,
1171
+ recordIcon: qt ?? void 0,
1172
+ negativeIcon: st ?? void 0,
1173
+ feedbackIcon: dt ?? void 0,
1174
+ screenshotMethod: mt ?? void 0,
1175
+ captureVideo: ft === "true" ? !0 : void 0,
1176
+ hideThumbs: pt === "true" ? !0 : void 0,
1177
+ hideDismiss: bt === "true" ? !0 : void 0,
1178
+ videoOptions: w || U ? {
1179
+ maxDuration: w ? parseInt(w, 10) : void 0,
1180
+ redaction: U === "true" ? !0 : void 0
1135
1181
  } : void 0,
1136
- quests: V ? {
1137
- base: V,
1138
- up: ht ?? void 0,
1139
- down: ft ?? void 0,
1140
- video: pt ?? void 0,
1141
- apiKey: bt ?? void 0,
1142
- moduleUrl: mt ?? void 0
1182
+ quests: j ? {
1183
+ base: j,
1184
+ up: xt ?? void 0,
1185
+ down: wt ?? void 0,
1186
+ video: kt ?? void 0,
1187
+ apiKey: St ?? void 0,
1188
+ moduleUrl: Ct ?? void 0
1143
1189
  } : void 0
1144
1190
  };
1145
1191
  }
1146
- function he() {
1192
+ function ke() {
1147
1193
  if (typeof document > "u") return;
1148
1194
  const e = () => {
1149
- const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i = ce(), o = t ? ue(t) : null, r = i ?? o;
1150
- r?.endpoint && new le(r);
1195
+ const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i = ye() ?? (t ? we(t) : null);
1196
+ i?.endpoint && new ve(i);
1151
1197
  };
1152
1198
  document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
1153
1199
  }
1154
- he();
1200
+ ke();
1155
1201
  export {
1156
- le as Q,
1157
- pe as c
1202
+ ve as Q,
1203
+ Ce as c
1158
1204
  };
1159
- //# sourceMappingURL=loader-DHtXHt1z.js.map
1205
+ //# sourceMappingURL=loader-DepVS4i5.js.map