@vanira/sdk 0.0.82
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.
- package/README.md +87 -0
- package/dist/chunks/html2canvas.js +6 -0
- package/dist/headless/index.cjs +489 -0
- package/dist/headless/index.d.ts +30 -0
- package/dist/headless/index.js +6437 -0
- package/dist/index.d.ts +176 -0
- package/dist/platforms/browser.cjs +8 -0
- package/dist/platforms/browser.d.ts +26 -0
- package/dist/platforms/browser.js +1540 -0
- package/dist/platforms/react-native.cjs +1 -0
- package/dist/platforms/react-native.d.ts +6 -0
- package/dist/platforms/react-native.js +1185 -0
- package/dist/vanira-sdk.es.js +11475 -0
- package/dist/vanira-sdk.js +3031 -0
- package/dist/vanira-sdk.umd.js +3302 -0
- package/package.json +92 -0
|
@@ -0,0 +1,3031 @@
|
|
|
1
|
+
var zf=Object.defineProperty;var Jf=(HA,gA,de)=>gA in HA?zf(HA,gA,{enumerable:!0,configurable:!0,writable:!0,value:de}):HA[gA]=de;var p=(HA,gA,de)=>Jf(HA,typeof gA!="symbol"?gA+"":gA,de);(function(){"use strict";var HA=typeof document<"u"?document.currentScript:null;const gA="https://api.vanira.io";class de{static async fetchWidgetConfig(A,e){var r;const t={"Content-Type":"application/json"};e&&(t["X-API-Key"]=e);try{const s=await fetch(`${gA}/assistant/widget/${A}/config`,{method:"GET",headers:t});if(!s.ok)throw new Error(`Widget config fetch failed: HTTP ${s.status}`);const i=await s.json();return(r=i.agent)!=null&&r.client&&(i.client=i.agent.client),i}catch(s){throw s}}}let ke="https://inboxapi.vanira.io";const Na="https://coredb.travelr.club/v1/graphql";class KA{static setChatUrl(A){ke=A}static async createChatProspect(A){var t,r;const e=`
|
|
2
|
+
mutation CreateChatProspect($prospectGroupId: uuid!, $name: String!) {
|
|
3
|
+
insert_prospects_one(object: {prospect_group_id: $prospectGroupId, name: $name, source: WEBSITE_WIDGET}) {
|
|
4
|
+
id
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
`;try{const i=await(await fetch(Na,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e,variables:{prospectGroupId:A,name:`Widget Guest ${new Date().toLocaleString()}`}})})).json();return i.errors?`anon_${Date.now()}_${Math.random().toString(36).substr(2,9)}`:((r=(t=i.data)==null?void 0:t.insert_prospects_one)==null?void 0:r.id)||`anon_${Date.now()}`}catch{return`anon_${Date.now()}`}}static async fetchWelcomeMessage(A,e,t,r){try{const s={"Content-Type":"application/json"},i=await fetch(`${ke}/widget/chat`,{method:"POST",headers:s,body:JSON.stringify({agent_id:A,...t?{widget_id:t}:{},message:"",prospect_id:e,stream:!1})});if(!i.ok)throw new Error("Failed to fetch welcome message");const o=await i.json();let a=o.response||"Hey! how can I help you ?",l;const c=o.chat_id||o.inbox_id,d=o.conversation_id||null;return o.widget&&(l=o.widget),{role:"assistant",content:a,widget:l,chatId:c,conversationId:d}}catch{return{role:"assistant",content:"Hey! how can I help you ?"}}}static async sendChatMessage(A,e,t,r,s,i,o,a,l){var c,d,h,u;try{const g={"Content-Type":"application/json"},B={agent_id:A,message:t,prospect_id:e,stream:!0};r&&(B.inbox_id=r),a&&(B.widget_id=a);const f=await fetch(`${ke}/widget/chat`,{method:"POST",headers:g,body:JSON.stringify(B)});if(!f.ok)throw new Error("Chat request failed");const m=(c=f.body)==null?void 0:c.getReader(),w=new TextDecoder;if(!m)throw new Error("No reader");let v="",C="",y=null,Q=null;for(;;){const{done:x,value:F}=await m.read();if(x)break;C+=w.decode(F,{stream:!0});const I=C.split(`
|
|
8
|
+
`);C=I.pop()||"";for(const L of I){const O=L.trim();if(O&&O.startsWith("data: ")){const K=O.slice(6);if(K==="[DONE]"){o(y,Q);return}try{const M=JSON.parse(K);if(M.type==="metadata"){(M.chat_id||M.inbox_id)&&(y=M.chat_id||M.inbox_id),M.conversation_id&&(Q=M.conversation_id);continue}const Z=(u=(h=(d=M.choices)==null?void 0:d[0])==null?void 0:h.delta)==null?void 0:u.content;Z&&(v+=Z,s(v)),M.widget&&i(M.widget),M.chat_id&&!y&&(y=M.chat_id),M.conversation_id&&!Q&&(Q=M.conversation_id)}catch{}}}}o(y,Q)}catch{s("Sorry, I encountered an error. Please try again."),o(null,null)}}static listenForAdminReplies(A,e,t){const r=`${ke}/inbox/stream?inbox_id=${A}&sender=${encodeURIComponent(e)}`;let s=null,i=0,o=!1;const a=()=>{o||(s=new EventSource(r),s.onopen=()=>{i=0},s.onmessage=l=>{try{const c=JSON.parse(l.data),d=c.direction==="outgoing",h=!!c.content,u=c.source!=="ai";d&&h&&u&&t(c.content)}catch{}},s.onerror=l=>{if(s&&(s.close(),s=null),o)return;const c=Math.min(2e3*Math.pow(2,i),3e4);i++,setTimeout(a,c)})};return a(),{close:()=>{o=!0,s&&(s.close(),s=null)}}}static async createCall(A,e,t,r,s){try{const i={"Content-Type":"application/json"};s&&(i["X-API-Key"]=s);const o=await fetch(`${gA}/calls/create`,{method:"POST",headers:i,body:JSON.stringify({agent_id:A,prospect_id:t||void 0,type:"web"})}),a=await o.json();if(!o.ok)throw new Error(`[VaniraAI] Call creation failed HTTP ${o.status}`);if(!a.worker_url)throw new Error("[VaniraAI] Worker URL missing from response. Call cannot proceed.");return{callId:a.call_id||a.id||`web_${Date.now()}`,workerUrl:a.worker_url}}catch(i){throw i}}static async resolveConversation(A){try{if(!(await fetch(`${ke}/inbox/conversations/resolve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({conversation_id:A})})).ok)throw new Error("Failed to resolve conversation")}catch(e){throw e}}}class Oa{constructor(A){p(this,"config");p(this,"root",null);this.config=A}async initialize(A,e){this.config=A}isCallActive(){return!1}updateContext(A){return!1}triggerInterrupt(A,e){return!1}sendToolResult(A,e){return!1}}const b={Form:"vanira_form",Calendar:"vanira_calendar",Navigate:"vanira_navigate",Upload:"vanira_upload",Camera:"vanira_camera",HighlightElement:"vanira_highlight_element",ClickElement:"vanira_click_element",SelectOption:"vanira_select_option",SetDate:"vanira_set_date",TypeText:"vanira_type_text",EraseText:"vanira_erase_text",Draw:"vanira_draw",EraseDraw:"vanira_erase_draw",LiveVision:"vanira_live_vision",CloseLiveCamera:"vanira_close_live_camera",LiveScreen:"vanira_live_screen",CloseLiveScreen:"vanira_close_live_screen",ClipRegion:"vanira_clip_region",TabScreenshot:"vanira_tab_screenshot",ScreenInk:"vanira_screen_ink",ScreenCursor:"vanira_screen_cursor",ScreenClick:"vanira_screen_click",ClearScreenOverlay:"vanira_clear_screen_overlay",PageScan:"vanira_page_scan",PointAt:"vanira_point_at",OutlineTargets:"vanira_outline_targets",ClearGuide:"vanira_clear_guide"},Ra=Object.values(b),Ga=new Set(Ra),Va=new Set([b.Camera,b.LiveVision,b.LiveScreen]),_a=new Set([b.TypeText,b.EraseText,b.Draw,b.EraseDraw]);function LA(n){return!!n&&Ga.has(n)}function as(n){return LA(n)&&_a.has(n)}function Tn(n){return LA(n)&&Va.has(n)}const Ya=new Set([b.Form,b.Calendar]);function Mn(n){return LA(n)&&Ya.has(n)}function ls(n,A,e){return e!=null&&e.action_name?String(e.action_name):n===b.Calendar?"calendar_slot_selected":`user_submitted_${A||"collect_user_data"}`}function cs(n){return LA(n)&&!Tn(n)&&!Mn(n)}const ds=new Set([b.ScreenInk,b.ScreenCursor,b.ScreenClick,b.ClearScreenOverlay,b.PointAt,b.OutlineTargets,b.ClearGuide]),za=new Set([...ds,b.PageScan,b.TabScreenshot]);function Ja(n){return LA(n)&&ds.has(n)}function Xa(n){return LA(n)&&za.has(n)}function hs(n){if(typeof n=="string")try{return JSON.parse(n)}catch{return{}}return n&&typeof n=="object"?n:{}}const us={type_on_whiteboard:b.TypeText,write_on_whiteboard:b.TypeText,write_on_white_board:b.TypeText,dom_typing_simulation:b.TypeText,erase_text:b.EraseText,dom_erase:b.EraseText,draw_on_board:b.Draw,erase_drawing_board:b.EraseDraw,open_live_camera:b.LiveVision,live_vision:b.LiveVision,close_live_camera:b.CloseLiveCamera,stop_live_camera:b.CloseLiveCamera,open_live_screen:b.LiveScreen,close_live_screen:b.CloseLiveScreen,screen_ink:b.ScreenInk,screen_cursor:b.ScreenCursor,screen_click:b.ScreenClick,clear_screen_overlay:b.ClearScreenOverlay,tab_screenshot:b.TabScreenshot,capture_tab:b.TabScreenshot,capture_tab_screenshot:b.TabScreenshot,screenshot_tab:b.TabScreenshot,page_scan:b.PageScan,scan_page:b.PageScan,point_at:b.PointAt,outline_targets:b.OutlineTargets,outline_elements:b.OutlineTargets,clear_guide:b.ClearGuide};function gs(n,A){const e=n.text_to_type??(A==null?void 0:A.text_to_type)??n.text??(A==null?void 0:A.text)??n.value??(A==null?void 0:A.value);return typeof e=="string"&&e.trim().length>0}function Wa(n,A){const e=n.fields??(A==null?void 0:A.fields);return Array.isArray(e)?e.length>0:typeof e=="string"?e.split(",").map(t=>t.trim()).filter(Boolean).length>0:!1}function ja(n,A){const e=n==null?void 0:n.preset_id;if(typeof e=="string"&&LA(e))return e;const r=hs(A).preset_id;if(typeof r=="string"&&LA(r))return r}function pt(n,A,e){const t=hs(A);let r=ja(n,t);if(r===b.Form&&gs(t,n)&&!Wa(t,n))return b.TypeText;if(r)return r;const s=String(e??"").trim().toLowerCase();if(s&&us[s])return us[s];if(gs(t,n))return b.TypeText}const Bt="vanira_latest_call_id",kn="vanira_prospect_id";function ft(n){return`vanira_latest_call_id_${n}`}function wt(n){return`vanira_prospect_id_${n}`}function ps(n){return`vanira_call_meta_${n}`}function NA(n,A){if(!n)return null;try{return n.getItem(A)}catch{return null}}function mt(n){if(typeof window>"u"||!n)return null;const A=[],e=NA(window.localStorage,ps(n));if(e)try{const o=JSON.parse(e);o!=null&&o.callId&&A.push({callId:o.callId,prospectId:o.prospectId,updatedAt:o.updatedAt||0})}catch{}const t=(o,a,l)=>{o&&A.push({callId:o,prospectId:a||void 0,updatedAt:l})},r=NA(window.localStorage,wt(n)),s=NA(window.sessionStorage,wt(n)),i=NA(window.localStorage,kn);return t(NA(window.localStorage,ft(n)),r||i,2),t(NA(window.sessionStorage,ft(n)),s||i,1),t(NA(window.localStorage,Bt),i,0),t(NA(window.sessionStorage,Bt),i,0),A.length?(A.sort((o,a)=>a.updatedAt-o.updatedAt),A[0]):null}function Bs(n,A,e){var r,s,i,o,a,l,c,d,h;if(typeof window>"u"||!n||!A)return;const t={callId:A,prospectId:e,updatedAt:Date.now()};try{(r=window.localStorage)==null||r.setItem(ps(n),JSON.stringify(t)),(s=window.localStorage)==null||s.setItem(ft(n),A),(i=window.sessionStorage)==null||i.setItem(ft(n),A),e&&((o=window.localStorage)==null||o.setItem(wt(n),e),(a=window.sessionStorage)==null||a.setItem(wt(n),e)),(l=window.localStorage)==null||l.setItem(Bt,A),(c=window.sessionStorage)==null||c.setItem(Bt,A),e&&((d=window.localStorage)==null||d.setItem(kn,e),(h=window.sessionStorage)==null||h.setItem(kn,e))}catch{}}function fs(n){var A;return!!((A=mt(n))!=null&&A.callId)}const Za=new Set(["client_tool_call","clearAudio","client_tool_cancel"]);function qa(n){if(!n||typeof n!="object")return!1;const A=n.event;return typeof A=="string"&&Za.has(A)}const Dn=16*1024,$a=256*1024;function Pn(n,A){return(n==null?void 0:n.readyState)==="open"&&(A==null?void 0:A.readyState)==="open"}function Al(n,A){return{control:(n==null?void 0:n.readyState)??"missing",mediaBytes:(A==null?void 0:A.readyState)??"missing"}}async function el(n,A,e=8e3){if(Pn(n,A))return!0;const t=Date.now()+e;for(;Date.now()<t;){if(Pn(n,A))return!0;await new Promise(r=>setTimeout(r,50))}return Pn(n,A)}async function ws(n){for(;n.bufferedAmount>$a;)await new Promise(A=>setTimeout(A,10))}async function tl(n){const{bytes:A,filename:e,contentType:t,reason:r,message:s,callId:i,mediaBytesChannel:o,sendControlEvent:a,uploadId:l=crypto.randomUUID(),uploadKind:c="media"}=n,d=A.byteLength,h=d===0?0:Math.ceil(d/Dn);a("client_media_upload_start",{data:{upload_id:l,call_id:i,reason:r,message:s,filename:e,content_type:t,size:d,chunk_count:h,upload_kind:c}});const u=new Uint8Array(A);for(let g=0;g<d;g+=Dn){await ws(o);const B=Math.min(g+Dn,d);o.send(u.subarray(g,B))}return await ws(o),a("client_media_upload_complete",{data:{upload_id:l,call_id:i,reason:r,message:s,chunk_count:h,upload_kind:c}}),{media_id:l,url:"",content_type:t}}async function nl(n){return typeof n.arrayBuffer=="function"?n.arrayBuffer():new Response(n).arrayBuffer()}let qA=null;const rl=4e3;function ms(n){if(typeof window>"u")return n||"/";const A=(n||"/").trim();if(!A)return"/";try{const e=new URL(A,window.location.origin);return e.origin!==window.location.origin?A:`${e.pathname}${e.search}${e.hash}`||"/"}catch{return A.startsWith("/")?A:`/${A}`}}function sl(n,A){qA={targetRoute:ms(n),presetId:A==null?void 0:A.presetId,toolName:A==null?void 0:A.toolName,expiresAt:Date.now()+rl}}function il(n){if(!qA)return null;if(Date.now()>qA.expiresAt)return qA=null,null;const A=ms(n),e=qA.targetRoute;if(!(A===e||A.startsWith(e.split("#")[0])||e.startsWith(A.split("#")[0])))return null;const r=qA;return qA=null,r}function Ct(){return typeof window>"u"?"/":`${window.location.pathname}${window.location.search}${window.location.hash}`||"/"}class ol{constructor(A){p(this,"active",!1);p(this,"initialSent",!1);p(this,"lastRoute","");p(this,"sendContext");p(this,"isReady");p(this,"cleanupFns",[]);p(this,"initialRetryTimer",null);p(this,"routePollTimer",null);p(this,"originalPushState",null);p(this,"originalReplaceState",null);this.sendContext=A.sendContext,this.isReady=A.isReady??(()=>!0)}start(){typeof window>"u"||this.active||(this.active=!0,this.initialSent=!1,this.lastRoute=Ct(),this.attachListeners(),this.scheduleInitialContextSend())}stop(){if(!(!this.active&&this.cleanupFns.length===0)){this.active=!1,this.initialSent=!1,this.initialRetryTimer!==null&&(clearTimeout(this.initialRetryTimer),this.initialRetryTimer=null),this.routePollTimer!==null&&(clearInterval(this.routePollTimer),this.routePollTimer=null);for(const A of this.cleanupFns)try{A()}catch{}this.cleanupFns.length=0,this.originalPushState&&(history.pushState=this.originalPushState,this.originalPushState=null),this.originalReplaceState&&(history.replaceState=this.originalReplaceState,this.originalReplaceState=null)}}onChannelReady(){this.scheduleInitialContextSend()}scheduleInitialContextSend(A=0){if(!(!this.active||this.initialSent)){if(this.isReady()){this.sendRouteContext("call_started"),this.initialSent=!0;return}A>=30||(this.initialRetryTimer=window.setTimeout(()=>this.scheduleInitialContextSend(A+1),100))}}attachListeners(){const A=(s,i=0)=>{const o=()=>{const a=Ct();a!==this.lastRoute&&this.handleRouteChange(a,s)};i>0?window.setTimeout(o,i):queueMicrotask(o)},e=()=>A("popstate"),t=()=>A("hashchange"),r=s=>{const i=s.detail;if((i==null?void 0:i.initiated_by)==="agent"){A("vanira_navigate_agent",120);return}A("vanira_navigate",120)};window.addEventListener("popstate",e),window.addEventListener("hashchange",t),window.addEventListener("vanira:navigate",r),this.cleanupFns.push(()=>window.removeEventListener("popstate",e),()=>window.removeEventListener("hashchange",t),()=>window.removeEventListener("vanira:navigate",r)),this.originalPushState=history.pushState.bind(history),this.originalReplaceState=history.replaceState.bind(history),history.pushState=(...s)=>{this.originalPushState(...s),A("pushState")},history.replaceState=(...s)=>{this.originalReplaceState(...s),A("replaceState")},this.routePollTimer=window.setInterval(()=>{if(!this.active)return;const s=Ct();s!==this.lastRoute&&this.handleRouteChange(s,"location_poll")},1e3)}handleRouteChange(A,e){if(!this.active)return;const t=this.lastRoute;if(t===A)return;if(this.lastRoute=A,!this.initialSent){this.scheduleInitialContextSend();return}!this.isReady()||il(A)||this.sendRouteContext("route_changed",t,e,"user")}sendRouteContext(A,e,t,r="user"){const s=Ct();this.lastRoute=s;const i={ui_state:"page_navigation",navigation_led_by:r,current_route:s,current_page:s,user_action:A==="call_started"?"call_started_on_page":"user_navigated"};A==="call_started"?i.message=`User started the call while viewing ${s}.`:(i.previous_route=e??"",i.message=`User navigated from ${e||"(unknown)"} to ${s}.`,t&&(i.navigation_source=t));try{this.sendContext(i)}catch{}}}const PA=class PA{constructor(A){p(this,"serverUrl");p(this,"agentId");p(this,"callId");p(this,"prospectId");p(this,"apiKey");p(this,"backendUrl");p(this,"token");p(this,"onConnected");p(this,"onDisconnected");p(this,"onError");p(this,"onTranscription");p(this,"onLocalStream");p(this,"onRemoteTrack");p(this,"onClientToolCall");p(this,"onSessionStarted");p(this,"sessionStartedEmitted",!1);p(this,"pc",null);p(this,"dataChannel",null);p(this,"mediaBytesChannel",null);p(this,"audioElement",null);p(this,"localStream",null);p(this,"micMuted",!1);p(this,"connected",!1);p(this,"icePollInterval",null);p(this,"appliedRemoteCandidates",new Set);p(this,"iceServers");p(this,"callSessionLoaded",!1);p(this,"connectGeneration",0);p(this,"runtime");p(this,"sessionBehavior");p(this,"routeTracker",null);p(this,"_status","idle");p(this,"listeners",new Map);p(this,"liveVision");p(this,"liveVisionAutoStarted",!1);if(!A.agentId)throw new Error("agentId is required");const e=!!(A.apiKey||A.token),t=!!(A.serverUrl&&A.callId),r=PA.normalizeIceServers(A.iceServers);if(!e&&!t)throw new Error("apiKey or token is required — or pass serverUrl and callId from a prior POST /calls/create");this.agentId=A.agentId,this.sessionBehavior=A.sessionBehavior,this.serverUrl=(A.serverUrl||"").replace(/\/$/,""),this.apiKey=A.apiKey,this.token=A.token,this.backendUrl=(A.backendUrl||gA).replace(/\/$/,""),r.length&&(this.iceServers=r),t&&(this.callSessionLoaded=!0);const s=typeof window<"u";this.prospectId=A.prospectId;const i=A.sessionBehavior==="continue";if(i&&s&&!A.callId){const a=mt(this.agentId);a&&(A.callId||(this.callId=a.callId),!this.prospectId&&a.prospectId&&(this.prospectId=a.prospectId))}if(!this.prospectId&&s)try{const a=mt(this.agentId);this.prospectId=(a==null?void 0:a.prospectId)||window.sessionStorage&&window.sessionStorage.getItem("vanira_prospect_id")||window.localStorage&&window.localStorage.getItem("vanira_prospect_id")||void 0}catch{}A.callId?this.callId=A.callId:i||(this.callId=void 0);const o=A.onSessionStarted;this.onSessionStarted=a=>{o==null||o(a),this.emit("session_started",a)},this.liveVision=A.liveVision,this.onConnected=()=>{var a;this._status="connected",(a=A.onConnected)==null||a.call(A),this.emit("connected"),this.maybeAutoStartLiveCamera()},this.onDisconnected=()=>{var a;this._status="disconnected",(a=A.onDisconnected)==null||a.call(A),this.emit("disconnected")},this.onError=a=>{var c;this._status="error";const l=typeof a=="string"?a:(a==null?void 0:a.message)||"Connection error";(c=A.onError)==null||c.call(A,a),this.emit("error",l)},this.onTranscription=(a,l)=>{var c;(c=A.onTranscription)==null||c.call(A,a,l),this.emit("transcription",{text:a,isFinal:l})},this.onLocalStream=A.onLocalStream||(()=>{}),this.onRemoteTrack=(a,l)=>{var c;(c=A.onRemoteTrack)==null||c.call(A,a,l),this.emit("track",{track:a,stream:l})},this.onClientToolCall=a=>{var d;(d=A.onClientToolCall)==null||d.call(A,a);const l=(a==null?void 0:a.data)||a,c={name:String(l.name||l.tool_name||""),arguments:l.arguments||l.args||{},tool_call_id:String(l.tool_call_id||l.call_id||""),execution_mode:l.execution_mode==="blocking"?"blocking":"fire_and_forget",client_fields:l.client_fields||{}};c.name&&c.tool_call_id&&this.emit("tool_call",c)},this.runtime=A.runtime,typeof window<"u"&&A.trackRouteContext!==!1&&(this.routeTracker=new ol({sendContext:a=>this.sendContextUpdate(a),isReady:()=>{var a;return((a=this.dataChannel)==null?void 0:a.readyState)==="open"}}))}async createCall(){return this.connect()}async connect(){var e;this._status="connecting";const A=++this.connectGeneration;if(await this.loadCallSession(),!this.isConnectCancelled(A)){if(!this.serverUrl)throw new Error("[VaniraClient] worker_url missing from /calls/create");if(!this.callId)throw new Error("[VaniraClient] call_id missing — must come from POST /calls/create");if(this.onSessionStarted&&this.prospectId&&this.callId&&!this.sessionStartedEmitted)try{this.onSessionStarted({prospectId:this.prospectId,callId:this.callId,serverUrl:this.serverUrl}),this.sessionStartedEmitted=!0}catch{}try{this.appliedRemoteCandidates.clear(),this.stopRemoteIcePolling();const t=this.getIceServers();this.pc=new RTCPeerConnection({iceServers:t,iceTransportPolicy:"all"});let r;try{r=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:{ideal:16e3},channelCount:1}})}catch(d){if(d.name==="NotAllowedError"||d.name==="PermissionDeniedError"||(e=d.message)!=null&&e.includes("Permission denied")){const h=navigator.userAgent,u=/iPad|iPhone|iPod/.test(h)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1;let g="Microphone access denied. Please allow microphone access in your browser settings.";u&&(h.includes("CriOS")?g="Microphone access blocked. Please enable it in iOS Settings > Chrome > Microphone, then reload the page.":h.includes("FxiOS")?g="Microphone access blocked. Please enable it in iOS Settings > Firefox > Microphone, then reload the page.":g="Microphone access blocked. Please enable it in iOS Settings > Safari > Microphone (or tap 'aA' > Website Settings > Allow Microphone).");const B=new Error(g);throw B.name=d.name,B}throw d}if(this.isConnectCancelled(A)){r.getTracks().forEach(d=>d.stop());return}if(this.localStream=r,!this.pc||this.isConnectCancelled(A)){r.getTracks().forEach(d=>d.stop());return}if(this.onLocalStream(r),r.getTracks().forEach(d=>{var h;(h=this.pc)==null||h.addTrack(d,r)}),!this.pc)throw new Error("RTCPeerConnection was closed unexpectedly");this.dataChannel=this.pc.createDataChannel("control"),this.dataChannel.onopen=()=>{var d;(d=this.routeTracker)==null||d.onChannelReady()},this.dataChannel.onmessage=d=>{if(typeof d.data=="string")try{this.handleControlEvent(JSON.parse(d.data))}catch{}else if(d.data instanceof ArrayBuffer)try{const h=new TextDecoder().decode(d.data);try{const u=JSON.parse(h);qa(u)&&this.handleControlEvent(u)}catch{}}catch{}else d.data instanceof Blob&&d.data.text().then(h=>{try{this.handleControlEvent(JSON.parse(h))}catch{}})},this.dataChannel.onerror=d=>{},this.mediaBytesChannel=this.pc.createDataChannel("media-bytes",{ordered:!0}),this.mediaBytesChannel.binaryType="arraybuffer",this.mediaBytesChannel.onopen=()=>{},this.mediaBytesChannel.onerror=d=>{},this.pc.ontrack=d=>{const h=d.track,u=d.streams[0];h.kind==="audio"?(this.audioElement=new Audio,this.audioElement.srcObject=u,this.audioElement.play().catch(g=>{}),this.audioElement.onended=()=>{this.sendEvent("playedStream"),typeof window<"u"&&window.dispatchEvent(new CustomEvent("vanira:agent-playback-ended"))},this.onRemoteTrack(h,u)):h.kind==="video"&&this.onRemoteTrack(h,u)};const s=()=>{var u,g,B,f,m,w,v,C,y,Q,x;const d=((u=this.pc)==null?void 0:u.connectionState)==="connected"||((g=this.pc)==null?void 0:g.iceConnectionState)==="connected"||((B=this.pc)==null?void 0:B.iceConnectionState)==="completed",h=((f=this.pc)==null?void 0:f.connectionState)==="failed"||((m=this.pc)==null?void 0:m.iceConnectionState)==="failed"||((w=this.pc)==null?void 0:w.connectionState)==="closed"||((v=this.pc)==null?void 0:v.iceConnectionState)==="closed"||((C=this.pc)==null?void 0:C.connectionState)==="disconnected"||((y=this.pc)==null?void 0:y.iceConnectionState)==="disconnected";((Q=this.pc)==null?void 0:Q.connectionState)==="connected"&&this.stopRemoteIcePolling(),d&&!this.connected?(this.connected=!0,(x=this.routeTracker)==null||x.start(),this.onConnected()):h&&this.connected&&(this.connected=!1,this.liveVisionAutoStarted=!1,this.onDisconnected())};this.pc.onconnectionstatechange=s,this.pc.oniceconnectionstatechange=s;const i=this.getIceTrickleUrl();this.pc.onicecandidate=d=>{d.candidate&&fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({candidate:d.candidate.toJSON()})}).catch(h=>{})};const o=await this.pc.createOffer();if(this.isConnectCancelled(A)||(await this.pc.setLocalDescription(o),this.isConnectCancelled(A)))return;const a=this.serverUrl.includes("?")?this.serverUrl:`${this.serverUrl}/webrtc?agent=${this.agentId}_${this.callId}`,l=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({offer:this.pc.localDescription,agentId:this.agentId,callId:this.callId})});if(this.isConnectCancelled(A))return;if(!l.ok){const d=await l.json();throw new Error(d.error||`HTTP ${l.status}`)}const{answer:c}=await l.json();if(this.isConnectCancelled(A)||!this.pc||(await this.pc.setRemoteDescription(c),this.isConnectCancelled(A)))return;this.startRemoteIcePolling(i)}catch(t){if(this.isConnectCancelled(A))return;throw this.disconnect(),this.onError(t.message||t),t}}}createCallCacheKey(A,e){const t=this.apiKey?`key:${this.apiKey.slice(0,16)}`:`token:${(this.token||"").slice(-16)}`;return[this.backendUrl,this.agentId,A,e||"",this.prospectId||"",t].join("|")}async postCreateCall(A,e,t){var o,a,l;const r=await fetch(`${this.backendUrl}/calls/create`,{method:"POST",headers:A,body:JSON.stringify({agent_id:this.agentId,type:((o=this.runtime)==null?void 0:o.callType)||"web",mode:e,...(a=this.runtime)!=null&&a.runtimeName?{runtime:this.runtime.runtimeName}:{},prospect_id:this.prospectId,...t?{call_id:t}:{}})});if(!r.ok){const c=await r.json().catch(()=>({}));throw new Error(`[VaniraClient] createCall failed (${r.status}): ${((l=c==null?void 0:c.detail)==null?void 0:l.message)||(c==null?void 0:c.message)||r.statusText}`)}const s=await r.json();if(!s.call_id||!s.worker_url)throw new Error("[VaniraClient] /calls/create response missing call_id or worker_url");const i=PA.normalizeIceServers(s.ice_servers);if(!i.length)throw new Error("[VaniraClient] /calls/create response missing ice_servers");return{callId:s.call_id,prospectId:s.prospect_id||this.prospectId,serverUrl:s.worker_url.replace(/\/$/,""),iceServers:i}}applyCreateCallSession(A){if(this.callId=A.callId,this.prospectId=A.prospectId||this.prospectId,this.serverUrl=A.serverUrl,this.iceServers=A.iceServers,this.callSessionLoaded=!0,Bs(this.agentId,this.callId||"",this.prospectId),this.onSessionStarted&&this.prospectId&&this.callId&&!this.sessionStartedEmitted)try{this.onSessionStarted({prospectId:this.prospectId,callId:this.callId,serverUrl:this.serverUrl}),this.sessionStartedEmitted=!0}catch{}}async loadCallSession(){if(this.callSessionLoaded)return;if(this.serverUrl&&this.callId){this.callSessionLoaded=!0;return}if(!this.apiKey&&!this.token)throw new Error("[VaniraClient] apiKey or token is required to create a call session");const A={"Content-Type":"application/json"};this.apiKey?A["X-API-Key"]=this.apiKey:this.token&&(A.Authorization=this.token.startsWith("Bearer ")?this.token:`Bearer ${this.token}`);const e=this.sessionBehavior==="continue"?this.callId:void 0,t=this.sessionBehavior==="continue"?"continue":"new",r=this.createCallCacheKey(t,e);let s=PA.inflightCreates.get(r);s||(s=this.postCreateCall(A,t,e),PA.inflightCreates.set(r,s),s.finally(()=>{PA.inflightCreates.get(r)===s&&PA.inflightCreates.delete(r)}));const i=await s;this.applyCreateCallSession(i)}getIceServers(){var A;if((A=this.iceServers)!=null&&A.length)return this.iceServers;throw new Error("[VaniraClient] ice_servers missing — pass iceServers from POST /calls/create")}static normalizeIceServers(A){if(!Array.isArray(A))return[];const e=[];for(const t of A){const r=t==null?void 0:t.urls,s=Array.isArray(r)?r.filter(Boolean):typeof r=="string"&&r.trim()?[r.trim()]:[];if(!s.length)continue;const i={urls:s.length===1?s[0]:s},o=t.username,a=t.credential;o&&(i.username=o),a&&(i.credential=a),e.push(i)}return e}getWorkerOrigin(){var A;if(!((A=this.serverUrl)!=null&&A.trim()))return"";try{return new URL(this.serverUrl).origin}catch{return this.serverUrl.replace(/\/webrtc.*$/,"").replace(/\/$/,"")}}getIceTrickleUrl(){try{const A=new URL(this.serverUrl);return A.pathname.endsWith("/webrtc")?A.pathname=`${A.pathname}/ice`:A.pathname="/webrtc/ice",A.toString()}catch{return`${this.getWorkerOrigin()}/webrtc/ice?agent_id=${this.agentId}&call_id=${this.callId}`}}startRemoteIcePolling(A){this.stopRemoteIcePolling(),this.icePollInterval=setInterval(async()=>{if(!this.pc){this.stopRemoteIcePolling();return}if(this.pc.connectionState==="connected"){this.stopRemoteIcePolling();return}try{const e=await fetch(A);if(!e.ok)return;const{candidates:t}=await e.json();for(const r of t||[]){const s=JSON.stringify(r);if(!this.appliedRemoteCandidates.has(s)){this.appliedRemoteCandidates.add(s);try{await this.pc.addIceCandidate(r)}catch{}}}}catch{}},150)}stopRemoteIcePolling(){this.icePollInterval!==null&&(clearInterval(this.icePollInterval),this.icePollInterval=null)}sendEvent(A,e={}){var t;if(((t=this.dataChannel)==null?void 0:t.readyState)==="open"){const r={event:A,...e};this.dataChannel.send(JSON.stringify(r))}}async sendEventWhenReady(A,e={},t=1e4){var s;const r=Date.now()+t;for(;Date.now()<r;){if(((s=this.dataChannel)==null?void 0:s.readyState)==="open")return this.sendEvent(A,e),!0;await new Promise(i=>setTimeout(i,50))}return!1}startLiveCamera(A={}){const e={...this.liveVision,...A};this.emit("tool_call",this.buildOpenLiveCameraToolCall(e))}buildOpenLiveCameraToolCall(A={}){const e=A.scope??"until_call_end";return{name:"open_live_camera",tool_call_id:`lv_${crypto.randomUUID()}`,execution_mode:"fire_and_forget",client_fields:{preset_id:b.LiveVision},arguments:{mode:"live",scope:e,target_fps:A.target_fps??1,max_fps:A.max_fps??3,max_width:A.max_width??640,reason:A.reason??"camera_capture",facing_mode:A.facing_mode??"environment",show_preview:A.show_preview??!0,...e==="timed"&&A.duration_sec?{duration_sec:A.duration_sec}:{}}}}maybeAutoStartLiveCamera(){const A=this.liveVision;!(A!=null&&A.enabled)||A.scope!=="full_call"||this.liveVisionAutoStarted||(this.liveVisionAutoStarted=!0,this.emit("tool_call",this.buildOpenLiveCameraToolCall(A)))}handleControlEvent(A){var e;switch(A.event){case"clearAudio":break;case"transcription":this.onTranscription(A.text,A.isFinal);break;case"mark":break;case"client_tool_cancel":{const r=(A.data||A).tool_call_id||A.tool_call_id;this.dispatchBoardAbort("Tool cancelled by server",r);break}case"client_tool_call":{const t=A.tool_call||A.data||A,r=(t==null?void 0:t.tool_call_id)||(t==null?void 0:t.call_id)||A.tool_call_id||"";r&&((e=this.dataChannel)==null?void 0:e.readyState)==="open"&&this.dataChannel.send(JSON.stringify({event:"client_tool_ack",data:{tool_call_id:r}}));const s=(t==null?void 0:t.arguments)||(t==null?void 0:t.args)||{},i=(t==null?void 0:t.client_fields)||{},o=(t==null?void 0:t.name)||(t==null?void 0:t.tool_name)||"",a=pt(i,s,o);if(o==="end_call"){r&&this.sendToolResult(r,{status:"client_ack_end_call",message:"Ending call."}),window.setTimeout(()=>this.disconnect(),120);break}if(a){window.dispatchEvent(new CustomEvent("vanira:preset",{detail:{toolCall:t,client:this}})),this.onClientToolCall(t);break}this.onClientToolCall(t);break}}}disconnect(){var A;this.connectGeneration++,this.stopRemoteIcePolling(),this.appliedRemoteCandidates.clear(),this.audioElement&&(this.audioElement.pause(),this.audioElement.srcObject=null),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=null),this.mediaBytesChannel&&(this.mediaBytesChannel.close(),this.mediaBytesChannel=null),this.pc&&(this.pc.getSenders().forEach(e=>{e.track&&e.track.stop()}),this.pc.close(),this.pc=null),this.localStream&&(this.localStream.getTracks().forEach(e=>{try{e.stop()}catch{}}),this.localStream=null),this.connected=!1,(A=this.routeTracker)==null||A.stop(),this.callSessionLoaded=!1,this.sessionStartedEmitted=!1,this.serverUrl="",this.callId=void 0,this.micMuted=!1,this.iceServers=void 0,this.onDisconnected()}setMicrophoneMuted(A){var e,t;this.micMuted=A,(e=this.localStream)==null||e.getAudioTracks().forEach(r=>{r.enabled=!A}),(t=this.pc)==null||t.getSenders().forEach(r=>{var s;((s=r.track)==null?void 0:s.kind)==="audio"&&(r.track.enabled=!A)})}isMicrophoneMuted(){return this.micMuted}toggleMicrophoneMuted(){return this.setMicrophoneMuted(!this.micMuted),this.micMuted}isConnectCancelled(A){return A!==this.connectGeneration}dispatchBoardAbort(A,e){typeof window>"u"||window.dispatchEvent(new CustomEvent("vanira:board_abort",{detail:{reason:A,toolCallId:e}}))}sendToolResult(A,e){this.callId,this.sendEvent("client_tool_result",{call_id:this.callId,data:{tool_call_id:A,result:e},result:e})}sendToolAck(A){var e;((e=this.dataChannel)==null?void 0:e.readyState)==="open"&&this.dataChannel.send(JSON.stringify({event:"client_tool_ack",data:{tool_call_id:A}}))}sendContextUpdate(A){this.sendEvent("client_context_update",{data:{context:A}})}sendActionTrigger(A,e={}){this.sendEvent("client_action_trigger",{data:{action_name:A,data:e}})}triggerActionInterrupt(){this.sendEvent("action_interrupt")}async uploadMediaForToolResult(A,e="general"){return this._postMediaUpload(A,e)}async uploadMedia(A,e="general",t=""){return await el(this.dataChannel,this.mediaBytesChannel)?this._uploadMediaViaDataChannel(A,e,t):(Al(this.dataChannel,this.mediaBytesChannel),this._uploadMediaViaHTTP(A,e,t))}async uploadMediaFrame(A,e="camera_capture",t){const r=t&&!(A instanceof File)?new File([A],t,{type:A.type||"image/jpeg"}):A,{media_id:s,url:i,contentType:o}=await this._postMediaUpload(r,e,!0);if(!s||!i)throw new Error("Frame upload failed: server response missing media_id or url");return{media_id:s,url:i,content_type:o}}async _uploadBytesViaDataChannel(A,e,t,r,s){if(!this.callId||!this.mediaBytesChannel)throw new Error("Upload failed: call not ready for WebRTC media upload.");const i=s||(A instanceof File?A.name:r==="frame"?"frame.jpg":"upload.bin"),o=A.type||(r==="frame"?"image/jpeg":"application/octet-stream"),a=await nl(A);return tl({bytes:a,filename:i,contentType:o,reason:e,message:t,callId:this.callId,mediaBytesChannel:this.mediaBytesChannel,sendControlEvent:(l,c)=>this.sendEvent(l,c),uploadKind:r})}async _uploadMediaViaDataChannel(A,e,t){const r=await this._uploadBytesViaDataChannel(A,e,t,"media");return{media_id:r.media_id,url:r.url}}async _uploadMediaViaHTTP(A,e="general",t=""){const{media_id:r,url:s,contentType:i}=await this._postMediaUpload(A,e,!0);if(this.dataChannel&&this.dataChannel.readyState==="open"){const o={event:"client_media_update",data:{media_id:r,media_url:s,content_type:i,reason:e,message:t}};this.dataChannel.send(JSON.stringify(o))}return{media_id:r,url:s}}async _postMediaUpload(A,e,t=!1){if(!this.serverUrl)throw new Error("Upload failed: serverUrl is not set. Connect the VaniraClient first.");if(!this.callId)throw new Error("Upload failed: callId is missing.");const r=this.getWorkerOrigin();if(!r)throw new Error("Upload failed: worker_url is not set. Connect the call before uploading media.");const s=`${r}/media/upload`,i=new FormData;i.append("file",A),i.append("call_id",this.callId),i.append("reason",e);const o=await fetch(s,{method:"POST",body:i});if(!o.ok){let h=`HTTP ${o.status}`;try{h=(await o.json()).error||h}catch{}throw new Error(`Upload failed: ${h}`)}const a=await o.json(),l=a.media_id,c=a.url,d=a.content_type||A.type;if(!l||!c)throw new Error("Upload failed: server response missing media_id or url");return t?{media_id:l,url:c,contentType:d}:{media_id:l,url:c,contentType:d}}get status(){return this._status}get isConnected(){return this._status==="connected"}on(A,e){return this.listeners.has(A)||this.listeners.set(A,new Set),this.listeners.get(A).add(e),this}off(A,e){var t;return(t=this.listeners.get(A))==null||t.delete(e),this}emit(A,e){var t;(t=this.listeners.get(A))==null||t.forEach(r=>r(e))}async start(){return await this.connect(),{callId:this.callId||"",prospectId:this.prospectId||"",serverUrl:this.serverUrl||""}}stop(){this.disconnect(),this._status="disconnected"}sendToolError(A,e){this.sendToolResult(A,{status:"error",error:e})}updateContext(A){this.sendContextUpdate(A)}triggerInterrupt(A,e={}){this.triggerActionInterrupt(),this.sendActionTrigger(A,e)}interruptAudioOnly(){this.triggerActionInterrupt()}};p(PA,"inflightCreates",new Map);let he=PA;const Le=class Le{constructor(A){p(this,"tabId");p(this,"sessionKey");p(this,"channelName");p(this,"channel",null);p(this,"heartbeatTimer",null);p(this,"listeners",new Map);const e=A.replace(/[^a-z0-9_-]/gi,"_");this.sessionKey=`vaniraai_session_${e}`,this.channelName=`vaniraai_channel_${e}`,this.tabId=this._getOrCreateTabId(),this._setupChannel()}getTabId(){return this.tabId}claimSession(){const A=this._loadSession();if(A){const r=Date.now()-A.lastActive,s=A.tabId===this.tabId,i=r>Le.HEARTBEAT_TIMEOUT_MS;if(s)return this._startHeartbeat(),this._emit("session_restored"),!0;if(!i)return this._emit("tab_conflict"),!1}const e=A?{...A,tabId:this.tabId,lastActive:Date.now()}:{tabId:this.tabId,prospectId:"",chatId:null,conversationId:null,messages:[],lastActive:Date.now()};this._saveSession(e),this._startHeartbeat(),this._broadcast({type:"took_over",tabId:this.tabId});const t=!!(A!=null&&A.prospectId);return this._emit(t?"session_restored":"session_claimed"),!0}forceClaimSession(){const A=this._loadSession(),e=A?{...A,tabId:this.tabId,lastActive:Date.now()}:{tabId:this.tabId,prospectId:"",chatId:null,conversationId:null,messages:[],lastActive:Date.now()};this._saveSession(e),this._startHeartbeat(),this._broadcast({type:"took_over",tabId:this.tabId}),this._emit("session_claimed")}saveIds(A,e,t){const r=this._loadSession()??this._blankSession();this._saveSession({...r,prospectId:A,chatId:e,conversationId:t??r.conversationId??null,tabId:this.tabId,lastActive:Date.now()})}pushMessage(A,e){const t=this._loadSession()??this._blankSession();t.messages.push({role:A,content:e,timestamp:Date.now()}),t.messages.length>100&&(t.messages=t.messages.slice(-100)),this._saveSession({...t,tabId:this.tabId,lastActive:Date.now()})}updateLastAssistantMessage(A){const e=this._loadSession()??this._blankSession(),t=e.messages;let r=!1;for(let s=t.length-1;s>=0;s--)if(t[s].role==="assistant"&&t[s].content===""){t[s].content=A,r=!0;break}if(!r){for(let s=t.length-1;s>=0;s--)if(t[s].role==="assistant"){t[s].content=A,r=!0;break}}r||t.push({role:"assistant",content:A,timestamp:Date.now()}),this._saveSession({...e,tabId:this.tabId,lastActive:Date.now()})}getSession(){return this._loadSession()}clearSession(){localStorage.removeItem(this.sessionKey),this._broadcast({type:"session_cleared",tabId:this.tabId}),this._emit("session_cleared")}clearChatKeepProspect(){const A=this._loadSession();A&&this._saveSession({...A,chatId:null,conversationId:null,messages:[],lastActive:Date.now()})}destroy(){this._stopHeartbeat(),this.channel&&(this.channel.close(),this.channel=null)}on(A,e){return this.listeners.has(A)||this.listeners.set(A,new Set),this.listeners.get(A).add(e),this}off(A,e){var t;return(t=this.listeners.get(A))==null||t.delete(e),this}_getOrCreateTabId(){let A=sessionStorage.getItem("vaniraai_tab_id");return A||(A=`tab_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,sessionStorage.setItem("vaniraai_tab_id",A)),A}_setupChannel(){typeof BroadcastChannel>"u"||(this.channel=new BroadcastChannel(this.channelName),this.channel.onmessage=A=>{const e=A.data;e.tabId!==this.tabId&&(e.type==="took_over"&&(this._stopHeartbeat(),this._emit("tab_took_over")),e.type,e.type==="session_cleared"&&this._emit("session_cleared"))})}_broadcast(A){var e;(e=this.channel)==null||e.postMessage(A)}_startHeartbeat(){this._stopHeartbeat(),this.heartbeatTimer=setInterval(()=>{const A=this._loadSession();A&&A.tabId===this.tabId&&(this._saveSession({...A,lastActive:Date.now()}),this._broadcast({type:"heartbeat",tabId:this.tabId}))},Le.HEARTBEAT_INTERVAL_MS)}_stopHeartbeat(){this.heartbeatTimer!==null&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}_loadSession(){try{const A=localStorage.getItem(this.sessionKey);return A?JSON.parse(A):null}catch{return null}}_saveSession(A){try{localStorage.setItem(this.sessionKey,JSON.stringify(A))}catch{}}_blankSession(){return{tabId:this.tabId,prospectId:"",chatId:null,conversationId:null,messages:[],lastActive:Date.now()}}_emit(A){var e;(e=this.listeners.get(A))==null||e.forEach(t=>t())}};p(Le,"HEARTBEAT_INTERVAL_MS",5e3),p(Le,"HEARTBEAT_TIMEOUT_MS",15e3);let Kn=Le;const Cs="data:image/png;base64,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",ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecHlW5/39nZt66PZ10INldQqSFToAgTRAC6KWqV1Ga7XqvVxEQZaWFonivSjYJTf2rBASliSAtECCkbBIghDTSe91sfcvMnP89724ggST7lilnzjzz+exn0cyc5/d8n7Pv/N6ZUxjoIAJEwHcC/KdHHm3H2KWM8+NgsQGwtErYWhmzEIXNdAAMHCwnlDPx3+I3YHf/djMDxgENgCZ+c4BxoYSL31yDBcYtMGTBeBpACgzt0PkKxuzHwKv/zBqmmW7Ko7aJABEojkDXBwodRIAIuE6AN0BDv0OOtWGfyhiO5kAdOAax9mgNUjpDWgdLGUBGR+4Gr8IhDEPEBjdsEzpvg26v5hqfpsG+nzW8u0SFFCkHIhBUAmQAglo50i01AT65tt62cRWHdgwDHw6gL4BEXqLFzT/TbQbSOpDSwdIGkBVfwxU6DFuYA84NOw2Nb+EGf0ZD5Y9Yw7SUQllSKkRAWgJkAKQtDQkLEgF+/8FDbN24Bpx9EeCHAIg7rt9iYB0RoC0C1h7pelKg2qFzIGZaPGJv4Ib9e71h3s9US5HyIQKyECADIEslSEegCPDJtX1srl3NuT2ecfY5MJR5nkBW6zICbdGu35aCf86GDR6zLETsVUwXrw3m3ec5ZwpIBBQloOAnhqKVorR8JcAbxhl2v/XXcsYuZsARAKp8FbS34CkDrC0CtEfAOoyuQYKqHV2GIIuIvYwZ/CfslrnPqpYi5UMEvCKg4CeEV+goThgImJPqLoDNbmSMHw0gOM/cbQbWEgV2xrqeDqh4iE+vuGnzuPUeY7iA/aJptYppUk5EwC0CZADcIkvtBpYAnzRiFId+B+c4C0AysInsEi5eFQgjsDMGMdNAyUPj4Ekzg6j9DGMVl9PUQyWrTEk5TIAMgMNAqblgEuC/Hl5tx2MNAC4H0C+YWeShWrwmaI51PR0wFZtVsCt9Me0wYbawqHkXu2X+hDyo0ClEIJQEyACEsuyUtCAg5uXbA+q/C5t/Dwwjc4vthOUQ6/m0RwFhBlqj6qw78On6xS3OY+YaFjG/wW5597WwlJfyJAL5EAjPB14+NOicUBDgvxlRaUe0SQD7NwCKviAvoJTiFcH2BNiOGGAr+pHAAJ7Mmjxu3aE3zBVPeuggAqEnoOhfe+jrSgD2QkBM3eM2e5AD5wVqQJ9X1RTrDOyIg22Pq/t6QLBMZi07YTXqDXO/7xVaikMEZCRABkDGqpAmRwmIRXq4pj/EwU4XK9o72riKjXHWNU5gW1zNxYZ21Sxh2nYiO1X/xbyvqFhGyokI9ESADEBPhOjfA0uATzpkpGXbDzOGk0L1ft/BirGWGNjWOCD2KFD1iJucl5kvaA1zz1U1RcqLCOyNABkA6hfKEeD3jzzC0rQHGTBGueR8SkgsMMQ2J9U2AjELPJl5i2lV42gaoU8djcJ6SoAMgKe4KZibBHjjIaNtZk0FZ4e6GSfMbedeDQgjoOoUQlHcqAVelpml3TrvuDDXmnJXnwAZAPVrrHyGuWV6+2/4M4CL6VG/B+UWqwxuSXQNFlRxueFdCBOmjbLMDeyW+fd6QJVCEAHPCZAB8Bw5BXSSgDmx7krG8DslVuxzEowXbYktizclu9YRUPVgHLwiu5MZ/DBaaljVIoc3LzIA4a19oDPnk0ccbNu62AhGbL1Lh48ExF4DbFMZkFJ0mWHBVqwuWJZ5VbttrphJQgcRUIIAGQAlyhieJLpW76t7EBxfpyl9ctU9t4aAGB+g4rbEu1AnsxbKzGvYz+c9LBd9UkMECidABqBwZnSFTwTMiXUXM4aHAFT4JIHC9kTA1MA2lKn9WkBsPFSR2cwMHMoamrb2hIT+nQjISoAMgKyVIV0fE+CNtYNsxp4DxxGEJRgEcrMFNpapu7SwKIOYLVBuPqH9okkMPqWDCASOABmAwJUsXIKtxvprAX4/Ld0bwLpnNWjryoEOtbdb4BWZThZlB7GG2RsDWCWSHGICZABCXHyZUxfv+nn/umc5QKuzyVyoPLSxbQmwzQm1pwzGLKAi/Z/slvn/mwcSOoUISEGADIAUZSARuxMQS/ja3H4LQF8iowiBtN71NEDlJYXF2ICq9Gzt1rnHKlI1SkNxAmQAFC9w0NKzJtV+B5z9hh75B61yeejlANuSBNuayOPk4J7CyzMpVpYdwW5+d11wsyDlYSBABiAMVQ5Ajt2P/J/nwNkBkEsSSyCQWzdgbYXa0wW7XglcT6sIltBR6FLXCZABcB0xBeiJAJ9SX2tbXDzy79PTufTvihDI6NDWVABphRcPyr0SyMzXbm06UpGqURqKESADoFhBg5aONbH2u2BMDJxS+E4QtKp4pFfsKbC2AmKnQZUPXp5Ns6hdS0sJq1zlYOZGBiCYdVNCtd1Y+ywHO0+JZCiJognk9hPYpva4AOReCWSvY7fMnVw0KLqQCDhMgAyAw0CpuZ4JdC/n20QL+/TMKixn5BYO2lAOcIUzNmzYVem79IZ5NyqcJaUWIAJkAAJULBWk8sljkrbdthDAMBXyoRwcJNBhQBODA03NwUYla0rnsKszj+oNTVdIpozkhJAAGYAQFt2vlPkDo/vbZvYDAL390kBxJScgVg8UgwNVXi9AbDFcnX5Du3XuqZJXg+QpToAMgOIFliW93Eh/k88FQ5ksmkiHpARsBm11JdBhSCrQAVkMYtGgRdptTbSdtQM4qYniCJABKI4bXVUAAT65dqxts1fE9ikFXEanhpmAmCGwpgJizQCVD16V3qzd3tRf5RwpN3kJkAGQtzZKKDMn1X+Jcf44TfNTopzeJsG7TYDq0wQrMh0sWl7FGqaZ3gKmaGEnQAYg7D3Axfy75/j/FgD1Mxc5K920MAFry8Fa1X54xMuyWRbP9mMN85uVriclJxUB+mCWqhzqiLEm1t4Jxmi6kzol9S8TsYfAugqwFrVNABKmjaQ9kjXMWe4fbIocJgJkAMJUbY9ytSbV3wjO7/QoHIUJCQG2rhxsZ0ztbJOmjUSmNz0JULvMsmRHBkCWSiiiw5xYdyVjeFiRdCgNyQiw9eUQiwapfHS9DihL0pgAlassR25kAOSogxIqspPqvqBx/AOAwiu5KFGqQCcRChNQkWnX7pxTHuhCkXjpCZABkL5EwRDIJ9aPsRl/B4DCk7eDUQvlVYoxAWsq1d9EiKYIKt+V/U6QDIDfFVAgPn+g7kDbxIcA1H42q0CtlElBLBa0sgpIqb2JJK+mxYKU6bMSJkIGQMKiBEkSf3BULztrrQRQESTdpFUBAmLZ4BVVau8dkFsxsHOadtu80xSoGKUgGQEyAJIVJEhy+CPD43YqtgpAvyDpJq0KEUgZ0FZWArbCH2WMw65J/UX/xbyvKFQ5SkUCAgr/1UhAV2EJuS19+9ctAXCwwmlSagEgwNoiYGLvAJWP3C6CqQl6w7ybVE6TcvOWABkAb3krE81srJvFgGOUSYgSCTQBtiMOtkHxfaYMG6hJXc1+Pv/BQBeLxEtDgAyANKUIjhCrse4BAFcFRzEpDQMBtikJti2hdqoxCygzh7FfNK1WO1HKzgsCZAC8oKxQDHNS/fmM82cUSolSUYgAW6v+ksG8PJvWJsyOK1Q2SsUnAmQAfAIfxLB8cm0f22ZrabpfEKsXEs1ieuBH1UBW7bWoeE16vnZr05EhqSql6RIBMgAugVWxWasxN+hvpIq5UU4KEegUMwOqAK5QTp9OReNAr87r2S3z71U4S0rNZQJkAFwGrErz1qTayeDsGlXyoTzUJsC2JsA2J9VOUowHqE4NZje/u07tRCk7twiQAXCLrELtmhNHfpEx7TmFUqJUQkCAraoEa48onSkvz6S1CXNoPIDSVXYvOTIA7rFVouXulf7ENwz6kFGioiFKwtSgLVd8pUAAvCY1V7t17pgQVZZSdYgAGQCHQKrajDWxbjEYalXNj/JSm0AoFgkS4wFqUv/NGubdp3Y1KTunCZABcJqoQu1ZE+sawXCdQilRKiEkEJr1AWg8QAh7d2kpkwEojZ+yV5uTas9lnP1D2QQpsfAQ4OiaFdCp9k7VvDyT0ibMUXwlpPB0Wy8yJQPgBeWAxehe57+ZdvgLWOFI7r4JZHRoH4mpgWp/5PFeqae0X8y9iLoCEciHgNp/DfkQoHM+Q8CaVPcwOK4kNERAJQKhmBoYtYAKsy9raNqqUu0oF3cIkAFwh2tgW+WTRxxs27pY8EftpdQCWyESXjQB8SpgeTWQ1otuIggX8qr0Fu32JtqiOwjF8lkjGQCfCyBbeKuxbiGAQ2TTRXqIgBMExLoAYn0ApQ8xK6B36lvs5/MeVjpPSq5kAmQASkaoTgPmxLorGQN9aKhTUspkLwTYunKwnTG12SSzFrt7ttqjHtWuoCfZkQHwBLP8QXjDOMPuv2EnAMXXT5W/FqTQZQJigSCxYZCl9scf7516RWuYe4bLNKn5ABNQ+y8gwIXxWrrVWPcYgEu8jkvxiIAfBNiOONiGMj9CexczYosNg2ivAO+IBy4SGYDAlcx5wbzxkNE27PcAUH9wHi+1KCkBbUUI1gaozDRrd8ypkbQEJMtnAvSB73MBZAhvNdZ9BOAgGbSQBiLgGYGU0bVXgMoHE9sG0zLBKpe4lNzIAJRCT4FrrUn13wfnv1EgFUqBCBRMQLwGEK8DlD4Sps3umaX23EelC+hecmQA3GMrfcvdA//aACg+JFr6UpBAvwiIAYFLq9VfIbCm8y3t1nlj/cJMceUkQAZAzrp4ospqrPsfAD/wJBgFIQKSEmAby8C2K/4UIGaB/XImfd5L2gf9kkUdwi/yPsftXu+/HYDin3w+g6bw8hMIzVOA1GvarXM/L39BSKFXBMgAeEVasjjWpLrbwHGzZLJIDhHwhQDbVAa2TXEvHDc5u3cWLfHtSw+TMygZADnr4roqq7GuFUC564EoABEIAoGwPAWg3QKD0Bs900gGwDPU8gSyJtX/CJzfK48iUkIE/CcQiqcACZOze+gpgP+9TQ4FZADkqIOnKqzGuu0AaHEQT6lTMOkJiKcAy6oBW+2PRbt350N6w7yrpK8HCXSdgNo93XV8wQtgNtZezcCmBE85KSYC7hNgm5Jg2xLuB/IzQjJrs7tn07oAftZAkthkACQphFcyrMa6TQBor3CvgFOcYBEIzVOA1L16w9zrg1UcUus0ATIAThOVuD1zUu2ljLOpEkskaUTAdwJhWBeAl2Ut7S7aLtj3zuazADIAPhfAy/BWY90aAIO9jEmxiEDgCKT1ru2CVT/6dN7Abpl3t+ppUn77JkAGICS9w5xUey7j7B8hSZfSJAIlEdBWVgIdkZLakP1iXp7NaBNm0zLgshfKRX1kAFyEK1PTVmP9XIAfKZMm0kIEZCXAdsbA1im+TIbYKbBP5nj286aZstaBdLlLgAyAu3ylaJ0/Mjxup2Ji2V9aBUyKipAI6QlwBm1JDWCp/RHJq9PLtduaDpa+HiTQFQJq925XkAWvUauxvgHgtwRPOSkmAv4RCMNgQNDywP51MAkikwGQoAhuS7Aa61YDGOJ2HGqfCChFIDSDATv+k90y/3+Vqh0lkxcBMgB5YQruSfz+g4fYmiEMAB1EgAgUSEBbUQV0GgVeFazTeWWmWbtjDq0MGqyyOaKWDIAjGOVtxGqs+yOAr8mrkJQRAXkJsOYY2HrFBwNGbLD73qF7gbzd0DVlVHTX0MrRsNVYtxNApRxqSAURCBgBu3swoPL7A6Qf1RuarghYdUhuiQTIAJQIUObL+cT6U23Gp8mskbQRAdkJsA1lYDvissssSR8vz6a1CbPVTrIkQmpeTAZAzbrmsrIn1b3KOU5TOEVKjQi4ToC1R8BWKf4QTeNA347B7OZ317kOlAJIQ4AMgDSlcF6I1ViXAaD2cmbOY6MWicCeBDigLe6l/DbBvCY1R7t17jFU/vAQIAOgaK2txvprAT5J0fQoLSLgKQG2tgKsJeppTM+DJU2b3T2Ltgn2HLx/AckA+Mfe1chWY/0HAB/lahBqnAiEhEAoZgOIu0Hv1BfYLXNfDElZQ58mGQBFu4DVWJcFoPYEZkVrR2lJSMDSoC1Wf6o8r0m/p93adLiEFSBJLhAgA+ACVL+bpNH/fleA4qtIIBSLAtEOgSp23X3mRAZAwXJbjbW/B9jXFUyNUiICvhFgWxNgm5O+xfckMC0K5AlmWYKQAZClEg7qsBrrVgAY7mCT1BQRIAKh2RsgdR27Ze5kKrj6BMgAKFhjq7HOBECjeRWsLaXkLwFtaQ2QVXtXbV6dXqLd1lTnL2mK7gUBMgBeUPYwRnZS3Rc0jn96GJJCEYHQEAjDFsG8LGtqd82m9UNC0KvJAChWZKux9i8Au1yxtCgdIiAFAdYaBVtTIYUW10QYNtivaXMg1/hK1DAZAImK4YQUq7FuDYDBTrRFbRABIvApAqYGbYn60wHRu/NnrGHe7VR/tQmQAVCovrwBmt0/N/9f7ZeUCtWMUgkegZCMA1il3dZEA4mD1z0LUkwGoCBccp9sTqy9kDH2d7lVkjoiEGwC4VgWOGuxu2fTQmLB7qo9qicD0COi4JxgN9b9lQP/FhzFpJQIBI9AKNYD0DlQHYuwhmliRhEdihIgA6BQYa3GuvUADlAoJUqFCEhHIBTbA4vtxHt3/kpvmPcj6QpAghwjQAbAMZT+N2Q11ln0/t//OpACxQnYDNqiXoonCfDq9ArttqaDlE80xAmSAVCk+LyxdpANtlaRdCgNIuA7AR6thF1+APTtiz+jRVtWDWTUXmuLV2Q6tDvnlPleCBLgGgEyAK6h9bZhc2L91xnjv/c2KkUjAmoSsKoORHbY6QDniH/wB8De81U4W1cOtjOmZvK7skqaNrt7ltouR+0K9pgdGYAeEQXjBGtiXSMYrguGWlJJBCQlwDRkB54As98RHwuMrH4NxraFewhm2+MQqwIqfdDGQEqXVyRHBkCREpsT66YzhrGKpENpEAHPCfBoOTLDz4ZdNmDPm31qO+IfPrqnnk4Due2BVT7E3aFXui9raNqqcpphzo0MgCLVpxUAFSkkpeELAat6BLJDTwXX43uNH/3oWegtqz/5t5AMBKQVAX3pjp4FJQPgGWp3A1mNdZ0A9v7p5W5oap0IBJYA12PIDjkVVs3I/eYgbv7CBOx+aItrAEvtRTd5Tedb2q3z6MliYHv4/oWTAVCgsLxhnGH33yCWAKaDCBCBPAlYlUORHfp58Eh+7/LFawCW2v5x69ryKiCl9mJ5vCq9Wbu9qX+eSOm0gBEgAxCwgu1NLp9cO9a22XQFUqEUiID7BLQIsoNOgtnn0IJiiYGAYkDgrkPsCih2B1T54OXZjDZhtuLTHVSuID0BUL661sT6m8D4HconSgkSgRIJ2OUDkRl6OnissvCWbAvxD/8MlmnNXStmAYjZAEofcZOze2ep/Z5D6QKSAVC+vHZj/d84+EXKJ0oJEoFiCTAd2YHHw+x3eEmTn/Tm5Yiu+GeXAdgWB9uU3+uDYmX7fp1hg/36HXpS7Hsh3BFAhXWHq6etWpNqF4Czwp5neqqQghEB/wjYyb7IDDsDPO7M8r2xZU9Da10L1hKF2BlQ+aNv+nj286aZyucZwgTJAChQdKuxToxMqlEgFUqBCDhHgGkw+49BdsDRAHPuKbYYCBhf9BjQoam/FkBuU6DUA3rD3GucKwy1JAsBMgCyVKIEHVZjXQoADdQpgSFdqhiBsr5A/QXotN35s4isfRPGhvehLVHfd/Oa1NvarXNPUqyHUDolvQwjfNIQsBrrxELltGa3NBUhIf4RYMCQ48EOPgMcDJ07t7kihVkZxBb+Cfr7CYCr/T2KV6cXarc10StGV3qSv42q3XP9ZetZdKuxziYz5xluCiQrgWQfsPrxQPWwnEJuW64ZANG+vm0h4q/OU39XwKr0Ku32puGylp10FU+ADEDx7KS50mqs49KIISFEwGsCmgE2/BRg6FhA++RBmNsGAOBIPv8E2A7L64w9jcer0lu025v6eRqUgnlCgAyAJ5jdC8IfHNXLzlruPOd0Tza1TAScIVBzEFj9+UDisyP83TcAgLZzGxL//BdgqftRyiszLdodcxTf+ciZ7hi0VtTttUGrRJF6+aQRo2yuf1Dk5XQZEQgmgWgZ2IizgQFiXv/eDy8MgIgcWfouorM+DCbHPFTzikynduecZB6n0ikBI0AGIGAF+7Tc7P11p2kaXg14GiSfCORJgAEDjwIbcSZgJPZ7jVcGQIiIT/8n9NU788whWKfx8mxWmzBb7TWPg1USx9SSAXAMpT8NmRPrLmYMj/sTnaISAQ8JlPUDqzsfqB6aV1AvDQAsC8nnngRrE+NxFTuSWYvdPVvtXY8UK1m+6ZAByJeUpOdZk2q/A87ul1QeySICpRPQI2DDTgGGnQSw/Ge7emoAAGjNW5B44WX1xgMkTM7uof0ASu/I8rVABkC+mhSkyGqs+9n/ffbcWtBFdDIRCAQBBvT/XNfj/iI27/HaAAikxooFiM1YICYIqHPQhkDq1PJTmZABCHhprcb6+wD+XwFPg+QTgT0JVA4CG3kOUDWkaDJ+GAAhNrpoDiJNy4rWLd2FUQvsVzPpXiFdYUoXREUtnaGvLViT6h4Gx5W+iqDgRMApArHK3Cp+GHBYyWtb+WUAciZg/puIfLDWKSr+tkM7AvrL38XoZABchOtF07QVsBeUKYbrBLQIMPREsGFjAd2ZAed+GgDBK/bOKzA+2uI6OtcD6Bzsf2bQvcJ10N4HoKJ6z9zRiHZj3fMcOMfRRqkxIuAlgf6jwQ4+C4g7u9aM3wZAIIy/8Tz0NS1e0nQ+FuNgvyED4DxY/1skA+B/DUpSYDfWvcCBs0tqhC4mAn4QqBjY9Z4/z2l9hUqUwQB0mYB/QF/TWqh8ec4nAyBPLRxWQgbAYaBeN0cGwGviFK9kArEKsINOBw44ouT3/PvTIosBEBpjM1+CsSygK3aTASi5y8vaABkAWSuTpy4yAHmCotP8JxBJgg07GRh8LKC5v66MTAZAwI++9zYiC1YHb4ogGQD//3ZcUkAGwCWwXjVLBsAr0hSnaAJGHGzoicCQ4wE9VnQzhV4omwEQ+iNL5iM6Z1GwTAAZgEK7XmDOJwMQmFLtXSgZgIAXUGX5egQYfByY2KY3sv91+93AIKMBEHka65Yj9tZMIBuQj18yAG50TynaDEgPlIKVlCLIAEhZlnCL0nRg4NFgw08BouW+sZDVAAggWts2xF99Gaw1AEsGkgHwrQ+7HZgMgNuEXW6fDIDLgKn5/AkwDRhwBNiB4xyf0pe/iE/OlNkA5FTaFuJv/Uv+XQTJABTT/QJxDRmAQJRp3yLJAAS8gErIF2v2jwY78DQg2VuajKQ3AN2kIkvfRbRpobybCJEBkKZPOy2EDIDTRD1ujwyAx8Ap3J4E+tR1Tekr7y8dmaAYgNwrgY6diL35CrQtGek4ggyAfDVxSBEZAIdA+tUMGQC/yIc4rtiSV3zjH3qSlDf+XZUJkgHYpTm6bDaMd5eCpTR5OhgZAHlq4bASMgAOA/W6OTIAXhMPcTyxRv/AMWBDTpDiHX9PlQiiARA5sWwHYrNfgb6qDbAl+IgmA9BTVwvsv0vQuwLLTgrhZACkKIPaIqLlYIOPAwYfAxjeT+crFm5QDcCufPUtKxGb/Q7YjmIJOHQdGQCHQMrXDBkA+WpSkCIyAAXhopMLIZDs3bWAz4AjPFm5rxBp+ZwbdAOQy5HbiC6agciCVUDGp9cCDGC9ztLR0GDnw53OCQ4BMgDBqdVelZIBCHgBZZRfObhrW94+9QAL7keEEgagu3+wTCeiTdNhrNrm/WwBBpySOt8CsBnACsbYP8Hx9BtTbnhfxu5LmvInENy/7vxzVPbMU6+547TrBjX9/ZJ+Hzi7j6qyxCixfRNgQJ+RXav2VQ9TApRKBmBXQVi6A9H3Z8BYscm7JwJdBuAzfYKBz2Hg178+5aevKdFhQpgEGYAAFv2Eb93Xy9DTjwAYf0X/93HNwKYAZkGSpSAgNuXp/7muEf1lfaWQ5JQIFQ3Ax2zMNKIfvgNj2XqwDpc/xvdhAHar0zOmFbtyxkM/3O5U7agdbwi43HO8SSJMUU656u5DuGY/A2CEyJsMQJiq72CuZf3ABo0B+h/uyzr9Dmayz6aUNgDdWdtgeOTxebhcX4a+KdMdrD0bABF3GbO18W88+JMP3RFBrbpBgAyAG1RdanPcNXfWW9BmALx6VwgyAC7BVrFZMY2v3+iuG3/lYBUz3COnMBgAgOGch9tyeR9i7MD3Eu/hULMFmpPD9fIzAGICY7MO+4RpU25apHznUiRBMgABKeTYb0+oYRZmAhi5u2QyAAEpoJ8yKwaCDRwDDPicp9vx+pmyiB0OAwCc+3A7dt9SKAIbX0ouw/joSgzOpMCsEj/m8zYAuYov5TqOe7PxRr8nL/rd/QIRv8SeEYgclRB5yrUT/sY5Lvp0MmQAlCiv80kYcaD/YV3f9ssHON9+AFoMiwG44A/tyIgx+ns5KrQ0vl65EKewTeifzhRnBgozAGLiyN/fmHzjlwLQRUIvkQxAALrAydfdeRJs9ubepJIBCEABvZRYPRTsAPFu/1BAi3gZWbpYYTEAX5naie0dPT/zjzIb4+PLcUZkLQ6025DI5rkVcYEGINcRND52+qSb3pKuU5CgPQiQAQhAhzj5mgnTAYwlAxCAYvkhMZIEDjgC7ICjlBvJXwrOsBiA7zydwopt+3gEsB+AfbUOnJdciRMjGzDU6kBC7EO0N09QjAEA3pw+5caTS6kfXes+ATIA7jMuKcLYq++sZYwt3lcj9ASgJLzBvVgsySt24us3Cug1AtD04ObikvKwGIAbXsjg3fXZkinGYOPI6GYcEd2CkVozBrEO9LIziFkcp3aML7h9znndmw/ctKTgC+kCzwiQAfAMdXGBTr7mzusBdve+ri7TMzin9zJc2GcRBsdaigscbNnhAAAgAElEQVRCVwWDQLQM6HNI102/ZjggduWjY58EwmIA7pxmYvrytIQ9gf9k+pSb7pFQGEnqJkAGQPKucPLVE14Dw7ieZIpCHl25Dl/qswjHVa2FttdneT21Qv8uHYFYJdB3VNdNv2pooJfm9ZptWAzA3W+YmLZMQgPAMW36Azee5nXdKV7+BMgA5M/KlzNPvmbCagBDCgl+QLQNF/RdhHN7L0WlLuEHQyHJhPHcRC+g3yiwvqOAyoFifnUYKZScMxmAkhGW2sCa6VNuHFpqI3S9ewTok8U9tqW33NCgnbw+Ju7gRjGNRTULp9csx0V9FqE2ua2YJugarwiU9fvkpl/e36uoSschA+B7ec3pA9Mx2kXQ9zrsUwAZAHlrg5OvvLMvIkzswFXyMTS+E6dVr8RpNSswPN5ccnvUQIkExKC9ikFgfWqBvocAyT4lNkiXf5oAGQAJ+kSW95v+yE1bJFBCEvZCgAyAxN1i3HfuGWCZ1ganJQoDMK5mJcZVryQz4DTcfbUnluGtGgImdtoTP2IpXrERDx2uESAD4BravBvWDf2AaROv35j3BXSipwTIAHiKu7BgbhmA3VUIMyCeCoinA+IpAR0OERBz86uHfXLDF6vxMc2hxqmZfAiQAciHkrvnkAFwl2+prZMBKJWgi9d7YQB2lz8w1oojyzfiCPFTsRF9I+0uZqdY0/Hq7hv+UKBqGC3II0F5yQD4XwQyAP7XYH8KyABIXB+vDcCnUQhDkDMD3T/9omQIuhgxoKxP1w1f3OzFI/14lcQ9KZzSyAD4X3cyAP7XgAyA3DXYpzq/DcDeDMFhZZswIrEdo6uaUV/eDGQ7Ako3D9niMX6yd26AHhO/E+K/xU+v0K+znwc9308hA+B7CUAGwP8akAGQuwaBMQC7Cx3RL4qHvjYIyLQCbZtyP7z7Nzq2AHbha5P7UiYxOC93U++6wedu9Lt+xHK7dASWABkA/0tHBsD/GpABkLsGwTYAe1PPLSDVAqQ/+eHiv3f//zJtYsN2dysjRtmLm3hk108SSPTa8yYfrXBXA7XuGwEyAL6h/zgwGQD/a0AGQO4aqGcA8uEtbv7i9YGV6f7J7vnbFv9/9/8n2hMj6D/+0ff835rW9Uh+95u9+G893Nvh5lMGlc8hA+B/dckA+F8DMgBy1yCcBiCgNSHZwSFABsD/WpEB8L8GZADkrgEZgIDWh2TLTYAMgP/1IQPgfw3IAMhdAzIAAa0PyZabABkA/+tDBsD/GpABkLsGZAACWh+SLTcBMgD+14cMgP81IAMgdw3IAAS0PiRbbgJkAPyvDxkA/2tABkDuGpABCGh9SLbcBMgA+F8fMgD+14AMgNw1IAMQ0PqQbLkJkAHwvz5kAPyvARkAuWtABiCg9SHZchMgA+B/fcgA+F8DMgBy14AMQEDrQ7LlJkAGwP/6kAHwvwZkAOSuARmAgNaHZMtNgAyA//UhA+B/DcgAyF0DMgABrQ/JlpsAGQD/60MGwP8akAGQuwZkAAJaH5ItNwEyAP7XhwyA/zUgAyB3DcgABLQ+JFtuAmQA/K8PGQD/a0AGQO4akAEIaH1IttwEyAD4Xx8yAP7XgAyA3DUgAxDQ+pBsuQmQAfC/PmQA/K8BGQC5a0AGIKD1IdlyEyAD4H99yAD4XwMyAHLXgAxAQOtDsuUmQAbA//qQAfC/BmQA5K4BGYCA1odky02ADID/9SED4H8NyADIXQMyAAGtD8mWmwAZAP/rQwbA/xqQAZC7BoE0AAf3jeLhfx8UULIkOwwEwmIAJrxu4o2P0lKWlAyAlGX5WBSTW1641Y37zj0DLNPaICOFgVUGHr1qiIzSSBMRyBGwLROplu3K07jhhQzeXZ+VMk8yAFKWhQyA3GXpUiezAahO6Hj6O0ODgJE0hpSAbWaRat2hfPbX/i2N1c2mlHmSAZCyLGQA5C6L/AYgajC89IPhQcBIGkNKwDIzSLc2K5/9xX/uQFuaS5knGQApy0IGQO6yyG8AhMJX/ms4DI3eIgWhL4VRo5VNI922U/nUz3m4XdocyQBIW5qcMPr0lrg+Mr8CENie/e4wVMY1iQmStDATsDIppNtb1EbAGM55qE3aHMkASFsaMgByl0buMQCC3eNXD0H/SkN2jKQvpATMdCcyHa1KZ29DwxcfljdHMgBydz96AiBxfWR/AvD7rw/CgX2iEhMkaWEmYKY7kOmQ99uxE7UxuY7zH5H3KQcZACeq7F4bZADcY1tyy7IbgImXD8ShA2Ml50kNEAE3CGRT7ch2yvt+3Imc07aOC39PBsAJlmFsgwyAxFWX3QD88ssDcMzwhMQESVqYCWQ725BNdSiNoM00cPEf5R3oSE8A5O5+ZAAkrs8Z19xVlQaXdh7TreP74dSRZRITJGlhJiDe/4txACofO9IGrvizvAYgBlb98pQb5BWocufIIzcyAHlA8vOUk6+ZIF5iSnmXveHsPjhndIWfeCg2EdgngXRbM6xsRmlCGzt0XDlV2lcA7dOn3FiudAECnhwZAMkLePI1ExYDqJVR5tVja/DV46pllEaaiAA6d26D2A9A5WPxdh3/+ZS0BmDJ9Ck31qnMP+i5kQGQvIInXzPhCQBfllHm2aPKcdM5fWWURpqIADp2bAEg5wp5TpXnxY8Y/ud1aWc6PDl9yo3/5lSu1I7zBMgAOM/U0RbHXnvXvzPO/+Boow41NuqAGBqvGOhQa9QMEXCOALdtdO7c6lyDkrb0vzMsvPBhSkp1nLGvvzn5hj9KKY5E5QiQAZC8I5z+3Tt7Z7JsEwBdNqnlMQ3/+N4w2WSRHiKAsGwE9I2/prCpVcrXHFY0wvu/cv9N26g7ykuADIC8tflY2SnXTHiIA9+UUepT3x6KmqR03kRGVKTJQwJmJoWM4ssAc6bh3IfkXAWQAQ+/MeXGb3lYcgpVBAEyAEVA8/qSE667fZBh60sBSDfp/reXHoDDBse9RkLxiMB+CYRhEaBOS8eX/iDlAMBOU7NGzph08zrqpnITIAMgd312ewpw1w0cfIJscn98Zh+cdxhNBZStLmHXI779i6cAKh/r2w186zH5ptgzsBvfmHLDXSqzVyU3MgABquTYa+98jHF2iUySLz26Ct85tZdMkkgLEUCqdUduHIDKx+wNGn7+T7leAXDGH39z8k2XqsxdpdzIAASomif8130JvSP9IuM4WRbZJx6UxISL+ssih3QQgRyBzuYt4FztKYBT3+f4w2x5ljrmDNOtZOzsGb/+odrLLyr0N0YGIGDFHHVxQ7RPTaxRlkGBg2si+PM3BweMIslVmYBtWUi1qD/4/KcvZTF3jRwrHYpBf1t3pL+98K8NcghSuYM7mBsZAAdhetnU2GvvvJJxdgeAA7yM++lYusbw0g+GQfymgwjIQCAMMwAE5wv+2IGM6ftTjg2c8Z++OfmmR2SoPWkojAB9ahfGS6qzx1zTkDy3ZsPfF7X3OWtjxr8lt//w9QMwvA/NBJCqc4RYTBg2ATK5jvMf8XUGwEoOPNiJ9K+bpjTI8x4ixP2+mNTJABRDTaJrrMbaGwA2YWlnL8zYOQQbMuXYlk2i2YzD4t6U9+snD8Spn/P1QYREFSEpfhNItWyHbZl+y3A1/qYW4PYnN3wmhgkNVpHru2ngiMD+TJs6s7HYrn4BYBsAvoJpeO6NSTfOczVBatwTAt7cITxJJZxBdhkAX7PvUwd22BW+SqDgRCBHgHN0NIs9ANQ+4ouWQm9q+kySDdkxeNUubnnuUdoOTIq8+VlwjIP9ZgbdKxTsUlTUgBdVCgNgxMFO/gnAtIDTJPlBJxCWJYCTTz0L1t5OBiDoHdZn/WQAfC5AqeGlMABiU4mjrwEqB5WaDl1PBEoikE11INsp7e54JeW262KNA4m/TN1rW/QEwBHEoWmEDEDASy2NATj4TGDY2IDTJPlBJ5Bu3wkrkw56GvvVH9nZiuhz/yADoHSVvUmODIA3nF2LIosBQK8RYEd8zbU8qWEikA+Bzuat4PyzA9nyuTYo58QXfAj93XfJAASlYBLrJAMgcXHykSaNAdCjYKeICQm0M2A+daNznCcQlvf/ZX97Gujc+2J79ArA+X6lcotkAAJeXWkMgBgHMOZbQNXQgBMl+UElIN79izEAKh+azZF49LF9pkgGQOXqO58bGQDnmXraolQG4KDPA8NP9TR/CkYEdhEIw/z/yPZmRP/5AhkA6vaOECAD4AhG/xqRyQCg5kCwI7/hHwyKHFoC3LbQuVP99f/j774PfcEHZABC29OdTZwMgLM8PW9NKgOg6WBjfwwYCc85UMBwEzDTHch0qD39jzGG5GNPANl9b3NMrwDC/XdQaPZkAAolJtn5UhkAMQ6g7jxg0DGSUSI5qhNItzbDMtXeiM5o70Tsqaf3W0oyAKr3dGfzIwPgLE/PW5PNAKBqCNiYqzznQAHDS4Bzjs4QLP+bmDMP2uLFZADC29Udz5wMgONIvW1QOgMgngIc/x9Asre3IChaaAlYmRTS7b7ujOc6ewaG5J8f7TEOPQHoERGdsBsBMgAB7w4yGgAxE4CJGQF0EAEPCKTbdsLKqr36X3TbDkReeLFHmqUYgEO1HWikzYB6ZKzSCWQAAl5NKQ1AogbshB+IZwEBp0vyZSfAbRudO7fKLrNkfclXpoFt3NhjO9dnj8M7dr8ez9vbCUdrW3Bf5J3P/hPtBlgUzyBcRJ/QQajSfjRKaQDErf+obwLVwwJOl+TLTiCbake287O74smuuxB9PS3+s3tbV2VOwRJeVUjzH597prYOP4vMJQNQFL1gXkQGIJh1+1i1rAYAA8eA1Y8POF2SLzsBMfdfrAGg8hFbvQ7G9Ol5pfjlzJnYwuN5nfvpky7Rl+N7xl7WGKAnAEXxDMJFZACCUKUAPgGAEe9aE0AzAk6Y5MtKwMpmkG5rllWeQ7oYkk89A9be81MODuD09BdhQisq9rXGh/iKvoyeABRFL5gXkQEIZt3kfwIgXgMcejHQf3TACZN8WQmEYfCfns4i/sSTeZVAfPMXTwCKPX5ivIsv6qvJABQLMIDXkQEIYNF2lyztKwAhkrYIDnjvkld+WAb/7W/r309X5wVrMO40jyy6aHdFZuFEbRMZgKIJBu9CMgDBq9keiqU2AOIpwLHfBsoHBJwyyZeNQCgG/3Eg8ZepeaO/NXsUXrYH5X3+p0+cHJ2OQ9heXqnQGICimcp+IRkA2SvUgz7ZDQD6HQo2+pKAUyb5shEIxeC/pcthzJqVF3rx/v/CzFnYwWN5nf/pkzRwPBt7ERXYyz4DZACKYhqEi8gABKFK+9EovQFgDOy47wHJPgEnTfJlIWBmUsgovvKfBobEo48Btp0X9kW8GtdkTs7r3L2dJL75iycAez3IABTNVfYLyQDIXqGgPwEQ+g84AuyQiwJOmuTLQiAU3/5XroHx1lt5I7/dPBL/sgbnff6nT/y6vgTfMvaxzwAZgKK5yn4hGQDZK6SCAWBa18qA8eqA0yb5fhMIw7f/3Lr/Ux8HrPzWN9jIE7g8czqsElbe/F3kLRymbacnAH53cI/jkwHwGLjT4aR/BbAr4UHHdG0VTAcRKIFAGL79R9duQOT11/Om9BtzNJ6wDsz7/E+fWAYTz8VegA4xkmAvBz0BKJqt7BeSAZC9Qio8ARA5aAbYif8JRCsCTpzk+0UgFN/+GUPysSeA7F4G4+0FvJj7/5XM55GCXnRZTtY24o7I7H1fTwagaLayX0gGQPYKqWIARB5DTwQbcXbAiZN8vwh0tmwDz/OxuF8aS40b3bgZkVdezasZ8X39h9kT0GSXNsD2h8b7uFBfSQYgL+pqnUQGIOD1DMwrAMFZj4Kd+F9AJBlw6iTfawKh+fb/5FNAZ2deeKdaB2OiOSqvc/d1UhwWnoi+jEqWIQNQEslgXkwGIJh1+1h1oAyAUD1sLNjBxS9XGvBykfwiCYTi2//mrYi89HJehJbyKlyXGYtskev+7wpysb4c39/bBkC7q6BXAHnVJIgnkQEIYtV20xw4A6DpYMd+h9YFCHi/81K+me5EpqPVy5Cex8rN+388v3f/63gZ/iN7YtG7/u1KzoCNx6KvoC9L7T9fMgCe9wevApIB8Iq0S3ECZwAEh5oDwY78hktEqFmVCIg1/1Pi3T/fxwh1RZKNv7sA+oIFPWbj1M1fBDpXX4MbjPk9xgQZgJ4ZBfQMMgABLdwu2YE0ALmdAr8M9D8s4PRJvtsExIp/4v2/yoeRziD2xN96TNHJm7/44P9/0dcwlLX1GJcMQM+IgnoGGYCgVq5bd1ANAKLlYMf/B2AUt3Z5wMtG8vMgYJtZpFp35HFmcE9hjCHx/Atg2/ef5xv2AbjHPAwtPOpIsqdoG3H7/qb+7R6FngA4wlzGRsgAyFiVAjRZjXXXA7i7gEvkOXXw8WC158ijh5RIRSDVsh22ZUqlyWkx0Q2bEHn1tX022wED/2uOxj+tIY6FjsDGg9E3cCDLc1wFGQDH2MvWEBkA2SpSoB6zsfZqBjalwMvkOF0sEXzMtbRdsBzVkEpFNtWBbGcej6elUl2YGE1s9yuW/N3Lhj82GKbbA3LT/DZwZ6fNftdYiEv1j/IXq3Ob/c+M4lcayj8SnekxATIAHgN3Opw5qe4CxvGU0+161l7lYLCjrxKjAjwLSYHkJiAG/olpf1B84F9izlxoi5fsUQwxrU9s6vMXawTW8DLHCzVG24r7IjMK+2uLmmn2q1lxx8VQg74ToE9d30tQmgB+f/2Jtsbz3zastHCuXM3qxwMDx7jSNjUaPALp9p2wMungCS9AsdHRidjfn85d0Q4D79q9Mdfug1ftgdjK3bnXViKLR6LTep729+k84mYzu3dWTQHp0akBIUAGICCF2pdMPumQkTa39/waEbScIgmw478PRJz/xhM0FGHXa2VSSLe3KIshYwFrd3Ksf2UulndE8B7vhQ/taohH/m4ft0bmYJy2ofAwyexadvds5wYhFK6ArnCJgPu9ziXh1GwXAT75oCrbjjQHnkfvkWCHf4VeBQS+kMUnwG0LYuCfCnP+LRtY32Jj5Y6un1XNPPd7Q4sN24clDc7R1+DGfOb876V8vDyzQJsw53PFV5aulJUAGQBZK1OALquxTizkHSngEilPZSPOAoaeJKU2EuU+ATHlT0z92/3gGRvZ1Z3IrOqAtTUDq9WE3WpCS+owDogjMjCO2KEV0BL+jFET9/JNrRyrPr7Rd93w1+60kbXcZ5ZPhGO1LbgzMgtR2Pmc/plzeFXmde32OeOKupgukpoAGQCpy5OfOKuxfi7Aj8zvbInPErMCjvomUEVPGyWukivSMm1t6PxoW+5Gn13VgczKztzv7MYU9rVN/S4hLKIhcVQVysb1QdnY3q6NJ93e0fUtflVz97f6HTZWN3N0Zn34Sp9nFUq9+YswdnVmin7bnGvzDEmnBYgAGYAAFWtfUq3G2l8C7L8VSAWIV4Ed820gklAiHUriUwQ4kNnQgfTyFqSXt+Z+pz5qQWZ1G7hZ+o00NrIcva4djlh9edHo29IcK5vt7m/1XTf91TtstKRL11e0qCIudOLmnwvbO3UCa5j7ThES6BLJCZABkLxA+cgzJ9Weyzj7Rz7nBuKcPnVgh10RCKkkct8EzG2p3E0+tetm/1EL0itaYadcfjbOgOrLBqP6K4P3W560iT2+zee+3e+wsa0jWDf6vSXp2M0/YmfZfe84s/wg/bFIR4AMgHQlKVwQv39Uua1ZYi1Ro/Cr5byCjfwCMOQEOcWRqj0I2G3Z3Lf4PW72y1thtexnj3kPGIpXAn1+cBAsXcu9k991g981ME+8uw/+rf6zII/XNueW+S32nf/uLfKy7GLtrtn1HpSLQvhAgAyAD9DdCGk21r3FgBPdaNuXNpkONuZbQOUgX8JT0P0TSC1rQctr69E+aws6FzXDl6HteRRpwYgaTD5iMMzixr/lEUGeU8T2vlcaS/AVfRk0h6yNXZO5X791zvfkyZKUOEmADICTNH1sy5pUdxs4bvZRgvOhEzVgx1wHGO4sjOK8YPVbFI/wtzy4CC2vb+hxcJ4sNKYeMRCvH9RbFjmu6BC7+v08Mhe1bKez7ffuOJI1zM9jz2Bnw1Jr3hAgA+ANZ9ej8N+NOtTWrZ43FHddicMBxHiAz10OMOqqDpMtuLmt/28pNk9ZJO23/X0lZGoMt50xEpvL1dt5UvxVXKSvwLeNDxGDw2MrYlY7++XM4kdTFtzD6AKvCdCnqtfEXYxnT6p7kXOc5WIIf5oedDRY3fn+xKaouUF762+d2/WtP6DH7CHVePgYtaaX9mUp/MSYDzHgz42DHv+7QVWuNskAyFWPktRkJ9V9QeP4Z0mNyHrxgePADjxNVnXq6rI51twwC61vbQp0jpwBt50+Ehsqg/86aQhrx+X6Mpytr4XY2teVw7AtVGUrWUNThyvtU6NSECADIEUZnBHBOZg9qe4DAIc406JcrbC6LwKDjpVLlOJqNv76fWx/YoUSWb5Q1xdPHzogsLmM0nbgCv0jjNU2OjbIb18weGX6Re2Opi8EFhYJz4sAGYC8MAXnJHNi/TWM8cnBUVyAUsbADr0Y6HdoARfRqcUSaHtnM1b/tzrrv6yuTmDC50cUi8OX68Q3/KO1Lbhc/whHaNu80aBxoE9mBPtZ00feBKQofhEgA+AXeZfi8vsGJ+xE2UoA/VwK4W+zmg52+FeBmoP81aF4dG7aWP7v05Be1aZMpmLO//XnHYK2qNzLZRzIWnGMtiV34xc3/bjTg/t6qCgvz3ygTZgzWpnCUyL7JEAGQMHOYU6qvZRxNlXB1LpS0mNgR30DqBiobIp+J7bjqZXYcO97fstwPL54AiCeBMhyiG/4Q1gbarWdOJptzd30e7G0f/J0zlGdGs0a5i30TwRF9ooAGQCvSHscx26s/xsHv8jjsN6Fi5aBHfUtIKn2/G7vgO4ZacXV09G5UCwuqdbxv2MPxKJ+3s9sEwvzDGIdOJC14CDWigO1Vohv+uLmrzu0aI8TlbJr0o36rU3fcaItakN+AmQA5K9RUQr5/aMG2JolBgT2KqqBIFwkFgo68htAvDoIagOjMbuhA0v/7eXA6C1E6JTjh2HewMpCLin43AGsM3ejFzd48XOQ1ophrNWRpXkLFlPIBUlzM7t7Vv9CLqFzg02ADECw67df9WZj7dcY2B8VThGIVYId8TWgTM0hD37UTtXH/4Llr08+CEv6ljmCtUbL4iDs/ORbffc3+yRMR9r3tBGNc/TuPI79fP5sT+NSMF8JkAHwFb/7we3G2mc52HnuR/IxgpEAO/wKoGqojyLUCb3p/oXY9pdl6iS0WyY3f6EO25KFbW5XFmUYXqNheA3DsBoNB1ZpqJv1Mqrb1XlFYldn/qTfNudrShadktonATIAincO/psRlXbEmAbwI5VOVYuAjb4E6FOrdJpeJLf25jm5jX5UO8SSwD+44FDY+1hWOm4AQ6u13E1e/HTd9DX0Tn7yMambFuJPPQOkfRyo53BhaMc/h4EGqDkyAAEqVrFSeePB/WwYbwIYWWwbgbiOaWD144ED1PY6btdi9Q/fQdvMzW6H8bz99wdUYOKJw2FowOCqrpv77jf6/hUM+/tANDrTiD39DGA5vOa+5yR2C5jMbkCifThrWOjv3s1+MghxbDIAISk+/90hw2zdfguA8vvrsoPPBIaNDUllnU9zXUMTdr60zvmGfW5x29cPQr8z+2BgpQZdK0xMZGcros/9o7CLZD87bu5EWWY4a5jfLLtU0ucOATIA7nCVslU+acQom+vTlZ4ZsIv80BPBRoh9kaiLF9oZN973PrY/qcbyv7ty1yoMDH7kSGhxvVAciG7cjMgrrxZ8ndQXRK0UauxadvPsNVLrJHGuEqBPR1fxytc4n3zIUbZtPw1gsHzqHFY04HCw+gsArfAPfYeVBKo5FWcB9LpmOCrHF74PQGzFKhhvzwhU/XoUK27+FekTWMP8+T2eSycoTYAMgNLl3Xty/Dcj+vKIPpUDn1c+/cpBXfsHJGqUT9WpBK3WLJac/yJ41qWd5pwSmmc7kUFxDLz/cDAj/487MRogPnMOtGVL84wSjNN4WXYli9vHsIamrcFQTCrdJJD/X4SbKqhtzwnwx6Hb2+vuAMdPPA/udUAjDnbIBUDfUV5HDmy8NTfNRuvrGwKrf5dw8ch/wD2jED0o/7n/eiaL2PMvgLW3Bz7/jxNgAK/M/E27fc6X1UmKMimVABmAUgkG/HqzsfYiBvZ7AO4ujyYDp8HHgo04G9Dk3gxGBlTi5i9MQKAPjaHfzbVIHpvv0x+G6LoNiEybFui0PyPesG1UZb/PGpomqpUYZVMqATIApRJU4Ho+edRQm1viacBXlB81V3FA13oBCXVXSHaiS4rH/+I1gHgdEMRDS+jo88ODkTwhvzrnHvm/MwvaR2rtgMvLsx+xmPUl1jBXvZ2dgtgxJdNMBkCygvgphzeOOJJDu5uDnemnDtdjGzGwuvFAf9rxdH+stz+5HBvvW+B6OZwOEBmaQL+bahEZnN+uf3o6i9g/FXvknzB3oCz7XXbLvEed5kvtqUOADIA6tXQsk+z99WdpGr8HwOGONSpjQ4OOBht5Dr0S2EttbMtEpr0FW367FK3Pb5Kxep990t0/hqpLBqH89L55DvhjiK1dB+P1NwKRX14io2baLjPv0m+d25DX+XRSqAmQAQh1+fedPG+AZg6oPU3j7DIAX1J27YDy/l2rB1aqPysy365upjuR6WwDOAe3ODY3LELnvJ35Xu7peUb/GBJHVSMxphqJo6vzvPEDmg3EZsyAtnKVp3pdCSY+xRPmJjtmPa5pnT+iVf1coaxko2QAlCyrs0nxyWMiFm89k9napWD8QvUGDDJg4FHIrSAYye+xsbOE5WhNfOvPdrTBMvdcFdZuN7Hhvz9Adm2nb0JZTEN0aAKRYUlEhyURGZbI/dZ7F7axD9+k7L0AACAASURBVGMM0dVrYbwh1sMK+BE3m+24/ZwW5Q3sZ01qDV4IeGmCIp8MQFAqJYlO/psRMTMaOUXj1jgONo4BxwCISCKvNBmRJNiIM7v3EgjRnwbnyKbakU117JOf1ZzFjj+sQdvLmwFeGub9XS3m6hsD4903+SSiw8UNPwFjQLzkRR2NjhSir74GtlPOpxk9UhVb9sbNjTxiv8mi1r20dW+PxOiEHgiE6FOO+oIbBPjkMUmTd5ykcftUDghDcGzgDUHVELC684DywleOc4Oxm21a2TQyHW3gdn4b3GSWtWPblJVIL2wtTRZD7qYubu67f6uPDErk/Rg/XwEaB6Jz50FftDjfS+Q4TwiPWdt4zJzFDP4oeNWjrGGaKYc4UqECATIAKlRRohxyhsBqOVFj2rhuQyCeEBT2nFaGfJjYMu44sINOA/SYDIoc1SBu+JmOVljZ4jaBa399K1r/tRmZ5R2wW/d/T9J7RT+50Q8Xj++Tucf54rG+m4d43B9Zv6lrXr8dgFUNxadxzGzhUXs+060noKUfYQ0L29xkRG2HmwAZgHDX3/Xsu54QtJ6ggY3jNsYxlntCEBxDEKsAG/EFdaYM5h73d3Q/7nfmWb61PZMzApkVHRCvCvQqA3p1BMYg8Z4+Aa3c+4WXclP7XpsGtm2b6328pAAxq5NHrQXM4M8ilp7CfrogGFMuSkqaLpaFABkAWSoREh38vsEJM1F2ggbsekJwXCAMgdhTYPipQJ/aQK6VxDmHGN1vpjrAeQC+DRf596BnTUTnvQttqaRr+EetDI9aS3nU/qdm2FPYz+ZLKrTIAtBlgSJABiBQ5VJP7MeGgLNTORNjCLgwBPI+cxfTBoedDPQbDTD5/3y6bvwdMFOdat/40xlE5zTJN63PsC0et1Zyg7+iRewp7Odzm9T7K6aMgkpA/k+woJIl3UUR4I8Mj5sdsRM0xsZxxk9lwPFSGoJkb7BhY4EBhwNMvu2GP7nxi2/8zjzqL6qgLl8kRvZHZs2Ctm69y5HybF7nHDFznR2xp2sR6xF2y/yX8rySTiMCnhMgA+A5cgpYCIGcIUjFj+96ZcDFLAO5DEG8CmzoScCgYwAxcNDnQzze/+RRv6o3fgajrQ3RGTPBNm/2l7iYmheztvKoOYNF8BfwuX9lDVD3HYu/tCm6wwTIADgMlJpzl4BYhwCGcbzN7HFMDCzsMgRxd6Pm0fqwsV0LCfl02Ga268afScPVifo+5SfCMqbBiMUReX8B2KxZ/ihhual5zTzK5zLdehxa5R9Yw7SUP2IoKhEojQAZgNL40dU+E/jYEGj2qTlDwHGCL4Zg0DFdawd4eIhH+1amE2Y6BbGKn6qHHonlbvx6REwe+b8qT3sNWPC+d+nGrHYetd9nhvkUtPQDrGHhdu+CUyQi4B4BMgDusaWWfSCQMwRRdpwtVikUAwuRMwTur+/roQH4+Nt+Np1br1/FQzMiMKJx6NFY7pv/7ofrBiBqpnncWsR1+3ktajSym2evUZEx5UQEyABQH1CaAH98VBRbzeNsllu2WLwycMcQuGwAxDd8K5OGWLlP1W/7TNO7b/pxaPq+B1Y6bgAitslj1nIetf6lMXMya3gveHsgK/1XTMm5RYAMgFtkqV0pCeQMwQ7zWNtiYlEiYQhOdOQJgeMGgMPKZnM3fLFaX75L9UoJfT+ixE1fPNoX3/R1I7/1oUo2ALpt87i9hkes1zXdfog1zFNoP+Cg9QDS6ycBMgB+0qfYvhP42BDYrGsMAbgwBMmChTlgAHLv9HM3/DRscdNX8PF+7oZvRKCJm74RgfjfhR4FG4DcJjrWJh6x32YR84/slvlPFxqTzicCKhIgA6BiVSmnogmIrY9htx1r5zY24qdysJPyMgQOGADxPl883v/4x8zCtsQmPcF9z880DZrRdbMX3/SLueF/upg9GgAxUj9ubecRazaL8sfAU39mDQuL2/Sg6J5EFxIB+QmQAZC/RqTQRwI5Q2C2H2OLVQqZPY5zdiIYyj4jyQkDsNc8hSmwYJvCGAhD0GUQZBz8x3Qdmmbk3t+LG70YyKfpzu8D8BkD0LWJTiuP2u+yiP0kEHmYNcxs8bHbUGgiEAgCZAACUSYSKQuBnCHg7Ud3PyEQGxydlDMErhmAvWe+ywjwbkMgXhdwseOd+O3iWv9iRH7uRp+7ye+62Xf99urIGYCl88UmOgu5YT+nxdhk9tOmDV7FpzhEQBUCZABUqSTl4QsB3jDOwICNx/CR51+PwWMu9EXE3oLmjEC3Gej+nRtTsOu/bfHf3QvWMQaxda5YybDrd/f/FnPud//fu/7d5yRZ85YGdtz3f+GzDApPBAJPgAxA4EtICchAgC957DrOeaMMWlTXwBj7Nqu9dJLqeVJ+RMBtAmQA3CZM7YeCABkA78pMBsA71hRJbQJkANSuL2XnEQEyAB6Bzu0JQE8AvKNNkVQmQAZA5epSbp4RIAPgGWoyAN6hpkiKEyADoHiBKT1vCJAB8IaziEJPALxjTZHUJkAGQO36UnYeESAD4BFoMgDegaZIyhMgA6B8iSlBLwiQAfCCclcMegLgHWuKpDYBMgBq15ey84gAX/zodznY7zwKF+owDPx7rO7y+0MNgZInAg4QIAPgAERqggjwxY/dwsEbiIT7BBhYA6u7lBYCch81RVCcABkAxQtM6XlDwFo89X4GfMebaOGOwoGJet1l3w03BcqeCJROgAxA6QypBSIAe9HUJ8DwZULhAQGOJ7X6y/7Ng0gUgggoTYAMgNLlpeS8ImAvnvohgHqv4oU8ziKt7rJDQs6A0icCJRMgA1AyQmog7AT40j8N5raxJuwcvMyfaeYQNvKra72MSbGIgGoEyACoVlHKx3MCfMmj3+CcPeJ54BAHZIxfyWov/32IEVDqRKBkAmQASkZIDYSdAL3/96EH0DgAH6BTSNUIkAFQraKUj6cE+KLHD+TMXgpA9zQwBbMY10ay+ktWEAoiQASKI0AGoDhudBURyBGwFk/9LQO+Rzi8J8CB3+l1l33f+8gUkQioQYAMgBp1pCx8IMCX/6U/z2jLwZD0ITyF5OhgUfsgdtAVmwgGESAChRMgA1A4M7qCCOQI2IumPgOG8wmHjwQ4ntXqLxvvowIKTQQCS4AMQGBLR8L9JMAXT72KAw/4qYFidxFgwNWs7rIHiQcRIAKFESADUBgvOpsIgC+cOprrmAGgnHBIQaCNWTiBjbpsgRRqSAQRCAgBMgABKRTJlIMAX/yXeg5tGoD+cigiFd0ENjHY41jdFYuICBEgAvkRIAOQHyc6iwiAL/zzSK7r4uY/kHBISWA9s6xxbNRXxLRMOogAEeiBABkA6iKhJbB51MXltmGfpkHL2sDiAe/9dZ9zyvmiqRdwhocB9AotsGAkvp1xfJPVX/b0vuRuGX3m0dzmJ3ANMZYw/9Rv9rSNwUiNVBIBZwmQAXCWJ7UmOYH1o7/8VTOjXZvu1I/OpLQ4558IjiXsVLzcehEM3xyy8K/bxb/wpc/HbLvlXgbQfHPJa7u7PA78VtMqf8xGnpsW//+WI88cmGo1XuxoTxyazcZ3+9zjiETSPB5PrY0nrQf6f/DibQFKk6QSgZIIkAEoCR9dLDuB9WPOT/JU7HtmWvtqZ4c+ysywHlfsi8btdMUAfHXAny+q4eA3ARgue56kb68EVjKwOzdf8khF86ayX2bNWI+fd7qeRSLRsS0aM/8eL7d+1Kvp5Z3ElgioSqDHPwhVE6e81CWwafT4/pYd/XE6rX051aYPsyxWcD/XdGDIj+pRNr5WXVAhyKxl0ttY96fN4FwrOFuNWYgnOtpjieyrejT7nwPef2V5wY3QBURAYgIFfzBKnAtJCzGBjYddNNrMGtdnUuzszjaj3+6P9ovFwjRg8LcPRsUVhxbbBF3nI4Hme6dhw9PNRd38Py2bMY54rCMTS6TnxuLWDX3ff+l1H1Oj0ETAEQJkABzBSI34QWDT6IvOzJjGD9Id2impDr3CDQ3i2cGgbwxF5VVHuNE8tekSge23vISNL3d0LRPkwhGLdlqJRGpJNGbf22/hi7QVtAuMqUn3Cbjz1+G+booQQgIcDdrGzy34uplmV3V26GMyKS3mFYaBlwxE9Q+O9iocxSmBwNYfP4/Nb5sltFDYpREjzePJzvXRmPXwgNGVv2B//atVWAt0NhHwhwAZAH+4U9Q8CWw87Gtltt35g2yKXdHZbtSb2Z4H8eXZdMGnDTivL3rdeELB19EF3hHY/N1nsHW+d/E+HUnXxCDCzu2xRPaZRMT4YfX7/9jhnxqKTAT2T4AMAPUQ6QhsOXL8wHQ6cn02bVzY2aYNtYsYxOdWUn1Pq0Hf2092q3lqtwQCG6/8G7YvMUpowdlLuwcRdsTj2WmROH7Y970XFjsbgVojAqURIANQGj+62iECm4+4+IhsBj9OtWtnpTr0Pk4M4nNI2mea6XNcBfrdd5pbzVO7RRBYd/kT2Lk6WsSV3lwiBhHGYh2ZeCL9rhHnNw14/8WXvYlMUYjAvgmQAaDe4RuBDZ/78rlmVvt+ukMbm+rQA7WxTs1hCRzwu9MBvfDpZb4BVzGwaWHNJU+idVM8UNlFuwYRfhSJWb8asPBfUwIlnsQqQ4AMgDKllD8RMYhv02ELvplJsatS7fqRmbQm71e2PHBW1cYwcMqZYBEyAXngcvwUnjKx5uIn0bY94XjbXjZoGGmeSKQ2xBLZP/Y/tOpmGkToJf1wxyIDEO76u579lpPGV2Sboz/IpLUrUu16nZkVs+vVOSqGRTD44TPB4vK8e1aH7r4z4W1prLr4KXS0BPvm/+kMdc0UKxHuiMWzz5WVp39Y2TRtaxjqSTn6Q4AMgD/clY7KzzijCvH4FwFcaFvsnJULk+Wd7T2uwBtYJuUDdQx++AxoFZ7NSgwsKyeE261prP3GS2jbaDvRnJRtRIwO9Ov1ETcS0XWaYTzNYrG7k2+8sUZKsSQqsATIAAS2dHIJ5+ecMxiGMR62fSEYGwcgskuhmWVYvqAM2bRSX/73KECyr4ahD58OrZda30jl6mWAvb0Tq7/5Cjq2qHvz1/UM+lYvgZhS+PHBGPRodJsWi73MdP1XZW+/PVu22pCe4BEgAxC8mkmjmJ9/vlgj98LcD+dj9rfsWrpTw4oPymCZ6na5RA3D0AdOg35AoMYzStOfehJibWjD6qtfQ+eO3bZw7OmigP27mDrYt2YJDD21X+V6NNquRaMzWCTyu7K3397n1scBS5/kekxA3U9jj0GGIRxvaNAwZ86J4PwCMCZu/CMKybujRcfKRWXg6n55Q6wCGDbpFBjDqwtBQ+f2QMBc2YxV172BdKu6qMRUwd5VyxCLtBWUpGYYWT0Wm890/ffJRGIKmzbNu2UQC1JKJ8tGgAyAbBWRTA8fNy6Oioozuh/tnw+gXykSd26LYO1StR+TR5PAsN+eiEh9n1JQ0bXdBLKLtmLV999GRiztr/DRq3IlErHSFg5kum7rsdgyzTCmZhKJX9dMm9asMDJKrUQCZABKBKji5fyLX6yBpp2X+6YPfAFAmZN5bl0fxabVwZq3XWj+kTgw7JfHInrkgEIvpfN3I5CZtxGrfjQL2f0/EQ88s8qy9ahIbnI0DybGDcTj67RI5DktFrs78cYbKxwNQI0FngAZgMCX0JkE+HnnDd3t0f4pAFyd17ZhRRzbNwV6GYAewRtRjqF3jEH8xME9nksnfJZA6u21WP3TJpgZtT+myhJbUV3u8gD/rkGEO/Ro9BUWifwq+dZb71CfIwJq/2VRffdLgI8ffxg4FwP4xDf9o7zEJZb6XbMkidYdrvoML1Paayzd4Bj688OQOP1A37UESUDnKyuw+tb3lB40KuoRj+5E7yrxxdzbgY1GNNrBIpGZWjQ6Mfn2208EqW+QVucIkAFwjqX0LfGLL9bR3n5SbgBf1yA+X+9Kts2wcmESnW3qrhEgOoWmA0N+fAjKzh8pfR+RQWD7s0ux5t4PYSu+qW7U6ECf6qVgzN9RsZphmHos9p5mGL9PtLRMZgsXZmToB6TBfQJkANxn7GsEfvHFCaRSZ3UP4jsPgFQj08QaASsWlCGj8BoBogOI9Q8Hf3cEKi4b5Wt/kD1469SFWHv/MqVniogaiLn+/aoXQ9PkGrDfPYhwuWYYfzU17ZdVM2Zsl73PkL7iCZABKJ6dtFfyiy7qjUzmvO5v+WcBSEorFkAY1gjImQAGDLpyGCq/dbjM5fBNW8tD72LdI6sg806QTsDpmuu/GIaedqI519rIDSKMxTZokcg/dMbuic+cudS1YNSwLwTIAPiC3fmg/MILhyOb3fVof6z4kuF8FPda7GjVsfJDtdcI2EVv4GUDUf39o92DGcCWm387B+unrg+g8sIki7n+faqWIVrgXP/Corhzth6LNevR6DTG2K+SM2e+6U4UatVLAmQAvKTtcCx+7rlHQNO6VuIDAv+1smVbBGsUXyNgVxcYcH5f9LrhBId7RDCb237XDGx8dkswxReo2om5/gWGdOV0Fol0GrHYLE3XG5PvvPOYK0GoUdcJkAFwHbFzAfi4cQbKyk7ufrQvRu4Pc651OVratiGKjavUXiNgF+l+n69Bn9tOlgO8Tyq2/mw6Nr9a2uI3PkkvOGxV2TqUJzcXfJ3sF+QGEUajH2iRyB8S8XgjmzZN8VUbZK9I/vrIAOTPypcz+VlnlSEaFe/xxbd8MYivly9CPAy6YWUc2zeqvUbALpx9jq9Av1+d5iFdeUJt/u/XsPUdhdf23Q11r/4Z9B/cimx7e+7HTKl5j2SaxvVYbLluGE9YhnFfxdtvq+d45PkTKlkJGYCSETrfAD/nnL7QtPO7v+mfKaYLOx9F7hZXL1Z/jYBdFeh1eBIDfncGoO5miXt2NhvY+L2Xsf1dxdf27c66osbE0Lo9c7UtC2a3Gch2dkLJkY+MwYjFNmmG8bxhGPfEZsxYJPenTvjUkQGQpObd2+leDM4vAnCSmD4uiTRfZNg2sHJhmfJrBOyCW10Xw8ApZwKG4mU3bay/5iU0L5Z7BLxTnT5RbmH4qA5o2r4X+uG2DbOjAxnxZKC9HVzRaRB6LLZTDCKEYdxB2xk71cNKa4cMQGn8Srqajx/fH7Z9MYBLu2/6VI/diObWCPigDJmU4jfF7pwrh0cw6KEzweJqro7IUybWfesltKzcbZ/7kv6C5L44GrNx4Oh2GJH8V/n72Ay0tSHb0aHmkwExRSkWa9Gj0RcNw7g19vbbC+SupLrq6IbjcW1zc/Sz2S8BuAzAqUGbrucxrtzNf/mCMuWXhN3FtXygjsEPnwGtIuY1alfj2a1prP3my2hbr/jyft0UxRLQB41uRzRe/Cp/wgzkxgwIM6Dqa4IuM7DDiEaf0xi7jdYacPXP8DONkwHwiDc/7zwx5+s/AHwZQMSjsEqECdMaAaJgyX4ahj50OrReamybbG/vxOpvvYKOzcXfDIPUkcWqj8MPaUeywjmzwy0L6ZYWZFpaYJtyrR7oWG3EmIF4fLUWjd5e9s47DzjWLjW0TwJkAFzsHPzii6NIpcTj/f8A57TySwmsW7ZHsGaJGjfEfDAkahiGPnAa9APK8zld2nOsDW1YffVr6NyR/2NwaZPJU9iQ2k5U9nLpNQfnubECmZ07lZ1JIDDr0Wi7Ho//KZlI/IhNm9aWJ3o6rUACZAAKBJbP6fzssw+AYVwHxq4F0D+fa+icngmEaY0AQSNWAQybdAqM4dU9w5HwDHNlM1Zd9wbS4Zjpl6vAgGEp9D7Am710rHQa6Z07kWlrU3asgNibwEgk3kQk8oPyt9+eL2E3D7QkMgAOlo+fe+4AaNrPAVxFj/kdBLtbU2KRIGEEwnJEy4Bhvz0JkbregUo5u3gbVn3/LWTaAyW7JLG9B2QwYLj38/vFK4H0jh1It7YqawTERhqRROKDiGFcEZs5872SCkUXf0yADIADnYGfc04ldP3HAP4LQJkDTVIT+yEgXgWIVwJhOSJxYNh9xyJ6+IBApJx5dyNW/XAWst7fC33jU9nLxJBaf9c1sLNZdG7fnhs0qOohNiiKJJNvskjksuSMGetUzdOrvMgAlECan3NODIbxHXB+k2zb7JaQlvSXcrFGwIdlEIMDw3IYUY6hE8YgfvxgqVNOvbMWq29sgpkJz0dL11z/dmiSzFYVrwY6t22DKWYOKHqIVwORZPLZJGP/zmbObFE0TdfTCs9fqcMo+fnnfw2c36bievwOo3KlOctkuemBYVkjQEAUU8uG3nIYEp8/0BWmpTba+eoKrP7Fe6GZsil4iWl+YrqfqI1shzAAwggIQ6DqIfYhMJLJh8pmzrxO1RzdzIsMQIF0+XnnjQQwBcC4Ai+l0x0mIG7+YqEgsWBQWA5NB4ZcfwjKct1QnqP9uaVYc8+HsJ2b+SZPcvtQ4sRcfy+STDc3I7X9/7d35kFyHfUd/765Z96bmd3VLdmSD4yJwNgpwDaIBBMwFJ4ZGaoik6JIQricVExRcZEQhxTlJJRjEgxJcFU4DIRQqQRwpQpyQGEMIrb30kiWZFs2RrYuS6tdrXZXe83u7Oy85DcrEYO10s7um+l+3d/+S6p9r49P9/T7vH59jBi7w2BDjpPJsUQyeVuqr++hdjA1JQ17es4V1ljjJD7Pk+/8MsnPur35V4ivZbdXJqONLYNl62Bbgqwzv/SOl8F791Ytijz5zQM4dv9ByKcZW4IM98uwvwz/hyHI/IDpU6eM/iwgEwUTmcwPMp53K08kXFqrpAAsgZN/yy2vRSTyAIBrl3A5L2kzgYmRGI4+m2lzqmqTcxxg0we2IPd7apvk+Nf24fhXjhh5ls2Falgm/MnEv7CF6sQEKsPDkF0GTQ1OPF5Jet7t6e7ub5haxqDKRQG4AEm/VMqgXv8UHEd28LNnxllQrauN8cjxwXKMsE1BJGDDb21Cxx2vUVLssft3Y+Dfjlv38JelfrLkL6xBdhWcHh42erWA1E3cdffUPe/tuZ07h8NaV63ONwVgEcL+9u1Xo15/EMCrWl0JjD8YArbtEXCO2vrta9H18RuDgbjEWEY+3YuT37XvqHfZ5Ec2+zEhyLbCjdEAQ08flDqKxOMzUdd9l9fT830T6izoMlAAzkPUL5Vug+/LkH82aOCMr7UEjv0sjfHT9uwRcI7m2rd0YfVfvrG1cM/GPvzJRzH08Ehb0tIpEdneV7b5NSnMV6uYOnkSMkfA1OBEIn7M8/7e6+uTfVoYXkSAAvAiGGf37v8MfP8jbCXhJGDjHgHnamr163NY+5nWLk4Z+thODPfYt+xaDvaRA35kAqZpQeYDTA8NNU4eNDnEM5l9bjb7Rp4t8P+1TAE4y8IvFjcD+BaAG0z+EdhQNtkjQJYHzlYM7K0vUoFd12Ww/vNvBYIueh04+ZEfYmSv2t3uVLRfndf6B8lDzhWQfQNMntQRTSQmY553c+axx3qDZBfWuCgAAPxiUV6b5Ht/uDZcD2ura0O+q7MRHHrSrj0CzmHteEUSG794MxALyAJqdZy4/SGMPWPuhjKLNclY3Mflr5xqbPhjQ6jNzDQ+CchEQVODfBJI5HJ3Znp6/s7UMi61XNYLgF8o7IDjyHKR5FKh8bpwEFjYI0AWctjXzHOXxbHpKzfDScVWVFn+TA3HP/AQxg+b+414MUCRiI/Ltk6HZq3/iir6RTfLfIDJgQGj5wU0DhfK5T7n9fbeGRS3MMZjX8/4olryC4WPwHHEAgN6VQpjEzA7zxOjMRx7NmPyqOaiFehtiuLSr94Mx1ve6Yn+ZBXH3v8QJo+b+zZ4oda/+eppZDvDt9Y/iF+0jACIBJi8jbBwSmSzD7r9/TuCYBbGOKwVAL9YvAfAXWGsNOa5OQIjgwkMHLJrj4BzhDJrI9j81bcg0pluClp9tIKj738Y00N2DH3/MpwNl82gK8Rr/Zuq7EUulsmB8jnA5EOFpOgx1+3JlstvCIJZ2OKwTgAaW/q67pfhOO8LW2Uxv8snMHg0heETy3sTXn6qetyZ7nKw+YHfQHTd0k6qnh+cwtEP/giVEf0OuGkH0dUbqlhnyFr/FfPy/cYKgarBRww3JCCTOehls9fYtoWwVQLQWOZXqfw7gMKKfxiMIHQEXvhZGmcs3CNAKiqZA7Z88U2Ibc5fsN5qR8/gyO0/wax9K/0aXPKr5nDJVWat9Q/ihyobBskqAZNDLJUa8vL5K21aJmiNAJw9zOfbAN5pciNm2RYn0Ngj4BkX0+N27uqccIEt929D/OXnX+wy9+xpHLnjMVTNXg6+aAMxea1/EP2CHCYkuweaHGKp1ICXz19hy0iAFQLg3313BOWyzPR/j8mNl2W7OAGb9wgQOvEUsOWz1yNx7fpfgFXddxJH7uzHnBm73F68IfzSFcl0vbHcT474ZVicwPTgoPGfA+Lp9GE3l7vK2bnT+BmgxguADzgoFr8E4IP8YZOAEJibjeB5S/cIaHzvTPjYcu9rkbxhU6NBzPYdx5E/LaNWNb47OO8PoLHW/1VTSCTtnPDYVK/g+5gaHLRh18Cfurt3b3UAoxuF8b94v1iUZX4fbaqR82LjCVSmojj8lJ17BEjlypvu5ruva9Tz0bv3QkZGbAy2rvVfUV37PiZldcC02btCxl13r1cu/+qKWGl+s9G/er9QkKN8P6F5HTB7ighMjsVw9Kd27hGQytTRsXFhff/YiShmpu3bCkOOU7705fau9V/Jz05OEJwaGDB+iWDCdR9zy+X2nLK1kgpZ5r3GCoBfKn3g7Il+y0TD22wgMDqUwInn7dgjQL5z51bNNWa6y79fHOTcBFkhIScp2nKGwobLZ9C1rmpDM29JGWWfgIkXXjB7x8CFzYK+7vb3G7ls3EgB8IvF1wPYKXXXkpbPSI0iMHgsieHjZu4ELd+1c6vloV9DKrO0Hf1mpqM4czqG8eE45EwFE8PqjVWs22zpjMcAK1SOE548fhwiA8YGx0EiYRIb4wAAFENJREFUl/uw29v7ZdPKaJwA+MWizGwqA/jFac6m1RzLEyiBFw6mcWY4HmicqiKLJ+vId9UaD/60u7SH/mJ5lbkSwmV8JNaYPGlC6Fw7h41XcK1/UHUpxwjLjoEmBycarcc7Oq53H310t0nlNEoA/JtuSsHz/gfA60yqJJal9QR8HzjydAZT4ys7PKf1OT1/CjKTXYb2ZYhf1rO3IkxPRBufCORTQW0unF2HDPnL0D9DsARmRkcxMzISbKSaxRZNJKbmOzsv6dy5c0yzrC07O+H8FS9SXL9Y/GcAv71sGrzRagJh2yNAHvq5roWHvptrzUN/sQYxNb4gA+Mj4ZEB2dtf9vhnaA0BGQWQ0QCTQyydfj67Z8+VppTRGAHwS6U/gu9/1pSKYTnUEJA328MHXG0nwsnyvZwM7zce+jU51VRpkJETGTVZkIGYlssJhZF871+1gRP+WtlYZB6AzAeQeQEmh0Q2+x23v9+IHWUVdx/BNBO/WLwWQD8n/QXD0/ZYGhLwtItZTZbGRaILD30Z4nfz6h/6i7WPhgyciS3MGRiNoT6vvntJpOq49KoKUiucC2H7b2Kp5ZeHv6wMMPr8bcdBMp+/LdPTI1vLhzqo/4WuEN/ZA35k0t81K4yKt5PAzwnI5wCZGCh7BagIskGNnEWfXz0HTx76IZt/J+cuCDuZLzAhMlBvb1cjb/0da6tYv3kWIlAM7SMwOzaGyunT7UtQQUqReHwm19W1JuwHB7X3V9mCivKLxU8D+JMWRM0oSQDDAwkMHU215YUmEgG8joUle17nHOT/JgR5+E+OigzEMDEWh8hBK4OMlKy9dBby9s+ghoB8CqjNmD3fIu66fV65fKMawsGkGmoB8Ldv34Z6XWb9G9JVBlOpjCVYArIxzvCJZONtNuiHl7ypeh0Lw/vyxm/626p8FpARAWEpIwTy2SCIcG5uhEz0W+p+B0GkyzjOT6A+N9f4FGD0/gDyzTmf/wO3t/cLYW0HoRUA/21vc5FI7ANgzIzMsDYiW/ItnwVGBhMYHYxjrrp855SHvnzLbzz0u2qIWjpELTwnz8QgKwpk7kB1pjmmst+Bm51vTIgUiVI9IdKW38FSyylHB8sRwiaHSCw2F8lmL8l2dw+FsZzhFYBC4QtwnNvDCJ15DjcBeWuV5W+jQ3FUK1HMLeEUPTmBT2bty/d8edPnsbMvbQPCUXYhrM1GGkxFsurzQCQKyJwIGR2RpY8pt954yydD/X9Hcl7AnOmHBmUyB7zdu1+pf228NIehFAC/VLoRvt8NOeqXgQQUExAhqFXPPrQaD69IY2g7nqg3HljyLZrfoxVXEpNXQqBeq2Hi6FHI4UEmh0Q+/yG3t/eBsJUxdA9QXx76xWIvgOvDBpv5JQESIAHbCMgOgbJToMlBdgnM7tuXc4BQzTwNnwAUCr8Lx/knkxsTy0YCJEACphBonBp47BhkNMDkkMhmH3D7+z8UpjKGSgD8HTs8VCrPAtgQJsjMKwmQAAnYTKA6MYHpoVDOk1tytcmBQTHX3ej19Q0u+SbFF4ZLAIrFewDcpZgZkycBEiABEmiSwIRsE2z43gAx1+3JlstvaBKNsstDIwB+qXQ5fP9pAGYe3K6sCTBhEiABEmg9AXn4iwQYHRwHqY6ON6W7u2V/Gu1DeASgUPgmHOc27YkygyRAAiRAAuclMD04iOrkpNF0Yun0seyePZvDUMhQCIC/ffvVqNcPcMe/MDQp5pEESIAEzk+gcVjQsWPG40nk87e4vb3f072g4RCAQuFrcJz36Q6T+SMBEiABErgwgamTJzE3NWU0plg6fTC7Z89VuhdSewHwi0UZSjkIIK47TOaPBEiABEjgwgTmZ2cXjgw2OSwcGbwt09MjG9ZpG8IgAJ8HcIe2BJkxEiABEiCBpghMDgygZv4WwU96u3drfUy91gLgb9++DvX6IQDpploXLyYBEiABEtCWQK1SweSJE9rmL5CMOQ7i+fyrvZ6eJwKJrwWR6C0ApdK98P2Pt6DcjJIESIAESEAhgcnjx1EzfF+AuOv2e+XyDQoxXzBpbQXA37EjjUplAEBeV3jMFwmQAAmQwPIIyERAmRBocnAiET/a1bUu+8gjWp6LrK8AFArvheN8w+TGwbKRAAmQgLUEfB9njhyBPz9vNIKE533J3bVLy6Pr9RWAYvFHAN5sdMtg4UiABEjAYgKV06cxOzZmNIFoMjmW27u3U8dCaikAZ7f9fQ5y9C8DCZAACZCAkQRs2Rgolc+/Od3bu1O3StTyAesXCn8Bx/mkbrCYHxIgARIggWAJyJ4AsjeAySHhuo+65fKv6VZG7QTAl7f+YlGW/m3RDRbzQwIkQAIkECyB2TNnUBkeDjZSzWKLxGLzuVWrUs7OnTWdsqafABSLbwHwQ50gMS8kQAIkQAKtIeDX6xg/fBi+77cmAU1iTXV0/Fm6p+evNclOIxv6CQD3/depfTAvJEACJNByApacD/B8ds+eK1sOs4kEtBIA/+67IyiXZWHomibKwEtJgARIgARCTKA6MYHpoaEQl+DiWXei0Xp+9eqkTp8B9BKAUulG+H7PxVHyChIgARIgAVMIyF4AZw4fNqU4i5Yjkc9/2O3t/bIuBdVLAAqFT8FxPqELHOaDBEiABEigPQQsWQ3Q7ZbL29pD9OKp6CUAxeLjAK67eLZ5BQmQAAmQgEkEZkZHMTMyYlKRXlIWJx6vdOzfn9GlkNoIgP+Od1yCaPSYLmCYDxIgARIggfYRkL0AZBTA9JDo7Lze7e7epUM59RGAUul2+P4XdIDCPJAACZAACbSfgCwHrBt+NkAym/2XTH//e9tP96Up6iMAxeJ3AGzXAQrzQAIkQAIk0H4CshJAVgSYHGKp1Mns449v0KGMOgnAIIC1OkBhHkiABEiABNpPoDo+julTWp6cGxgMWQ7Y8eST0cAiXEFEWgiAf8stWxCJmL8GZAUVxVtJgARIwHQCtswDSHZ0bMv09HSrrk89BKBY/E0A31YNg+mTAAmQAAkoJOD7GDt0CDB8W+BkLndfpq/vYwpJN5LWRQD+BsAfq4bB9EmABEiABNQSsGE/gLjr9nvl8g1qSesjAD8GcJNqGEyfBEiABEhALQE5GVBOCDQ5RJPJsdzevZ2qy6h8BODs/v9jALKqYbQq/dqcg2jMh6OcdqtKyHhJgARIIBgCs+OTmBwcQTQyF0yEGsbiRCJ+fs2ahOpzAZQ/kvxbb92K+fmnNKyjFWVpZDCBidEYZqaiEAGQh38yM4+MN481m2YRS5h99OWK4PFmEiABqwjUqg5OHU9iejKK2eloYwpAJFJDIjaNVOIM3PSwcTwS+fx2t7f3P1QWTL0AFAo74DjfUgkhyLTnZiM4/lwKU+OxRaOV0YD1W2bQscZcww2SKeMiARIwl8DYqThOHklhvrb44ygZn0Rn9gii0aoxIOL5/Oe83t47VRZIvQCUSh+D7/+tSghBpS1v+gf3eRdsyC9Oa92WGazeYE6DDooj4yEBErCDwPBAAoNHUksqrIwIrO18xphPAwnP+093167SkgrfoovUC0CxeD+AP2xR+doa7dGfZhrD/ksNTgS48ppJJNP1pd4S+HX1tIPaqijqrvKmEHjZzhehUwOio/OIjdUBddjbUlYmQgI6E5itRPDcEx78Jn6H8jlgVf55nYu15LzFM5knvN27X73kG1pwofJe3y8W5RtIsQVla2uU4yMxHHu2+UOeMrl5XL51qq15lcTqGQdTN6Qwt16LDanaXn5nzkdmbxXJg/wM03b4TJAEABw64GJ6vPn+pyt3COmkzBsPd4ilUoPZxx9fr7IUOgjAfgDXqIQQRNonnk9hdCjRdFQyOfAVr5tAJNK+SYHzHRGMvzUNP668+pvmFfQNicM1eD0zQUfL+EiABC5AoF538Myu7LL2+3FTp9GRPRp6vpF4fCa/f39aZUGUPwH8YlEWfOZUQggi7eeecBsz/pcTLn/lFDLZ+eXc2vw9EeDM2zKY74w0f6+hd3jdM0gcqRlaOhaLBPQjMD0RxaGn3GVlLB6rNOYChD3IUsCOp55S2hErFQD/ne/sQK02GvaKlCUrT/fnlmWzUvaNl8+gc117JgNWN8cwuW1pk27CXi9LzX90vI78f00v9XJeRwIksEICo4MJnDi03H7Ix6Y1+wC0b9R0hcVd9PZUZ+dl6e7uI62K/2LxqhWAYvFaAHsvlknd/y6TWA70L38QQ5YErmrTaoDp6xKY+ZXmP1XoXgcrzV/ng1OQeQEMJEACrSdweiDRWPq33LBx9T44ThOzB5ebUIvvS3Z03Jbp6VF2Do5aASiV3gTf39lixi2PPkwCMPHrKcxtWvpKhZbD0ySB3EMVxIbb9BlGkzIzGySgigAFYIF8Mp//aKa39x9U1YNqAXgHfP+/VRU+qHRDJQA3pTG3YXlzFYLipWM82YcriA9RAHSsG+bJPAIUgIU6TeVyn0z39f2VqhpWKwCGHANMAVDVfINLlwIQHEvGRAIXI0ABODsCoPhYYNUC8DsAvn6xxqL73ykAutfQxfNHAbg4I15BAkERoAAskEzkcl9y+/puD4prs/GoFoDfB/CPzWZat+spALrVSPP5oQA0z4x3kMByCVAAFsjFs9l/9fr737Ncjiu9T7UAyEEI9620EKrvpwCoroGVp08BWDlDxkACSyVAATg7AuB533V37bp1qdyCvk61APw5AGUTIIKCSQEIiqS6eCgA6tgzZfsIUADOjgB43sPerl1vVdUCVAvAPQDuUlX4oNKlAARFUl08FAB17JmyfQQoAAt1HnPdnmy5/AZVLUCtAJRK98L3P66q8EGlSwEIiqS6eCgA6tgzZfsIUADOCoDn9WZ37Xq9qhZAAQiAPAUgAIiKo6AAKK4AJm8VAQoABQA+RwAaraCdWwFPcCOg83a0FACrnj8srGICFAAKAAXg7I+QAqC4N/q/pSgUAPV1wBzYQ4ACQAGgAFAAtOnxKADaVAUzYgEBCgAFgAJAAdCmq6MAaFMVzIgFBCgAFAAKAAVAm66OAqBNVTAjFhCgAFAAKAAUAG26OgqANlXBjFhAgAJAAaAAUAC06eooANpUBTNiAQEKAAWAAkAB0KarowBoUxXMiAUEKAAUAAoABUCbro4CoE1VMCMWEKAAUAAoABQAbbo6CoA2VcGMWECAAkABoABQALTp6igA2lQFM2IBAQoABYACQAHQpqujAGhTFcyIBQQoABQACgAFQJuujgKgTVUwIxYQoABQACgAFABtujoKgDZVwYxYQIACQAGgAFAAtOnqKADaVAUzYgEBCgAFgAJAAdCmq6MAaFMVzIgFBCgAFAAKgAIBmNyWQnVzzIIuprki5r83jehYvbmbeDUJkMCyCFAAKAAUAAUCUNmaQOXaxLJ+tKbe5MwDnd+eBHxTS8hykYBeBCgAFAAKgAIBqK2OYvzmtF69geLcxE/OI/vjiuJcMHkSsIcABYACQAFQIACS5NTrkph9Wdye3uYCJZW3/5wM/09w+J8NggTaRYACQAGgACgSAD/mYPKNKcxtiLbr965lOs6cD7d/FomjNS3zx0yRgKkEKAAUAAqAIgE416nMXhHH7BUxzHdGIFJgS4hM1hE/VUd6/ywi0/zwb0u9s5z6EKAAUAAoAIoF4OfdgQPUk3YIgAz5y5s/AwmQgDoCFAAKAAVAFwFQ1w8wZRIgAQsJUAAoABQACoCFXR+LTAIkQAGgAFAAKADsCUmABCwkQAGgAFAAKAAWdn0sMgmQAAWAAkABoACwJyQBErCQAAWAAkABoABY2PWxyCRAAhQACgAFgALAnpAESMBCAhQACgAFgAJgYdfHIpMACVAAKAAUAAoAe0ISIAELCVAAKAAUAAqAhV0fi0wCJEABoABQACgA7AlJgAQsJEABoABQACgAFnZ9LDIJkAAFgAJAAaAAsCckARKwkAAFgAJAAaAAWNj1scgkQAIUAAoABYACwJ6QBEjAQgIUAAoABYACYGHXxyKTAAlQACgAFAAKAHtCEiABCwlQACgAFAAKgIVdH4tMAiRAAaAAUAAoAOwJSYAELCRAAaAAUAAoABZ2fSwyCZAABYACQAGgALAnJAESsJAABYACQAGgAFjY9bHIJEACFAAKAAWAAsCekARIwEICFAAKAAWAAmBh18cikwAJUAAoABQACgB7QhIgAQsJUAAoABQACoCFXR+LTAIkQAGgAFAAKADsCUmABCwkQAGgAFAAKAAWdn0sMgmQAAWAAkABoACwJyQBErCQAAWAAkABoABY2PWxyCRAAhQACgAFgALAnpAESMBCAhQACgAFgAJgYdfHIpMACVAAKAAUAAoAe0ISIAELCVAAKAAUAAqAhV0fi0wCJEABoABQACgA7AlJgAQsJEABoADALxbvAnBP2Nu/XwcO9OeWXYz1W2awakN12ffzRhIgARIIEwEKwEJtJVz3B265/HZVdeeoSljS9QuFt8Nxvq8yD0GkTQEIgiLjIAESsIUABWChplP5/CfSvb3KXoLVCkCptBq+fyrsjZ4CEPYaZP5JgATaSYACsEA7vWrV1alHH322nexfnJZSAWiMAhSLzwC4WhWAINKlAARBkXGQAAnYQoACAETi8Wp+//6kyjpXLwAGfAagAKhswkybBEggbAQoAOqH/6XNKBeAxihAqfRF+P6Hw9aIz+WXAhDWmmO+SYAEVBCwXQDimczT3u7dW1Ww1+oTQEMAtm/Pol7/LoCbVANZTvoUgOVQ4z0kQAK2ErBZAKLJ5Fg0m93qPvLIgOr612IEoCEBMhpRKNwBx7kXQEY1mGbSpwA0Q4vXkgAJ2E7ARgFwHAdxz3sw09//bgeo69AGtBGAnw+nFwpXAHgXHOe1AF4D4GW6fKpYrMIoADo0ZeaBBEggLARsEYBILDYXiccHItHovkgsdl+6p+cnOtXR/wIx1xFoHvK3GAAAAABJRU5ErkJggg==",vs=n=>{n=n.replace(/^#/,"");let A,e,t;return n.length===3?(A=parseInt(n.charAt(0)+n.charAt(0),16),e=parseInt(n.charAt(1)+n.charAt(1),16),t=parseInt(n.charAt(2)+n.charAt(2),16)):(A=parseInt(n.substring(0,2),16),e=parseInt(n.substring(2,4),16),t=parseInt(n.substring(4,6),16)),isNaN(A)||isNaN(e)||isNaN(t)?"0, 0, 0":`${A}, ${e}, ${t}`},al=(n,A)=>{const e=vs(n),t=vs(A||n);return`
|
|
9
|
+
--primary: ${n};
|
|
10
|
+
--primary-rgb: ${e};
|
|
11
|
+
--primary-hover: ${A||n};
|
|
12
|
+
--secondary: ${A||n};
|
|
13
|
+
--secondary-rgb: ${t};
|
|
14
|
+
`},ll=`
|
|
15
|
+
:host(.vanira-portal) {
|
|
16
|
+
position: fixed !important;
|
|
17
|
+
bottom: 0 !important;
|
|
18
|
+
right: 0 !important;
|
|
19
|
+
top: auto !important;
|
|
20
|
+
left: auto !important;
|
|
21
|
+
width: 0 !important;
|
|
22
|
+
height: 0 !important;
|
|
23
|
+
pointer-events: none !important;
|
|
24
|
+
z-index: 2147483647;
|
|
25
|
+
overflow: visible !important;
|
|
26
|
+
contain: none !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Hidden while page-region clip is active — clip overlay must sit above and capture cleanly */
|
|
30
|
+
:host(.vanira-clip-suppressed) {
|
|
31
|
+
visibility: hidden !important;
|
|
32
|
+
pointer-events: none !important;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
:host {
|
|
36
|
+
display: block;
|
|
37
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
38
|
+
box-sizing: border-box;
|
|
39
|
+
|
|
40
|
+
/* Default Theme Variables */
|
|
41
|
+
--primary: #000000;
|
|
42
|
+
--primary-hover: #111111;
|
|
43
|
+
--primary-rgb: 0, 0, 0;
|
|
44
|
+
--secondary: #111111;
|
|
45
|
+
--secondary-rgb: 17, 17, 17;
|
|
46
|
+
--bg: #ffffff;
|
|
47
|
+
--text: #1f2937;
|
|
48
|
+
--text-muted: #6b7280;
|
|
49
|
+
--border: #e5e7eb;
|
|
50
|
+
--shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
|
|
51
|
+
--shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.15);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:host * {
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@keyframes fadeInScale {
|
|
60
|
+
from { opacity: 0; transform: scale(0.8); }
|
|
61
|
+
to { opacity: 1; transform: scale(1); }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@keyframes pulse {
|
|
65
|
+
0%, 100% { opacity: 1; }
|
|
66
|
+
50% { opacity: 0.5; }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@keyframes wave {
|
|
70
|
+
0%, 100% { transform: translateY(0); }
|
|
71
|
+
50% { transform: translateY(-4px); }
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@keyframes wave-rotate-1 {
|
|
75
|
+
0% { transform: rotate(0deg) scale(1); border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
|
|
76
|
+
25% { transform: rotate(90deg) scale(1.02); border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; }
|
|
77
|
+
50% { transform: rotate(180deg) scale(1); border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
|
|
78
|
+
75% { transform: rotate(270deg) scale(0.98); border-radius: 40% 60% 70% 30% / 40% 40% 60% 50%; }
|
|
79
|
+
100% { transform: rotate(360deg) scale(1); border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@keyframes wave-rotate-2 {
|
|
83
|
+
0% { transform: rotate(60deg) scale(1.02); border-radius: 40% 60% 60% 40% / 60% 40% 60% 40%; }
|
|
84
|
+
33% { transform: rotate(180deg) scale(0.98); border-radius: 60% 40% 40% 60% / 40% 60% 40% 60%; }
|
|
85
|
+
66% { transform: rotate(300deg) scale(1.02); border-radius: 50% 50% 40% 60% / 60% 40% 50% 50%; }
|
|
86
|
+
100% { transform: rotate(420deg) scale(1.02); border-radius: 40% 60% 60% 40% / 60% 40% 60% 40%; }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@keyframes wave-rotate-3 {
|
|
90
|
+
0% { transform: rotate(120deg) scale(1); border-radius: 50% 50% 50% 50%; }
|
|
91
|
+
50% { transform: rotate(300deg) scale(1.05); border-radius: 40% 60% 50% 50% / 50% 50% 60% 40%; }
|
|
92
|
+
100% { transform: rotate(480deg) scale(1); border-radius: 50% 50% 50% 50%; }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@keyframes clickBounce {
|
|
96
|
+
0% { transform: scale(1); }
|
|
97
|
+
25% { transform: scale(0.9) rotate(-5deg); }
|
|
98
|
+
50% { transform: scale(1.15) rotate(5deg); }
|
|
99
|
+
75% { transform: scale(0.95) rotate(-2deg); }
|
|
100
|
+
100% { transform: scale(1) rotate(0deg); }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@keyframes pulseGlow {
|
|
104
|
+
0%, 100% { box-shadow: 0 4px 16px rgba(239, 68, 68, 0.4); }
|
|
105
|
+
50% { box-shadow: 0 4px 24px rgba(239, 68, 68, 0.6), 0 0 32px rgba(239, 68, 68, 0.3); }
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@keyframes typingBounce {
|
|
109
|
+
0%, 80%, 100% { transform: translateY(0); }
|
|
110
|
+
40% { transform: translateY(-6px); }
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@keyframes floatOrb {
|
|
114
|
+
0%, 100% { transform: translateY(0); }
|
|
115
|
+
50% { transform: translateY(-10px); }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes pulseGlowIdle {
|
|
119
|
+
0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.4; }
|
|
120
|
+
50% { transform: translate(-50%, -50%) scale(1.1); opacity: 0.2; }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@keyframes orb-breathe {
|
|
124
|
+
0%, 100% { transform: scale(1); opacity: 0.5; }
|
|
125
|
+
50% { transform: scale(1.05); opacity: 1; }
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@keyframes orb-breathe-delayed {
|
|
129
|
+
0%, 100% { transform: scale(1); opacity: 0.35; }
|
|
130
|
+
50% { transform: scale(1.07); opacity: 0.85; }
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@keyframes human-wave-hand {
|
|
134
|
+
0%, 100% { transform: rotate(0deg); }
|
|
135
|
+
15% { transform: rotate(18deg); }
|
|
136
|
+
30% { transform: rotate(-10deg); }
|
|
137
|
+
45% { transform: rotate(16deg); }
|
|
138
|
+
60% { transform: rotate(-6deg); }
|
|
139
|
+
75% { transform: rotate(12deg); }
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@keyframes human-presence-pulse {
|
|
143
|
+
0% { transform: scale(1); opacity: 0.6; }
|
|
144
|
+
70% { transform: scale(1.18); opacity: 0; }
|
|
145
|
+
100% { transform: scale(1.18); opacity: 0; }
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@keyframes spin {
|
|
149
|
+
from { transform: rotate(0deg); }
|
|
150
|
+
to { transform: rotate(360deg); }
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@keyframes voice-bars-orb {
|
|
154
|
+
0%, 100% { transform: scaleY(1); opacity: 0.7; }
|
|
155
|
+
50% { transform: scaleY(1.8); opacity: 1; }
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@keyframes doodleFloat {
|
|
159
|
+
0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0.55; }
|
|
160
|
+
50% { transform: translateY(-7px) rotate(10deg); opacity: 1; }
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@keyframes doodleFloatAlt {
|
|
164
|
+
0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0.45; }
|
|
165
|
+
50% { transform: translateY(6px) rotate(-12deg); opacity: 0.9; }
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@keyframes doodleDraw {
|
|
169
|
+
0% { stroke-dashoffset: 48; opacity: 0.35; }
|
|
170
|
+
50% { stroke-dashoffset: 0; opacity: 1; }
|
|
171
|
+
100% { stroke-dashoffset: -48; opacity: 0.35; }
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@keyframes doodleSparkle {
|
|
175
|
+
0%, 100% { transform: scale(1) rotate(0deg); opacity: 0.4; }
|
|
176
|
+
50% { transform: scale(1.2) rotate(18deg); opacity: 1; }
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
.widget-fab {
|
|
181
|
+
position: fixed;
|
|
182
|
+
z-index: 2147483647;
|
|
183
|
+
pointer-events: auto !important;
|
|
184
|
+
width: 64px;
|
|
185
|
+
height: 64px;
|
|
186
|
+
border-radius: 50%;
|
|
187
|
+
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%);
|
|
188
|
+
border: none;
|
|
189
|
+
cursor: pointer;
|
|
190
|
+
display: flex;
|
|
191
|
+
align-items: center;
|
|
192
|
+
justify-content: center;
|
|
193
|
+
box-shadow: var(--shadow);
|
|
194
|
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
195
|
+
animation: fadeInScale 0.4s ease-out;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.widget-fab:hover {
|
|
199
|
+
transform: scale(1.1);
|
|
200
|
+
box-shadow: var(--shadow-lg);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.widget-fab:active {
|
|
204
|
+
transform: scale(0.95);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.widget-fab svg {
|
|
208
|
+
width: 28px;
|
|
209
|
+
height: 28px;
|
|
210
|
+
color: white;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.widget-fab.hidden-launcher {
|
|
214
|
+
display: none !important;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* ElevenLabs-style voice pill (active call, panel minimized) */
|
|
218
|
+
.widget-voice-pill {
|
|
219
|
+
position: fixed;
|
|
220
|
+
z-index: 2147483647;
|
|
221
|
+
pointer-events: auto !important;
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: 0.5rem;
|
|
225
|
+
padding: 0.35rem 0.35rem 0.35rem 0.35rem;
|
|
226
|
+
border-radius: 999px;
|
|
227
|
+
background: rgba(255, 255, 255, 0.98);
|
|
228
|
+
border: 1px solid rgba(0, 0, 0, 0.06);
|
|
229
|
+
box-shadow: 0 2px 16px rgba(15, 23, 42, 0.08), 0 1px 3px rgba(15, 23, 42, 0.04);
|
|
230
|
+
left: 50%;
|
|
231
|
+
transform: translateX(-50%);
|
|
232
|
+
bottom: max(1rem, env(safe-area-inset-bottom, 1rem));
|
|
233
|
+
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
234
|
+
animation: fadeInScale 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
235
|
+
font-family: inherit;
|
|
236
|
+
-webkit-tap-highlight-color: transparent;
|
|
237
|
+
min-width: 0;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.widget-voice-pill.hidden {
|
|
241
|
+
display: none !important;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.widget-voice-pill:hover {
|
|
245
|
+
transform: translateX(-50%) translateY(-1px);
|
|
246
|
+
box-shadow: 0 6px 24px rgba(15, 23, 42, 0.1), 0 2px 6px rgba(15, 23, 42, 0.05);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.widget-voice-pill-main {
|
|
250
|
+
display: flex;
|
|
251
|
+
align-items: center;
|
|
252
|
+
gap: 0.625rem;
|
|
253
|
+
flex: 1;
|
|
254
|
+
min-width: 0;
|
|
255
|
+
padding: 0 0.15rem 0 0;
|
|
256
|
+
border: none;
|
|
257
|
+
background: transparent;
|
|
258
|
+
cursor: pointer;
|
|
259
|
+
font: inherit;
|
|
260
|
+
text-align: left;
|
|
261
|
+
-webkit-tap-highlight-color: transparent;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.widget-voice-pill-main:active {
|
|
265
|
+
opacity: 0.85;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.widget-voice-pill-hangup {
|
|
269
|
+
width: 2rem;
|
|
270
|
+
height: 2rem;
|
|
271
|
+
border-radius: 999px;
|
|
272
|
+
flex-shrink: 0;
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
justify-content: center;
|
|
276
|
+
border: none;
|
|
277
|
+
background: #fef2f2;
|
|
278
|
+
color: #dc2626;
|
|
279
|
+
cursor: pointer;
|
|
280
|
+
transition: background 0.15s ease, transform 0.15s ease;
|
|
281
|
+
-webkit-tap-highlight-color: transparent;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.widget-voice-pill-hangup:hover {
|
|
285
|
+
background: #fee2e2;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.widget-voice-pill-hangup:active {
|
|
289
|
+
transform: scale(0.94);
|
|
290
|
+
background: #fecaca;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.widget-voice-pill-hangup svg {
|
|
294
|
+
width: 0.95rem;
|
|
295
|
+
height: 0.95rem;
|
|
296
|
+
transform: rotate(135deg);
|
|
297
|
+
stroke: #dc2626;
|
|
298
|
+
color: #dc2626;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.widget-voice-pill-mute {
|
|
302
|
+
width: 2rem;
|
|
303
|
+
height: 2rem;
|
|
304
|
+
border-radius: 999px;
|
|
305
|
+
flex-shrink: 0;
|
|
306
|
+
display: flex;
|
|
307
|
+
align-items: center;
|
|
308
|
+
justify-content: center;
|
|
309
|
+
border: none;
|
|
310
|
+
background: #f4f4f5;
|
|
311
|
+
color: #334155;
|
|
312
|
+
cursor: pointer;
|
|
313
|
+
transition: background 0.15s ease, transform 0.15s ease, color 0.15s ease;
|
|
314
|
+
-webkit-tap-highlight-color: transparent;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.widget-voice-pill-mute:hover:not(:disabled) {
|
|
318
|
+
background: #e4e4e7;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.widget-voice-pill-mute:active:not(:disabled) {
|
|
322
|
+
transform: scale(0.94);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.widget-voice-pill-mute:disabled {
|
|
326
|
+
opacity: 0.45;
|
|
327
|
+
cursor: not-allowed;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.widget-voice-pill-mute.is-muted {
|
|
331
|
+
background: #fef2f2;
|
|
332
|
+
color: #dc2626;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.widget-voice-pill-mute svg {
|
|
336
|
+
width: 0.95rem;
|
|
337
|
+
height: 0.95rem;
|
|
338
|
+
stroke: currentColor;
|
|
339
|
+
color: currentColor;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.widget-voice-pill-icon {
|
|
343
|
+
width: 2rem;
|
|
344
|
+
height: 2rem;
|
|
345
|
+
border-radius: 999px;
|
|
346
|
+
flex-shrink: 0;
|
|
347
|
+
background: #f4f4f5;
|
|
348
|
+
display: flex;
|
|
349
|
+
align-items: center;
|
|
350
|
+
justify-content: center;
|
|
351
|
+
position: relative;
|
|
352
|
+
overflow: hidden;
|
|
353
|
+
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.widget-voice-pill-icon::after {
|
|
357
|
+
display: none;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.widget-voice-pill-icon svg {
|
|
361
|
+
width: 0.9rem;
|
|
362
|
+
height: 0.9rem;
|
|
363
|
+
position: relative;
|
|
364
|
+
z-index: 1;
|
|
365
|
+
stroke: #0a0a0a;
|
|
366
|
+
color: #0a0a0a;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.widget-voice-pill-text {
|
|
370
|
+
display: flex;
|
|
371
|
+
flex-direction: column;
|
|
372
|
+
align-items: flex-start;
|
|
373
|
+
gap: 0.05rem;
|
|
374
|
+
min-width: 0;
|
|
375
|
+
text-align: left;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.widget-voice-pill-title {
|
|
379
|
+
font-size: 0.8125rem;
|
|
380
|
+
font-weight: 600;
|
|
381
|
+
color: #0f172a;
|
|
382
|
+
letter-spacing: -0.02em;
|
|
383
|
+
line-height: 1.15;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.widget-voice-pill-status-row {
|
|
387
|
+
display: inline-flex;
|
|
388
|
+
align-items: center;
|
|
389
|
+
gap: 0.35rem;
|
|
390
|
+
min-height: 0.875rem;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
.widget-voice-pill-bars {
|
|
394
|
+
display: inline-flex;
|
|
395
|
+
align-items: flex-end;
|
|
396
|
+
gap: 2px;
|
|
397
|
+
height: 0.625rem;
|
|
398
|
+
flex-shrink: 0;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.widget-voice-pill-bars.hidden {
|
|
402
|
+
display: none;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.widget-voice-pill-bars i {
|
|
406
|
+
display: block;
|
|
407
|
+
width: 2px;
|
|
408
|
+
height: 3px;
|
|
409
|
+
border-radius: 999px;
|
|
410
|
+
background: currentColor;
|
|
411
|
+
opacity: 0.55;
|
|
412
|
+
animation: pillBarListen 1s ease-in-out infinite;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
.widget-voice-pill-bars i:nth-child(2) {
|
|
416
|
+
animation-delay: 0.12s;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.widget-voice-pill-bars i:nth-child(3) {
|
|
420
|
+
animation-delay: 0.24s;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.widget-voice-pill-bars.speaking i {
|
|
424
|
+
animation-name: pillBarSpeak;
|
|
425
|
+
opacity: 0.85;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
@keyframes pillBarListen {
|
|
429
|
+
0%, 100% { height: 3px; transform: translateY(0); }
|
|
430
|
+
50% { height: 7px; transform: translateY(0); }
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
@keyframes pillBarSpeak {
|
|
434
|
+
0%, 100% { height: 4px; }
|
|
435
|
+
35% { height: 9px; }
|
|
436
|
+
65% { height: 6px; }
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.widget-voice-pill-status {
|
|
440
|
+
font-size: 0.6875rem;
|
|
441
|
+
font-weight: 500;
|
|
442
|
+
color: #64748b;
|
|
443
|
+
line-height: 1.1;
|
|
444
|
+
letter-spacing: -0.01em;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
.widget-voice-pill.is-connecting .widget-voice-pill-status {
|
|
448
|
+
color: #94a3b8;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.widget-voice-pill.is-listening .widget-voice-pill-status,
|
|
452
|
+
.widget-voice-pill.is-speaking .widget-voice-pill-status {
|
|
453
|
+
color: #475569;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.widget-voice-pill.is-listening .widget-voice-pill-bars,
|
|
457
|
+
.widget-voice-pill.is-speaking .widget-voice-pill-bars {
|
|
458
|
+
color: #64748b;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.widget-voice-pill.is-error .widget-voice-pill-status {
|
|
462
|
+
color: #dc2626;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.widget-panel {
|
|
466
|
+
position: fixed;
|
|
467
|
+
z-index: 2147483647;
|
|
468
|
+
pointer-events: auto;
|
|
469
|
+
background: rgba(255, 255, 255, 0.98);
|
|
470
|
+
backdrop-filter: blur(20px);
|
|
471
|
+
-webkit-backdrop-filter: blur(20px);
|
|
472
|
+
border: 1px solid #d1d5db;
|
|
473
|
+
border-radius: 28px;
|
|
474
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
475
|
+
overflow: hidden;
|
|
476
|
+
display: flex;
|
|
477
|
+
flex-direction: column;
|
|
478
|
+
transition: all 0.5s cubic-bezier(0.19, 1, 0.22, 1);
|
|
479
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
480
|
+
|
|
481
|
+
/* Default Dimensions */
|
|
482
|
+
width: 400px;
|
|
483
|
+
height: 600px;
|
|
484
|
+
max-height: 90vh;
|
|
485
|
+
max-width: 95vw;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.widget-panel.maximized {
|
|
489
|
+
width: 90vw !important;
|
|
490
|
+
height: 90vh !important;
|
|
491
|
+
top: 5vh !important;
|
|
492
|
+
left: 5vw !important;
|
|
493
|
+
right: 5vw !important;
|
|
494
|
+
bottom: 5vh !important;
|
|
495
|
+
margin: auto;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
.widget-body {
|
|
499
|
+
padding: 0;
|
|
500
|
+
flex: 1;
|
|
501
|
+
display: flex;
|
|
502
|
+
flex-direction: column;
|
|
503
|
+
overflow: hidden;
|
|
504
|
+
min-height: 0;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.widget-panel.hidden {
|
|
508
|
+
opacity: 0;
|
|
509
|
+
pointer-events: none !important;
|
|
510
|
+
transform: translateY(20px) scale(0.95);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
.widget-header {
|
|
514
|
+
background: #1f2937;
|
|
515
|
+
color: white;
|
|
516
|
+
padding: 14px 20px;
|
|
517
|
+
display: flex;
|
|
518
|
+
justify-content: space-between;
|
|
519
|
+
align-items: center;
|
|
520
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
.widget-title {
|
|
524
|
+
font-size: 18px;
|
|
525
|
+
font-weight: 600;
|
|
526
|
+
margin: 0;
|
|
527
|
+
letter-spacing: 0.3px;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.close-btn {
|
|
531
|
+
background: rgba(255, 255, 255, 0.15);
|
|
532
|
+
border: none;
|
|
533
|
+
width: 36px;
|
|
534
|
+
height: 36px;
|
|
535
|
+
border-radius: 50%;
|
|
536
|
+
display: flex;
|
|
537
|
+
align-items: center;
|
|
538
|
+
justify-content: center;
|
|
539
|
+
cursor: pointer;
|
|
540
|
+
transition: all 0.2s;
|
|
541
|
+
backdrop-filter: blur(10px);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
.close-btn:hover {
|
|
545
|
+
background: rgba(255, 255, 255, 0.25);
|
|
546
|
+
transform: scale(1.1);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.close-btn.maximize-btn,
|
|
550
|
+
.close-btn.collapse-panel-btn {
|
|
551
|
+
display: flex;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.close-btn.collapse-panel-btn svg {
|
|
555
|
+
width: 16px;
|
|
556
|
+
height: 16px;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.close-btn svg {
|
|
560
|
+
width: 18px;
|
|
561
|
+
height: 18px;
|
|
562
|
+
color: white;
|
|
563
|
+
flex-shrink: 0;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
.status-indicator {
|
|
567
|
+
display: flex;
|
|
568
|
+
align-items: center;
|
|
569
|
+
gap: 12px;
|
|
570
|
+
padding: 16px;
|
|
571
|
+
background: #f9fafb;
|
|
572
|
+
border-radius: 12px;
|
|
573
|
+
margin-bottom: 20px;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.status-dot {
|
|
577
|
+
width: 10px;
|
|
578
|
+
height: 10px;
|
|
579
|
+
border-radius: 50%;
|
|
580
|
+
background: #10b981;
|
|
581
|
+
animation: pulse 2s infinite;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.status-text {
|
|
585
|
+
font-size: 14px;
|
|
586
|
+
color: var(--text-muted);
|
|
587
|
+
margin: 0;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.controls {
|
|
591
|
+
display: flex;
|
|
592
|
+
gap: 12px;
|
|
593
|
+
justify-content: center;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.control-btn {
|
|
597
|
+
flex: 1;
|
|
598
|
+
padding: 14px 20px;
|
|
599
|
+
border: none;
|
|
600
|
+
border-radius: 12px;
|
|
601
|
+
font-size: 14px;
|
|
602
|
+
font-weight: 600;
|
|
603
|
+
cursor: pointer;
|
|
604
|
+
transition: all 0.2s;
|
|
605
|
+
display: flex;
|
|
606
|
+
align-items: center;
|
|
607
|
+
justify-content: center;
|
|
608
|
+
gap: 8px;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
.control-btn svg {
|
|
612
|
+
width: 18px;
|
|
613
|
+
height: 18px;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
.control-btn.primary {
|
|
617
|
+
background: #1f2937;
|
|
618
|
+
color: white;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.control-btn.primary:hover {
|
|
622
|
+
background: #374151;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
.control-btn.danger {
|
|
626
|
+
background: #ef4444;
|
|
627
|
+
color: white;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
.control-btn.danger:hover {
|
|
631
|
+
background: #dc2626;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
.voice-mode-container {
|
|
635
|
+
display: flex;
|
|
636
|
+
flex-direction: column;
|
|
637
|
+
align-items: center;
|
|
638
|
+
justify-content: center;
|
|
639
|
+
height: 100%;
|
|
640
|
+
padding: 16px 12px;
|
|
641
|
+
box-sizing: border-box;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.voice-idle-stack {
|
|
645
|
+
display: flex;
|
|
646
|
+
flex-direction: column;
|
|
647
|
+
align-items: center;
|
|
648
|
+
gap: 10px;
|
|
649
|
+
width: 100%;
|
|
650
|
+
max-width: 220px;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
.voice-idle-stack .central-orb-container {
|
|
654
|
+
margin-bottom: 0;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
.voice-idle-stack .voice-status-text {
|
|
658
|
+
margin-bottom: 0;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.voice-idle-stack .voice-status-subtext {
|
|
662
|
+
margin-top: -4px;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
.voice-mode-container.has-session-choice .voice-idle-stack {
|
|
666
|
+
gap: 10px;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.voice-mode-container.has-session-choice .voice-doodle-stage {
|
|
670
|
+
width: 72px;
|
|
671
|
+
height: 72px;
|
|
672
|
+
margin-bottom: 0;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
.voice-mode-container.has-session-choice .voice-doodle-squiggle,
|
|
676
|
+
.voice-mode-container.has-session-choice .voice-doodle-spark,
|
|
677
|
+
.voice-mode-container.has-session-choice .voice-doodle-ring-b {
|
|
678
|
+
display: none;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
.voice-mode-container.has-session-choice .voice-doodle-title::after {
|
|
682
|
+
display: none;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
.voice-mode-container.has-session-choice .central-orb-container {
|
|
686
|
+
width: 56px;
|
|
687
|
+
height: 56px;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.voice-mode-container.has-session-choice .voice-doodle-emoji {
|
|
691
|
+
font-size: 30px;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
.voice-doodle-stage {
|
|
695
|
+
position: relative;
|
|
696
|
+
width: 148px;
|
|
697
|
+
height: 148px;
|
|
698
|
+
display: flex;
|
|
699
|
+
align-items: center;
|
|
700
|
+
justify-content: center;
|
|
701
|
+
margin-bottom: 4px;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
.voice-doodle-squiggle {
|
|
705
|
+
position: absolute;
|
|
706
|
+
color: #f59e0b;
|
|
707
|
+
pointer-events: none;
|
|
708
|
+
z-index: 1;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
.voice-doodle-squiggle path {
|
|
712
|
+
stroke-dasharray: 48;
|
|
713
|
+
stroke-dashoffset: 48;
|
|
714
|
+
animation: doodleDraw 2.8s ease-in-out infinite;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
.voice-doodle-squiggle-1 {
|
|
718
|
+
top: 6%;
|
|
719
|
+
left: -4%;
|
|
720
|
+
width: 40px;
|
|
721
|
+
animation: doodleFloat 3.2s ease-in-out infinite;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.voice-doodle-squiggle-1 path {
|
|
725
|
+
animation-delay: 0s;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
.voice-doodle-squiggle-2 {
|
|
729
|
+
bottom: 10%;
|
|
730
|
+
right: -6%;
|
|
731
|
+
width: 44px;
|
|
732
|
+
transform: rotate(12deg);
|
|
733
|
+
animation: doodleFloatAlt 3.6s ease-in-out infinite;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
.voice-doodle-squiggle-2 path {
|
|
737
|
+
animation-delay: 0.6s;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
.voice-doodle-spark {
|
|
741
|
+
position: absolute;
|
|
742
|
+
font-size: 14px;
|
|
743
|
+
line-height: 1;
|
|
744
|
+
color: #fbbf24;
|
|
745
|
+
pointer-events: none;
|
|
746
|
+
z-index: 1;
|
|
747
|
+
animation: doodleSparkle 2.4s ease-in-out infinite;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
.voice-doodle-spark-1 {
|
|
751
|
+
top: 18%;
|
|
752
|
+
right: 6%;
|
|
753
|
+
animation-delay: 0.2s;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.voice-doodle-spark-2 {
|
|
757
|
+
bottom: 16%;
|
|
758
|
+
left: 8%;
|
|
759
|
+
font-size: 11px;
|
|
760
|
+
animation-delay: 0.9s;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
.voice-doodle-ring {
|
|
764
|
+
position: absolute;
|
|
765
|
+
inset: 0;
|
|
766
|
+
border: 2px dashed rgba(245, 158, 11, 0.35);
|
|
767
|
+
pointer-events: none;
|
|
768
|
+
z-index: 0;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
.voice-doodle-ring-a {
|
|
772
|
+
inset: -6px;
|
|
773
|
+
border-radius: 58% 42% 34% 66% / 58% 34% 66% 42%;
|
|
774
|
+
animation: wave-rotate-1 9s linear infinite;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
.voice-doodle-ring-b {
|
|
778
|
+
inset: -14px;
|
|
779
|
+
border-radius: 42% 58% 66% 34% / 42% 66% 34% 58%;
|
|
780
|
+
opacity: 0.45;
|
|
781
|
+
animation: wave-rotate-2 13s linear infinite reverse;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
.central-orb.voice-doodle-tap {
|
|
785
|
+
background: linear-gradient(155deg, #fffbeb 0%, #fef3c7 50%, #fde68a 100%) !important;
|
|
786
|
+
border: 2px solid rgba(245, 158, 11, 0.28);
|
|
787
|
+
box-shadow: 0 10px 28px rgba(245, 158, 11, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.7) !important;
|
|
788
|
+
animation: human-wave-hand 0.9s ease-in-out infinite !important;
|
|
789
|
+
transform-origin: 65% 85%;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
.central-orb.voice-doodle-tap:hover {
|
|
793
|
+
transform: scale(1.06) rotate(2deg);
|
|
794
|
+
box-shadow: 0 14px 32px rgba(245, 158, 11, 0.24), inset 0 1px 0 rgba(255, 255, 255, 0.8) !important;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
.voice-doodle-emoji {
|
|
798
|
+
font-size: 44px;
|
|
799
|
+
line-height: 1;
|
|
800
|
+
display: block;
|
|
801
|
+
font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
|
|
802
|
+
user-select: none;
|
|
803
|
+
pointer-events: none;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
.voice-doodle-title {
|
|
807
|
+
position: relative;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
.voice-doodle-title::after {
|
|
811
|
+
content: '';
|
|
812
|
+
display: block;
|
|
813
|
+
width: 72px;
|
|
814
|
+
height: 6px;
|
|
815
|
+
margin: 5px auto 0;
|
|
816
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 6' fill='none'%3E%3Cpath d='M2 4C12 1 22 5 36 3C50 1 60 5 70 2' stroke='%23F59E0B' stroke-width='2' stroke-linecap='round' stroke-dasharray='4 4'/%3E%3C/svg%3E");
|
|
817
|
+
background-repeat: no-repeat;
|
|
818
|
+
background-position: center;
|
|
819
|
+
opacity: 0.7;
|
|
820
|
+
animation: doodleFloat 2.5s ease-in-out infinite;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.central-orb-container {
|
|
824
|
+
position: relative;
|
|
825
|
+
width: 120px;
|
|
826
|
+
height: 120px;
|
|
827
|
+
margin-bottom: 0;
|
|
828
|
+
cursor: pointer;
|
|
829
|
+
z-index: 2;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.central-orb {
|
|
833
|
+
width: 100%;
|
|
834
|
+
height: 100%;
|
|
835
|
+
border-radius: 50%;
|
|
836
|
+
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
|
|
837
|
+
display: flex;
|
|
838
|
+
align-items: center;
|
|
839
|
+
justify-content: center;
|
|
840
|
+
color: white;
|
|
841
|
+
position: relative;
|
|
842
|
+
z-index: 10;
|
|
843
|
+
box-shadow: 0 10px 30px rgba(var(--primary-rgb), 0.3);
|
|
844
|
+
transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
.central-orb.active {
|
|
848
|
+
animation: pulse 2s infinite;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
.central-orb.idle {
|
|
852
|
+
animation: floatOrb 4s ease-in-out infinite;
|
|
853
|
+
cursor: pointer;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
.central-orb.idle:hover {
|
|
857
|
+
transform: scale(1.05);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
.central-orb-glow {
|
|
861
|
+
position: absolute;
|
|
862
|
+
top: 50%;
|
|
863
|
+
left: 50%;
|
|
864
|
+
transform: translate(-50%, -50%);
|
|
865
|
+
width: 140%;
|
|
866
|
+
height: 140%;
|
|
867
|
+
background: radial-gradient(circle, rgba(var(--primary-rgb), 0.2) 0%, transparent 70%);
|
|
868
|
+
animation: pulseGlowIdle 4s ease-in-out infinite;
|
|
869
|
+
z-index: -1;
|
|
870
|
+
pointer-events: none;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
.central-orb svg {
|
|
874
|
+
width: 24px;
|
|
875
|
+
height: 24px;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.voice-status-text {
|
|
879
|
+
font-size: 20px;
|
|
880
|
+
font-weight: 600;
|
|
881
|
+
color: var(--text);
|
|
882
|
+
margin-bottom: 8px;
|
|
883
|
+
text-align: center;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
.voice-status-subtext {
|
|
887
|
+
font-size: 14px;
|
|
888
|
+
color: var(--text-muted);
|
|
889
|
+
text-align: center;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
/* Chat Mode Styles */
|
|
893
|
+
.chat-messages {
|
|
894
|
+
flex: 1;
|
|
895
|
+
min-height: 0;
|
|
896
|
+
overflow-y: auto;
|
|
897
|
+
padding: 16px;
|
|
898
|
+
display: flex;
|
|
899
|
+
flex-direction: column;
|
|
900
|
+
gap: 12px;
|
|
901
|
+
background: #f9fafb;
|
|
902
|
+
|
|
903
|
+
scrollbar-width: thin;
|
|
904
|
+
scrollbar-color: rgba(156, 163, 175, 0.5) transparent;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
.chat-messages::-webkit-scrollbar {
|
|
908
|
+
width: 6px;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
.chat-messages::-webkit-scrollbar-track {
|
|
912
|
+
background: transparent;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
.chat-messages::-webkit-scrollbar-thumb {
|
|
916
|
+
background-color: rgba(156, 163, 175, 0.5);
|
|
917
|
+
border-radius: 3px;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
.chat-message {
|
|
921
|
+
max-width: 85%;
|
|
922
|
+
padding: 12px 16px;
|
|
923
|
+
border-radius: 16px;
|
|
924
|
+
font-size: 14px;
|
|
925
|
+
line-height: 1.5;
|
|
926
|
+
word-wrap: break-word;
|
|
927
|
+
white-space: pre-wrap;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
.chat-message.user {
|
|
931
|
+
align-self: flex-end;
|
|
932
|
+
background: #000000;
|
|
933
|
+
color: white;
|
|
934
|
+
border-bottom-right-radius: 4px;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
.chat-message.assistant {
|
|
938
|
+
align-self: flex-start;
|
|
939
|
+
background: #ffffff;
|
|
940
|
+
border: 1px solid #e5e7eb;
|
|
941
|
+
color: var(--text);
|
|
942
|
+
border-bottom-left-radius: 4px;
|
|
943
|
+
box-shadow: 0 1px 2px rgba(0,0,0,0.05);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
.chat-input-area {
|
|
947
|
+
padding: 20px;
|
|
948
|
+
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
|
949
|
+
display: flex;
|
|
950
|
+
gap: 10px;
|
|
951
|
+
align-items: center;
|
|
952
|
+
background: white;
|
|
953
|
+
z-index: 30;
|
|
954
|
+
position: relative;
|
|
955
|
+
border-bottom-left-radius: 28px;
|
|
956
|
+
border-bottom-right-radius: 28px;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
.chat-input {
|
|
960
|
+
flex: 1;
|
|
961
|
+
padding: 14px 20px;
|
|
962
|
+
border: 1px solid #e5e7eb;
|
|
963
|
+
border-radius: 28px;
|
|
964
|
+
font-size: 15px;
|
|
965
|
+
outline: none;
|
|
966
|
+
transition: all 0.3s;
|
|
967
|
+
background: #f3f4f6;
|
|
968
|
+
color: #1f2937;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
.chat-input:focus {
|
|
972
|
+
border-color: var(--primary);
|
|
973
|
+
background: white;
|
|
974
|
+
box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
.chat-send-btn {
|
|
978
|
+
width: 48px;
|
|
979
|
+
height: 48px;
|
|
980
|
+
border-radius: 50%;
|
|
981
|
+
background: var(--primary);
|
|
982
|
+
border: none;
|
|
983
|
+
cursor: pointer;
|
|
984
|
+
display: flex;
|
|
985
|
+
align-items: center;
|
|
986
|
+
justify-content: center;
|
|
987
|
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
988
|
+
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
|
989
|
+
flex-shrink: 0;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
.chat-send-btn:hover {
|
|
993
|
+
transform: scale(1.05) rotate(-10deg);
|
|
994
|
+
background: var(--primary-hover);
|
|
995
|
+
box-shadow: 0 6px 16px rgba(99, 102, 241, 0.4);
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.chat-send-btn:active {
|
|
999
|
+
transform: scale(0.95);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
.chat-send-btn svg {
|
|
1003
|
+
width: 22px;
|
|
1004
|
+
height: 22px;
|
|
1005
|
+
color: white;
|
|
1006
|
+
margin-left: 2px;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
.avatar-container {
|
|
1010
|
+
background: transparent;
|
|
1011
|
+
flex: 1;
|
|
1012
|
+
display: flex;
|
|
1013
|
+
align-items: center;
|
|
1014
|
+
justify-content: center;
|
|
1015
|
+
position: relative;
|
|
1016
|
+
overflow: hidden;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
.avatar-video {
|
|
1020
|
+
width: 100%;
|
|
1021
|
+
height: 100%;
|
|
1022
|
+
object-fit: cover;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
.voice-btn-simple {
|
|
1026
|
+
position: relative;
|
|
1027
|
+
width: 44px;
|
|
1028
|
+
height: 44px;
|
|
1029
|
+
border-radius: 50%;
|
|
1030
|
+
border: 1.5px solid #e5e7eb;
|
|
1031
|
+
cursor: pointer;
|
|
1032
|
+
display: flex;
|
|
1033
|
+
align-items: center;
|
|
1034
|
+
justify-content: center;
|
|
1035
|
+
transition: all 0.3s;
|
|
1036
|
+
overflow: visible;
|
|
1037
|
+
background: white;
|
|
1038
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
.voice-btn-simple:hover {
|
|
1042
|
+
transform: scale(1.05);
|
|
1043
|
+
background: #f9fafb;
|
|
1044
|
+
border-color: #9ca3af;
|
|
1045
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.voice-btn-icon {
|
|
1049
|
+
width: 100%;
|
|
1050
|
+
height: 100%;
|
|
1051
|
+
display: flex;
|
|
1052
|
+
align-items: center;
|
|
1053
|
+
justify-content: center;
|
|
1054
|
+
color: #4b5563;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
.voice-btn-icon svg {
|
|
1058
|
+
width: 20px;
|
|
1059
|
+
height: 20px;
|
|
1060
|
+
stroke-width: 2px;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
.absolute { position: absolute; }
|
|
1064
|
+
.relative { position: relative; }
|
|
1065
|
+
.rounded-full { border-radius: 9999px; }
|
|
1066
|
+
.flex { display: flex; }
|
|
1067
|
+
.items-center { align-items: center; }
|
|
1068
|
+
.justify-center { justify-content: center; }
|
|
1069
|
+
.w-full { width: 100%; }
|
|
1070
|
+
.h-full { height: 100%; }
|
|
1071
|
+
.z-50 { z-index: 50; }
|
|
1072
|
+
|
|
1073
|
+
.branding-footer {
|
|
1074
|
+
display: flex;
|
|
1075
|
+
justify-content: center;
|
|
1076
|
+
padding: 4px 0 8px 0;
|
|
1077
|
+
background-color: #f9fafb;
|
|
1078
|
+
font-size: 10px;
|
|
1079
|
+
color: #9ca3af;
|
|
1080
|
+
font-weight: 500;
|
|
1081
|
+
letter-spacing: 0.025em;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
.branding-footer b {
|
|
1085
|
+
color: #3b82f6;
|
|
1086
|
+
font-weight: 700;
|
|
1087
|
+
margin-left: 4px;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
@media (max-width: 640px) {
|
|
1091
|
+
.widget-panel {
|
|
1092
|
+
width: 75vw !important;
|
|
1093
|
+
height: 50vh !important;
|
|
1094
|
+
max-width: 75vw !important;
|
|
1095
|
+
max-height: 50vh !important;
|
|
1096
|
+
top: auto !important;
|
|
1097
|
+
left: auto !important;
|
|
1098
|
+
right: 16px !important;
|
|
1099
|
+
bottom: 16px !important;
|
|
1100
|
+
border-radius: 20px !important;
|
|
1101
|
+
margin: 0 !important;
|
|
1102
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15) !important;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
.widget-panel.maximized {
|
|
1106
|
+
width: 100vw !important;
|
|
1107
|
+
height: 100vh !important;
|
|
1108
|
+
max-width: 100vw !important;
|
|
1109
|
+
max-height: 100vh !important;
|
|
1110
|
+
top: 0 !important;
|
|
1111
|
+
left: 0 !important;
|
|
1112
|
+
right: 0 !important;
|
|
1113
|
+
bottom: 0 !important;
|
|
1114
|
+
border-radius: 0 !important;
|
|
1115
|
+
margin: 0 !important;
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
.widget-fab {
|
|
1119
|
+
width: 56px;
|
|
1120
|
+
height: 56px;
|
|
1121
|
+
bottom: 16px !important;
|
|
1122
|
+
right: 16px !important;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
:host(.vanira-panel-open) .widget-fab {
|
|
1126
|
+
display: none !important;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
.close-btn.collapse-panel-btn {
|
|
1130
|
+
display: flex !important;
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
.widget-header {
|
|
1134
|
+
padding: 12px 16px;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
.widget-title {
|
|
1138
|
+
font-size: 16px;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
.chat-input-area {
|
|
1142
|
+
padding: 12px;
|
|
1143
|
+
padding-bottom: env(safe-area-inset-bottom, 12px);
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
/* Voice overlay mobile default view adjustments */
|
|
1147
|
+
.widget-panel:not(.maximized) .voice-content-container {
|
|
1148
|
+
padding: 12px 16px 8px !important;
|
|
1149
|
+
min-height: 0 !important;
|
|
1150
|
+
flex: 1 !important;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
.widget-panel:not(.maximized) .voice-orb-wrapper {
|
|
1154
|
+
width: 140px !important;
|
|
1155
|
+
height: 140px !important;
|
|
1156
|
+
transform: scale(0.65) !important;
|
|
1157
|
+
transform-origin: center !important;
|
|
1158
|
+
margin: 4px 0 !important;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
.widget-panel:not(.maximized) .voice-video-container {
|
|
1162
|
+
max-width: 140px !important;
|
|
1163
|
+
margin-bottom: 8px !important;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
.widget-panel:not(.maximized) .voice-status-area {
|
|
1167
|
+
margin-top: 4px !important;
|
|
1168
|
+
gap: 4px !important;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
.widget-panel:not(.maximized) .voice-status-area p {
|
|
1172
|
+
margin: 0 !important;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
.widget-panel:not(.maximized) .voice-transcription {
|
|
1176
|
+
margin-top: 4px !important;
|
|
1177
|
+
font-size: 11px !important;
|
|
1178
|
+
min-height: 24px !important;
|
|
1179
|
+
max-height: 40px !important;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
.widget-panel:not(.maximized) .voice-footer {
|
|
1183
|
+
padding: 0 12px 12px !important;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
.widget-panel:not(.maximized) .voice-hangup-btn {
|
|
1187
|
+
padding: 8px 20px !important;
|
|
1188
|
+
font-size: 12px !important;
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
/* Session toggle — Continue / Restart */
|
|
1193
|
+
.session-selector-container {
|
|
1194
|
+
display: flex;
|
|
1195
|
+
gap: 8px;
|
|
1196
|
+
background: #eef2f6;
|
|
1197
|
+
padding: 4px;
|
|
1198
|
+
border-radius: 999px;
|
|
1199
|
+
margin-top: 4px;
|
|
1200
|
+
width: 100%;
|
|
1201
|
+
max-width: 220px;
|
|
1202
|
+
box-sizing: border-box;
|
|
1203
|
+
border: none;
|
|
1204
|
+
pointer-events: auto !important;
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
.session-option {
|
|
1208
|
+
flex: 1 1 auto;
|
|
1209
|
+
display: flex;
|
|
1210
|
+
flex-direction: row;
|
|
1211
|
+
align-items: center;
|
|
1212
|
+
justify-content: center;
|
|
1213
|
+
gap: 6px;
|
|
1214
|
+
min-width: 88px;
|
|
1215
|
+
padding: 9px 16px;
|
|
1216
|
+
background: transparent;
|
|
1217
|
+
border-radius: 999px;
|
|
1218
|
+
cursor: pointer;
|
|
1219
|
+
transition: background 0.18s ease, box-shadow 0.18s ease, color 0.18s ease;
|
|
1220
|
+
border: none;
|
|
1221
|
+
user-select: none;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
.session-option:hover:not(.active) {
|
|
1225
|
+
background: rgba(255, 255, 255, 0.55);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
.session-option.active {
|
|
1229
|
+
background: #ffffff;
|
|
1230
|
+
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.1);
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
.session-option .session-icon {
|
|
1234
|
+
display: flex;
|
|
1235
|
+
align-items: center;
|
|
1236
|
+
justify-content: center;
|
|
1237
|
+
flex-shrink: 0;
|
|
1238
|
+
width: 14px;
|
|
1239
|
+
height: 14px;
|
|
1240
|
+
color: #64748b;
|
|
1241
|
+
transition: color 0.18s ease;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
.session-option .session-icon svg {
|
|
1245
|
+
width: 13px;
|
|
1246
|
+
height: 13px;
|
|
1247
|
+
display: block;
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
.session-option.active .session-icon {
|
|
1251
|
+
color: #0f172a;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
.session-option .session-title {
|
|
1255
|
+
font-size: 12px;
|
|
1256
|
+
font-weight: 500;
|
|
1257
|
+
color: #475569;
|
|
1258
|
+
margin: 0;
|
|
1259
|
+
letter-spacing: -0.01em;
|
|
1260
|
+
text-transform: none;
|
|
1261
|
+
line-height: 1;
|
|
1262
|
+
white-space: nowrap;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
.session-option.active .session-title {
|
|
1266
|
+
color: #0f172a;
|
|
1267
|
+
font-weight: 600;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
.session-option .session-desc {
|
|
1271
|
+
display: none;
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
/* Selector styling for clean card launcher */
|
|
1275
|
+
.clean-card-launcher .session-selector-container {
|
|
1276
|
+
width: 100%;
|
|
1277
|
+
margin-top: 0;
|
|
1278
|
+
margin-bottom: 0;
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
.clean-card-launcher.has-session-choice .session-selector-container {
|
|
1282
|
+
margin-top: 2px;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
.clean-card-launcher .session-option {
|
|
1286
|
+
padding: 7px 10px;
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
.clean-card-launcher .session-option .session-title {
|
|
1290
|
+
font-size: 12px;
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
/* Thin Resolve Bar & Link above text input */
|
|
1294
|
+
.chat-resolve-bar {
|
|
1295
|
+
padding: 8px 16px;
|
|
1296
|
+
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
|
1297
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.03);
|
|
1298
|
+
background: #ffffff;
|
|
1299
|
+
display: flex;
|
|
1300
|
+
justify-content: center;
|
|
1301
|
+
align-items: center;
|
|
1302
|
+
z-index: 25;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.chat-resolve-link {
|
|
1306
|
+
background: none;
|
|
1307
|
+
border: none;
|
|
1308
|
+
font-size: 11px;
|
|
1309
|
+
font-weight: 500;
|
|
1310
|
+
color: var(--primary);
|
|
1311
|
+
cursor: pointer;
|
|
1312
|
+
transition: all 0.2s;
|
|
1313
|
+
text-decoration: underline;
|
|
1314
|
+
opacity: 0.8;
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
.chat-resolve-link:hover {
|
|
1318
|
+
opacity: 1;
|
|
1319
|
+
color: var(--primary-hover);
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
/* ── Voice active overlay (in-call UI) ─────────────────────────────────── */
|
|
1323
|
+
#voice-active-overlay {
|
|
1324
|
+
position: absolute;
|
|
1325
|
+
inset: 0;
|
|
1326
|
+
background: #fafafa;
|
|
1327
|
+
pointer-events: auto;
|
|
1328
|
+
z-index: 60;
|
|
1329
|
+
display: none;
|
|
1330
|
+
flex-direction: column;
|
|
1331
|
+
align-items: center;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
#voice-active-overlay .voice-content-container {
|
|
1335
|
+
flex: 1;
|
|
1336
|
+
min-height: 0;
|
|
1337
|
+
display: flex;
|
|
1338
|
+
flex-direction: column;
|
|
1339
|
+
align-items: center;
|
|
1340
|
+
justify-content: center;
|
|
1341
|
+
width: 100%;
|
|
1342
|
+
padding: 20px 16px 8px;
|
|
1343
|
+
box-sizing: border-box;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
#voice-active-overlay .voice-orb-wrapper {
|
|
1347
|
+
position: relative;
|
|
1348
|
+
width: 140px;
|
|
1349
|
+
height: 140px;
|
|
1350
|
+
display: flex;
|
|
1351
|
+
align-items: center;
|
|
1352
|
+
justify-content: center;
|
|
1353
|
+
margin: 0 0 10px;
|
|
1354
|
+
flex-shrink: 0;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
#voice-active-overlay .voice-orb-connecting-ring,
|
|
1358
|
+
#voice-active-overlay .voice-orb-error-ring {
|
|
1359
|
+
position: absolute;
|
|
1360
|
+
width: 112px;
|
|
1361
|
+
height: 112px;
|
|
1362
|
+
border-radius: 50%;
|
|
1363
|
+
border: 2px solid #e2e8f0;
|
|
1364
|
+
border-top-color: #64748b;
|
|
1365
|
+
background: transparent;
|
|
1366
|
+
display: none;
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
#voice-active-overlay .voice-orb-error-ring {
|
|
1370
|
+
border-color: #fecaca;
|
|
1371
|
+
border-top-color: #ef4444;
|
|
1372
|
+
animation: spin 1.2s linear infinite;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
#voice-active-overlay .voice-orb-ring-outer {
|
|
1376
|
+
position: absolute;
|
|
1377
|
+
width: 124px;
|
|
1378
|
+
height: 124px;
|
|
1379
|
+
border-radius: 50%;
|
|
1380
|
+
border: 1px solid color-mix(in srgb, var(--voice-secondary, #64748b) 18%, transparent);
|
|
1381
|
+
background: transparent;
|
|
1382
|
+
animation: orb-breathe 2.6s ease-in-out infinite;
|
|
1383
|
+
display: none;
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
#voice-active-overlay .voice-orb-ring-mid {
|
|
1387
|
+
position: absolute;
|
|
1388
|
+
width: 116px;
|
|
1389
|
+
height: 116px;
|
|
1390
|
+
border-radius: 50%;
|
|
1391
|
+
border: 1px solid rgba(15, 23, 42, 0.07);
|
|
1392
|
+
background: transparent;
|
|
1393
|
+
animation: orb-breathe-delayed 2.6s ease-in-out infinite;
|
|
1394
|
+
display: none;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
#voice-active-overlay .voice-orb-disc {
|
|
1398
|
+
position: absolute;
|
|
1399
|
+
width: 100px;
|
|
1400
|
+
height: 100px;
|
|
1401
|
+
border-radius: 50%;
|
|
1402
|
+
background: linear-gradient(165deg, #ffffff 0%, #f8fafc 50%, #f1f5f9 100%);
|
|
1403
|
+
box-shadow: 0 8px 20px rgba(15, 23, 42, 0.07), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
|
1404
|
+
border: 1px solid rgba(15, 23, 42, 0.06);
|
|
1405
|
+
display: none;
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
#voice-active-overlay .voice-orb-shine {
|
|
1409
|
+
position: absolute;
|
|
1410
|
+
width: 100px;
|
|
1411
|
+
height: 100px;
|
|
1412
|
+
border-radius: 50%;
|
|
1413
|
+
background: radial-gradient(circle at 32% 28%, rgba(255, 255, 255, 0.85) 0%, transparent 58%);
|
|
1414
|
+
display: none;
|
|
1415
|
+
pointer-events: none;
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
#voice-active-overlay .voice-connecting-orb {
|
|
1419
|
+
position: relative;
|
|
1420
|
+
z-index: 10;
|
|
1421
|
+
width: 80px;
|
|
1422
|
+
height: 80px;
|
|
1423
|
+
border-radius: 50%;
|
|
1424
|
+
display: none;
|
|
1425
|
+
align-items: center;
|
|
1426
|
+
justify-content: center;
|
|
1427
|
+
background: linear-gradient(135deg, var(--voice-primary, #0f172a) 0%, var(--voice-secondary, #334155) 100%);
|
|
1428
|
+
box-shadow: 0 6px 18px rgba(15, 23, 42, 0.12);
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
#voice-active-overlay .voice-orb-center {
|
|
1432
|
+
position: relative;
|
|
1433
|
+
z-index: 10;
|
|
1434
|
+
width: 44px;
|
|
1435
|
+
height: 44px;
|
|
1436
|
+
border-radius: 50%;
|
|
1437
|
+
display: flex;
|
|
1438
|
+
align-items: center;
|
|
1439
|
+
justify-content: center;
|
|
1440
|
+
background: #ffffff;
|
|
1441
|
+
border: 1px solid #e5e7eb;
|
|
1442
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);
|
|
1443
|
+
color: #0f172a;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
#voice-active-overlay .voice-orb-center svg {
|
|
1447
|
+
width: 20px;
|
|
1448
|
+
height: 20px;
|
|
1449
|
+
stroke: #0f172a;
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
#voice-active-overlay .voice-orb-center.is-error {
|
|
1453
|
+
border-color: #fecaca;
|
|
1454
|
+
color: #dc2626;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
#voice-active-overlay .voice-orb-center.is-error svg {
|
|
1458
|
+
stroke: #dc2626;
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
#voice-active-overlay .voice-status-area {
|
|
1462
|
+
display: flex;
|
|
1463
|
+
flex-direction: column;
|
|
1464
|
+
align-items: center;
|
|
1465
|
+
gap: 4px;
|
|
1466
|
+
margin-top: 2px;
|
|
1467
|
+
width: 100%;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
#voice-active-overlay .voice-connecting-label {
|
|
1471
|
+
display: none;
|
|
1472
|
+
margin: 0;
|
|
1473
|
+
font-size: 12px;
|
|
1474
|
+
font-weight: 600;
|
|
1475
|
+
color: #334155;
|
|
1476
|
+
letter-spacing: -0.01em;
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
#voice-active-overlay .voice-connecting-hint {
|
|
1480
|
+
display: none;
|
|
1481
|
+
margin: 0;
|
|
1482
|
+
font-size: 11px;
|
|
1483
|
+
font-weight: 400;
|
|
1484
|
+
color: #94a3b8;
|
|
1485
|
+
letter-spacing: -0.01em;
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
#voice-active-overlay .voice-connected-badge {
|
|
1489
|
+
display: none;
|
|
1490
|
+
align-items: center;
|
|
1491
|
+
gap: 6px;
|
|
1492
|
+
padding: 0;
|
|
1493
|
+
background: transparent;
|
|
1494
|
+
border: none;
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
#voice-active-overlay .voice-live-status-text {
|
|
1498
|
+
font-size: 12px;
|
|
1499
|
+
font-weight: 600;
|
|
1500
|
+
color: #475569;
|
|
1501
|
+
letter-spacing: -0.01em;
|
|
1502
|
+
line-height: 1.2;
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
#voice-active-overlay .voice-timer {
|
|
1506
|
+
display: none;
|
|
1507
|
+
font-size: 13px;
|
|
1508
|
+
font-weight: 500;
|
|
1509
|
+
color: #94a3b8;
|
|
1510
|
+
font-variant-numeric: tabular-nums;
|
|
1511
|
+
letter-spacing: 0.02em;
|
|
1512
|
+
line-height: 1.2;
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
#voice-active-overlay .voice-error-label {
|
|
1516
|
+
display: none;
|
|
1517
|
+
margin: 0;
|
|
1518
|
+
font-size: 12px;
|
|
1519
|
+
color: #dc2626;
|
|
1520
|
+
font-weight: 500;
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
#voice-active-overlay .voice-retry-btn {
|
|
1524
|
+
display: none;
|
|
1525
|
+
padding: 5px 12px;
|
|
1526
|
+
background: #f1f5f9;
|
|
1527
|
+
border: none;
|
|
1528
|
+
border-radius: 999px;
|
|
1529
|
+
font-size: 11px;
|
|
1530
|
+
font-weight: 500;
|
|
1531
|
+
color: #475569;
|
|
1532
|
+
cursor: pointer;
|
|
1533
|
+
pointer-events: auto;
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
#voice-active-overlay .voice-retry-btn:hover {
|
|
1537
|
+
background: #e2e8f0;
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
#voice-active-overlay .voice-transcription {
|
|
1541
|
+
margin-top: 8px;
|
|
1542
|
+
padding: 0 12px;
|
|
1543
|
+
text-align: center;
|
|
1544
|
+
min-height: 28px;
|
|
1545
|
+
max-height: 56px;
|
|
1546
|
+
overflow-y: auto;
|
|
1547
|
+
font-size: 12px;
|
|
1548
|
+
color: #94a3b8;
|
|
1549
|
+
font-style: italic;
|
|
1550
|
+
line-height: 1.35;
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
#voice-active-overlay .voice-footer {
|
|
1554
|
+
width: 100%;
|
|
1555
|
+
display: flex;
|
|
1556
|
+
justify-content: center;
|
|
1557
|
+
align-items: center;
|
|
1558
|
+
gap: 10px;
|
|
1559
|
+
padding: 8px 16px 14px;
|
|
1560
|
+
pointer-events: auto;
|
|
1561
|
+
flex-shrink: 0;
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
#voice-active-overlay .voice-mute-btn {
|
|
1565
|
+
display: inline-flex;
|
|
1566
|
+
align-items: center;
|
|
1567
|
+
justify-content: center;
|
|
1568
|
+
gap: 6px;
|
|
1569
|
+
padding: 8px 16px;
|
|
1570
|
+
background: #f4f4f5;
|
|
1571
|
+
color: #334155;
|
|
1572
|
+
border: none;
|
|
1573
|
+
border-radius: 999px;
|
|
1574
|
+
font-size: 12px;
|
|
1575
|
+
font-weight: 600;
|
|
1576
|
+
cursor: pointer;
|
|
1577
|
+
pointer-events: auto;
|
|
1578
|
+
transition: background 0.15s ease, transform 0.15s ease, color 0.15s ease;
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
#voice-active-overlay .voice-mute-btn:hover:not(:disabled) {
|
|
1582
|
+
background: #e4e4e7;
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
#voice-active-overlay .voice-mute-btn:active:not(:disabled) {
|
|
1586
|
+
transform: scale(0.96);
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
#voice-active-overlay .voice-mute-btn:disabled {
|
|
1590
|
+
opacity: 0.45;
|
|
1591
|
+
cursor: not-allowed;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
#voice-active-overlay .voice-mute-btn.is-muted {
|
|
1595
|
+
background: #fef2f2;
|
|
1596
|
+
color: #dc2626;
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
#voice-active-overlay .voice-mute-icon {
|
|
1600
|
+
display: flex;
|
|
1601
|
+
align-items: center;
|
|
1602
|
+
justify-content: center;
|
|
1603
|
+
line-height: 0;
|
|
1604
|
+
}
|
|
1605
|
+
|
|
1606
|
+
#voice-active-overlay .voice-mute-icon svg {
|
|
1607
|
+
width: 14px;
|
|
1608
|
+
height: 14px;
|
|
1609
|
+
stroke: currentColor;
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
#voice-active-overlay .voice-mute-label {
|
|
1613
|
+
letter-spacing: -0.01em;
|
|
1614
|
+
}
|
|
1615
|
+
|
|
1616
|
+
#voice-active-overlay .voice-hangup-btn {
|
|
1617
|
+
display: inline-flex;
|
|
1618
|
+
align-items: center;
|
|
1619
|
+
justify-content: center;
|
|
1620
|
+
gap: 6px;
|
|
1621
|
+
padding: 8px 18px;
|
|
1622
|
+
background: #ef4444;
|
|
1623
|
+
color: #ffffff;
|
|
1624
|
+
border: none;
|
|
1625
|
+
border-radius: 999px;
|
|
1626
|
+
font-size: 12px;
|
|
1627
|
+
font-weight: 600;
|
|
1628
|
+
cursor: pointer;
|
|
1629
|
+
pointer-events: auto;
|
|
1630
|
+
transition: background 0.15s ease, transform 0.15s ease;
|
|
1631
|
+
box-shadow: 0 2px 8px rgba(239, 68, 68, 0.28);
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
#voice-active-overlay .voice-hangup-btn:hover {
|
|
1635
|
+
background: #dc2626;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
#voice-active-overlay .voice-hangup-btn:active {
|
|
1639
|
+
transform: scale(0.96);
|
|
1640
|
+
}
|
|
1641
|
+
|
|
1642
|
+
#voice-active-overlay .voice-hangup-icon {
|
|
1643
|
+
display: flex;
|
|
1644
|
+
align-items: center;
|
|
1645
|
+
justify-content: center;
|
|
1646
|
+
line-height: 0;
|
|
1647
|
+
}
|
|
1648
|
+
|
|
1649
|
+
#voice-active-overlay .voice-hangup-icon svg {
|
|
1650
|
+
width: 14px;
|
|
1651
|
+
height: 14px;
|
|
1652
|
+
transform: rotate(135deg);
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
#voice-active-overlay .voice-hangup-label {
|
|
1656
|
+
letter-spacing: -0.01em;
|
|
1657
|
+
text-transform: none;
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
/* Human presence launcher — waving hand pill */
|
|
1661
|
+
.human-presence-launcher {
|
|
1662
|
+
position: fixed;
|
|
1663
|
+
z-index: 9999;
|
|
1664
|
+
bottom: 20px;
|
|
1665
|
+
right: 20px;
|
|
1666
|
+
display: flex;
|
|
1667
|
+
align-items: center;
|
|
1668
|
+
gap: 12px;
|
|
1669
|
+
padding: 6px 16px 6px 6px;
|
|
1670
|
+
margin: 0;
|
|
1671
|
+
appearance: none;
|
|
1672
|
+
-webkit-appearance: none;
|
|
1673
|
+
background: rgba(10, 10, 12, 0.82);
|
|
1674
|
+
backdrop-filter: blur(20px);
|
|
1675
|
+
-webkit-backdrop-filter: blur(20px);
|
|
1676
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
1677
|
+
border-radius: 999px;
|
|
1678
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.06);
|
|
1679
|
+
cursor: pointer;
|
|
1680
|
+
pointer-events: auto !important;
|
|
1681
|
+
animation: fadeInScale 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
1682
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
1683
|
+
transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
|
|
1684
|
+
max-width: min(240px, calc(100vw - 32px));
|
|
1685
|
+
text-align: left;
|
|
1686
|
+
-webkit-tap-highlight-color: transparent;
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
.human-presence-launcher:hover {
|
|
1690
|
+
transform: translateY(-2px);
|
|
1691
|
+
border-color: rgba(255, 255, 255, 0.16);
|
|
1692
|
+
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.08);
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1695
|
+
.human-presence-launcher:active {
|
|
1696
|
+
transform: scale(0.98);
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
.human-presence-wave-icon {
|
|
1700
|
+
flex-shrink: 0;
|
|
1701
|
+
width: 44px;
|
|
1702
|
+
height: 44px;
|
|
1703
|
+
border-radius: 50%;
|
|
1704
|
+
display: flex;
|
|
1705
|
+
align-items: center;
|
|
1706
|
+
justify-content: center;
|
|
1707
|
+
background: rgba(255, 255, 255, 0.1);
|
|
1708
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
1709
|
+
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.2);
|
|
1710
|
+
transform-origin: 65% 85%;
|
|
1711
|
+
animation: human-wave-hand 0.9s ease-in-out infinite;
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
.human-presence-wave-emoji {
|
|
1715
|
+
font-size: 26px;
|
|
1716
|
+
line-height: 1;
|
|
1717
|
+
display: block;
|
|
1718
|
+
font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
|
|
1719
|
+
user-select: none;
|
|
1720
|
+
pointer-events: none;
|
|
1721
|
+
}
|
|
1722
|
+
|
|
1723
|
+
.human-presence-copy {
|
|
1724
|
+
display: flex;
|
|
1725
|
+
flex-direction: column;
|
|
1726
|
+
gap: 2px;
|
|
1727
|
+
min-width: 0;
|
|
1728
|
+
flex: 1;
|
|
1729
|
+
padding-right: 2px;
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
.human-presence-greeting {
|
|
1733
|
+
font-size: 12px;
|
|
1734
|
+
font-weight: 600;
|
|
1735
|
+
color: rgba(255, 255, 255, 0.94);
|
|
1736
|
+
letter-spacing: -0.02em;
|
|
1737
|
+
line-height: 1.25;
|
|
1738
|
+
white-space: nowrap;
|
|
1739
|
+
overflow: hidden;
|
|
1740
|
+
text-overflow: ellipsis;
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
.human-presence-subtitle {
|
|
1744
|
+
font-size: 11px;
|
|
1745
|
+
font-weight: 500;
|
|
1746
|
+
color: rgba(255, 255, 255, 0.42);
|
|
1747
|
+
letter-spacing: -0.01em;
|
|
1748
|
+
line-height: 1.25;
|
|
1749
|
+
white-space: nowrap;
|
|
1750
|
+
overflow: hidden;
|
|
1751
|
+
text-overflow: ellipsis;
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
/* Voice overlay live status (listening / speaking) */
|
|
1755
|
+
.voice-live-status-bars {
|
|
1756
|
+
display: inline-flex;
|
|
1757
|
+
align-items: flex-end;
|
|
1758
|
+
gap: 2px;
|
|
1759
|
+
height: 10px;
|
|
1760
|
+
flex-shrink: 0;
|
|
1761
|
+
color: #64748b;
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
.voice-live-status-bars i {
|
|
1765
|
+
display: block;
|
|
1766
|
+
width: 2px;
|
|
1767
|
+
height: 3px;
|
|
1768
|
+
border-radius: 999px;
|
|
1769
|
+
background: currentColor;
|
|
1770
|
+
opacity: 0.55;
|
|
1771
|
+
animation: pillBarListen 1s ease-in-out infinite;
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
.voice-live-status-bars i:nth-child(2) {
|
|
1775
|
+
animation-delay: 0.12s;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
.voice-live-status-bars i:nth-child(3) {
|
|
1779
|
+
animation-delay: 0.24s;
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1782
|
+
.voice-live-status-bars.speaking i {
|
|
1783
|
+
animation-name: pillBarSpeak;
|
|
1784
|
+
opacity: 0.85;
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1787
|
+
.voice-connected-badge.is-speaking .voice-live-status-text,
|
|
1788
|
+
.voice-connected-badge.is-speaking .voice-live-status-bars {
|
|
1789
|
+
color: #334155;
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
/* Audio-only compact panel */
|
|
1793
|
+
.widget-panel.voice-only-panel {
|
|
1794
|
+
width: 168px !important;
|
|
1795
|
+
height: 252px !important;
|
|
1796
|
+
border-radius: 18px !important;
|
|
1797
|
+
transition: width 0.25s ease;
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1800
|
+
.widget-panel.voice-only-panel:has(.has-session-choice) {
|
|
1801
|
+
width: 236px !important;
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1804
|
+
.widget-panel.voice-only-panel .widget-header {
|
|
1805
|
+
padding: 8px 12px !important;
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
.widget-panel.voice-only-panel .widget-title {
|
|
1809
|
+
font-size: 12px !important;
|
|
1810
|
+
font-weight: 600 !important;
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1813
|
+
.widget-panel.voice-only-panel .close-btn {
|
|
1814
|
+
width: 24px !important;
|
|
1815
|
+
height: 24px !important;
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1818
|
+
.widget-panel.voice-only-panel .close-btn svg {
|
|
1819
|
+
width: 12px !important;
|
|
1820
|
+
height: 12px !important;
|
|
1821
|
+
}
|
|
1822
|
+
|
|
1823
|
+
.widget-panel.voice-only-panel .voice-idle-stack {
|
|
1824
|
+
max-width: calc(100% - 8px) !important;
|
|
1825
|
+
gap: 10px !important;
|
|
1826
|
+
}
|
|
1827
|
+
|
|
1828
|
+
.widget-panel.voice-only-panel .voice-mode-container.has-session-choice .voice-idle-stack {
|
|
1829
|
+
gap: 12px !important;
|
|
1830
|
+
}
|
|
1831
|
+
|
|
1832
|
+
.widget-panel.voice-only-panel .voice-doodle-stage {
|
|
1833
|
+
width: 88px !important;
|
|
1834
|
+
height: 88px !important;
|
|
1835
|
+
margin-bottom: 2px !important;
|
|
1836
|
+
}
|
|
1837
|
+
|
|
1838
|
+
.widget-panel.voice-only-panel .central-orb-container {
|
|
1839
|
+
width: 56px !important;
|
|
1840
|
+
height: 56px !important;
|
|
1841
|
+
margin-bottom: 0 !important;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
.widget-panel.voice-only-panel .voice-doodle-emoji {
|
|
1845
|
+
font-size: 28px !important;
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
.widget-panel.voice-only-panel .voice-doodle-squiggle {
|
|
1849
|
+
width: 28px !important;
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
.widget-panel.voice-only-panel .voice-doodle-spark {
|
|
1853
|
+
font-size: 10px !important;
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
.widget-panel.voice-only-panel .voice-doodle-ring-a {
|
|
1857
|
+
inset: -4px !important;
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1860
|
+
.widget-panel.voice-only-panel .voice-doodle-ring-b {
|
|
1861
|
+
inset: -9px !important;
|
|
1862
|
+
}
|
|
1863
|
+
|
|
1864
|
+
.widget-panel.voice-only-panel .voice-doodle-title::after {
|
|
1865
|
+
width: 52px !important;
|
|
1866
|
+
height: 4px !important;
|
|
1867
|
+
margin-top: 3px !important;
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1870
|
+
.widget-panel.voice-only-panel .voice-status-text {
|
|
1871
|
+
font-size: 12px !important;
|
|
1872
|
+
font-weight: 600 !important;
|
|
1873
|
+
margin-bottom: 0 !important;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
.widget-panel.voice-only-panel .voice-status-subtext {
|
|
1877
|
+
font-size: 10px !important;
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
.widget-panel.voice-only-panel .session-selector-container {
|
|
1881
|
+
width: 100% !important;
|
|
1882
|
+
max-width: none !important;
|
|
1883
|
+
gap: 6px !important;
|
|
1884
|
+
padding: 4px !important;
|
|
1885
|
+
margin-top: 6px !important;
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
.widget-panel.voice-only-panel .session-option {
|
|
1889
|
+
flex: 1 1 0 !important;
|
|
1890
|
+
min-width: 96px !important;
|
|
1891
|
+
padding: 10px 14px !important;
|
|
1892
|
+
gap: 6px !important;
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
.widget-panel.voice-only-panel .session-option .session-title {
|
|
1896
|
+
font-size: 12px !important;
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1899
|
+
.widget-panel.voice-only-panel .session-option .session-icon {
|
|
1900
|
+
width: 13px !important;
|
|
1901
|
+
height: 13px !important;
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
.widget-panel.voice-only-panel .session-option .session-icon svg {
|
|
1905
|
+
width: 12px !important;
|
|
1906
|
+
height: 12px !important;
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
/* Active call overlay — compact balanced layout */
|
|
1910
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-content-container {
|
|
1911
|
+
padding: 6px 12px 2px !important;
|
|
1912
|
+
justify-content: center !important;
|
|
1913
|
+
}
|
|
1914
|
+
|
|
1915
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-wrapper {
|
|
1916
|
+
width: 88px !important;
|
|
1917
|
+
height: 88px !important;
|
|
1918
|
+
margin: 0 0 8px !important;
|
|
1919
|
+
transform: none !important;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-ring-outer,
|
|
1923
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-ring-mid {
|
|
1924
|
+
display: none !important;
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-disc,
|
|
1928
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-shine {
|
|
1929
|
+
width: 72px !important;
|
|
1930
|
+
height: 72px !important;
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1933
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-connecting-orb {
|
|
1934
|
+
width: 64px !important;
|
|
1935
|
+
height: 64px !important;
|
|
1936
|
+
}
|
|
1937
|
+
|
|
1938
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-center {
|
|
1939
|
+
width: 36px !important;
|
|
1940
|
+
height: 36px !important;
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1943
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-orb-center svg {
|
|
1944
|
+
width: 16px !important;
|
|
1945
|
+
height: 16px !important;
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-status-area {
|
|
1949
|
+
gap: 3px !important;
|
|
1950
|
+
margin-top: 0 !important;
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1953
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-connecting-label {
|
|
1954
|
+
font-size: 11px !important;
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1957
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-connecting-hint {
|
|
1958
|
+
font-size: 10px !important;
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-live-status-text {
|
|
1962
|
+
font-size: 11px !important;
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1965
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-live-status-bars {
|
|
1966
|
+
height: 9px !important;
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1969
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-timer {
|
|
1970
|
+
font-size: 12px !important;
|
|
1971
|
+
color: #64748b !important;
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-transcription {
|
|
1975
|
+
margin-top: 4px !important;
|
|
1976
|
+
font-size: 10px !important;
|
|
1977
|
+
min-height: 0 !important;
|
|
1978
|
+
max-height: 32px !important;
|
|
1979
|
+
padding: 0 8px !important;
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-footer {
|
|
1983
|
+
padding: 6px 12px 12px !important;
|
|
1984
|
+
gap: 8px !important;
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1987
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-mute-btn {
|
|
1988
|
+
width: 36px !important;
|
|
1989
|
+
height: 36px !important;
|
|
1990
|
+
padding: 0 !important;
|
|
1991
|
+
border-radius: 50% !important;
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1994
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-mute-label {
|
|
1995
|
+
display: none !important;
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-mute-icon svg {
|
|
1999
|
+
width: 15px !important;
|
|
2000
|
+
height: 15px !important;
|
|
2001
|
+
}
|
|
2002
|
+
|
|
2003
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-hangup-btn {
|
|
2004
|
+
width: 36px !important;
|
|
2005
|
+
height: 36px !important;
|
|
2006
|
+
padding: 0 !important;
|
|
2007
|
+
border-radius: 50% !important;
|
|
2008
|
+
box-shadow: 0 2px 6px rgba(239, 68, 68, 0.25) !important;
|
|
2009
|
+
}
|
|
2010
|
+
|
|
2011
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-hangup-label {
|
|
2012
|
+
display: none !important;
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
.widget-panel.voice-only-panel #voice-active-overlay .voice-hangup-icon svg {
|
|
2016
|
+
width: 15px !important;
|
|
2017
|
+
height: 15px !important;
|
|
2018
|
+
}
|
|
2019
|
+
`,G={phone:`
|
|
2020
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2021
|
+
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
|
|
2022
|
+
</svg>
|
|
2023
|
+
`,close:`
|
|
2024
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2025
|
+
<line x1="18" y1="6" x2="6" y2="18"/>
|
|
2026
|
+
<line x1="6" y1="6" x2="18" y2="18"/>
|
|
2027
|
+
</svg>
|
|
2028
|
+
`,sessionContinue:`
|
|
2029
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2030
|
+
<polygon points="5 3 19 12 5 21 5 3"/>
|
|
2031
|
+
</svg>
|
|
2032
|
+
`,sessionRestart:`
|
|
2033
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2034
|
+
<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/>
|
|
2035
|
+
<path d="M3 3v5h5"/>
|
|
2036
|
+
</svg>
|
|
2037
|
+
`,mic:`
|
|
2038
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2039
|
+
<path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z"/>
|
|
2040
|
+
<path d="M19 10v2a7 7 0 0 1-14 0v-2"/>
|
|
2041
|
+
<line x1="12" y1="19" x2="12" y2="22"/>
|
|
2042
|
+
</svg>
|
|
2043
|
+
`,micOff:`
|
|
2044
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2045
|
+
<line x1="1" y1="1" x2="23" y2="23"/>
|
|
2046
|
+
<path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"/>
|
|
2047
|
+
<path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"/>
|
|
2048
|
+
<line x1="12" y1="19" x2="12" y2="23"/>
|
|
2049
|
+
</svg>
|
|
2050
|
+
`,send:`
|
|
2051
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2052
|
+
<line x1="22" y1="2" x2="11" y2="13"/>
|
|
2053
|
+
<polygon points="22 2 15 22 11 13 2 9 22 2"/>
|
|
2054
|
+
</svg>
|
|
2055
|
+
`,chat:`
|
|
2056
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2057
|
+
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
|
2058
|
+
</svg>
|
|
2059
|
+
`,audioLines:`
|
|
2060
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2061
|
+
<path d="M2 10v3"/>
|
|
2062
|
+
<path d="M6 6v11"/>
|
|
2063
|
+
<path d="M10 3v18"/>
|
|
2064
|
+
<path d="M14 8v7"/>
|
|
2065
|
+
<path d="M18 5v13"/>
|
|
2066
|
+
<path d="M22 10v3"/>
|
|
2067
|
+
</svg>
|
|
2068
|
+
`,minimize2:`
|
|
2069
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2070
|
+
<polyline points="4 14 10 14 10 20"/>
|
|
2071
|
+
<polyline points="20 10 14 10 14 4"/>
|
|
2072
|
+
<line x1="14" y1="10" x2="21" y2="3"/>
|
|
2073
|
+
<line x1="3" y1="21" x2="10" y2="14"/>
|
|
2074
|
+
</svg>
|
|
2075
|
+
`,voice_orb:`
|
|
2076
|
+
<div style="display: flex; align-items: center; justify-content: center; gap: 3px; height: 100%; width: 100%;">
|
|
2077
|
+
<div style="width: 3px; height: 10px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0s;"></div>
|
|
2078
|
+
<div style="width: 3px; height: 18px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.2s;"></div>
|
|
2079
|
+
<div style="width: 3px; height: 14px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.4s;"></div>
|
|
2080
|
+
<div style="width: 3px; height: 22px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.1s;"></div>
|
|
2081
|
+
<div style="width: 3px; height: 12px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.3s;"></div>
|
|
2082
|
+
</div>
|
|
2083
|
+
`},bs={automotive:`
|
|
2084
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2085
|
+
<path d="M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2"/>
|
|
2086
|
+
<circle cx="7" cy="17" r="2"/>
|
|
2087
|
+
<path d="M9 17h6"/>
|
|
2088
|
+
<circle cx="17" cy="17" r="2"/>
|
|
2089
|
+
</svg>
|
|
2090
|
+
`,education:`
|
|
2091
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2092
|
+
<path d="M22 10v6M2 10l10-5 10 5-10 5z"/>
|
|
2093
|
+
<path d="M6 12v5c3 3 9 3 12 0v-5"/>
|
|
2094
|
+
</svg>
|
|
2095
|
+
`,finance:`
|
|
2096
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2097
|
+
<line x1="3" y1="21" x2="21" y2="21"/>
|
|
2098
|
+
<line x1="6" y1="21" x2="6" y2="12"/>
|
|
2099
|
+
<line x1="18" y1="21" x2="18" y2="12"/>
|
|
2100
|
+
<line x1="6" y1="12" x2="18" y2="12"/>
|
|
2101
|
+
<path d="M5 6 L12 2 L19 6"/>
|
|
2102
|
+
<line x1="6" y1="6" x2="6" y2="12"/>
|
|
2103
|
+
<line x1="18" y1="6" x2="18" y2="12"/>
|
|
2104
|
+
<line x1="10" y1="21" x2="10" y2="12"/>
|
|
2105
|
+
<line x1="14" y1="21" x2="14" y2="12"/>
|
|
2106
|
+
</svg>
|
|
2107
|
+
`,fitness:`
|
|
2108
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2109
|
+
<path d="m6.5 6.5 11 11"/>
|
|
2110
|
+
<path d="m21 21-1-1"/>
|
|
2111
|
+
<path d="m3 3 1 1"/>
|
|
2112
|
+
<path d="m18 22 4-4"/>
|
|
2113
|
+
<path d="m2 6 4-4"/>
|
|
2114
|
+
<path d="m3 10 7-7"/>
|
|
2115
|
+
<path d="m14 21 7-7"/>
|
|
2116
|
+
</svg>
|
|
2117
|
+
`,food:`
|
|
2118
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2119
|
+
<path d="M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"/>
|
|
2120
|
+
<path d="M7 2v20"/>
|
|
2121
|
+
<path d="M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"/>
|
|
2122
|
+
</svg>
|
|
2123
|
+
`,government:`
|
|
2124
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2125
|
+
<rect x="4" y="2" width="16" height="20" rx="2" ry="2"/>
|
|
2126
|
+
<path d="M9 22v-4h6v4"/>
|
|
2127
|
+
<path d="M8 6h.01"/>
|
|
2128
|
+
<path d="M16 6h.01"/>
|
|
2129
|
+
<path d="M12 6h.01"/>
|
|
2130
|
+
<path d="M12 10h.01"/>
|
|
2131
|
+
<path d="M12 14h.01"/>
|
|
2132
|
+
<path d="M16 10h.01"/>
|
|
2133
|
+
<path d="M16 14h.01"/>
|
|
2134
|
+
<path d="M8 10h.01"/>
|
|
2135
|
+
<path d="M8 14h.01"/>
|
|
2136
|
+
</svg>
|
|
2137
|
+
`,healthcare:`
|
|
2138
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2139
|
+
<path d="M22 12h-4l-3 9L9 3l-3 9H2"/>
|
|
2140
|
+
</svg>
|
|
2141
|
+
`,travel:`
|
|
2142
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2143
|
+
<path d="M12 2a5 5 0 0 1 5 5c0 4.5-9 13-9 13S3 11.5 3 7a5 5 0 0 1 10 0Z"/>
|
|
2144
|
+
<circle cx="12" cy="7" r="2"/>
|
|
2145
|
+
</svg>
|
|
2146
|
+
`,legal:`
|
|
2147
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2148
|
+
<path d="m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1z"/>
|
|
2149
|
+
<path d="m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1z"/>
|
|
2150
|
+
<path d="M7 21h10"/>
|
|
2151
|
+
<path d="M12 3v18"/>
|
|
2152
|
+
<path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"/>
|
|
2153
|
+
</svg>
|
|
2154
|
+
`,manufacturing:`
|
|
2155
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2156
|
+
<path d="M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"/>
|
|
2157
|
+
<path d="M17 18h1"/>
|
|
2158
|
+
<path d="M12 18h1"/>
|
|
2159
|
+
<path d="M7 18h1"/>
|
|
2160
|
+
</svg>
|
|
2161
|
+
`,media:`
|
|
2162
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2163
|
+
<rect width="20" height="20" x="2" y="2" rx="2.18" ry="2.18"/>
|
|
2164
|
+
<line x1="7" x2="7" y1="2" y2="22"/>
|
|
2165
|
+
<line x1="17" x2="17" y1="2" y2="22"/>
|
|
2166
|
+
<line x1="2" x2="22" y1="12" y2="12"/>
|
|
2167
|
+
<line x1="2" x2="7" y1="7" y2="7"/>
|
|
2168
|
+
<line x1="2" x2="7" y1="17" y2="17"/>
|
|
2169
|
+
<line x1="17" x2="22" y1="17" y2="17"/>
|
|
2170
|
+
<line x1="17" x2="22" y1="7" y2="7"/>
|
|
2171
|
+
</svg>
|
|
2172
|
+
`,nonprofit:`
|
|
2173
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2174
|
+
<path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/>
|
|
2175
|
+
</svg>
|
|
2176
|
+
`,professional:`
|
|
2177
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2178
|
+
<rect width="20" height="14" x="2" y="7" rx="2" ry="2"/>
|
|
2179
|
+
<path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/>
|
|
2180
|
+
</svg>
|
|
2181
|
+
`,realestate:`
|
|
2182
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2183
|
+
<path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
|
|
2184
|
+
<polyline points="9 22 9 12 15 12 15 22"/>
|
|
2185
|
+
</svg>
|
|
2186
|
+
`,retail:`
|
|
2187
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2188
|
+
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z"/>
|
|
2189
|
+
<path d="M3 6h18"/>
|
|
2190
|
+
<path d="M16 10a4 4 0 0 1-8 0"/>
|
|
2191
|
+
</svg>
|
|
2192
|
+
`,technology:`
|
|
2193
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2194
|
+
<rect width="18" height="12" x="3" y="4" rx="2" ry="2"/>
|
|
2195
|
+
<line x1="2" x2="22" y1="20" y2="20"/>
|
|
2196
|
+
</svg>
|
|
2197
|
+
`},yt={...bs,default_chat:G.chat,default_voice:G.mic,voice_orb:G.voice_orb,male:`<img src="${Cs}" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;" />`,female:`<img src="${ys}" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;" />`};Object.entries(bs).forEach(([n,A])=>{yt[`male_${n} `]=`
|
|
2198
|
+
< div style = "position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: white; border-radius: 50%;" >
|
|
2199
|
+
<div style="width: 60%; height: 60%; color: #000000;" >
|
|
2200
|
+
${A}
|
|
2201
|
+
</div>
|
|
2202
|
+
< div style = "
|
|
2203
|
+
position: absolute;
|
|
2204
|
+
bottom: -2px;
|
|
2205
|
+
right: -2px;
|
|
2206
|
+
width: 28px;
|
|
2207
|
+
height: 28px;
|
|
2208
|
+
background: white;
|
|
2209
|
+
border - radius: 50 %;
|
|
2210
|
+
border: 2px solid white;
|
|
2211
|
+
box - shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
2212
|
+
overflow: hidden;
|
|
2213
|
+
">
|
|
2214
|
+
< img src = "${Cs}" style = "width: 100%; height: 100%; object-fit: cover;" />
|
|
2215
|
+
</div>
|
|
2216
|
+
</div>
|
|
2217
|
+
`,yt[`female_${n} `]=`
|
|
2218
|
+
< div style = "position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: white; border-radius: 50%;" >
|
|
2219
|
+
<div style="width: 60%; height: 60%; color: #000000;" >
|
|
2220
|
+
${A}
|
|
2221
|
+
</div>
|
|
2222
|
+
< div style = "
|
|
2223
|
+
position: absolute;
|
|
2224
|
+
bottom: -2px;
|
|
2225
|
+
right: -2px;
|
|
2226
|
+
width: 28px;
|
|
2227
|
+
height: 28px;
|
|
2228
|
+
background: white;
|
|
2229
|
+
border - radius: 50 %;
|
|
2230
|
+
border: 2px solid white;
|
|
2231
|
+
box - shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
2232
|
+
overflow: hidden;
|
|
2233
|
+
">
|
|
2234
|
+
< img src = "${ys}" style = "width: 100%; height: 100%; object-fit: cover;" />
|
|
2235
|
+
</div>
|
|
2236
|
+
</div>
|
|
2237
|
+
`});class Qs{constructor(A,e,t,r=G.chat){p(this,"element");p(this,"iconContainer");p(this,"posX",0);p(this,"posY",0);p(this,"isDragging",!1);p(this,"startX",0);p(this,"startY",0);p(this,"currentX",0);p(this,"currentY",0);p(this,"hasMoved",!1);this.onClick=A,this.onMove=e,this.onMoveEnd=t,this.element=document.createElement("button"),this.element.className="widget-fab",this.element.onpointerdown=this.dragStart.bind(this),this.iconContainer=document.createElement("div"),this.iconContainer.style.cssText="display:flex; align-items:center; justify-content:center; width:100%; height:100%;",this.iconContainer.innerHTML=r,this.element.appendChild(this.iconContainer)}dragStart(A){if(A.button!==0)return;const e=this.element.getBoundingClientRect();this.isDragging=!0,this.hasMoved=!1,this.startX=A.clientX,this.startY=A.clientY,this.currentX=e.left,this.currentY=e.top,this.element.setPointerCapture(A.pointerId),this.element.style.transition="none",this.element.style.cursor="grabbing";const t=s=>{var a;if(!this.isDragging)return;const i=s.clientX-this.startX,o=s.clientY-this.startY;(Math.abs(i)>5||Math.abs(o)>5)&&(this.hasMoved=!0),this.hasMoved&&(this.posX=this.currentX+i,this.posY=this.currentY+o,this.posX=Math.max(0,Math.min(this.posX,window.innerWidth-this.element.offsetWidth)),this.posY=Math.max(0,Math.min(this.posY,window.innerHeight-this.element.offsetHeight)),this.element.style.left=`${this.posX}px`,this.element.style.top=`${this.posY}px`,this.element.style.right="auto",this.element.style.bottom="auto",(a=this.onMove)==null||a.call(this,this.posX,this.posY))},r=s=>{var i;this.isDragging=!1,this.element.hasPointerCapture(s.pointerId)&&this.element.releasePointerCapture(s.pointerId),this.element.style.transition="all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",this.element.style.cursor="pointer",window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",r),this.hasMoved?(i=this.onMoveEnd)==null||i.call(this,this.posX,this.posY):this.onClick()};window.addEventListener("pointermove",t),window.addEventListener("pointerup",r)}getElement(){return this.element}setIcon(A){this.iconContainer.innerHTML=A}setPosition(A){this.element.style.cssText="",A.split(";").filter(t=>t.trim()).forEach(t=>{const[r,s]=t.split(":").map(i=>i.trim());r&&s&&(this.element.style[r]=s)}),this.element.style.position="fixed",this.element.style.zIndex="2147483647"}updateCoordinates(A,e){this.element.style.left=`${A}px`,this.element.style.top=`${e}px`,this.element.style.right="auto",this.element.style.bottom="auto"}static get styles(){return`
|
|
2238
|
+
.widget-fab {
|
|
2239
|
+
position: fixed;
|
|
2240
|
+
z-index: 9999;
|
|
2241
|
+
width: 60px;
|
|
2242
|
+
height: 60px;
|
|
2243
|
+
border-radius: 50%;
|
|
2244
|
+
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%);
|
|
2245
|
+
border: none;
|
|
2246
|
+
cursor: pointer;
|
|
2247
|
+
display: flex;
|
|
2248
|
+
align-items: center;
|
|
2249
|
+
justify-content: center;
|
|
2250
|
+
box-shadow: var(--shadow);
|
|
2251
|
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
2252
|
+
animation: fadeInScale 0.4s ease-out;
|
|
2253
|
+
touch-action: none;
|
|
2254
|
+
padding: 0;
|
|
2255
|
+
margin: 0;
|
|
2256
|
+
}
|
|
2257
|
+
|
|
2258
|
+
.widget-fab:hover {
|
|
2259
|
+
transform: scale(1.05);
|
|
2260
|
+
box-shadow: var(--shadow-lg);
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2263
|
+
.widget-fab:active {
|
|
2264
|
+
transform: scale(0.95);
|
|
2265
|
+
}
|
|
2266
|
+
|
|
2267
|
+
.widget-fab svg {
|
|
2268
|
+
width: 26px;
|
|
2269
|
+
height: 26px;
|
|
2270
|
+
color: white;
|
|
2271
|
+
}
|
|
2272
|
+
`}}class xs{constructor(A,e="Assistant",t){p(this,"element");p(this,"header");p(this,"titleElement");p(this,"contentArea");p(this,"collapseBtn",null);p(this,"closeBtn");this.onClose=A,this.title=e,this.onMinimize=t,this.element=document.createElement("div"),this.element.className="widget-panel hidden",this.header=document.createElement("div"),this.header.className="widget-header",this.titleElement=document.createElement("h3"),this.titleElement.className="widget-title",this.titleElement.textContent=this.title,this.header.appendChild(this.titleElement);const r=document.createElement("div");r.style.display="flex",r.style.alignItems="center",r.style.gap="8px",r.style.marginLeft="auto",this.onMinimize&&(this.collapseBtn=document.createElement("button"),this.collapseBtn.className="close-btn collapse-panel-btn",this.collapseBtn.innerHTML=G.minimize2,this.collapseBtn.setAttribute("aria-label","Minimize to voice pill"),this.collapseBtn.onclick=()=>this.onMinimize(),r.appendChild(this.collapseBtn)),this.closeBtn=document.createElement("button"),this.closeBtn.className="close-btn",this.closeBtn.innerHTML=G.close,this.closeBtn.setAttribute("aria-label","Close widget"),this.closeBtn.onclick=this.onClose,r.appendChild(this.closeBtn),this.header.appendChild(r),this.contentArea=document.createElement("div"),this.contentArea.className="widget-body",this.contentArea.style.flex="1",this.contentArea.style.display="flex",this.contentArea.style.flexDirection="column",this.contentArea.style.overflow="hidden",this.contentArea.style.padding="0",this.element.appendChild(this.header),this.element.appendChild(this.contentArea)}getElement(){return this.element}setContent(A){this.contentArea.innerHTML="",this.contentArea.appendChild(A)}addToContent(A){this.contentArea.appendChild(A)}setTitle(A){this.titleElement.textContent=A}open(A){this.element.classList.remove("hidden"),this.updatePosition(A)}updatePosition(A){this.element.style.top="auto",this.element.style.bottom="auto",this.element.style.left="auto",this.element.style.right="auto",Object.assign(this.element.style,A),this.element.style.position="fixed",this.element.style.zIndex="2147483647"}close(){this.element.classList.add("hidden")}static get styles(){return`
|
|
2273
|
+
/* Panel Styles handled in widget.css.ts mostly, specific overrides here */
|
|
2274
|
+
`}}class Es{constructor(A,e="#000000",t="#111111",r){p(this,"element");p(this,"contentContainer");p(this,"orbWrapper");p(this,"connectingRing");p(this,"errorRing");p(this,"waveLayers",[]);p(this,"outerGlow");p(this,"wave1");p(this,"wave2");p(this,"wave3");p(this,"centerIcon");p(this,"connectingOrb");p(this,"statusArea");p(this,"connectingLabel");p(this,"connectedBadge");p(this,"connectedStatusBars");p(this,"connectedStatusText");p(this,"errorLabel");p(this,"giveItAMinuteLabel");p(this,"retryBtn");p(this,"timerEl");p(this,"transcriptionEl");p(this,"hangupBtn");p(this,"muteBtn");p(this,"onToggleMute");p(this,"videoContainer");p(this,"videoElement");p(this,"prepareBadge");p(this,"statusBadge");p(this,"startTime",null);p(this,"timerInterval",null);p(this,"isAvatarMode",!1);p(this,"callStartedAt",null);p(this,"liveActivity","listening");this.onHangup=A,this.primaryColor=e,this.secondaryColor=t,this.onCallEnded=r,this.element=document.createElement("div"),this.element.id="voice-active-overlay",this.element.style.setProperty("--voice-primary",this.primaryColor),this.element.style.setProperty("--voice-secondary",this.secondaryColor),this.contentContainer=document.createElement("div"),this.contentContainer.className="voice-content-container",this.videoContainer=document.createElement("div"),this.videoContainer.className="voice-video-container",this.videoContainer.style.cssText=`
|
|
2275
|
+
display: none; position: relative; width: 100%; max-width: 260px;
|
|
2276
|
+
aspect-ratio: 1/1; margin-bottom: 16px; overflow: hidden;
|
|
2277
|
+
border-radius: 16px;
|
|
2278
|
+
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25), 0 0 0 1px rgba(17,24,39,0.05);
|
|
2279
|
+
`,this.videoElement=document.createElement("video"),this.videoElement.style.cssText="width:100%; height:100%; object-fit:cover; background:black;",this.videoElement.autoplay=!0,this.videoElement.playsInline=!0,this.videoElement.muted=!0,this.videoContainer.appendChild(this.videoElement),this.contentContainer.appendChild(this.videoContainer),this.orbWrapper=document.createElement("div"),this.orbWrapper.className="voice-orb-wrapper",this.connectingRing=document.createElement("div"),this.connectingRing.className="voice-orb-connecting-ring",this.orbWrapper.appendChild(this.connectingRing),this.errorRing=document.createElement("div"),this.errorRing.className="voice-orb-error-ring",this.orbWrapper.appendChild(this.errorRing),this.outerGlow=document.createElement("div"),this.outerGlow.className="voice-orb-ring-outer",this.orbWrapper.appendChild(this.outerGlow),this.wave1=document.createElement("div"),this.wave1.className="voice-orb-ring-mid",this.orbWrapper.appendChild(this.wave1),this.wave2=document.createElement("div"),this.wave2.className="voice-orb-disc",this.orbWrapper.appendChild(this.wave2),this.wave3=document.createElement("div"),this.wave3.style.display="none";const s=document.createElement("div");s.className="voice-orb-shine",s.id="voice-shine",this.orbWrapper.appendChild(s),this.waveLayers=[this.outerGlow,this.wave1,this.wave2,s],this.connectingOrb=document.createElement("div"),this.connectingOrb.className="voice-connecting-orb",this.connectingOrb.innerHTML=G.voice_orb,this.orbWrapper.appendChild(this.connectingOrb),this.centerIcon=document.createElement("div"),this.centerIcon.className="voice-orb-center",this.centerIcon.innerHTML=G.audioLines,this.orbWrapper.appendChild(this.centerIcon),this.contentContainer.appendChild(this.orbWrapper),this.statusArea=document.createElement("div"),this.statusArea.className="voice-status-area",this.connectingLabel=document.createElement("p"),this.connectingLabel.className="voice-connecting-label",this.connectingLabel.textContent="Connecting…",this.statusArea.appendChild(this.connectingLabel),this.giveItAMinuteLabel=document.createElement("p"),this.giveItAMinuteLabel.className="voice-connecting-hint",this.giveItAMinuteLabel.textContent="This may take a moment",this.statusArea.appendChild(this.giveItAMinuteLabel),this.connectedBadge=document.createElement("div"),this.connectedBadge.className="voice-connected-badge is-listening",this.connectedStatusBars=document.createElement("span"),this.connectedStatusBars.className="voice-live-status-bars listening",this.connectedStatusBars.innerHTML="<i></i><i></i><i></i>",this.connectedStatusBars.setAttribute("aria-hidden","true"),this.connectedStatusText=document.createElement("span"),this.connectedStatusText.className="voice-live-status-text",this.connectedStatusText.textContent="Listening…",this.connectedBadge.appendChild(this.connectedStatusBars),this.connectedBadge.appendChild(this.connectedStatusText),this.statusArea.appendChild(this.connectedBadge),this.timerEl=document.createElement("div"),this.timerEl.className="voice-timer",this.timerEl.textContent="00:00",this.statusArea.appendChild(this.timerEl),this.errorLabel=document.createElement("p"),this.errorLabel.className="voice-error-label",this.errorLabel.textContent="Connection failed",this.statusArea.appendChild(this.errorLabel),this.retryBtn=document.createElement("button"),this.retryBtn.className="voice-retry-btn",this.retryBtn.textContent="Retry",this.statusArea.appendChild(this.retryBtn),this.prepareBadge=document.createElement("p"),this.prepareBadge.style.cssText="display:none; font-size:11px; font-weight:600; color:#a855f7; text-transform:uppercase; letter-spacing:0.1em; margin:0; animation:pulse 1.5s infinite;",this.statusArea.appendChild(this.prepareBadge),this.statusBadge=document.createElement("div"),this.statusBadge.style.cssText="display:none; align-items:center; gap:8px; padding:5px 16px; background:#f0fdf4; border-radius:9999px; border:1px solid #dcfce7;";const i=document.createElement("div");i.style.cssText="width:8px; height:8px; border-radius:50%; background:#22c55e; flex-shrink:0; padding:0 !important; animation:pulse 2s infinite;";const o=document.createElement("span");o.textContent="Connected",o.style.cssText="font-size:11px; font-weight:600; color:#15803d; text-transform:uppercase; letter-spacing:0.1em;",this.statusBadge.appendChild(i),this.statusBadge.appendChild(o),this.statusArea.appendChild(this.statusBadge),this.contentContainer.appendChild(this.statusArea),this.transcriptionEl=document.createElement("div"),this.transcriptionEl.className="voice-transcription",this.contentContainer.appendChild(this.transcriptionEl),this.element.appendChild(this.contentContainer);const a=document.createElement("div");a.className="voice-footer",this.muteBtn=document.createElement("button"),this.muteBtn.type="button",this.muteBtn.className="voice-mute-btn",this.muteBtn.setAttribute("aria-label","Mute microphone"),this.muteBtn.disabled=!0,this.muteBtn.innerHTML=`<span class="voice-mute-icon">${G.mic}</span><span class="voice-mute-label">Mute</span>`,this.muteBtn.onclick=()=>{this.onToggleMute&&this.setMicMuted(this.onToggleMute())},this.hangupBtn=document.createElement("button"),this.hangupBtn.className="voice-hangup-btn",this.hangupBtn.setAttribute("aria-label","End call"),this.hangupBtn.innerHTML=`
|
|
2280
|
+
<span class="voice-hangup-icon">
|
|
2281
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2282
|
+
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.6 1.18h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.77a16 16 0 0 0 6.29 6.29l.87-.87a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"/>
|
|
2283
|
+
</svg>
|
|
2284
|
+
</span>
|
|
2285
|
+
<span class="voice-hangup-label">End call</span>
|
|
2286
|
+
`,this.hangupBtn.onclick=()=>{const l=this.callStartedAt?Date.now()-this.callStartedAt:0,c=this.callStartedAt??Date.now();this.onCallEnded&&l>0&&this.onCallEnded(l,c),this.onHangup()},a.appendChild(this.muteBtn),a.appendChild(this.hangupBtn),this.element.appendChild(a)}bindMicMuteToggle(A){this.onToggleMute=A}setMicMuted(A){this.muteBtn.classList.toggle("is-muted",A),this.muteBtn.setAttribute("aria-label",A?"Unmute microphone":"Mute microphone");const e=this.muteBtn.querySelector(".voice-mute-icon");e&&(e.innerHTML=A?G.micOff:G.mic);const t=this.muteBtn.querySelector(".voice-mute-label");t&&(t.textContent=A?"Unmute":"Mute")}setMicMuteEnabled(A){this.muteBtn.disabled=!A}applyCenterIcon(A){this.centerIcon.classList.remove("is-error"),A==="error"&&this.centerIcon.classList.add("is-error")}getElement(){return this.element}setMode(A){this.isAvatarMode=A==="avatar"}setVideoTrack(A){if(this.isAvatarMode=!0,A.kind==="video"&&this.videoElement){const e=new MediaStream([A]);this.videoElement.srcObject=e,this.videoContainer.style.display="block",this.orbWrapper.style.display="none",this.connectingLabel.style.display="none",this.timerEl.style.display="none",this.videoElement.onplaying=()=>{this.prepareBadge.style.display="none",this.statusBadge.style.display="flex"},this.videoElement.play().catch(t=>{})}}setStatus(A,e){A==="connecting"?(this.muteBtn.disabled=!0,this.connectingOrb.style.display="flex",this.centerIcon.style.display="none",this.isAvatarMode?(this.videoContainer.style.display="block",this.orbWrapper.style.display="none",this.prepareBadge.textContent="CONNECTING...",this.prepareBadge.style.display="block",this.statusBadge.style.display="none",this.connectingLabel.style.display="none"):(this.orbWrapper.style.display="flex",this.videoContainer.style.display="none",this.connectingRing.style.display="none",this.errorRing.style.display="none",this.waveLayers.forEach(t=>t.style.display="none"),this.connectingLabel.style.display="block",this.giveItAMinuteLabel.style.display="block",this.connectedBadge.style.display="none",this.timerEl.style.display="none",this.errorLabel.style.display="none",this.retryBtn.style.display="none"),this.stopTimer()):A==="connected"?(this.muteBtn.disabled=!1,this.connectingOrb.style.display="none",this.centerIcon.style.display="flex",this.applyCenterIcon("audio"),this.isAvatarMode?this.videoElement&&!this.videoElement.paused&&this.videoElement.readyState>2?(this.prepareBadge.style.display="none",this.statusBadge.style.display="flex"):(this.prepareBadge.textContent="AGENT IS ON THE WAY...",this.prepareBadge.style.display="block",setTimeout(()=>{this.prepareBadge.style.display!=="none"&&(this.prepareBadge.style.display="none",this.statusBadge.style.display="flex")},5e3)):(this.connectingRing.style.display="none",this.errorRing.style.display="none",this.waveLayers.forEach(t=>{t.style.display="block"}),this.connectingLabel.style.display="none",this.giveItAMinuteLabel.style.display="none",this.connectedBadge.style.display="flex",this.setActivity("listening"),this.timerEl.style.display="block",this.errorLabel.style.display="none",this.retryBtn.style.display="none",this.startTimer())):A==="error"&&(this.muteBtn.disabled=!0,this.connectingOrb.style.display="none",this.centerIcon.style.display="flex",this.applyCenterIcon("error"),this.connectingRing.style.display="none",this.errorRing.style.display="block",this.waveLayers.forEach(t=>t.style.display="none"),this.connectingLabel.style.display="none",this.giveItAMinuteLabel.style.display="none",this.connectedBadge.style.display="none",this.timerEl.style.display="none",this.errorLabel.textContent=e||"Connection failed",this.errorLabel.style.display="block",this.retryBtn.style.display="block",this.stopTimer())}setActivity(A){this.liveActivity!==A&&(this.liveActivity=A,this.connectedBadge.classList.remove("is-listening","is-speaking"),this.connectedBadge.classList.add(A==="speaking"?"is-speaking":"is-listening"),this.connectedStatusBars.classList.remove("listening","speaking"),this.connectedStatusBars.classList.add(A),this.connectedStatusText.textContent=A==="speaking"?"Speaking…":"Listening…")}setTranscription(A,e){this.transcriptionEl.textContent=`"${A}"`,this.transcriptionEl.style.color=e?"#1f2937":"#9ca3af",this.transcriptionEl.style.fontStyle=e?"normal":"italic"}show(){this.callStartedAt=Date.now(),this.element.style.display="flex",this.setStatus("connecting")}hide(){this.element.style.display="none",this.reset()}reset(){this.videoElement&&(this.videoElement.srcObject=null),this.isAvatarMode=!1,this.callStartedAt=null,this.stopTimer(),this.transcriptionEl.textContent="",this.videoContainer.style.display="none",this.orbWrapper.style.display="flex",this.connectingOrb.style.display="none",this.centerIcon.style.display="flex",this.connectingRing.style.display="none",this.errorRing.style.display="none",this.waveLayers.forEach(A=>A.style.display="none"),this.connectingLabel.style.display="none",this.connectedBadge.style.display="none",this.timerEl.style.display="none",this.errorLabel.style.display="none",this.retryBtn.style.display="none",this.prepareBadge.style.display="none",this.statusBadge.style.display="none",this.giveItAMinuteLabel.style.display="none",this.muteBtn.disabled=!0,this.setMicMuted(!1),this.applyCenterIcon("audio")}startTimer(){this.timerInterval&&clearInterval(this.timerInterval),this.startTime=Date.now(),this.timerEl.textContent="00:00",this.timerInterval=setInterval(()=>{if(!this.startTime)return;const A=Math.floor((Date.now()-this.startTime)/1e3),e=Math.floor(A/60).toString().padStart(2,"0"),t=(A%60).toString().padStart(2,"0");this.timerEl.textContent=`${e}:${t}`},1e3)}stopTimer(){this.timerInterval&&(clearInterval(this.timerInterval),this.timerInterval=null),this.timerEl.textContent=""}setFullScreen(A){A?(this.videoContainer.style.position="absolute",this.videoContainer.style.top="0",this.videoContainer.style.left="0",this.videoContainer.style.width="100%",this.videoContainer.style.height="100%",this.videoContainer.style.maxWidth="none",this.videoContainer.style.borderRadius="0",this.videoContainer.style.margin="0",this.videoContainer.style.zIndex="0"):(this.videoContainer.style.position="relative",this.videoContainer.style.width="100%",this.videoContainer.style.maxWidth="260px",this.videoContainer.style.height="auto",this.videoContainer.style.aspectRatio="1/1",this.videoContainer.style.borderRadius="16px",this.videoContainer.style.marginBottom="16px")}}class Us{constructor(A){p(this,"element");p(this,"messageContainer");p(this,"inputArea");p(this,"input");p(this,"sendBtn");p(this,"typingIndicator",null);p(this,"resolveBar",null);this.onSend=A,this.element=document.createElement("div"),this.element.style.display="flex",this.element.style.flexDirection="column",this.element.style.flex="1",this.element.style.overflow="hidden",this.element.style.minHeight="0",this.messageContainer=document.createElement("div"),this.messageContainer.className="chat-messages",this.inputArea=document.createElement("div"),this.inputArea.className="chat-input-area",this.input=document.createElement("input"),this.input.className="chat-input",this.input.placeholder="Type a message...",this.input.addEventListener("keypress",t=>{t.key==="Enter"&&this.handleSend()}),this.sendBtn=document.createElement("button"),this.sendBtn.className="chat-send-btn",this.sendBtn.innerHTML=G.send,this.sendBtn.onclick=()=>this.handleSend(),this.inputArea.appendChild(this.input),this.inputArea.appendChild(this.sendBtn);const e=document.createElement("div");e.className="branding-footer",e.innerHTML="Technology Powered by <b>Vanira AI</b>",this.element.appendChild(this.messageContainer),this.element.appendChild(this.inputArea),this.element.appendChild(e)}getElement(){return this.element}formatTime(A=new Date){return A.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}addMessage(A,e,t){const r=document.createElement("div");r.style.cssText=`
|
|
2287
|
+
display: flex;
|
|
2288
|
+
flex-direction: column;
|
|
2289
|
+
align-items: ${A==="user"?"flex-end":"flex-start"};
|
|
2290
|
+
margin-bottom: 2px;
|
|
2291
|
+
`;const s=document.createElement("div");s.className=`chat-message ${A}`,s.textContent=e,r.appendChild(s);const i=document.createElement("span");i.style.cssText=`
|
|
2292
|
+
font-size: 10px;
|
|
2293
|
+
color: #9ca3af;
|
|
2294
|
+
margin: 2px 4px 6px;
|
|
2295
|
+
display: block;
|
|
2296
|
+
`,i.textContent=this.formatTime(t?new Date(t):void 0),r.appendChild(i),this.messageContainer.appendChild(r),this.scrollToBottom()}updateLastAssistantMessage(A){const e=this.messageContainer.lastElementChild;if(e){const t=e.querySelector(".chat-message.assistant");if(t){t.textContent=A,this.scrollToBottom();return}}this.addMessage("assistant",A)}addButtons(A){const e=document.createElement("div");e.className="chat-buttons-container",e.style.display="flex",e.style.flexWrap="wrap",e.style.gap="8px",e.style.marginTop="8px",e.style.marginBottom="12px",e.style.justifyContent="flex-start",A.forEach(t=>{const r=document.createElement("button");r.className="chat-suggestion-chip",r.textContent=t.title,r.style.padding="6px 12px",r.style.borderRadius="16px",r.style.border="1px solid #e5e7eb",r.style.backgroundColor="white",r.style.fontSize="12px",r.style.color="#4b5563",r.style.cursor="pointer",r.style.transition="all 0.2s",r.onmouseenter=()=>{r.style.backgroundColor="#f3f4f6",r.style.borderColor="#d1d5db"},r.onmouseleave=()=>{r.style.backgroundColor="white",r.style.borderColor="#e5e7eb"},r.onclick=()=>{this.handleSend(t.payload)},e.appendChild(r)}),this.messageContainer.appendChild(e),this.scrollToBottom()}handleSend(A){const e=A||this.input.value.trim();e&&(this.onSend(e),A||(this.input.value=""))}setTyping(A){if(this.typingIndicator&&(this.typingIndicator.remove(),this.typingIndicator=null),A){this.typingIndicator=document.createElement("div"),this.typingIndicator.className="typing-indicator";for(let e=0;e<3;e++){const t=document.createElement("div");t.className="typing-dot",this.typingIndicator.appendChild(t)}this.messageContainer.appendChild(this.typingIndicator),this.scrollToBottom()}}addCallRecord(A,e=Date.now()){const t=Math.floor(A/6e4),r=Math.floor(A%6e4/1e3),s=t>0?`${t}m ${r}s`:`${r}s`,i=document.createElement("div");i.dataset.callTimestamp=String(e),i.style.cssText=`
|
|
2297
|
+
display: flex; justify-content: center;
|
|
2298
|
+
margin: 10px 16px;
|
|
2299
|
+
`,i.innerHTML=`
|
|
2300
|
+
<div style="
|
|
2301
|
+
display: flex; align-items: center; gap: 8px;
|
|
2302
|
+
background: #f3f4f6; border: 1px solid #e5e7eb;
|
|
2303
|
+
border-radius: 12px; padding: 8px 14px;
|
|
2304
|
+
font-size: 12px; color: #6b7280;
|
|
2305
|
+
max-width: 210px; width: fit-content;
|
|
2306
|
+
">
|
|
2307
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="#9ca3af" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2308
|
+
<rect x="2" y="9" width="4" height="12" rx="2"/>
|
|
2309
|
+
<rect x="9" y="5" width="4" height="16" rx="2"/>
|
|
2310
|
+
<rect x="16" y="2" width="4" height="20" rx="2"/>
|
|
2311
|
+
</svg>
|
|
2312
|
+
<span>
|
|
2313
|
+
<span style="font-weight:500; color:#374151;">Voice call ended</span>
|
|
2314
|
+
<span style="margin-left:6px; color:#9ca3af;">·</span>
|
|
2315
|
+
<span style="margin-left:6px;">${s}</span>
|
|
2316
|
+
</span>
|
|
2317
|
+
</div>
|
|
2318
|
+
`,this.messageContainer.appendChild(i),this.scrollToBottom()}clearMessages(){this.messageContainer.innerHTML=""}setResolveCallback(A){this.resolveBar&&this.resolveBar.remove(),this.resolveBar=document.createElement("div"),this.resolveBar.className="chat-resolve-bar";const e=document.createElement("button");e.className="chat-resolve-link",e.textContent="Mark as resolved, start new",e.onclick=()=>{confirm("Are you sure you want to mark this conversation as resolved and start fresh?")&&A()},this.resolveBar.appendChild(e),this.element.insertBefore(this.resolveBar,this.inputArea)}scrollToBottom(){this.messageContainer.scrollTop=this.messageContainer.scrollHeight}}class cl{constructor(A){p(this,"element");p(this,"videoElement");p(this,"placeholderContainer");this.element=document.createElement("div"),this.element.className="avatar-container",this.element.style.position="relative",this.element.style.width="100%",this.element.style.height="100%",this.element.style.background="#ffffff",this.element.style.borderRadius="16px",this.element.style.overflow="hidden",this.placeholderContainer=document.createElement("div"),this.placeholderContainer.style.width="100%",this.placeholderContainer.style.height="100%",this.placeholderContainer.style.display="flex",this.placeholderContainer.style.alignItems="center",this.placeholderContainer.style.justifyContent="center";const e=A||"https://www.simli.com/jenna.mp4",t=e.endsWith(".mp4")||e.endsWith(".webm");let r;if(t){const s=document.createElement("video");s.src=e,s.muted=!0,s.loop=!0,s.autoplay=!0,s.playsInline=!0,r=s}else{const s=document.createElement("img");s.src=e,r=s}r.style.width="140px",r.style.height="140px",r.style.borderRadius="50%",r.style.objectFit="cover",r.style.backgroundColor="#f3f4f6",this.placeholderContainer.appendChild(r),this.element.appendChild(this.placeholderContainer),this.videoElement=document.createElement("video"),this.videoElement.className="avatar-video",this.videoElement.autoplay=!0,this.videoElement.playsInline=!0,this.videoElement.muted=!0,this.videoElement.style.display="none",this.element.appendChild(this.videoElement)}getElement(){return this.element}setStream(A){this.videoElement.srcObject=A,this.videoElement.style.display="block",this.placeholderContainer.style.display="none"}}class dl{constructor(A,e){p(this,"element");p(this,"showSessionSelector",!1);this.onClick=A,this.agentId=e,this.element=document.createElement("div"),this.element.className="voice-mode-container";const t=this.agentId?fs(this.agentId):typeof window<"u"&&!!((window.sessionStorage.getItem("vanira_prospect_id")||window.localStorage.getItem("vanira_prospect_id"))&&(window.sessionStorage.getItem("vanira_latest_call_id")||window.localStorage.getItem("vanira_latest_call_id")));this.render(t)}doodleSquiggle(A){return`
|
|
2319
|
+
<svg class="voice-doodle-squiggle ${A}" viewBox="0 0 48 24" fill="none" aria-hidden="true">
|
|
2320
|
+
<path d="M3 14C10 4 18 20 26 10C32 4 38 8 45 12" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/>
|
|
2321
|
+
</svg>
|
|
2322
|
+
`}render(A){this.element.innerHTML=`
|
|
2323
|
+
<div class="voice-idle-stack">
|
|
2324
|
+
<div class="voice-doodle-stage">
|
|
2325
|
+
${this.doodleSquiggle("voice-doodle-squiggle-1")}
|
|
2326
|
+
${this.doodleSquiggle("voice-doodle-squiggle-2")}
|
|
2327
|
+
<span class="voice-doodle-spark voice-doodle-spark-1" aria-hidden="true">✦</span>
|
|
2328
|
+
<span class="voice-doodle-spark voice-doodle-spark-2" aria-hidden="true">✧</span>
|
|
2329
|
+
<div class="central-orb-container">
|
|
2330
|
+
<div class="voice-doodle-ring voice-doodle-ring-a" aria-hidden="true"></div>
|
|
2331
|
+
<div class="voice-doodle-ring voice-doodle-ring-b" aria-hidden="true"></div>
|
|
2332
|
+
<div class="central-orb idle voice-doodle-tap">
|
|
2333
|
+
<span class="voice-doodle-emoji">👋</span>
|
|
2334
|
+
</div>
|
|
2335
|
+
</div>
|
|
2336
|
+
</div>
|
|
2337
|
+
<div class="voice-status-text voice-doodle-title">Tap to speak</div>
|
|
2338
|
+
<div class="voice-status-subtext">Start a conversation</div>
|
|
2339
|
+
<div class="session-selector-container" style="display: none; opacity: 0; transition: opacity 0.3s ease;">
|
|
2340
|
+
<div class="session-option active" data-behavior="continue">
|
|
2341
|
+
<span class="session-icon" aria-hidden="true">${G.sessionContinue}</span>
|
|
2342
|
+
<span class="session-title">Continue</span>
|
|
2343
|
+
</div>
|
|
2344
|
+
<div class="session-option" data-behavior="new">
|
|
2345
|
+
<span class="session-icon" aria-hidden="true">${G.sessionRestart}</span>
|
|
2346
|
+
<span class="session-title">Restart</span>
|
|
2347
|
+
</div>
|
|
2348
|
+
</div>
|
|
2349
|
+
</div>
|
|
2350
|
+
`;const e=this.element.querySelector(".central-orb-container"),t=this.element.querySelector(".session-selector-container"),r=this.element.querySelector(".voice-status-text"),s=this.element.querySelector(".voice-status-subtext");e&&(e.onclick=()=>{A&&!this.showSessionSelector?(this.showSessionSelector=!0,this.element.classList.add("has-session-choice"),r&&(r.textContent="Welcome back"),s&&(s.style.display="none"),t&&(t.style.display="flex",t.offsetHeight,t.style.opacity="1")):this.onClick("continue")});const i=this.element.querySelectorAll(".session-option");i.forEach(o=>{o.addEventListener("click",a=>{a.stopPropagation(),i.forEach(c=>c.classList.remove("active")),o.classList.add("active");const l=o.getAttribute("data-behavior");this.onClick(l)})})}getElement(){return this.element}}class Fs{constructor(A){p(this,"element");p(this,"chips",[]);this.onChipClick=A,this.element=document.createElement("div"),this.element.className="welcome-chips-container"}setChips(A){this.chips=A,this.render()}getElement(){return this.element}setPosition(A){this.element.style.cssText="",A.split(";").filter(t=>t.trim()).forEach(t=>{const[r,s]=t.split(":").map(i=>i.trim());r&&s&&(this.element.style[r]=s)}),this.element.style.bottom?this.element.style.bottom=parseInt(this.element.style.bottom)+76+"px":this.element.style.top&&(this.element.style.top=parseInt(this.element.style.top)+76+"px"),this.element.style.position="fixed",this.element.style.zIndex="2147483646",this.element.style.alignItems=this.element.style.left?"flex-start":"flex-end"}updateCoordinates(A,e,t=!0){this.element.style.left=`${A}px`,t?(this.element.style.top="auto",this.element.style.bottom=`${window.innerHeight-e+16}px`):(this.element.style.bottom="auto",this.element.style.top=`${e+76}px`),this.element.style.right="auto"}render(){this.element.innerHTML="",this.chips.forEach((A,e)=>{const t=document.createElement("button");t.className="welcome-chip-btn",t.textContent=A.title,t.onclick=r=>{r.stopPropagation(),this.onChipClick(A.title)},t.style.animationDelay=`${e*.1}s`,this.element.appendChild(t)})}static get styles(){return`
|
|
2351
|
+
.welcome-chips-container {
|
|
2352
|
+
position: fixed;
|
|
2353
|
+
z-index: 9998;
|
|
2354
|
+
display: flex;
|
|
2355
|
+
flex-direction: column; /* Stack vertically */
|
|
2356
|
+
align-items: flex-end; /* Align to right (usually) */
|
|
2357
|
+
gap: 12px;
|
|
2358
|
+
pointer-events: none; /* Container passes clicks */
|
|
2359
|
+
/* Max width to prevent huge buttons */
|
|
2360
|
+
max-width: 300px;
|
|
2361
|
+
}
|
|
2362
|
+
|
|
2363
|
+
/* Adjust alignment based on position */
|
|
2364
|
+
/* We might need to know if it's left or right to align flex-start or flex-end
|
|
2365
|
+
For now, defaulting to flex-end (right) which matches most widgets.
|
|
2366
|
+
TODO: Pass alignment if needed.
|
|
2367
|
+
*/
|
|
2368
|
+
|
|
2369
|
+
.welcome-chip-btn {
|
|
2370
|
+
background: white;
|
|
2371
|
+
color: #4f46e5; /* Secondary/Primary color - hardcoded or use var */
|
|
2372
|
+
color: var(--primary);
|
|
2373
|
+
border: 1px solid transparent;
|
|
2374
|
+
padding: 10px 18px;
|
|
2375
|
+
border-radius: 20px;
|
|
2376
|
+
font-family: inherit;
|
|
2377
|
+
font-size: 14px;
|
|
2378
|
+
font-weight: 500;
|
|
2379
|
+
cursor: pointer;
|
|
2380
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
2381
|
+
transition: all 0.2s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
2382
|
+
pointer-events: auto;
|
|
2383
|
+
opacity: 0;
|
|
2384
|
+
margin-bottom: 4px; /* Tiny spacing */
|
|
2385
|
+
|
|
2386
|
+
/* Animation */
|
|
2387
|
+
animation: slideUpFade 0.4s ease-out forwards;
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2390
|
+
.welcome-chip-btn:hover {
|
|
2391
|
+
transform: translateY(-2px);
|
|
2392
|
+
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
|
|
2393
|
+
background: #f8fafc;
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2396
|
+
@keyframes slideUpFade {
|
|
2397
|
+
from {
|
|
2398
|
+
opacity: 0;
|
|
2399
|
+
transform: translateY(20px);
|
|
2400
|
+
}
|
|
2401
|
+
to {
|
|
2402
|
+
opacity: 1;
|
|
2403
|
+
transform: translateY(0);
|
|
2404
|
+
}
|
|
2405
|
+
}
|
|
2406
|
+
`}}const hl=`
|
|
2407
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2408
|
+
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.6 1.18h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.77a16 16 0 0 0 6.29 6.29l.87-.87a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"/>
|
|
2409
|
+
</svg>
|
|
2410
|
+
`;class ul{constructor(A,e,t="Voice chat"){p(this,"element");p(this,"statusEl");p(this,"titleEl");p(this,"barsEl");p(this,"muteBtn");p(this,"activity","idle");p(this,"onToggleMute");this.onExpand=A,this.onHangup=e,this.element=document.createElement("div"),this.element.className="widget-voice-pill hidden",this.element.setAttribute("role","group"),this.element.setAttribute("aria-label","Active voice call");const r=document.createElement("button");r.type="button",r.className="widget-voice-pill-main",r.setAttribute("aria-label","Expand voice chat");const s=document.createElement("div");s.className="widget-voice-pill-icon",s.innerHTML=G.phone;const i=document.createElement("div");i.className="widget-voice-pill-text",this.titleEl=document.createElement("span"),this.titleEl.className="widget-voice-pill-title",this.titleEl.textContent=t;const o=document.createElement("span");o.className="widget-voice-pill-status-row",this.barsEl=document.createElement("span"),this.barsEl.className="widget-voice-pill-bars",this.barsEl.innerHTML="<i></i><i></i><i></i>",this.barsEl.setAttribute("aria-hidden","true"),this.statusEl=document.createElement("span"),this.statusEl.className="widget-voice-pill-status",o.appendChild(this.barsEl),o.appendChild(this.statusEl),i.appendChild(this.titleEl),i.appendChild(o),r.appendChild(s),r.appendChild(i),r.onclick=()=>this.onExpand(),this.muteBtn=document.createElement("button"),this.muteBtn.type="button",this.muteBtn.className="widget-voice-pill-mute",this.muteBtn.setAttribute("aria-label","Mute microphone"),this.muteBtn.disabled=!0,this.muteBtn.innerHTML=G.mic,this.muteBtn.onclick=l=>{l.stopPropagation(),this.onToggleMute&&this.setMicMuted(this.onToggleMute())};const a=document.createElement("button");a.type="button",a.className="widget-voice-pill-hangup",a.setAttribute("aria-label","End call"),a.innerHTML=hl,a.onclick=l=>{l.stopPropagation(),this.onHangup()},this.element.appendChild(r),this.element.appendChild(this.muteBtn),this.element.appendChild(a),this.setActivity("idle")}bindMicMuteToggle(A){this.onToggleMute=A}setMicMuted(A){this.muteBtn.classList.toggle("is-muted",A),this.muteBtn.setAttribute("aria-label",A?"Unmute microphone":"Mute microphone"),this.muteBtn.innerHTML=A?G.micOff:G.mic}setMicMuteEnabled(A){this.muteBtn.disabled=!A}getElement(){return this.element}setTitle(A){this.titleEl.textContent=A}setActivity(A){this.activity=A,this.element.classList.remove("is-connecting","is-listening","is-speaking","is-error"),this.barsEl.classList.remove("listening","speaking","hidden"),A==="connecting"?(this.statusEl.textContent="Connecting…",this.element.classList.add("is-connecting"),this.barsEl.classList.add("listening"),this.muteBtn.disabled=!0):A==="speaking"?(this.statusEl.textContent="Speaking…",this.element.classList.add("is-speaking"),this.barsEl.classList.add("speaking"),this.muteBtn.disabled=!1):A==="listening"?(this.statusEl.textContent="Listening…",this.element.classList.add("is-listening"),this.barsEl.classList.add("listening"),this.muteBtn.disabled=!1):A==="error"?(this.statusEl.textContent="Connection issue",this.element.classList.add("is-error"),this.barsEl.classList.add("hidden"),this.muteBtn.disabled=!0):(this.statusEl.textContent="Voice chat",this.barsEl.classList.add("hidden"),this.muteBtn.disabled=!0,this.setMicMuted(!1))}setStatus(A){A==="connecting"?this.setActivity("connecting"):A==="connected"?this.setActivity("listening"):A==="error"?this.setActivity("error"):this.setActivity("idle")}getActivity(){return this.activity}show(){this.element.classList.remove("hidden")}hide(){this.element.classList.add("hidden")}}class gl{constructor(A,e={}){p(this,"element");this.onOpen=A;const t=e.greeting||"Hi there!",r=e.subtitle||"I'm here to help";this.element=document.createElement("button"),this.element.type="button",this.element.className="human-presence-launcher",this.element.setAttribute("aria-label",`${t} ${r}`),this.element.innerHTML=`
|
|
2411
|
+
<span class="human-presence-wave-icon" aria-hidden="true">
|
|
2412
|
+
<span class="human-presence-wave-emoji">👋</span>
|
|
2413
|
+
</span>
|
|
2414
|
+
<span class="human-presence-copy">
|
|
2415
|
+
<span class="human-presence-greeting">${t}</span>
|
|
2416
|
+
<span class="human-presence-subtitle">${r}</span>
|
|
2417
|
+
</span>
|
|
2418
|
+
`,this.element.onclick=s=>{s.stopPropagation(),this.onOpen()}}getElement(){return this.element}show(){this.element.style.display="flex"}hide(){this.element.style.display="none"}}class Is{constructor(A,e,t="#000000",r="#111111",s){p(this,"element");p(this,"overlay");p(this,"onStartCall");p(this,"onHangup");p(this,"primaryColor");p(this,"secondaryColor");p(this,"onCallEnded");this.onStartCall=A,this.onHangup=e,this.primaryColor=t,this.secondaryColor=r,this.onCallEnded=s,this.element=document.createElement("div"),this.element.style.height="100%",this.element.style.position="relative"}initOverlay(){this.overlay=new Es(()=>this.onHangup(),this.primaryColor,this.secondaryColor,this.onCallEnded),this.element.appendChild(this.overlay.getElement())}getElement(){return this.element}setCallActive(A){A?this.overlay.show():this.overlay.hide()}setStatus(A,e){this.overlay.setStatus(A,e)}setActivity(A){this.overlay.setActivity(A)}setTranscription(A,e){this.overlay.setTranscription(A,e)}setVideoTrack(A){this.overlay.setVideoTrack(A)}bindMicMuteToggle(A){this.overlay.bindMicMuteToggle(A)}setMicMuted(A){this.overlay.setMicMuted(A)}setMicMuteEnabled(A){this.overlay.setMicMuteEnabled(A)}}class pl extends Is{constructor(e,t,r="#000000",s="#111111",i,o){super(e,t,r,s,i);p(this,"voiceOrb");this.element.style.background="#f9fafb",this.voiceOrb=new dl(a=>{this.onStartCall(a)},o),this.element.appendChild(this.voiceOrb.getElement()),this.initOverlay()}}class Bl{constructor(A){p(this,"element");p(this,"chatWindow");this.onSendMessage=A,this.element=document.createElement("div"),this.element.style.flex="1",this.element.style.width="100%",this.element.style.minHeight="0",this.element.style.display="flex",this.element.style.flexDirection="column",this.chatWindow=new Us(e=>this.onSendMessage(e)),this.element.appendChild(this.chatWindow.getElement())}getElement(){return this.element}getChatWindow(){return this.chatWindow}}class Ss{constructor(A,e,t,r="#000000",s="#111111",i){p(this,"element");p(this,"chatWindow");p(this,"overlay");p(this,"voiceTrigger");this.onSendMessage=A,this.onStartCall=e,this.onHangup=t,this.primaryColor=r,this.secondaryColor=s,this.onCallEnded=i,this.element=document.createElement("div"),this.element.style.flex="1",this.element.style.display="flex",this.element.style.flexDirection="column",this.element.style.minHeight="0",this.element.style.position="relative"}setupChat(){this.chatWindow=new Us(e=>this.onSendMessage(e));const A=this.chatWindow.getElement();A.style.flex="1",this.element.appendChild(A),this.injectVoiceTrigger(),this.overlay=new Es(()=>this.onHangup(),this.primaryColor,this.secondaryColor,this.onCallEnded),this.element.appendChild(this.overlay.getElement())}injectVoiceTrigger(){const A=document.createElement("button");this.voiceTrigger=A,A.className="voice-btn-simple",A.innerHTML=`<div class="voice-btn-icon">${G.audioLines}</div>`,A.onclick=()=>this.onStartCall();const e=this.chatWindow.getElement().querySelector(".chat-input-area");e&&e.insertBefore(this.voiceTrigger,e.firstChild)}getElement(){return this.element}getChatWindow(){return this.chatWindow}setCallActive(A){A?(this.overlay.show(),this.chatWindow&&(this.chatWindow.getElement().style.display="none")):(this.overlay.hide(),this.chatWindow&&(this.chatWindow.getElement().style.display="flex"))}setStatus(A,e){this.overlay.setStatus(A,e)}setActivity(A){this.overlay.setActivity(A)}setTranscription(A,e){this.overlay.setTranscription(A,e)}setVideoTrack(A){this.overlay.setVideoTrack(A)}bindMicMuteToggle(A){this.overlay.bindMicMuteToggle(A)}setMicMuted(A){this.overlay.setMicMuted(A)}setMicMuteEnabled(A){this.overlay.setMicMuteEnabled(A)}}class fl extends Ss{constructor(A,e,t,r="#000000",s="#111111",i){super(A,e,t,r,s,i),this.setupChat()}}class wl extends Is{constructor(e,t,r="#000000",s="#111111",i){super(e,t,r,s,i);p(this,"avatarView");p(this,"startCallBtn");p(this,"controlsContainer");this.element.style.display="flex",this.element.style.flexDirection="column",this.avatarView=new cl;const o=this.avatarView.getElement();o.style.width="100%",o.style.maxWidth="300px",o.style.aspectRatio="1/1",o.style.borderRadius="16px",o.style.overflow="hidden",o.style.margin="auto",o.style.position="relative",this.element.appendChild(o),this.controlsContainer=document.createElement("div"),this.controlsContainer.className="widget-body",this.controlsContainer.style.position="absolute",this.controlsContainer.style.bottom="20px",this.controlsContainer.style.width="100%",this.controlsContainer.style.zIndex="10";const a=document.createElement("div");a.className="controls",this.startCallBtn=document.createElement("button"),this.startCallBtn.className="control-btn primary",this.startCallBtn.innerHTML=`${G.phone} <span>Start Call</span>`,this.startCallBtn.onclick=()=>this.onStartCall(),a.appendChild(this.startCallBtn),this.controlsContainer.appendChild(a),this.element.appendChild(this.controlsContainer),this.initOverlay(),this.overlay.setMode("avatar")}getAvatarView(){return this.avatarView}setCallActive(e){e&&this.overlay.setMode("avatar"),super.setCallActive(e),e?this.controlsContainer.style.display="none":this.controlsContainer.style.display="block"}}class ml extends Ss{constructor(A,e,t,r="#000000",s="#111111",i){super(A,e,t,r,s,i),this.setupChat(),this.overlay.setMode("avatar")}injectVoiceTrigger(){const A=document.createElement("button");this.voiceTrigger=A,A.className="voice-btn-simple",A.style.overflow="hidden",A.style.padding="0",A.style.border="1.5px solid #e5e7eb",A.innerHTML=`
|
|
2419
|
+
<video
|
|
2420
|
+
src="https://www.simli.com/jenna.mp4"
|
|
2421
|
+
autoplay loop muted pip="false" playsinline
|
|
2422
|
+
style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%;">
|
|
2423
|
+
</video>
|
|
2424
|
+
<div style="position: absolute; bottom: -2px; right: -2px; background: white; border-radius: 50%; padding: 2px; box-shadow: 0 1px 2px rgba(0,0,0,0.1);">
|
|
2425
|
+
${G.audioLines.replace('width="24"','width="12"').replace('height="24"','height="12"')}
|
|
2426
|
+
</div>
|
|
2427
|
+
`;const e=A.querySelector("div");if(e){const s=e.querySelector("svg");s&&(s.style.width="12px",s.style.height="12px")}A.onclick=()=>this.onStartCall();const t=this.chatWindow.getElement().querySelector(".chat-input-area"),r=t==null?void 0:t.querySelector(".chat-send-btn");t&&r&&t.insertBefore(this.voiceTrigger,r)}}class Cl{async sendMessage(A,e,t,r,s,i,o,a,l){return KA.sendChatMessage(e,t,A,r,c=>{i&&i(c)},s,(c,d)=>{o&&c&&o(c,d||void 0)},a,l)}async sendFile(A){throw new Error("Method not implemented.")}async likeDislike(A,e){}}const vt="vanira:clip-region-active";function Nn(n){typeof window>"u"||window.dispatchEvent(new CustomEvent(vt,{detail:{active:n}}))}const yl="vanira:board-active";function Wf(n){}function On(n,A=!1){typeof window>"u"||window.dispatchEvent(new CustomEvent(yl,{detail:{active:n,reduced:A}}))}const vl="vnr-clip-overlay";function bl(n){var A;return((A=n.classList)==null?void 0:A.contains(vl))??!1}function Ql(n){var e;return((e=n.tagName)==null?void 0:e.toLowerCase())==="vanira-convai"?!0:typeof n.closest=="function"&&!!n.closest("vanira-convai")}function Hs(n){var A;return bl(n)||Ql(n)||(A=n.classList)!=null&&A.contains("vnr-screen-overlay-root")?!0:typeof n.closest=="function"&&!!n.closest(".vnr-screen-overlay-root")}async function Ls(){const n=document.documentElement.clientWidth,A=document.documentElement.clientHeight;return Ms({left:0,top:0,width:n,height:A})}function Ts(n,A){if(n.width<=A)return n;const e=A/n.width,t=document.createElement("canvas");t.width=A,t.height=Math.round(n.height*e);const r=t.getContext("2d");return r?(r.drawImage(n,0,0,t.width,t.height),t):n}async function Ms(n){const{default:A}=await Promise.resolve().then(()=>Vf),e=window.devicePixelRatio||1,t=window.scrollX+n.left,r=window.scrollY+n.top;return A(document.body,{x:t,y:r,width:n.width,height:n.height,windowWidth:document.documentElement.clientWidth,windowHeight:document.documentElement.clientHeight,scrollX:-window.scrollX,scrollY:-window.scrollY,useCORS:!0,allowTaint:!1,scale:e,ignoreElements:s=>Hs(s),logging:!1})}async function Rn(n,A=.88){try{const e=await new Promise(t=>n.toBlob(r=>t(r),"image/jpeg",A));if(!e)throw new Error("Failed to encode clip as JPEG");return e}catch(e){const t=e instanceof Error?e.message:String(e);throw/tainted|security|cross-origin/i.test(t)?new Error("Could not export this page region (cross-origin content). Try selecting a simpler area."):e}}const bt="vnr-clip-overlay",ks="2147483647",xl="rgba(0, 0, 0, 0.28)";function El(n={}){const A=n.minSizePx??24,e=n.hint??"Drag to select an area — release to clip.";return new Promise(t=>{let r=!1,s=!1,i=0,o=0,a=!1,l={left:0,top:0,width:0,height:0},c=!1,d=null;const h=T=>{r||(r=!0,M(),t(T))},u=document.createElement("div");u.className=bt,u.style.cssText=["position:fixed","inset:0",`z-index:${ks}`,"cursor:crosshair","user-select:none","touch-action:none","background:transparent","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif"].join(";");const g=document.createElement("div");g.style.cssText=["position:absolute","display:none","pointer-events:none","border:2px solid #6366f1","border-radius:2px","background:transparent","box-shadow:none"].join(";");const B=document.createElement("div");B.style.cssText=["position:absolute","display:none","pointer-events:none","padding:2px 6px","border-radius:4px","font-size:11px","font-weight:600","color:#fff","background:rgba(15,23,42,0.82)","white-space:nowrap"].join(";");const f=document.createElement("div");f.className=bt,f.style.cssText=["position:fixed","top:16px","left:50%","transform:translateX(-50%)",`z-index:${ks}`,"display:flex","align-items:center","gap:10px","padding:10px 14px","border-radius:14px","background:#0f172a","border:1px solid rgba(255,255,255,0.12)","box-shadow:0 8px 24px rgba(0,0,0,0.25)","max-width:min(520px,calc(100vw - 32px))"].join(";");const m=document.createElement("span");m.style.cssText="flex:1;font-size:13px;color:#e2e8f0;line-height:1.4",m.textContent=e;const w=document.createElement("button");w.type="button",w.textContent="Cancel",w.style.cssText=["padding:8px 12px","border:1px solid rgba(255,255,255,0.15)","border-radius:10px","background:transparent","color:#e2e8f0","font-size:13px","font-weight:600","cursor:pointer"].join(";"),f.appendChild(m),f.appendChild(w);const v=T=>{T.key==="Escape"&&!s&&h(null)},C=()=>c&&l.width>=A&&l.height>=A,y=()=>{c=!1,l={left:0,top:0,width:0,height:0},Q()},Q=()=>{if(!c||l.width<1||l.height<1){g.style.display="none",B.style.display="none";return}g.style.display="block",g.style.left=`${l.left}px`,g.style.top=`${l.top}px`,g.style.width=`${l.width}px`,g.style.height=`${l.height}px`,g.style.boxShadow=`0 0 0 9999px ${xl}`,B.style.display="block",B.textContent=`${Math.round(l.width)} × ${Math.round(l.height)}`,B.style.left=`${l.left}px`,B.style.top=`${Math.max(8,l.top-26)}px`},x=T=>{const k=T instanceof Error?T.message:"Capture failed";m.textContent=k.length>120?`${k.slice(0,117)}…`:k,m.style.color="#fca5a5",window.setTimeout(()=>{m.textContent=e,m.style.color="#e2e8f0"},4500)},F=async T=>{if(!(s||r)){s=!0,w.disabled=!0,m.textContent="Clipping…",m.style.color="#e2e8f0",u.style.visibility="hidden",f.style.visibility="hidden";try{const k=await Ms(T),AA=await Rn(k),iA=document.documentElement.clientWidth,oA=document.documentElement.clientHeight;h({blob:AA,region:{x:T.left/iA,y:T.top/oA,w:T.width/iA,h:T.height/oA},viewport:{width:iA,height:oA},pixelSize:{width:k.width,height:k.height}})}catch(k){s=!1,w.disabled=!1,u.style.visibility="visible",f.style.visibility="visible",x(k),y()}}},I=T=>{const k=T??d;if(k!==null)try{u.releasePointerCapture(k)}catch{}d=null},L=T=>{if(!(!a||s)){if(a=!1,I(T==null?void 0:T.pointerId),C()){F({...l});return}y()}},O=T=>{s||T.target.closest(`.${bt}`)!==f&&(a=!0,c=!0,i=T.clientX,o=T.clientY,l={left:i,top:o,width:0,height:0},d=T.pointerId,u.setPointerCapture(T.pointerId),Q())},K=T=>{if(!a||s)return;const k=Math.min(i,T.clientX),AA=Math.min(o,T.clientY),iA=Math.max(i,T.clientX),oA=Math.max(o,T.clientY);l={left:k,top:AA,width:iA-k,height:oA-AA},Q()},M=()=>{Nn(!1),document.removeEventListener("keydown",v),window.removeEventListener("pointerup",Z,!0),window.removeEventListener("pointercancel",Z,!0),u.removeEventListener("pointerdown",O),u.removeEventListener("pointermove",K),u.removeEventListener("pointerup",L),u.removeEventListener("pointercancel",L),I(),u.remove(),f.remove()},Z=T=>L(T);w.addEventListener("click",()=>h(null)),Nn(!0),u.appendChild(g),u.appendChild(B),document.body.appendChild(u),document.body.appendChild(f),document.addEventListener("keydown",v),window.addEventListener("pointerup",Z,!0),window.addEventListener("pointercancel",Z,!0),u.addEventListener("pointerdown",O),u.addEventListener("pointermove",K),u.addEventListener("pointerup",L),u.addEventListener("pointercancel",L)})}function Gn(){document.querySelectorAll(`.${bt}`).forEach(n=>n.remove()),Nn(!1)}const Ul=["a[href]","button:not([disabled])",'input:not([type="hidden"]):not([disabled])',"select:not([disabled])","textarea:not([disabled])",'[role="button"]','[role="link"]','[role="tab"]','[role="menuitem"]','[role="checkbox"]','[role="radio"]',"label","h1","h2","h3","h4","h5","h6","img[alt]","[data-testid]","[aria-label]","[onclick]"].join(", "),Fl='[id]:not([id=""]), svg[id], polygon[id]',Il="svg[id], polygon[id], svg[data-vanira-static-diagram], svg[data-vanira-static-diagram] polygon",Ds=new Set(["root","app","__next"]);function Ps(n,A,e){const t=n.getScreenCTM(),r=n.ownerSVGElement;if(!t||!r)return[];const s=[];for(let i=0;i<n.points.length;i++){const o=n.points.getItem(i),a=r.createSVGPoint();a.x=o.x,a.y=o.y;const l=a.matrixTransform(t);s.push({x:l.x/A,y:l.y/e})}return s}function Ks(n,A,e){if(n instanceof SVGPolygonElement){const t=Ps(n,A,e);return t.length>=2?t:void 0}if(n instanceof SVGSVGElement){const t=n.querySelector("polygon");if(!t)return;const r=Ps(t,A,e);return r.length>=2?r:void 0}}function Sl(n,A=40){return n.elements.slice(0,A).map(e=>{var r;let t=`${e.css_selector} (${e.tag}) "${e.label.slice(0,48)}" center=(${e.center_x.toFixed(3)},${e.center_y.toFixed(3)}) bbox=(${e.x.toFixed(3)},${e.y.toFixed(3)},${e.width.toFixed(3)},${e.height.toFixed(3)})`;if((r=e.stroke_points)!=null&&r.length){const s=e.stroke_points.map(i=>[Number(i.x.toFixed(3)),Number(i.y.toFixed(3))]);t+=` stroke_points=${JSON.stringify(s)} close=true`}return t}).join(`
|
|
2428
|
+
`)}function Ns(n,A="#f97316"){const e=document.querySelector(n);if(!e)return null;const t=document.documentElement.clientWidth,r=document.documentElement.clientHeight,s=Ks(e,t,r);if(s!=null&&s.length)return{points:s.map(o=>[o.x,o.y]),close:!0,color:A};const i=e.getBoundingClientRect();return i.width<1||i.height<1?null:{points:[[i.left/t,i.top/r],[(i.left+i.width)/t,i.top/r],[(i.left+i.width)/t,(i.top+i.height)/r],[i.left/t,(i.top+i.height)/r]],close:!0,color:A}}function Os(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/([^\w-])/g,"\\$1")}function Hl(n){if(n.id){const r=`#${Os(n.id)}`;try{if(document.querySelectorAll(r).length===1)return r}catch{}}const A=n.getAttribute("data-testid");if(A){const r=`[data-testid="${A.replace(/"/g,'\\"')}"]`;try{if(document.querySelectorAll(r).length===1)return r}catch{}}const e=[];let t=n;for(;t&&t!==document.body&&t!==document.documentElement;){let r=t.tagName.toLowerCase();if(t.classList.length>0){const i=[...t.classList].filter(o=>!o.startsWith("vnr-")).slice(0,2).map(o=>`.${Os(o)}`).join("");r+=i}const s=t.parentElement;if(s){const i=[...s.children].filter(o=>o.tagName===t.tagName);i.length>1&&(r+=`:nth-of-type(${i.indexOf(t)+1})`)}e.unshift(r);try{const i=e.join(" > ");if(document.querySelectorAll(i).length===1)return i}catch{}if(t=t.parentElement,e.length>=8)break}return e.join(" > ")||n.tagName.toLowerCase()}function Rs(n,A,e){const t=n.getBoundingClientRect();if(t.width<2||t.height<2||t.bottom<=0||t.right<=0||t.top>=e||t.left>=A)return!1;if(n instanceof SVGElement||n instanceof HTMLElement){const r=window.getComputedStyle(n);if(r.display==="none"||r.visibility==="hidden"||Number(r.opacity)===0)return!1}else return!1;return n.getAttribute("aria-hidden")!=="true"}function Ll(n,A,e){var o;const t=((o=n.id)==null?void 0:o.toLowerCase())??"";if(Ds.has(t)||n===document.body||n===document.documentElement)return!0;const r=n.tagName.toLowerCase();if(r!=="div"&&r!=="main")return!1;const s=n.getBoundingClientRect();return s.width*s.height/Math.max(1,A*e)>.9}function Gs(n){return Hs(n)?!0:typeof n.closest!="function"?!1:!!n.closest("script, style, noscript, template, head")}function Tl(n,A){const e=n.tagName.toLowerCase();return e==="svg"||e==="polygon"?"diagram":e==="button"||A==="button"?"button":e==="a"||A==="link"?"link":e==="input"||e==="select"||e==="textarea"?"input":/^h[1-6]$/.test(e)?"heading":e==="img"?"image":e==="label"?"label":A?"interactive":"text"}function Ml(n){const A=n.getAttribute("aria-label")||n.getAttribute("title")||"";if(A.trim())return A.trim().replace(/\s+/g," ").slice(0,240);if(n instanceof SVGPolygonElement&&n.id)return n.id.replace(/-/g," ").slice(0,240);if(n instanceof SVGSVGElement&&n.id)return(A.trim()||n.id.replace(/-/g," ")).slice(0,240);if(!(n instanceof HTMLElement))return n.id?n.id.replace(/-/g," ").slice(0,240):"";if(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement){const t=n.getAttribute("placeholder")||n.getAttribute("name")||"";if(t.trim())return t.trim().slice(0,240)}return n instanceof HTMLImageElement&&n.alt.trim()?n.alt.trim().slice(0,240):(n.innerText||n.textContent||"").replace(/\s+/g," ").trim().slice(0,240)}function kl(n){var A,e;if(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement){const t=(A=n.value)==null?void 0:A.trim();return t?t.slice(0,240):void 0}if(n instanceof HTMLAnchorElement){const t=(e=n.getAttribute("href"))==null?void 0:e.trim();return t?t.slice(0,240):void 0}}function Dl(n,A,e){const t=Math.round(n.left),r=Math.round(n.top),s=Math.round(n.width),i=Math.round(n.height),o=t+s/2,a=r+i/2;return{x:n.left/A,y:n.top/e,width:n.width/A,height:n.height/e,center_x:o/A,center_y:a/e,px:{left:t,top:r,width:s,height:i,center_x:Math.round(o),center_y:Math.round(a)}}}function Vs(n){var e;let A=n.label?2:0;switch(n.kind){case"diagram":A+=22;break;case"button":case"link":case"input":A+=12;break;case"heading":A+=9;break;case"interactive":A+=8;break;case"image":case"label":A+=5;break;default:A+=3}return n.kind!=="text"&&(A+=Math.min(4,n.px.width*n.px.height/12e3)),(e=n.stroke_points)!=null&&e.length&&(A+=18),n.id&&Ds.has(n.id.toLowerCase())&&(A-=50),A}function Qt(n,A,e,t,r){if(Gs(n)||Ll(n,t,r)||!Rs(n,t,r))return;const s=Ml(n),i=kl(n),o=Ks(n,t,r),a=n.id||void 0;if(!s&&!i&&!a&&!o&&n.tagName.toLowerCase()!=="input")return;const l=(n.getAttribute("role")||"").trim()||void 0,c=Hl(n);if(e.has(c))return;e.add(c);const d=Dl(n.getBoundingClientRect(),t,r);A.push({tag:n.tagName.toLowerCase(),kind:Tl(n,l??""),role:l,label:s||i||a||c,value:i,id:a,css_selector:c,stroke_points:o,...d})}function Pl(n,A,e,t){for(const r of document.querySelectorAll(Il))Qt(r,n,A,e,t);for(const r of document.querySelectorAll("svg"))if(!(Gs(r)||!Rs(r,e,t)))for(const s of r.querySelectorAll("polygon"))Qt(s,n,A,e,t)}function _s(n){const A=Math.max(1,Math.min(200,(n==null?void 0:n.maxElements)??80)),e=document.documentElement.clientWidth,t=document.documentElement.clientHeight,r=new Set,s=[];Pl(s,r,e,t);for(const o of document.querySelectorAll(Ul))Qt(o,s,r,e,t);for(const o of document.querySelectorAll(Fl))Qt(o,s,r,e,t);s.sort((o,a)=>Vs(a)-Vs(o));const i=s.slice(0,A).map((o,a)=>({...o,element_id:`e${a+1}`}));return{url:window.location.href,title:document.title,viewport:{width:e,height:t},scroll:{x:window.scrollX,y:window.scrollY},coordinate_system:"normalized_viewport",elements:i}}function Kl(n){if(n instanceof SVGPathElement&&typeof n.getTotalLength=="function"){const A=n.getTotalLength();if(A>0)return A}if(n instanceof SVGLineElement){const A=Number(n.getAttribute("x1")),e=Number(n.getAttribute("y1")),t=Number(n.getAttribute("x2")),r=Number(n.getAttribute("y2"));return Math.hypot(t-A,r-e)}if(n instanceof SVGCircleElement){const A=Number(n.getAttribute("r"));return 2*Math.PI*A}if(n instanceof SVGEllipseElement){const A=Number(n.getAttribute("rx")),e=Number(n.getAttribute("ry"));return Math.PI*(3*(A+e)-Math.sqrt((3*A+e)*(A+3*e)))}if(n instanceof SVGRectElement){const A=Number(n.getAttribute("width")),e=Number(n.getAttribute("height"));return 2*(A+e)}return 100}function Ys(n){n.style.strokeDasharray="",n.style.strokeDashoffset="",n.style.transition="",n.removeAttribute("stroke-dasharray"),n.removeAttribute("stroke-dashoffset")}function Vn(n,A){if(A<=0)return Ys(n),Promise.resolve();n instanceof SVGLineElement&&(n.style.vectorEffect="none");const e=Math.max(1,Kl(n));return n.setAttribute("stroke-dasharray",String(e)),n.setAttribute("stroke-dashoffset",String(e)),n.getBoundingClientRect(),new Promise(t=>{requestAnimationFrame(()=>{n.style.transition=`stroke-dashoffset ${A}ms ease-out`,n.setAttribute("stroke-dashoffset","0"),setTimeout(()=>{Ys(n),t()},A+30)})})}function _n(n){return new Promise(A=>setTimeout(A,n))}const De=4,Yn=750,zs=90,Nl="2147483647";let Js=!1;function Ol(){if(Js||typeof document>"u")return;Js=!0;const n=document.createElement("style");n.id="vnr-screen-overlay-styles",n.textContent=`
|
|
2429
|
+
@keyframes vnr-screen-ripple {
|
|
2430
|
+
0% { transform: translate(-50%, -50%) scale(0.35); opacity: 0.95; }
|
|
2431
|
+
100% { transform: translate(-50%, -50%) scale(2.4); opacity: 0; }
|
|
2432
|
+
}
|
|
2433
|
+
@keyframes vnr-screen-cursor-pulse {
|
|
2434
|
+
0%, 100% { transform: translate(0, 0) scale(1); }
|
|
2435
|
+
50% { transform: translate(0, 0) scale(1.08); }
|
|
2436
|
+
}
|
|
2437
|
+
.vnr-screen-overlay-root {
|
|
2438
|
+
position: fixed;
|
|
2439
|
+
inset: 0;
|
|
2440
|
+
z-index: ${Nl};
|
|
2441
|
+
pointer-events: none;
|
|
2442
|
+
overflow: hidden;
|
|
2443
|
+
}
|
|
2444
|
+
.vnr-screen-overlay-root.vnr-screen-overlay-interactive {
|
|
2445
|
+
pointer-events: auto;
|
|
2446
|
+
cursor: crosshair;
|
|
2447
|
+
touch-action: none;
|
|
2448
|
+
}
|
|
2449
|
+
.vnr-screen-ink-svg {
|
|
2450
|
+
position: absolute;
|
|
2451
|
+
inset: 0;
|
|
2452
|
+
width: 100%;
|
|
2453
|
+
height: 100%;
|
|
2454
|
+
overflow: visible;
|
|
2455
|
+
}
|
|
2456
|
+
.vnr-screen-ink-stroke {
|
|
2457
|
+
fill: none;
|
|
2458
|
+
stroke-linecap: round;
|
|
2459
|
+
stroke-linejoin: round;
|
|
2460
|
+
}
|
|
2461
|
+
.vnr-screen-cursor {
|
|
2462
|
+
position: absolute;
|
|
2463
|
+
width: 28px;
|
|
2464
|
+
height: 28px;
|
|
2465
|
+
margin-left: -2px;
|
|
2466
|
+
margin-top: -2px;
|
|
2467
|
+
filter: drop-shadow(0 1px 3px rgba(0,0,0,0.45));
|
|
2468
|
+
animation: vnr-screen-cursor-pulse 1.2s ease-in-out infinite;
|
|
2469
|
+
}
|
|
2470
|
+
.vnr-screen-cursor.vnr-screen-cursor-flying {
|
|
2471
|
+
animation: none;
|
|
2472
|
+
}
|
|
2473
|
+
.vnr-screen-cursor-label {
|
|
2474
|
+
position: absolute;
|
|
2475
|
+
margin-top: 22px;
|
|
2476
|
+
margin-left: 8px;
|
|
2477
|
+
padding: 4px 8px;
|
|
2478
|
+
border-radius: 6px;
|
|
2479
|
+
font-size: 12px;
|
|
2480
|
+
font-weight: 600;
|
|
2481
|
+
color: #fff;
|
|
2482
|
+
white-space: nowrap;
|
|
2483
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
2484
|
+
}
|
|
2485
|
+
.vnr-screen-click-ripple {
|
|
2486
|
+
position: absolute;
|
|
2487
|
+
width: 48px;
|
|
2488
|
+
height: 48px;
|
|
2489
|
+
border-radius: 50%;
|
|
2490
|
+
border: 3px solid currentColor;
|
|
2491
|
+
animation: vnr-screen-ripple 650ms ease-out forwards;
|
|
2492
|
+
}
|
|
2493
|
+
.vnr-screen-labels-layer {
|
|
2494
|
+
position: absolute;
|
|
2495
|
+
inset: 0;
|
|
2496
|
+
pointer-events: none;
|
|
2497
|
+
}
|
|
2498
|
+
.vnr-screen-ink-label {
|
|
2499
|
+
position: absolute;
|
|
2500
|
+
transform: translate(-50%, -50%);
|
|
2501
|
+
font-family: Georgia, "Times New Roman", serif;
|
|
2502
|
+
font-weight: 600;
|
|
2503
|
+
line-height: 1;
|
|
2504
|
+
text-shadow: 1px 1px 0 rgba(0,0,0,0.35);
|
|
2505
|
+
white-space: nowrap;
|
|
2506
|
+
pointer-events: none;
|
|
2507
|
+
}
|
|
2508
|
+
`,document.head.appendChild(n)}function q(n,A){const e=Number(n);return Number.isFinite(e)?e:A}function X(n,A=""){return typeof n=="string"?n:A}function pA(n){if(n===!0||n===1)return!0;if(typeof n=="string"){const A=n.trim().toLowerCase();return A==="true"||A==="1"||A==="yes"}return!1}function Xs(n){if(n===!1||n===0)return!0;if(typeof n=="string"){const A=n.trim().toLowerCase();return A==="false"||A==="0"||A==="no"}return!1}function yA(n,A){return n>=0&&n<=1?n*A:n}function $A(n,A){const e=window.innerWidth,t=window.innerHeight;return{px:yA(n,e),py:yA(A,t)}}function zn(n){const A=document.querySelector(n);if(!A)return null;const e=A.getBoundingClientRect();return{px:e.left+e.width/2,py:e.top+e.height/2}}function Rl(n){const A=X(n.css_selector||n.selector);if(A){const r=zn(A);if(r)return r}const e=n.x??n.client_x,t=n.y??n.client_y;return e==null||t==null?null:$A(q(e,NaN),q(t,NaN))}function Ws(n){if(Array.isArray(n))return n;if(typeof n=="string"){const A=n.trim();if(!A)return[];try{const t=JSON.parse(A);if(Array.isArray(t))return t.length>0&&Array.isArray(t[0])?[{points:t,close:!0}]:t}catch{}const e=A.split(/\s+/).map(t=>{const[r,s]=t.split(","),i=Number(r),o=Number(s);return Number.isFinite(i)&&Number.isFinite(o)?[i,o]:null}).filter(t=>t!=null);if(e.length>=2)return[{points:e,close:!0}]}return[]}function Gl(n){if(Array.isArray(n))return n;if(typeof n=="string"){const A=n.trim();if(!A)return[];try{const e=JSON.parse(A);return Array.isArray(e)?e:[]}catch{return[]}}return[]}function Jn(n,A){const e=X(n,A).trim().toLowerCase();return!e||e==="#000"||e==="#000000"||e==="black"?"#ece6d9":X(n,A)}function js(n,A){if(!n||typeof n!="object")return null;const e=n,t=X(e.text??e.label??e.annotation??(typeof e.annotations=="string"?e.annotations:"")).trim();if(!t)return null;let r=e.x??e.client_x,s=e.y??e.client_y;if((r==null||s==null)&&Array.isArray(e.points)&&e.points.length>0){const a=Xn(e.points[0]);if(a){const l=window.innerWidth,c=window.innerHeight;r=a.px/l,s=a.py/c}}if(r==null||s==null)return null;const i=Number(r),o=Number(s);return!Number.isFinite(i)||!Number.isFinite(o)?null:{x:i,y:o,text:t,color:Jn(e.color,A),font_size:e.font_size!=null?q(e.font_size,18):void 0}}function Vl(n,A){if(!n||typeof n!="object")return null;const e=n;return e.text!=null||e.label!=null||e.annotation!=null||typeof e.annotations=="string"?js(n,A):null}function _l(n){return Array.isArray(n)&&n.length>0&&Array.isArray(n[0])?{points:n,close:!0}:n}function Yl(n){return yA(n,Math.min(window.innerWidth,window.innerHeight))}function zl(n){if(n.length<2)return null;const A=window.innerWidth,e=window.innerHeight,t=n.map(l=>l.px),r=n.map(l=>l.py),s=(Math.min(...t)+Math.max(...t))/2,i=(Math.min(...r)+Math.max(...r))/2,o=Math.max(...n.map(l=>Math.hypot(l.px-s,l.py-i))),a=Math.min(A,e);return{cx:s/A,cy:i/e,r:o/a}}function Jl(n,A,e,t){const r=X(n.kind||n.shape).toLowerCase(),s=r==="circle"||r==="ellipse"||n.r!=null||n.radius!=null||n.rx!=null||n.ry!=null;let i=n.cx??n.center_x??n.x,o=n.cy??n.center_y??n.y,a=n.r??n.radius;const l=n.rx,c=n.ry;if(Array.isArray(t)&&t.length>=3){const g=[];for(const f of t){const m=Xn(f);m&&g.push(m)}const B=zl(g);B&&(s||pA(n.close)&&g.length>=8)&&(i=i??B.cx,o=o??B.cy,a=a??B.r)}if(i==null||o==null)return null;const d=Number(i),h=Number(o);if(!Number.isFinite(d)||!Number.isFinite(h))return null;const u={kind:r==="ellipse"||l!=null||c!=null?"ellipse":"circle",cx:d,cy:h,color:X(n.color,A),stroke_width:n.stroke_width!=null?q(n.stroke_width,e):e};return l!=null||c!=null?(u.rx=Number(l??c),u.ry=Number(c??l),u):a!=null&&Number.isFinite(Number(a))?(u.r=Number(a),u):null}function Zs(n,A,e){if(!n||typeof n!="object")return null;const t=n,r=X(t.path_d||t.path||t.d),s=X(t.color,A),i=t.stroke_width!=null?q(t.stroke_width,e):e;if(r)return{path_d:r,close:pA(t.close),color:s,stroke_width:i,css_selector:X(t.css_selector)||void 0};const o=X(t.css_selector||t.selector),a=t.points,l=Jl(t,A,e,a);if(l)return l;if(o&&!Array.isArray(a))return{css_selector:o,color:s,stroke_width:i};let c=a;if(!Array.isArray(c)){const d=t.from_x,h=t.from_y,u=t.to_x,g=t.to_y;d!=null&&h!=null&&u!=null&&g!=null&&(c=[[d,h],[u,g]])}if(Array.isArray(c)&&c.length>=2){const d=X(t.kind),h=pA(t.close)||d==="triangle"||d==="polygon";return{points:c,close:h,color:s,stroke_width:i,css_selector:o||void 0}}return o?{css_selector:o,color:s,stroke_width:i}:null}function Xn(n){if(Array.isArray(n)&&n.length>=2){const A=Number(n[0]),e=Number(n[1]);return!Number.isFinite(A)||!Number.isFinite(e)?null:$A(A,e)}if(n&&typeof n=="object"&&"x"in n&&"y"in n){const A=Number(n.x),e=Number(n.y);return!Number.isFinite(A)||!Number.isFinite(e)?null:$A(A,e)}return null}function Xl(n){const A=n.points;if(!Array.isArray(A))return[];const e=[];for(const t of A){const r=Xn(t);r&&e.push(r)}return e}function Pe(n,A){return{class:"vnr-screen-ink-stroke",fill:"none",stroke:n,"stroke-width":String(A),"stroke-linecap":"round","stroke-linejoin":"round"}}function Ke(n,A){for(const[e,t]of Object.entries(A))n.setAttribute(e,t)}function Wl(n,A){if(n.length===0)return"";const e=n.map((t,r)=>`${r===0?"M":"L"} ${t.px} ${t.py}`).join(" ");return A&&n.length>=3?`${e} Z`:e}function jl(n){return`<svg class="vnr-screen-cursor" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2509
|
+
<path d="M4 4L4 19L9 14L13 20L15 19L11 13L17 13L4 4Z" fill="${n}" stroke="#fff" stroke-width="1.2"/>
|
|
2510
|
+
</svg>`}class Zl{constructor(){p(this,"root",null);p(this,"inkSvg",null);p(this,"labelsLayer",null);p(this,"cursorEl",null);p(this,"cursorTimer",null);p(this,"lastCursorPoint",null);p(this,"flyFrameId",null);p(this,"userDrawActive",!1);p(this,"userDrawColor","#f97316");p(this,"userStrokeWidth",De);p(this,"userDrawPath",null);p(this,"userDrawPoints",[]);p(this,"userDrawBound",!1);p(this,"userDrawLayer",null);p(this,"onUserPointerDown",A=>this.handleUserPointerDown(A));p(this,"onUserPointerMove",A=>this.handleUserPointerMove(A));p(this,"onUserPointerUp",A=>this.handleUserPointerUp(A))}ensureRoot(){var A;return Ol(),(A=this.root)!=null&&A.isConnected?this.root:(this.root=document.createElement("div"),this.root.className="vnr-screen-overlay-root",this.root.setAttribute("aria-hidden","true"),document.body.appendChild(this.root),this.root)}clear(){this.disableUserDrawing(),this.cursorTimer&&(clearTimeout(this.cursorTimer),this.cursorTimer=null),this.root&&(this.root.remove(),this.root=null),this.inkSvg=null,this.cursorEl=null,this.labelsLayer=null}clearInk(){this.inkSvg&&(this.inkSvg.remove(),this.inkSvg=null),this.labelsLayer&&(this.labelsLayer.remove(),this.labelsLayer=null)}addTextLabels(A,e="#ece6d9"){var s;if(A.length===0)return 0;const t=this.ensureRoot();(s=this.labelsLayer)!=null&&s.isConnected||(this.labelsLayer=document.createElement("div"),this.labelsLayer.className="vnr-screen-labels-layer",t.appendChild(this.labelsLayer));const r=this.labelsLayer;for(const i of A){const o=$A(i.x,i.y),a=document.createElement("div");a.className="vnr-screen-ink-label",a.textContent=i.text;const l=Jn(i.color,e),c=i.font_size??20;a.style.cssText=`left:${o.px}px;top:${o.py}px;color:${l};font-size:${c}px;`,r.appendChild(a)}return A.length}hideCursor(){this.cancelFly(),this.cursorTimer&&(clearTimeout(this.cursorTimer),this.cursorTimer=null),this.cursorEl&&(this.cursorEl.remove(),this.cursorEl=null)}getLastCursorPoint(){return this.lastCursorPoint}cancelFly(){this.flyFrameId!=null&&(cancelAnimationFrame(this.flyFrameId),this.flyFrameId=null)}defaultFlyStart(){if(this.lastCursorPoint)return this.lastCursorPoint;const A=window.innerWidth,e=window.innerHeight;return{px:A*.82,py:e*.86}}placeCursorWrap(A,e,t,r){if(A.style.cssText=`position:absolute;left:${e.px}px;top:${e.py}px;`,A.innerHTML=jl(t),r){const s=document.createElement("div");s.className="vnr-screen-cursor-label",s.style.background=t,s.textContent=r,A.appendChild(s)}}async flyCursorTo(A,e={}){this.cancelFly(),this.cursorTimer&&(clearTimeout(this.cursorTimer),this.cursorTimer=null);const t=e.from??this.defaultFlyStart(),r=X(e.color,"#f97316"),s=q(e.fly_duration_ms,680),i=this.ensureRoot();this.hideCursor();const o=document.createElement("div");this.placeCursorWrap(o,t,r);const a=o.querySelector(".vnr-screen-cursor");a&&a.classList.add("vnr-screen-cursor-flying"),i.appendChild(o),this.cursorEl=o;const l=Math.max(72,Math.abs(t.py-A.py)*.38),c={px:(t.px+A.px)/2,py:Math.min(t.py,A.py)-l};await new Promise(u=>{const g=performance.now(),B=f=>{const m=Math.min(1,(f-g)/s),w=m<.5?2*m*m:1-Math.pow(-2*m+2,2)/2,v=1-w,C=v*v*t.px+2*v*w*c.px+w*w*A.px,y=v*v*t.py+2*v*w*c.py+w*w*A.py;o.style.left=`${C}px`,o.style.top=`${y}px`;const Q=A.px-C,x=A.py-y;if(a&&Math.hypot(Q,x)>6){const F=Math.atan2(x,Q)*180/Math.PI;a.style.transform=`rotate(${F-45}deg)`,a.style.transformOrigin="2px 2px"}m<1?this.flyFrameId=requestAnimationFrame(B):(o.style.left=`${A.px}px`,o.style.top=`${A.py}px`,this.flyFrameId=null,u())};this.flyFrameId=requestAnimationFrame(B)}),a&&a.classList.remove("vnr-screen-cursor-flying");const d=X(e.label);if(d){let u=o.querySelector(".vnr-screen-cursor-label");u||(u=document.createElement("div"),u.className="vnr-screen-cursor-label",o.appendChild(u)),u.style.background=r,u.textContent=d}this.lastCursorPoint=A;const h=q(e.duration_ms,0);return h>0&&(this.cursorTimer=setTimeout(()=>this.hideCursor(),h)),A}async outlineSelectors(A,e="#f97316",t={}){const r=A.map(s=>({css_selector:s,close:!0,color:e})).filter(s=>!!s.css_selector);return r.length===0?0:this.addStrokes(r,e,{animate:t.animate!==!1,duration_ms:t.duration_ms??600,gap_ms:t.gap_ms??60,stroke_width:t.stroke_width??De})}syncInkSvgViewport(A){const e=window.innerWidth,t=window.innerHeight;A.setAttribute("width",String(e)),A.setAttribute("height",String(t)),A.setAttribute("viewBox",`0 0 ${e} ${t}`)}ensureInkSvg(){var t;const A=this.ensureRoot();if((t=this.inkSvg)!=null&&t.isConnected)return this.syncInkSvgViewport(this.inkSvg),this.inkSvg;const e=document.createElementNS("http://www.w3.org/2000/svg","svg");return e.setAttribute("class","vnr-screen-ink-svg"),e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.setAttribute("preserveAspectRatio","none"),this.syncInkSvgViewport(e),A.appendChild(e),this.inkSvg=e,e}createCircleElement(A,e,t){if(A.cx==null||A.cy==null)return null;const r=window.innerWidth,s=window.innerHeight,i=yA(A.cx,r),o=yA(A.cy,s),a="http://www.w3.org/2000/svg";if(A.kind==="ellipse"||A.rx!=null||A.ry!=null){const c=A.rx??A.r,d=A.ry??A.r;if(c==null||d==null)return null;const h=document.createElementNS(a,"ellipse");return h.setAttribute("cx",String(i)),h.setAttribute("cy",String(o)),h.setAttribute("rx",String(yA(Number(c),r))),h.setAttribute("ry",String(yA(Number(d),s))),Ke(h,Pe(e,t)),h}if(A.r==null)return null;const l=document.createElementNS(a,"circle");return l.setAttribute("cx",String(i)),l.setAttribute("cy",String(o)),l.setAttribute("r",String(Yl(Number(A.r)))),Ke(l,Pe(e,t)),l}createFreeformElement(A,e,t){const r=X(A.color,e),s=A.stroke_width!=null?q(A.stroke_width,t):t;if(A.kind==="circle"||A.kind==="ellipse"||A.r!=null||A.rx!=null||A.ry!=null)return this.createCircleElement(A,r,s);const o=document.createElementNS("http://www.w3.org/2000/svg","path"),a=X(A.path_d);if(a)return o.setAttribute("d",a),Ke(o,Pe(r,s)),o;let l=A;if(A.css_selector){const d=Ns(A.css_selector,r);d&&(l={...A,points:d.points,close:d.close,color:d.color})}const c=Xl(l);return c.length<2?null:(o.setAttribute("d",Wl(c,pA(l.close))),Ke(o,Pe(r,s)),o)}async addStrokes(A,e="#f97316",t={}){const r=this.ensureInkSvg(),s=t.animate!==!1,i=t.duration_ms??Yn,o=t.gap_ms??zs,a=t.stroke_width??De;let l=0;for(const c of A){const d=this.createFreeformElement(c,e,a);d&&(r.appendChild(d),l+=1,s&&await Vn(d,i),s&&o>0&&await _n(o))}return l}async addInk(A,e,t){return this.addStrokes(A,e,t)}enableUserDrawing(A){const e=this.ensureRoot();if(this.userDrawActive=!0,this.userDrawColor=X(A==null?void 0:A.color,"#f97316"),this.userStrokeWidth=q(A==null?void 0:A.stroke_width,De),A!=null&&A.region){const t=window.innerWidth,r=window.innerHeight,s=A.region,i=yA(s.x,t),o=yA(s.y,r),a=yA(s.width,t),l=yA(s.height,r),c=document.createElement("div");c.className="vnr-screen-user-draw-layer",c.style.cssText=`position:fixed;left:${i}px;top:${o}px;width:${a}px;height:${l}px;pointer-events:auto;cursor:crosshair;touch-action:none;z-index:1;`,e.appendChild(c),this.userDrawLayer=c,this.bindUserDrawEvents(c)}else e.classList.add("vnr-screen-overlay-interactive"),this.bindUserDrawEvents(e)}bindUserDrawEvents(A){this.userDrawBound||(A.addEventListener("pointerdown",this.onUserPointerDown),A.addEventListener("pointermove",this.onUserPointerMove),A.addEventListener("pointerup",this.onUserPointerUp),A.addEventListener("pointercancel",this.onUserPointerUp),this.userDrawBound=!0)}unbindUserDrawEvents(A){!A||!this.userDrawBound||(A.removeEventListener("pointerdown",this.onUserPointerDown),A.removeEventListener("pointermove",this.onUserPointerMove),A.removeEventListener("pointerup",this.onUserPointerUp),A.removeEventListener("pointercancel",this.onUserPointerUp),this.userDrawBound=!1)}disableUserDrawing(){this.userDrawActive=!1,this.userDrawPath=null,this.userDrawPoints=[],this.userDrawLayer?(this.unbindUserDrawEvents(this.userDrawLayer),this.userDrawLayer.remove(),this.userDrawLayer=null):this.root&&(this.unbindUserDrawEvents(this.root),this.root.classList.remove("vnr-screen-overlay-interactive"))}handleUserPointerDown(A){if(!this.userDrawActive||A.button!==0)return;A.preventDefault(),A.stopPropagation();const e=A.currentTarget??this.root;e==null||e.setPointerCapture(A.pointerId);const t=this.ensureInkSvg(),r=document.createElementNS("http://www.w3.org/2000/svg","path");Ke(r,Pe(this.userDrawColor,this.userStrokeWidth)),this.userDrawPath=r,this.userDrawPoints=[`M ${A.clientX} ${A.clientY}`],r.setAttribute("d",this.userDrawPoints.join(" ")),t.appendChild(r)}handleUserPointerMove(A){!this.userDrawActive||!this.userDrawPath||(A.preventDefault(),this.userDrawPoints.push(`L ${A.clientX} ${A.clientY}`),this.userDrawPath.setAttribute("d",this.userDrawPoints.join(" ")))}async handleUserPointerUp(A){var t;if(!this.userDrawPath)return;A.preventDefault();const e=this.userDrawPath;this.userDrawPath=null,this.userDrawPoints=[];try{(t=A.currentTarget)==null||t.releasePointerCapture(A.pointerId)}catch{}await Vn(e,Yn)}showCursor(A,e="#f97316"){const t=A,r=Rl(t);if(!r)return null;const s=X(A.color,e),i=X(A.label)||void 0;if(pA(A.fly)||pA(t.fly))return this.flyCursorTo(r,{color:s,label:i,fly_duration_ms:q(A.fly_duration_ms??t.fly_duration_ms,680),duration_ms:q(A.duration_ms,0)}),r;this.hideCursor();const a=this.ensureRoot(),l=document.createElement("div");this.placeCursorWrap(l,r,s,i),a.appendChild(l),this.cursorEl=l,this.lastCursorPoint=r;const c=q(A.duration_ms,2500);return c>0&&(this.cursorTimer=setTimeout(()=>this.hideCursor(),c)),r}showClickRipple(A,e,t="#f97316"){const r=this.ensureRoot(),s=document.createElement("div");s.className="vnr-screen-click-ripple",s.style.cssText=`left:${A}px;top:${e}px;color:${t};`,r.appendChild(s),setTimeout(()=>s.remove(),700)}async applyInkFromArgs(A,e){const t=X(A.color||e.color,"#f97316"),r=Jn(A.label_color??e.label_color,"#ece6d9"),s=pA(A.clear)||pA(A.clear_before)||pA(e.clear_before),i=!Xs(A.animate)&&!Xs(e.animate),o=q(A.duration_ms??e.duration_ms,Yn),a=q(A.gap_ms??e.gap_ms,zs),l=q(A.stroke_width??e.stroke_width,De),c=pA(A.interactive)||pA(A.user_draw)||pA(e.interactive),d=A.interactive_region??e.interactive_region;let h;if(d&&typeof d=="object"){const w=d;h={x:q(w.x,0),y:q(w.y,0),width:q(w.width??w.w,1),height:q(w.height??w.h,1)}}const u=[];for(const w of Gl(A.labels??e.labels)){const v=js(w,r);v&&u.push(v)}let g=Ws(A.strokes??e.strokes);g.length===0&&(g=Ws(A.annotations??e.annotations));const B=[];for(const w of g){const v=_l(w),C=Vl(v,r);if(C){u.push(C);continue}const y=Zs(v,t,l);y&&B.push(y)}if(B.length===0){const w=X(A.css_selector??A.selector??e.css_selector??e.selector);if(w){const v=Ns(w,t);v&&B.push({css_selector:w,...v,stroke_width:l})}}if(B.length===0){const w=Zs({kind:A.kind??A.shape??e.kind,cx:A.cx??A.center_x??e.cx,cy:A.cy??A.center_y??e.cy,r:A.r??A.radius??e.r,rx:A.rx??e.rx,ry:A.ry??e.ry,points:A.points??e.points,path_d:A.path_d??A.path??A.d??e.path_d??e.path,close:A.close??e.close,css_selector:A.css_selector??A.selector??e.css_selector??e.selector,from_x:A.from_x??e.from_x,from_y:A.from_y??e.from_y,to_x:A.to_x??e.to_x,to_y:A.to_y??e.to_y,color:t,stroke_width:l},t,l);w&&B.push(w)}s&&this.clearInk();let f=0;B.length>0&&(f=await this.addStrokes(B,t,{animate:i,duration_ms:o,gap_ms:a,stroke_width:l}));const m=this.addTextLabels(u,r);return c&&this.enableUserDrawing({color:t,stroke_width:l,region:h}),{strokes:f,labels:m}}}let ue=null;function Ne(){return ue||(ue=new Zl),ue}function Wn(){ue==null||ue.clear()}function ql(n,A){const e=document.elementsFromPoint(n,A);for(const t of e)if(t instanceof HTMLElement&&!t.closest(".vnr-screen-overlay-root"))return t;return null}function $l(n){try{n.focus({preventScroll:!0})}catch{}const A=n.tagName.toLowerCase(),e=A==="input"?n.type.toLowerCase():"";if((A==="button"||A==="a"||["submit","button","checkbox","radio","reset"].includes(e))&&typeof n.click=="function"){n.click();return}const r={bubbles:!0,cancelable:!0,view:window,button:0,buttons:1};n.dispatchEvent(new MouseEvent("mousedown",r)),n.dispatchEvent(new MouseEvent("mouseup",r)),n.dispatchEvent(new MouseEvent("click",r))}const jn=new Map,Zn=new Map;function Oe(n,A=""){return typeof n=="string"?n:A}function Ac(n){jn.clear(),Zn.clear();for(const A of n.elements)A.element_id&&jn.set(A.element_id,A),Zn.set(A.css_selector,A)}function ec(n){return jn.get(n.trim())}function tc(n,A=48){return n.elements.slice(0,A).map(e=>{var i;const t=e.element_id??"?",r=e.label.slice(0,56).replace(/\s+/g," ");let s=`${t} ${e.kind} "${r}" center=(${e.center_x.toFixed(3)},${e.center_y.toFixed(3)}) sel=${e.css_selector}`;if((i=e.stroke_points)!=null&&i.length){const o=e.stroke_points.map(a=>[Number(a.x.toFixed(3)),Number(a.y.toFixed(3))]);s+=` stroke_points=${JSON.stringify(o)}`}return s}).join(`
|
|
2511
|
+
`)}function nc(n){if(n.length===0)return null;let A=0,e=0;for(const s of n)A+=s.x,e+=s.y;const t=A/n.length,r=e/n.length;return $A(t,r)}function xt(n,A={}){var i;const e=Oe(n.element_id??n.target??n.element??A.element_id??A.target).trim();if(e){const o=ec(e);if(o){const a=(i=o.stroke_points)!=null&&i.length?nc(o.stroke_points):null,l=a?null:zn(o.css_selector),c=a??l??$A(o.center_x,o.center_y);return{element_id:o.element_id,css_selector:o.css_selector,point:c,label:Oe(n.label,o.label),kind:o.kind}}}const t=Oe(n.css_selector??n.selector??A.css_selector??A.selector).trim();if(t){const o=zn(t);if(o){const a=Zn.get(t);return{css_selector:t,point:o,label:Oe(n.label,(a==null?void 0:a.label)??""),element_id:a==null?void 0:a.element_id,kind:a==null?void 0:a.kind}}}const r=n.x??n.client_x??A.x,s=n.y??n.client_y??A.y;if(r!=null&&s!=null){const o=Number(r),a=Number(s);if(Number.isFinite(o)&&Number.isFinite(a))return{point:$A(o,a),label:Oe(n.label)}}return null}function rc(n,A={}){const e=n.targets??n.element_ids??n.elements??A.targets??A.element_ids;if(Array.isArray(e)){const r=[];for(const s of e)if(typeof s=="string"){const i=xt({element_id:s},A);i&&r.push(i)}else if(s&&typeof s=="object"){const i=xt(s,A);i&&r.push(i)}if(r.length>0)return r}const t=xt(n,A);return t?[t]:[]}function Re(n,A=""){return typeof n=="string"?n:A}function ge(n,A=!0){if(n==null)return A;if(n===!0||n===1)return!0;if(n===!1||n===0)return!1;const e=String(n).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"?!0:e==="false"||e==="0"||e==="no"?!1:A}function sc(n,A,e,t){const r=n.args??{},s=n.clientFields??{},i=Re(r.prompt??r.message??s.default_prompt).trim(),o=Number(r.max_elements??s.max_elements??64),a=ge(r.include_image??s.include_image,!1),l=Number(r.max_width??s.max_width??1280),c=Re(r.reason??s.reason,"page_scan");if(typeof document>"u"){e("Page scan is only available in browser environments");return}(async()=>{try{const d=_s({maxElements:Number.isFinite(o)?o:64});Ac(d);const h=tc(d),g=`${i?`Page scanned. Context: ${i}`:"Visible page scanned — use element ids below for point_at and outline_targets."}
|
|
2512
|
+
|
|
2513
|
+
DOM-FIRST GUIDE (better than screenshot-only tutors):
|
|
2514
|
+
- Call point_at with element_id (e.g. e3) from this scan — cursor flies to the live element.
|
|
2515
|
+
- Call outline_targets with element_ids to draw animated outlines on the real DOM.
|
|
2516
|
+
- Prefer element_id or css_selector; raw x/y only as fallback.
|
|
2517
|
+
|
|
2518
|
+
viewport=${d.viewport.width}x${d.viewport.height} · ${d.elements.length} elements
|
|
2519
|
+
coordinate_system=${d.coordinate_system}
|
|
2520
|
+
|
|
2521
|
+
CATALOG (id kind "label" center sel):
|
|
2522
|
+
${h}`;A({status:"success",preset_id:b.PageScan,viewport:d.viewport,element_count:d.elements.length,catalog:h,elements:d.elements,coordinate_system:d.coordinate_system,message:g,guide:'Next: point_at { element_id: "eN", label: "..." } or outline_targets { targets: ["e1","e5"] }'}),a&&(t!=null&&t.uploadMediaForToolResult)&&(async()=>{try{let B=await Ls();Number.isFinite(l)&&l>0&&(B=Ts(B,l));const f=await Rn(B),m=new File([f],`page-scan-${Date.now()}.jpg`,{type:"image/jpeg"});await t.uploadMediaForToolResult(m,c)}catch{}})()}catch(d){const h=d instanceof Error?d.message:"Page scan failed";e(h,{status:"cancelled"})}})()}function ic(n,A,e){const t=n.args??{},r=n.clientFields??{},s=Re(t.color??r.color,"#f97316"),i=ge(t.fly??r.fly,!0),o=ge(t.outline??r.outline,!0),a=Number(t.fly_duration_ms??r.fly_duration_ms??680),l=Number(t.duration_ms??r.duration_ms??0),c=ge(t.clear_before??r.clear_before,!1),d=xt(t,r);if(!d){e("No valid target — provide element_id from page_scan, css_selector, or x/y");return}const h=Re(t.label,d.label)||void 0,u=Ne();(async()=>(c&&u.clearInk(),o&&d.css_selector&&await u.outlineSelectors([d.css_selector],s,{animate:!0,duration_ms:520,gap_ms:0}),i?await u.flyCursorTo(d.point,{color:s,label:h,fly_duration_ms:a,duration_ms:l}):u.showCursor({x:d.point.px/window.innerWidth,y:d.point.py/window.innerHeight,label:h,color:s,duration_ms:l}),A({status:"success",preset_id:b.PointAt,message:h?`Pointing at: ${h}`:"Cursor placed on target",element_id:d.element_id,css_selector:d.css_selector,x:d.point.px,y:d.point.py,label:h})))()}function oc(n,A,e){const t=n.args??{},r=n.clientFields??{},s=Re(t.color??r.color,"#f97316"),i=ge(t.animate??r.animate,!0),o=Number(t.duration_ms??r.duration_ms??600),a=ge(t.clear_before??r.clear_before,!1),l=rc(t,r);if(l.length===0){e('No valid targets — provide targets: ["e1","e3"] or element_id / css_selector');return}const c=l.map(h=>h.css_selector).filter(h=>!!h);if(c.length===0){e("Targets resolved but no live css_selector — run page_scan first");return}const d=Ne();(async()=>{a&&d.clearInk();const h=await d.outlineSelectors(c,s,{animate:i,duration_ms:o,gap_ms:50});A({status:"success",preset_id:b.OutlineTargets,message:`Outlined ${h} element(s) on the live page`,outlined_count:h,element_ids:l.map(u=>u.element_id).filter(Boolean),selectors:c})})()}function ac(n,A){Wn(),A({status:"success",preset_id:b.ClearGuide,message:"Guide overlay cleared (cursor, ink, outlines)"})}const qs="vanira:agent-playback-ended",lc="You might have missed the whiteboard — call type_on_whiteboard or draw_on_board so the student can see what you explained. if you are on other task or waiting for user to show something then fine";function cc(n){return!!(n.has_notes_on_board||n.has_diagram_geometry)}class dc{constructor(A,e){p(this,"active",!1);p(this,"sendContext",null);p(this,"getSnapshot");p(this,"isBoardBusy");p(this,"onAgentTurnEnd");this.getSnapshot=A,this.isBoardBusy=e,this.onAgentTurnEnd=()=>this.checkAfterAgentTurn()}start(A){if(this.active){this.sendContext=A;return}this.active=!0,this.sendContext=A,window.addEventListener(qs,this.onAgentTurnEnd)}stop(){this.active&&(this.active=!1,this.sendContext=null,window.removeEventListener(qs,this.onAgentTurnEnd))}checkAfterAgentTurn(){if(!this.active||!this.sendContext||this.isBoardBusy())return;const A=this.getSnapshot();if(cc(A))return;const e={board_turn_check:{has_whiteboard:!1,...A,message:lc}};try{this.sendContext(e)}catch{}}}function $s(){var n;if(typeof window>"u")return!1;try{if(window.__VANIRA_DEBUG__===!0||localStorage.getItem("vanira:debug")==="1"||new URLSearchParams(window.location.search).has("vanira_debug"))return!0}catch{}try{if(((n={url:HA&&HA.tagName.toUpperCase()==="SCRIPT"&&HA.src||new URL("vanira-sdk.js",document.baseURI).href}.env)==null?void 0:n.DEV)===!0)return!0}catch{}return!1}let Et=null;function Ai(){return Et===null&&(Et=$s()),Et}function hc(){Et=$s()}function ei(n,A,e){if(!(typeof window>"u"))try{const t=window.__VANIRA_DEBUG_LOG__??[];for(t.push({t:Date.now(),tag:n,message:A,data:e});t.length>250;)t.shift();window.__VANIRA_DEBUG_LOG__=t}catch{}}function BA(n,A,e){Ai()&&ei(n,A,e)}function uc(n,A,e){Ai()&&ei(n,`WARN ${A}`,e)}const OA=800,RA=500,gc="#4A9EFF",Ge=2e3,ti=80;function ni(n){if(!document.getElementById("vnr-board-line-styles")){const e=document.createElement("style");e.id="vnr-board-line-styles",e.textContent=`
|
|
2523
|
+
.vnr-whiteboard-draw-layer path.vnr-board-stroke,
|
|
2524
|
+
.vnr-whiteboard-draw-layer line.vnr-board-stroke,
|
|
2525
|
+
.vnr-whiteboard-draw-layer circle.vnr-board-stroke,
|
|
2526
|
+
.vnr-whiteboard-draw-layer ellipse.vnr-board-stroke {
|
|
2527
|
+
fill: none;
|
|
2528
|
+
stroke: #ffffff;
|
|
2529
|
+
stroke-width: 6px;
|
|
2530
|
+
stroke-linecap: round;
|
|
2531
|
+
stroke-linejoin: round;
|
|
2532
|
+
vector-effect: non-scaling-stroke;
|
|
2533
|
+
}
|
|
2534
|
+
.vnr-whiteboard-draw-layer text.vnr-board-label {
|
|
2535
|
+
fill: #4A9EFF !important;
|
|
2536
|
+
font-family: 'Architects Daughter', 'Caveat', cursive, sans-serif;
|
|
2537
|
+
font-size: 28px;
|
|
2538
|
+
paint-order: stroke fill;
|
|
2539
|
+
}
|
|
2540
|
+
`,document.head.appendChild(e)}if(n.querySelector("#vnr-chalk-defs"))return;const A=document.createElementNS("http://www.w3.org/2000/svg","defs");A.id="vnr-chalk-defs",n.appendChild(A)}function Ae(n){let A=n.querySelector(".vnr-whiteboard-draw-layer");return A||(A=document.createElementNS("http://www.w3.org/2000/svg","svg"),A.setAttribute("class","vnr-whiteboard-draw-layer"),A.setAttribute("viewBox",`0 0 ${OA} ${RA}`),A.setAttribute("preserveAspectRatio","xMidYMid meet"),A.style.position="absolute",A.style.inset="0",A.style.width="100%",A.style.height="100%",A.style.pointerEvents="none",A.style.zIndex="0",ni(A),n.insertBefore(A,n.firstChild),A)}function Ut(n){[...n.childNodes].forEach(A=>{A instanceof SVGDefsElement||A.remove()})}function ri(n){ni(n)}const Ft=6,pc="#ffffff";function eA(n,A){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"&&n.trim()!==""){const e=Number(n);if(Number.isFinite(e))return e}return A}function fA(n,A=""){return typeof n=="string"?n:A}function pe(n){if(n===!0||n===1)return!0;if(typeof n=="string"){const A=n.trim().toLowerCase();return A==="true"||A==="1"||A==="yes"}return!1}function si(n){if(n===!1||n===0)return!0;if(typeof n=="string"){const A=n.trim().toLowerCase();return A==="false"||A==="0"||A==="no"}return!1}function ii(n){if(n===!0||n===1)return!0;if(n===!1||n===0||n===null||n===void 0||n==="")return!1;const A=String(n).trim().toLowerCase();return A==="true"||A==="1"||A==="yes"}function ee(n,A){return n>=0&&n<=1?n*A:n}function qn(n,A){return{bx:ee(n,OA),by:ee(A,RA)}}function oi(n){if(Array.isArray(n))return n;if(typeof n=="string"){const A=n.trim();if(!A)return[];try{const t=JSON.parse(A);if(Array.isArray(t))return t.length>0&&Array.isArray(t[0])?[{points:t,close:!0}]:t}catch{}const e=A.split(/\s+/).map(t=>{const[r,s]=t.split(","),i=Number(r),o=Number(s);return Number.isFinite(i)&&Number.isFinite(o)?[i,o]:null}).filter(t=>t!=null);if(e.length>=2)return[{points:e,close:!0}]}return[]}function Bc(n){if(Array.isArray(n))return n;if(typeof n=="string"){const A=n.trim();if(!A)return[];try{const e=JSON.parse(A);return Array.isArray(e)?e:[]}catch{return[]}}return[]}function ai(n,A){const e=fA(n,A).trim().toLowerCase();return!e||e==="#000"||e==="#000000"||e==="black"?A:fA(n,A)}function li(n,A){if(!n||typeof n!="object")return null;const e=n,t=fA(e.text??e.label??e.label_text??e.annotation??(typeof e.annotations=="string"?e.annotations:"")).trim();if(!t)return null;const r=e.x??e.label_x??e.client_x,s=e.y??e.label_y??e.client_y;if(r==null||s==null)return null;const i=Number(r),o=Number(s);return!Number.isFinite(i)||!Number.isFinite(o)?null:{x:i,y:o,text:t,color:ai(e.color??e.label_color,A),font_size:e.font_size!=null?eA(e.font_size,28):void 0}}function fc(n,A){if(!n||typeof n!="object")return null;const e=n;return e.text!=null||e.label!=null||e.label_text!=null||e.annotation!=null||typeof e.annotations=="string"?li(n,A):null}function wc(n){return Array.isArray(n)&&n.length>0&&Array.isArray(n[0])?{points:n,close:!0}:n}function ci(n){if(Array.isArray(n)&&n.length>=2){const A=Number(n[0]),e=Number(n[1]);return!Number.isFinite(A)||!Number.isFinite(e)?null:qn(A,e)}if(n&&typeof n=="object"&&"x"in n&&"y"in n){const A=Number(n.x),e=Number(n.y);return!Number.isFinite(A)||!Number.isFinite(e)?null:qn(A,e)}return null}function mc(n){return ee(n,Math.min(OA,RA))}function Cc(n,A,e,t){const r=fA(n.kind||n.shape).toLowerCase(),s=r==="circle"||r==="ellipse"||n.r!=null||n.radius!=null||n.rx!=null||n.ry!=null;let i=n.cx??n.center_x??n.x,o=n.cy??n.center_y??n.y,a=n.r??n.radius;const l=n.rx,c=n.ry;if(Array.isArray(t)&&t.length>=3){const g=[];for(const B of t){const f=ci(B);f&&g.push(f)}if(g.length>=8&&s){const B=g.map(C=>C.bx),f=g.map(C=>C.by),m=(Math.min(...B)+Math.max(...B))/2,w=(Math.min(...f)+Math.max(...f))/2,v=Math.max(...g.map(C=>Math.hypot(C.bx-m,C.by-w)));i=i??m/OA,o=o??w/RA,a=a??v/Math.min(OA,RA)}}if(!s||i==null||o==null)return null;const d=Number(i),h=Number(o);if(!Number.isFinite(d)||!Number.isFinite(h))return null;const u={kind:r==="ellipse"||l!=null||c!=null?"ellipse":"circle",cx:d,cy:h,color:fA(n.color,A),stroke_width:n.stroke_width!=null?eA(n.stroke_width,e):e};return l!=null||c!=null?(u.rx=Number(l??c),u.ry=Number(c??l),u):a!=null&&Number.isFinite(Number(a))?(u.r=Number(a),u):null}function $n(n,A,e){if(!n||typeof n!="object")return null;const t=n,r=fA(t.path_d||t.path||t.d),s=fA(t.color,A),i=t.stroke_width!=null?eA(t.stroke_width,e):e;if(r)return{path_d:r,close:pe(t.close),color:s,stroke_width:i};const o=t.points,a=Cc(t,A,e,o);if(a)return a;let l=o;if(!Array.isArray(l)){const c=t.from_x??t.p1_x??t.x1,d=t.from_y??t.p1_y??t.y1,h=t.to_x??t.p2_x??t.x2,u=t.to_y??t.p2_y??t.y2;c!=null&&d!=null&&h!=null&&u!=null&&(l=[[c,d],[h,u]])}if(Array.isArray(l)&&l.length>=2){const c=fA(t.kind||t.shape_type||t.type).toLowerCase(),d=pe(t.close??t.close_path)||c==="triangle"||c==="polygon"||c==="rectangle";return{points:l,close:d,color:s,stroke_width:i}}return null}function Ar(n,A,e,t,r){const s=eA(n[A])??(t?eA(n[t]):void 0),i=eA(n[e])??(r?eA(n[r]):void 0);return s===void 0||i===void 0?null:[s,i]}function yc(n,A,e){const t=[],r=[],s=fA(n.label_text??n.text).trim(),i=eA(n.label_x??n.x),o=eA(n.label_y??n.y);s&&i!=null&&o!=null&&r.push({x:i,y:o,text:s,color:e});const a=Ar(n,"p1_x","p1_y","x1","y1"),l=Ar(n,"p2_x","p2_y","x2","y2"),c=Ar(n,"p3_x","p3_y","x3","y3");if(a&&l&&c)return t.push({points:[a,l,c],close:!0,color:A}),{strokes:t,labels:r};if(a&&l)return t.push({points:[a,l],close:!1,color:A}),{strokes:t,labels:r};const d=$n({...n,color:n.color??A},A,eA(n.stroke_width,Ft)??Ft);if(d)return t.push(d),{strokes:t,labels:r};const h=eA(n.rect_x),u=eA(n.rect_y),g=eA(n.rect_width??n.width),B=eA(n.rect_height??n.height);return h!=null&&u!=null&&g!=null&&B!=null&&t.push({points:[[h,u],[h+g,u],[h+g,u+B],[h,u+B]],close:!0,color:A}),{strokes:t,labels:r}}function vc(n,A={}){const e={...A,...n},t=fA(e.color??A.color,pc),r=ai(e.label_color??A.label_color,gc),s=eA(e.stroke_width??A.stroke_width,Ft)??Ft,i=ii(e.clear_old_diagrams_on_board)||ii(e.clear_drawings)||pe(e.clear)||pe(e.clear_before)||pe(A.clear_before),o=si(e.animate)||si(A.animate);let a=Math.max(0,eA(e.shape_duration_ms??e.duration_ms??A.duration_ms,Ge)??Ge),l=Math.max(0,eA(e.shape_gap_ms??e.gap_ms??A.gap_ms,ti)??ti),c=!o;c&&a>0&&a<Ge&&(a=Ge),a>=Ge&&(c=!0);const d=[];for(const B of Bc(e.labels??A.labels)){const f=li(B,r);f&&d.push(f)}let h=oi(e.strokes??A.strokes);h.length===0&&(h=oi(e.annotations??A.annotations));const u=[];for(const B of h){const f=wc(B),m=fc(f,r);if(m){d.push(m);continue}const w=$n(f,t,s);w&&u.push(w)}if(u.length===0){const B=e.points??A.points;if(B!=null){const f=$n({points:B,close:e.close??e.close_path??!0,color:t},t,s);f&&u.push(f)}}const g=yc(e,t,r);for(const B of g.labels)d.some(f=>f.text===B.text&&f.x===B.x&&f.y===B.y)||d.push(B);return u.length===0&&u.push(...g.strokes),{strokes:u,labels:d,clearBefore:i,animate:c,durationMs:a,gapMs:l,strokeWidth:s,strokeColor:t,labelColor:r}}function bc(n){const A=n.points;if(!Array.isArray(A))return[];const e=[];for(const t of A){const r=ci(t);r&&e.push(r)}return e}function Qc(n,A){if(n.length===0)return"";const e=n.map((t,r)=>`${r===0?"M":"L"} ${t.bx} ${t.by}`).join(" ");return A&&n.length>=3?`${e} Z`:e}function It(n,A){return{class:"vnr-board-stroke",fill:"none",stroke:n,"stroke-width":String(A),"stroke-linecap":"round","stroke-linejoin":"round"}}function St(n,A){for(const[e,t]of Object.entries(A))n.setAttribute(e,t)}function xc(n,A,e){if(n.cx==null||n.cy==null)return null;const t=ee(n.cx,OA),r=ee(n.cy,RA),s="http://www.w3.org/2000/svg";if(n.kind==="ellipse"||n.rx!=null||n.ry!=null){const o=n.rx??n.r,a=n.ry??n.r;if(o==null||a==null)return null;const l=document.createElementNS(s,"ellipse");return l.setAttribute("cx",String(t)),l.setAttribute("cy",String(r)),l.setAttribute("rx",String(ee(Number(o),OA))),l.setAttribute("ry",String(ee(Number(a),RA))),St(l,It(A,e)),l}if(n.r==null)return null;const i=document.createElementNS(s,"circle");return i.setAttribute("cx",String(t)),i.setAttribute("cy",String(r)),i.setAttribute("r",String(mc(Number(n.r)))),St(i,It(A,e)),i}function di(n,A,e){const t=fA(n.color,A),r=n.stroke_width!=null?eA(n.stroke_width,e)??e:e;if(n.kind==="circle"||n.kind==="ellipse"||n.r!=null||n.rx!=null||n.ry!=null)return xc(n,t,r);const i=document.createElementNS("http://www.w3.org/2000/svg","path"),o=fA(n.path_d);if(o)return i.setAttribute("d",o),St(i,It(t,r)),i;const a=bc(n);return a.length<2?null:(i.setAttribute("d",Qc(a,pe(n.close))),St(i,It(t,r)),i)}function hi(n,A){const e="http://www.w3.org/2000/svg",t=qn(n.x,n.y),r=document.createElementNS(e,"text");return r.setAttribute("class","vnr-board-label"),r.setAttribute("x",String(t.bx)),r.setAttribute("y",String(t.by)),r.setAttribute("fill",n.color||A),r.setAttribute("font-size",String(n.font_size??28)),r.setAttribute("font-family","'Architects Daughter', 'Caveat', cursive, sans-serif"),r.setAttribute("text-anchor","middle"),r.setAttribute("dominant-baseline","hanging"),r.textContent=n.text,r}function Ec(n,A){return A<=0?(n.style.opacity="1",Promise.resolve()):(n.style.opacity="0",n.getBoundingClientRect(),n.style.transition=`opacity ${Math.min(A,400)}ms ease-out`,n.style.opacity="1",_n(Math.min(A,400)))}function ui(n,A,e){ri(n),Ut(n);for(const t of A.strokes){const r=di(t,e.strokeColor,e.strokeWidth);r&&n.appendChild(r)}for(const t of A.labels)n.appendChild(hi(t,e.labelColor))}async function Uc(n,A,e,t){ri(n);let r=0,s=0;for(const i of A){if(t.isAborted())break;const o=di(i,t.strokeColor,t.strokeWidth);o&&(n.appendChild(o),r+=1,t.animate&&t.durationMs>0&&(await Vn(o,t.durationMs),t.gapMs>0&&await _n(t.gapMs)))}for(const i of e){if(t.isAborted())break;const o=hi(i,t.labelColor);n.appendChild(o),s+=1,t.animate&&t.durationMs>0&&await Ec(o,t.durationMs)}return{strokesDrawn:r,labelsDrawn:s}}function Ht(){return{strokes:[],labels:[]}}function Ve(n){return n.toLowerCase().replace(/[^a-z0-9]/g,"_")}function Fc(n){const A=n==null?void 0:n.toLowerCase().trim();if(A){if(A==="tel")return"phone";if(A==="dropdown"||A==="drop_down"||A==="picklist"||A==="combobox")return"select";if(["text","textarea","select","radio","checkbox","email","phone","number","date"].includes(A))return A}}function gi(n,A,e=[]){const t=Fc(A);return t||(e.length>0?"select":n.includes("email")?"email":n.includes("phone")?"phone":n.includes("date")&&!n.includes("update")?"date":"text")}function Ic(n){return n?Array.isArray(n)?n.map(A=>{if(typeof A=="string")return A;if(A&&typeof A=="object"){const e=A;return{label:String(e.label??e.value??""),value:String(e.value??e.label??"")}}return String(A)}):typeof n=="string"?n.split(",").map(A=>A.trim()).filter(Boolean):[]:[]}function Sc(n){const A=n.value??n.default??n.defaultValue??n.prefill;if(!(A==null||A===""))return String(A)}function er(n){const A=String(n.label??n.name??n.title??n.field??n.id??n.key??"").trim();if(!A)return null;const e=String(n.id??n.key??Ve(A)),t=Ic(n.options??n.choices??n.values),r=gi(e,String(n.type??""),t);return{id:e,label:A,type:r,required:n.required!==!1,placeholder:n.placeholder?String(n.placeholder):void 0,value:Sc(n),options:t}}function pi(n){const A=n.trim(),e=Ve(A);return{id:e,label:A,type:gi(e),required:!0,placeholder:`Enter your ${A.toLowerCase()}`,options:[]}}function Lt(n){const A=n.trim();return A?A.startsWith("[")||A.startsWith("{")||A.startsWith('"')?!0:A.includes('"type"')||A.includes('"options"')||A.includes('"label"'):!1}function Hc(n){let A=n.trim();for(let e=0;e<3&&typeof A=="string";e++){const t=A.trim();if(!Lt(t))break;try{A=JSON.parse(t)}catch{break}}return A}function Tt(n){const A=Hc(n);if(Array.isArray(A)||A&&typeof A=="object")return A;if(typeof A=="string"){const e=A.trim();if(e.startsWith("{")&&!e.startsWith("["))try{return JSON.parse(`[${e}]`)}catch{return null}}return null}function Lc(n){return n.length<2?!1:n.every(A=>typeof A=="string"&&(A.includes('"')||A.includes("{")||A.includes("[")))}function Tc(n){return Tt(n.map(A=>A.trim()).join(","))}function _e(n){if(n==null)return[];if(typeof n=="string"){const A=n.trim();if(!A)return[];if(Lt(A)){const e=Tt(A);return e!==null?_e(e):[]}return A.split(",").map(e=>e.trim()).filter(Boolean).map(pi)}if(Array.isArray(n)){if(n.length===1&&typeof n[0]=="string"){const e=n[0].trim();if(Lt(e)){const t=Tt(e);if(t!==null)return _e(t)}}if(Lc(n)){const e=Tc(n);if(e!==null)return _e(e)}const A=[];for(const e of n){if(typeof e=="string"){const t=e.trim();if(t.startsWith("{"))try{const r=er(JSON.parse(t));if(r){A.push(r);continue}}catch{}if(Lt(t)){const r=Tt(t);if(r!==null){A.push(..._e(r));continue}}A.push(pi(e));continue}if(e&&typeof e=="object"){const t=er(e);t&&A.push(t)}}return A}if(typeof n=="object"){const A=er(n);return A?[A]:[]}return[]}const Mc=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,kc=/^\+?[0-9\s\-().]{7,20}$/,Dc=/^\d{4}-\d{2}-\d{2}$/;function Bi(n,A){const e=n[A.id];return A.type==="checkbox"?e===!0||e==="true"?"true":"false":String(e??"").trim()}function Pc(n,A){const e={};for(const t of n){const r=Bi(A,t);if(t.type==="checkbox"){t.required&&r!=="true"&&(e[t.id]=`${t.label} is required`);continue}if(t.required&&!r){e[t.id]=`${t.label} is required`;continue}if(!r)continue;const s=Kc(t.type,r,t.label);s&&(e[t.id]=s),(t.type==="select"||t.type==="radio")&&t.options.length>0&&(t.options.map(o=>typeof o=="string"?o:o.value).includes(r)||(e[t.id]=`Select a valid ${t.label}`))}return e}function Kc(n,A,e){switch(n){case"email":return Mc.test(A)?null:`Enter a valid ${e}`;case"phone":return kc.test(A)?null:`Enter a valid phone number for ${e}`;case"number":return Number.isFinite(Number(A))?null:`${e} must be a number`;case"date":return Dc.test(A)?Number.isNaN(Date.parse(A))?`Enter a valid ${e}`:null:`${e} must be YYYY-MM-DD`;default:return null}}function Nc(n,A){const e={};for(const t of n)e[t.id]=Bi(A,t);return e}function fi(n){if(n==null)return{};if(typeof n=="string"){const A=n.trim();if(!A)return{};try{return fi(JSON.parse(A))}catch{return{}}}return typeof n=="object"&&!Array.isArray(n)?n:{}}function Oc(n,A){const e=n.prefill??n.values??n.initial_values??n.defaults??A.prefill??A.values??A.initial_values??A.defaults;return fi(e)}function tr(n,A){if(n.type==="checkbox"){if(typeof A=="boolean")return A;const e=String(A).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}return String(A??"").trim()}function Rc(n,A){const e=[n.id,n.label,n.label.toLowerCase()];for(const r of e){if(!(r in A))continue;const s=A[r];if(!(s==null||s===""))return tr(n,s)}const t=Ve(n.label);for(const[r,s]of Object.entries(A))if(!(s==null||s==="")&&(r===t||Ve(r)===t||Ve(r)===n.id))return tr(n,s)}function Gc(n,A={}){const e={};for(const t of n){if(t.value!==void 0){e[t.id]=tr(t,t.value);continue}const r=Rc(t,A);e[t.id]=r!==void 0?r:t.type==="checkbox"?!1:""}return e}const wi="vanira:board_abort";function nr(n){if(!n)return"";if(typeof n=="string"){if(n.includes("T")||!isNaN(Date.parse(n)))try{return new Date(n).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})}catch{}return n}if(typeof n=="object"){const A=n.start||n.startTime||n.time||n.slot,e=n.end||n.endTime;if(A){let t=String(A),r=e?String(e):"";try{(t.includes("T")||!isNaN(Date.parse(t)))&&(t=new Date(t).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),r&&(r.includes("T")||!isNaN(Date.parse(r)))&&(r=new Date(r).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}))}catch{}return r?`${t} - ${r}`:t}}return String(n)}function Vc(n,A,e,t){let r=Date.UTC(n,A,e,0,0,0,0),s=Date.UTC(n,A,e,23,59,59,999);if(t)try{const i=new Date(Date.UTC(n,A,e,12,0,0)),a=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}).formatToParts(i),l=v=>{var C;return(C=a.find(y=>y.type===v))==null?void 0:C.value},c=parseInt(l("year")||"0",10),d=parseInt(l("month")||"0",10)-1,h=parseInt(l("day")||"0",10),u=parseInt(l("hour")||"0",10),g=parseInt(l("minute")||"0",10),B=parseInt(l("second")||"0",10),f=u===24?0:u,w=Date.UTC(c,d,h,f,g,B,0)-i.getTime();r=Date.UTC(n,A,e,0,0,0,0)-w,s=Date.UTC(n,A,e,23,59,59,999)-w}catch{}return{start:new Date(r),end:new Date(s)}}function _c(n,A){if(!A){const e=-n.getTimezoneOffset(),t=e>=0?"+":"-",r=i=>String(i).padStart(2,"0"),s=i=>String(i).padStart(3,"0");return n.getFullYear()+"-"+r(n.getMonth()+1)+"-"+r(n.getDate())+"T"+r(n.getHours())+":"+r(n.getMinutes())+":"+r(n.getSeconds())+"."+s(n.getMilliseconds())+t+r(Math.floor(Math.abs(e)/60))+":"+r(Math.abs(e)%60)}try{const t=new Intl.DateTimeFormat("en-US",{timeZone:A,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}).formatToParts(n),r=x=>{var F;return((F=t.find(I=>I.type===x))==null?void 0:F.value)||"0"},s=r("year"),i=r("month").padStart(2,"0"),o=r("day").padStart(2,"0");let a=parseInt(r("hour"),10);a===24&&(a=0);const l=String(a).padStart(2,"0"),c=r("minute").padStart(2,"0"),d=r("second").padStart(2,"0"),h=String(n.getMilliseconds()).padStart(3,"0"),u=parseInt(s,10),g=parseInt(i,10)-1,B=parseInt(o,10),m=Date.UTC(u,g,B,a,parseInt(c,10),parseInt(d,10),n.getMilliseconds())-n.getTime(),w=Math.round(m/6e4),v=w>=0?"+":"-",C=Math.abs(w),y=String(Math.floor(C/60)).padStart(2,"0"),Q=String(C%60).padStart(2,"0");return`${s}-${i}-${o}T${l}:${c}:${d}.${h}${v}${y}:${Q}`}catch{return n.toISOString()}}const Yc=`
|
|
2541
|
+
.vnr-overlay {
|
|
2542
|
+
position: fixed; inset: 0; z-index: 2147483647;
|
|
2543
|
+
background: rgba(0,0,0,0.45);
|
|
2544
|
+
backdrop-filter: blur(4px);
|
|
2545
|
+
display: flex; align-items: center; justify-content: center; padding: 16px;
|
|
2546
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
2547
|
+
box-sizing: border-box;
|
|
2548
|
+
}
|
|
2549
|
+
/* Whiteboard sits below vanira-convai widget (voice pill stays on top) */
|
|
2550
|
+
.vnr-overlay.vnr-whiteboard-overlay {
|
|
2551
|
+
z-index: 2147483640;
|
|
2552
|
+
background: transparent !important;
|
|
2553
|
+
backdrop-filter: none !important;
|
|
2554
|
+
-webkit-backdrop-filter: none !important;
|
|
2555
|
+
pointer-events: none;
|
|
2556
|
+
}
|
|
2557
|
+
.vnr-overlay.vnr-whiteboard-overlay .vnr-whiteboard-modal {
|
|
2558
|
+
pointer-events: auto;
|
|
2559
|
+
}
|
|
2560
|
+
.vnr-overlay.vnr-whiteboard-overlay-expanded {
|
|
2561
|
+
display: flex;
|
|
2562
|
+
align-items: center;
|
|
2563
|
+
justify-content: center;
|
|
2564
|
+
padding: 16px;
|
|
2565
|
+
padding-bottom: max(100px, calc(20px + env(safe-area-inset-bottom)));
|
|
2566
|
+
}
|
|
2567
|
+
.vnr-overlay.vnr-whiteboard-overlay-reduced {
|
|
2568
|
+
display: block;
|
|
2569
|
+
padding: 0;
|
|
2570
|
+
}
|
|
2571
|
+
.vnr-modal {
|
|
2572
|
+
background: #fff; border-radius: 16px;
|
|
2573
|
+
box-shadow: 0 25px 60px rgba(0,0,0,0.25);
|
|
2574
|
+
width: 100%; max-width: 400px; max-height: 88vh;
|
|
2575
|
+
overflow-y: auto; box-sizing: border-box;
|
|
2576
|
+
padding: 20px;
|
|
2577
|
+
}
|
|
2578
|
+
.vnr-close-btn {
|
|
2579
|
+
position: absolute; top: 16px; right: 16px;
|
|
2580
|
+
background: none; border: none; cursor: pointer;
|
|
2581
|
+
color: #d1d5db; line-height: 1; padding: 4px;
|
|
2582
|
+
}
|
|
2583
|
+
.vnr-close-btn:hover { color: #6b7280; }
|
|
2584
|
+
.vnr-title { margin: 0 0 8px; font-size: 17px; font-weight: 700; color: #111; letter-spacing: -0.02em; }
|
|
2585
|
+
.vnr-reason {
|
|
2586
|
+
display: flex; align-items: flex-start; gap: 8px;
|
|
2587
|
+
padding: 10px 12px; background: #f9fafb; border: 1px solid #f3f4f6;
|
|
2588
|
+
border-radius: 10px; font-size: 13px; color: #6b7280; line-height: 1.5; margin-bottom: 14px;
|
|
2589
|
+
}
|
|
2590
|
+
.vnr-divider { border-top: 1px solid #f3f4f6; margin: 12px 0; }
|
|
2591
|
+
.vnr-section-label { font-size: 10px; font-weight: 600; color: #9ca3af; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 8px; }
|
|
2592
|
+
/* Month nav */
|
|
2593
|
+
.vnr-month-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
|
|
2594
|
+
.vnr-nav-btn {
|
|
2595
|
+
width: 30px; height: 30px; display: flex; align-items: center; justify-content: center;
|
|
2596
|
+
border: 1px solid #e5e7eb; border-radius: 8px; background: #fff; cursor: pointer; color: #6b7280;
|
|
2597
|
+
}
|
|
2598
|
+
.vnr-nav-btn:hover:not(:disabled) { border-color: #9ca3af; background: #f9fafb; }
|
|
2599
|
+
.vnr-nav-btn:disabled { opacity: 0.25; cursor: not-allowed; }
|
|
2600
|
+
.vnr-month-label { font-size: 14px; font-weight: 600; color: #111; }
|
|
2601
|
+
/* Calendar grid */
|
|
2602
|
+
.vnr-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px 0; }
|
|
2603
|
+
.vnr-wd { text-align: center; font-size: 10px; font-weight: 600; color: #9ca3af; text-transform: uppercase; letter-spacing: 0.05em; padding-bottom: 6px; }
|
|
2604
|
+
.vnr-day-btn {
|
|
2605
|
+
display: block; margin: 0 auto; width: 34px; height: 34px; border-radius: 8px;
|
|
2606
|
+
background: transparent; border: 1.5px solid transparent;
|
|
2607
|
+
font-size: 13px; font-weight: 500; color: #111; cursor: pointer;
|
|
2608
|
+
}
|
|
2609
|
+
.vnr-day-btn:hover:not(:disabled):not(.vnr-day-sel) { background: #f3f4f6; }
|
|
2610
|
+
.vnr-day-past { color: #d1d5db !important; cursor: not-allowed !important; }
|
|
2611
|
+
.vnr-day-today { border-color: #111 !important; }
|
|
2612
|
+
.vnr-day-sel { background: #111 !important; color: #fff !important; border-color: transparent !important; }
|
|
2613
|
+
/* Slots */
|
|
2614
|
+
.vnr-slots-grid { display: grid; gap: 6px; }
|
|
2615
|
+
.vnr-slot-btn {
|
|
2616
|
+
padding: 9px 6px; border-radius: 8px; border: 1px solid #e5e7eb;
|
|
2617
|
+
background: #fff; color: #374151; font-size: 12px; font-weight: 500; cursor: pointer; text-align: center;
|
|
2618
|
+
}
|
|
2619
|
+
.vnr-slot-btn:hover:not(.vnr-slot-sel) { border-color: #9ca3af; }
|
|
2620
|
+
.vnr-slot-sel { background: #111 !important; color: #fff !important; border-color: #111 !important; }
|
|
2621
|
+
/* Actions */
|
|
2622
|
+
.vnr-actions { display: flex; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px solid #f3f4f6; }
|
|
2623
|
+
.vnr-cancel-btn {
|
|
2624
|
+
flex: 1; padding: 10px; border-radius: 10px; background: #f3f4f6;
|
|
2625
|
+
border: none; color: #6b7280; font-size: 13px; font-weight: 500; cursor: pointer;
|
|
2626
|
+
}
|
|
2627
|
+
.vnr-confirm-btn {
|
|
2628
|
+
flex: 1; padding: 10px; border-radius: 10px; background: #111;
|
|
2629
|
+
border: none; color: #fff; font-size: 13px; font-weight: 600; cursor: pointer;
|
|
2630
|
+
display: flex; align-items: center; justify-content: center; gap: 6px;
|
|
2631
|
+
}
|
|
2632
|
+
.vnr-confirm-btn:disabled { background: #e5e7eb !important; color: #9ca3af !important; cursor: not-allowed; }
|
|
2633
|
+
/* Form */
|
|
2634
|
+
.vnr-field-label { display: block; font-size: 10px; font-weight: 600; color: #9ca3af; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 6px; }
|
|
2635
|
+
.vnr-input {
|
|
2636
|
+
width: 100%; padding: 10px 12px; border: 1px solid #e5e7eb; border-radius: 10px;
|
|
2637
|
+
font-size: 13px; color: #111; background: #fff; box-sizing: border-box; outline: none;
|
|
2638
|
+
font-family: inherit;
|
|
2639
|
+
}
|
|
2640
|
+
.vnr-input:focus { border-color: #111; }
|
|
2641
|
+
.vnr-input-error { border-color: #dc2626 !important; }
|
|
2642
|
+
.vnr-textarea { min-height: 88px; resize: vertical; }
|
|
2643
|
+
.vnr-field-error { color: #dc2626; font-size: 12px; margin: 4px 0 0; }
|
|
2644
|
+
.vnr-radio-group, .vnr-checkbox-row { display: flex; flex-direction: column; gap: 8px; }
|
|
2645
|
+
.vnr-radio-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #374151; cursor: pointer; }
|
|
2646
|
+
.vnr-fields { display: flex; flex-direction: column; gap: 12px; margin-bottom: 4px; }
|
|
2647
|
+
/* Spinner */
|
|
2648
|
+
@keyframes vnr-spin { to { transform: rotate(360deg); } }
|
|
2649
|
+
.vnr-spinner {
|
|
2650
|
+
width: 16px; height: 16px; border-radius: 50%;
|
|
2651
|
+
border: 2px solid rgba(255,255,255,0.3); border-top-color: #fff;
|
|
2652
|
+
animation: vnr-spin 0.7s linear infinite;
|
|
2653
|
+
}
|
|
2654
|
+
.vnr-center { text-align: center; padding: 28px 0; color: #9ca3af; font-size: 13px; }
|
|
2655
|
+
/* Camera */
|
|
2656
|
+
.vnr-video-wrap { width:100%; aspect-ratio:4/3; background:#0f172a; border-radius:12px; overflow:hidden; position:relative; }
|
|
2657
|
+
.vnr-video-wrap video { width:100%; height:100%; object-fit:cover; display:block; }
|
|
2658
|
+
.vnr-live-badge { position:absolute; top:10px; left:10px; display:flex; align-items:center; gap:6px; padding:3px 9px; border-radius:999px; background:rgba(15,23,42,0.72); border:1px solid rgba(255,255,255,0.1); font-size:11px; font-weight:600; color:#f8fafc; text-transform:uppercase; letter-spacing:.04em; }
|
|
2659
|
+
.vnr-live-dot { width:7px; height:7px; border-radius:50%; background:#22c55e; flex-shrink:0; }
|
|
2660
|
+
/* Upload dropzone */
|
|
2661
|
+
.vnr-dropzone { border:2px dashed #cbd5e1; border-radius:14px; padding:32px 20px; text-align:center; cursor:pointer; background:#fafafa; transition:border-color 0.2s,background 0.2s; }
|
|
2662
|
+
.vnr-dropzone:hover, .vnr-dropzone.drag { border-color:#374151; background:#f3f4f6; }
|
|
2663
|
+
@keyframes vnr-click-pulse {
|
|
2664
|
+
0% { transform: scale(1); }
|
|
2665
|
+
25% { transform: scale(0.96); }
|
|
2666
|
+
50% { transform: scale(1.04); }
|
|
2667
|
+
100% { transform: scale(1); }
|
|
2668
|
+
}
|
|
2669
|
+
.vnr-click-pulse {
|
|
2670
|
+
animation: vnr-click-pulse 0.45s ease-out;
|
|
2671
|
+
outline: 2px solid #6366f1 !important;
|
|
2672
|
+
outline-offset: 3px !important;
|
|
2673
|
+
}
|
|
2674
|
+
/* Whiteboard */
|
|
2675
|
+
.vnr-whiteboard-modal {
|
|
2676
|
+
display: flex !important;
|
|
2677
|
+
flex-direction: column !important;
|
|
2678
|
+
padding: 0 !important;
|
|
2679
|
+
overflow: hidden !important;
|
|
2680
|
+
flex-shrink: 0;
|
|
2681
|
+
box-sizing: border-box;
|
|
2682
|
+
transition: width 0.2s ease, max-width 0.2s ease, height 0.2s ease, max-height 0.2s ease;
|
|
2683
|
+
}
|
|
2684
|
+
.vnr-overlay.vnr-whiteboard-overlay-reduced .vnr-whiteboard-modal {
|
|
2685
|
+
box-shadow: 0 20px 52px rgba(0,0,0,0.6) !important;
|
|
2686
|
+
}
|
|
2687
|
+
.vnr-overlay.vnr-whiteboard-overlay-hidden {
|
|
2688
|
+
display: none !important;
|
|
2689
|
+
}
|
|
2690
|
+
.vnr-whiteboard-header {
|
|
2691
|
+
flex: 0 0 auto;
|
|
2692
|
+
display: flex;
|
|
2693
|
+
align-items: center;
|
|
2694
|
+
justify-content: flex-end;
|
|
2695
|
+
gap: 6px;
|
|
2696
|
+
padding: 8px 10px;
|
|
2697
|
+
background: linear-gradient(180deg, #1e1e24 0%, #16161c 100%);
|
|
2698
|
+
border-bottom: 1px solid rgba(255,255,255,0.1);
|
|
2699
|
+
z-index: 30;
|
|
2700
|
+
}
|
|
2701
|
+
.vnr-overlay.vnr-whiteboard-overlay-reduced .vnr-whiteboard-header {
|
|
2702
|
+
cursor: grab;
|
|
2703
|
+
user-select: none;
|
|
2704
|
+
touch-action: none;
|
|
2705
|
+
}
|
|
2706
|
+
.vnr-overlay.vnr-whiteboard-overlay-reduced .vnr-whiteboard-header.is-dragging {
|
|
2707
|
+
cursor: grabbing;
|
|
2708
|
+
}
|
|
2709
|
+
.vnr-whiteboard-action-btn {
|
|
2710
|
+
width: 32px;
|
|
2711
|
+
height: 32px;
|
|
2712
|
+
padding: 0;
|
|
2713
|
+
display: inline-flex;
|
|
2714
|
+
align-items: center;
|
|
2715
|
+
justify-content: center;
|
|
2716
|
+
border-radius: 8px;
|
|
2717
|
+
border: 1px solid rgba(255,255,255,0.15);
|
|
2718
|
+
background: rgba(255,255,255,0.08);
|
|
2719
|
+
color: #e2e8f0;
|
|
2720
|
+
cursor: pointer;
|
|
2721
|
+
font-family: inherit;
|
|
2722
|
+
line-height: 0;
|
|
2723
|
+
}
|
|
2724
|
+
.vnr-whiteboard-action-btn:hover { background: rgba(255,255,255,0.14); }
|
|
2725
|
+
.vnr-whiteboard-action-btn.is-close {
|
|
2726
|
+
border-color: rgba(248,113,113,0.35);
|
|
2727
|
+
color: #fecaca;
|
|
2728
|
+
}
|
|
2729
|
+
.vnr-whiteboard-action-btn.is-close:hover { background: rgba(239,68,68,0.2); }
|
|
2730
|
+
`,zc='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 14h6v6"/><path d="M20 10h-6V4"/><path d="M14 10l7-7"/><path d="M3 21l7-7"/></svg>',Jc='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><polyline points="15 3 21 3 21 9"/><polyline points="9 21 3 21 3 15"/><line x1="21" y1="3" x2="14" y2="10"/><line x1="3" y1="21" x2="10" y2="14"/></svg>',Xc='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',Wc="vanira:board-size",jc={small:{maxWidth:"min(440px, 94vw)",height:"min(340px, 58vh)"},medium:{maxWidth:"min(680px, 96vw)",height:"min(520px, 78vh)"},large:{maxWidth:"min(920px, 98vw)",height:"min(680px, 88vh)"}};function Zc(){try{const n=localStorage.getItem(Wc);if(n==="small"||n==="medium"||n==="large")return n}catch{}return"medium"}function mi(n,A){return A===1?n:n.replace(/(\d+(?:\.\d+)?)(px|vw|vh)/g,(e,t,r)=>{const s=Number(t)*A;return`${r==="px"?Math.round(s):s}${r}`})}class qc{constructor(A){p(this,"overlay",null);p(this,"styleInjected",!1);p(this,"chalkboardContent","");p(this,"boardChapterTitle","");p(this,"boardDrawInProgress",!1);p(this,"boardInk",Ht());p(this,"calViewYear",0);p(this,"calViewMonth",0);p(this,"calSelectedTs",null);p(this,"calSelectedTime",null);p(this,"lvSessionId",null);p(this,"lvStream",null);p(this,"lvCaptureInterval",null);p(this,"lvAutoStopTimeout",null);p(this,"lvFrameSeq",0);p(this,"lvVideo",null);p(this,"lvCanvas",null);p(this,"lvPip",null);p(this,"lvPermissionBanner",null);p(this,"lsSessionId",null);p(this,"lsStream",null);p(this,"lsCaptureInterval",null);p(this,"lsAutoStopTimeout",null);p(this,"lsFrameSeq",0);p(this,"lsVideo",null);p(this,"lsCanvas",null);p(this,"lsPip",null);p(this,"lsPermissionBanner",null);p(this,"captureActive",!1);p(this,"captureStream",null);p(this,"captureLivenessInterval",null);p(this,"activePresetGeneration",0);p(this,"boardQueue",[]);p(this,"boardQueueActive",null);p(this,"boardAnimTimer",null);p(this,"settledBoardToolCallIds",new Set);p(this,"activeNavigate",null);p(this,"settledNavigateToolCallIds",new Set);p(this,"activeModalPreset",null);p(this,"boardClient",null);p(this,"boardTurnMonitor",new dc(()=>this.buildBoardVerification(),()=>this.boardQueueActive!==null||this.boardQueue.length>0||this.boardDrawInProgress||this.activeBoardProgress!==null));p(this,"activeBoardProgress",null);p(this,"boardSizePreset",Zc());p(this,"boardViewMode","expanded");p(this,"boardDragPosition",null);p(this,"boardDragWiredModal",null)}resetChalkboard(){this.chalkboardContent="",this.boardChapterTitle=""}resetBoardSession(){this.boardTurnMonitor.stop(),this.boardDragPosition=null,this.boardDragWiredModal=null,this.activePresetGeneration++,On(!1),this.clearBoardAnimTimer(),this.boardQueue=[],this.boardQueueActive=null,this.settledBoardToolCallIds.clear(),this.activeBoardProgress=null,this.boardClient=null,this.chalkboardContent="",this.boardChapterTitle="",this.boardDrawInProgress=!1,this.boardInk=Ht(),this.closeBoardUi()}getChalkboardContent(){return this.chalkboardContent}hasActiveBoardSession(){return!!document.querySelector(".vnr-whiteboard-modal")||this.chalkboardContent.length>0||this.boardInk.strokes.length>0||this.boardInk.labels.length>0||this.boardQueue.length>0||this.boardQueueActive!==null}syncChalkboardNotes(){const A=document.querySelector(".vnr-whiteboard-textarea");A&&(A.value.length>this.chalkboardContent.length?this.chalkboardContent=A.value:this.chalkboardContent!==A.value&&(A.value=this.chalkboardContent,A.scrollTop=A.scrollHeight))}buildBoardVerification(){this.syncChalkboardNotes();const A=this.chalkboardContent,e=this.boardInk.strokes.length>0;return{notes_char_count:A.length,notes_preview:A.slice(0,200)||null,has_notes_on_board:A.length>0,has_diagram_geometry:e,strokes_on_board:this.boardInk.strokes.length,labels_on_board:this.boardInk.labels.length,chapter_title:this.boardChapterTitle||null,verification_hint:"Do NOT tell the student notes or diagrams are visible unless has_notes_on_board or has_diagram_geometry is true in this tool result."}}splitChapterHeading(A){const e=A.trim(),t=e.split(`
|
|
2731
|
+
`);if(!/^chapter\s*:/i.test(t[0]??""))return{chapterTitle:null,body:e};const r=t[0].replace(/^chapter\s*:\s*/i,"").trim()||t[0].trim(),s=t.slice(1).join(`
|
|
2732
|
+
`).trim();return{chapterTitle:r,body:s}}getBoardSnapshot(){this.syncChalkboardNotes();const A=this.boardInk.strokes.length>0||this.boardInk.labels.length>0,e=this.chalkboardContent;return{board_layout:A?"diagram_top_notes_bottom":"notes_full",has_diagram:A,strokes_on_board:this.boardInk.strokes.length,labels_on_board:this.boardInk.labels.length,board_size:{width:OA,height:RA},coordinate_system:"board_normalized_or_pixels",notes_content:e,notes_char_count:e.length,chapter_title:this.boardChapterTitle||null,agent_hint:A?"TOP = diagram (800×500), BOTTOM = notes. strokes:[{points,close}] — right △: [[0.15,0.25],[0.15,0.75],[0.55,0.75]]. labels below (y≥0.78). clear_old_diagrams_on_board:true wipes.":'draw_on_board: strokes:[{points:[[0.15,0.25],[0.15,0.75],[0.55,0.75]],close:true}] for right triangle. labels:[{x:0.35,y:0.82,text:"..."}]. NOT bare points string or centered apex.'}}syncDiagramLayer(A){ui(A,this.boardInk,{strokeColor:"#ffffff",labelColor:"#4A9EFF",strokeWidth:6})}getBoardProgressSnapshot(){const A=this.activeBoardProgress;if(!A||A.plannedUnits<=0)return null;const e=this.chalkboardContent,t=A.mode==="type"?e.slice(A.textAtStart.length):e;return{write_progress_pct:Math.min(100,Math.round(A.unitsDone/A.plannedUnits*100)),characters_written:A.unitsDone,characters_planned:A.plannedUnits,partial_text_this_command:t}}getNavigateTerminalResult(A,e,t){return{status:A,reason:e||(A==="interrupted"?"Server interrupted":"Navigation cancelled"),preset_id:b.Navigate,navigated_to:t,target_url:t}}completeNavigate(A={}){const e=this.activeNavigate;if(!e||e.settled)return;const t=e.ctx.toolCallId;t&&this.settledNavigateToolCallIds.has(t)||(e.settled=!0,t&&this.settledNavigateToolCallIds.add(t),this.activeNavigate=null,e.onComplete({status:"success",preset_id:b.Navigate,navigated_to:e.targetUrl,target_url:e.targetUrl,...A}))}cancelNavigate(A,e){const t=this.activeNavigate;if(!t||t.settled)return;const r=t.ctx.toolCallId;r&&this.settledNavigateToolCallIds.has(r)||(t.settled=!0,r&&this.settledNavigateToolCallIds.add(r),this.activeNavigate=null,t.onCancel(A,{status:e}))}bindActiveModalPreset(A,e,t,r){this.activeModalPreset={ctx:A,presetId:e,onComplete:t,onCancel:r}}clearActiveModalPreset(){this.activeModalPreset&&(this.activeModalPreset.settled=!0,this.activeModalPreset=null)}cancelActiveModalPreset(A,e){const t=this.activeModalPreset;!t||t.settled||(t.settled=!0,this.activeModalPreset=null,this.overlay&&(this.overlay.remove(),this.overlay=null),this.stopCaptureCamera(),t.onCancel(A,{status:e}))}getBoardTerminalResult(A,e,t){const r={status:A,reason:e||(A==="interrupted"?"Server interrupted":"User dismissed"),...t?{preset_id:t}:{}};if(!t||!as(t))return r;const s=this.chalkboardContent,i=this.getBoardProgressSnapshot();return{...r,text_written:s,whiteboard_content:s,board_snapshot:this.getBoardSnapshot(),...i||{}}}flushBoardContext(A){if(this.boardClient)try{typeof this.boardClient.sendContextUpdate=="function"?this.boardClient.sendContextUpdate(A):typeof this.boardClient.updateContext=="function"&&this.boardClient.updateContext(A)}catch{}}clearActiveBoardProgress(){this.activeBoardProgress=null}syncBoardProgressUnits(A){this.activeBoardProgress&&(this.activeBoardProgress.unitsDone=A)}buildBoardContextPayload(A,e,t){const r=this.activeBoardProgress,s=(r==null?void 0:r.ctx.toolCallId)===A.toolCallId;let i,o,a,l;s&&r&&(o=r.unitsDone,a=r.plannedUnits,i=r.plannedUnits>0?Math.min(100,Math.round(r.unitsDone/r.plannedUnits*100)):100,r.mode==="type"?l=e.slice(r.textAtStart.length):l=e);const c={ui_state:"whiteboard_active",tool_status:"interrupted",visible_preset:A.presetId,tool_call_id:A.toolCallId,interrupted:!0,interrupt_reason:t||"Server interrupted",whiteboard_content:e};if(i!==void 0){c.write_progress_pct=i,c.characters_written=o,c.characters_planned=a,c.partial_text_this_command=l??"";const d=(r==null?void 0:r.mode)==="erase"?"erase":"write",h=(l??"").length>120?`${(l??"").slice(0,120)}…`:l??"",u=(r==null?void 0:r.mode)==="erase"?"The board already reflects this partial erase — continue from here; do not repeat earlier steps.":"The board already contains this content — continue typing from here; do not repeat what is already on the board.";c.message=`Whiteboard ${d} interrupted at ${i}% (${o}/${a} characters this command). Partial text this turn: "${h}". `+u}return c}sendBoardContextUpdate(A,e,t){this.flushBoardContext(this.buildBoardContextPayload(A,e,t))}handle(A,e,t,r){const s=A.data||A;let i={};const o=s.arguments||s.args;if(typeof o=="string")try{i=JSON.parse(o)}catch{i={}}else o&&typeof o=="object"&&(i=o);const a=s.client_fields||{},l=pt(a,o,s.name||s.tool_name);if(!l||!LA(l))return!1;const c={...i,...a},d={toolCallId:s.tool_call_id||s.call_id||"",presetId:l,clientFields:c,args:i,toolCall:s};this.injectStyles();const h=!!document.querySelector(".vnr-whiteboard-modal");switch(as(l)?h||this.dismissNonBoardUi():Ja(l)||Xa(l)||this.dismiss(),l){case b.Calendar:return this.renderCalendar(d,e,t),!0;case b.Form:return this.renderForm(d,e,t),!0;case b.Camera:return this.renderCamera(d,e,t,r),!0;case b.Upload:return this.renderUpload(d,e,t,r),!0;case b.ClipRegion:return this.renderClipRegion(d,e,t,r),!0;case b.TabScreenshot:return this.renderTabScreenshot(d,e,t,r),!0;case b.Navigate:return this.renderNavigate(d,e,t),!0;case b.HighlightElement:return this.renderHighlight(d,e,t),!0;case b.ClickElement:return this.renderClickElement(d,e,t),!0;case b.SelectOption:return this.renderSelectOption(d,e,t),!0;case b.SetDate:return this.renderSetDate(d,e,t),!0;case b.TypeText:return this.enqueueBoardCommand({ctx:d,presetId:b.TypeText,onComplete:e,onCancel:t},r),!0;case b.EraseText:return this.enqueueBoardCommand({ctx:d,presetId:b.EraseText,onComplete:e,onCancel:t},r),!0;case b.Draw:return this.enqueueBoardCommand({ctx:d,presetId:b.Draw,onComplete:e,onCancel:t},r),!0;case b.EraseDraw:return this.enqueueBoardCommand({ctx:d,presetId:b.EraseDraw,onComplete:e,onCancel:t},r),!0;case b.LiveVision:return this.handleOpenLiveCamera(c,r,d.toolCallId),e({status:"success",preset_id:b.LiveVision,message:"Live camera session started"}),!0;case b.CloseLiveCamera:return this.handleCloseLiveCamera(r),e({status:"success",preset_id:b.CloseLiveCamera,message:"Live camera stopped"}),!0;case b.LiveScreen:return this.handleOpenLiveScreen(c,r,d.toolCallId),e({status:"success",preset_id:b.LiveScreen,message:"Live screen share started"}),!0;case b.CloseLiveScreen:return this.handleCloseLiveScreen(r),e({status:"success",preset_id:b.CloseLiveScreen,message:"Live screen share stopped"}),!0;case b.ScreenInk:return this.renderScreenInk(d,e,t),!0;case b.ScreenCursor:return this.renderScreenCursor(d,e,t),!0;case b.ScreenClick:return this.renderScreenClick(d,e,t),!0;case b.ClearScreenOverlay:return Wn(),e({status:"success",preset_id:b.ClearScreenOverlay,message:"Screen overlay cleared"}),!0;case b.PageScan:return sc(d,e,t,r),!0;case b.PointAt:return ic(d,e,t),!0;case b.OutlineTargets:return oc(d,e,t),!0;case b.ClearGuide:return ac(d,e),!0;default:return!1}}abortBoardTools(A="Interrupted",e){const t=this.activeNavigate;t&&!t.settled&&(!e||t.ctx.toolCallId===e)&&this.cancelNavigate(A,"interrupted");const r=this.activeModalPreset;r&&!r.settled&&(!e||r.ctx.toolCallId===e)&&this.cancelActiveModalPreset(A,"interrupted");const s=o=>!e||o.ctx.toolCallId===e;if(this.boardQueueActive&&s(this.boardQueueActive)||this.boardQueue.some(s)){if(this.clearBoardAnimTimer(),this.activePresetGeneration++,this.boardQueueActive&&s(this.boardQueueActive)){const o=this.boardQueueActive;this.boardQueueActive=null,this.settleBoardCancel(o,A,"interrupted")}this.boardQueue=this.boardQueue.filter(o=>s(o)?(this.settleBoardCancel(o,A,"interrupted"),!1):!0)}}dismiss(){this.activeNavigate&&!this.activeNavigate.settled&&this.cancelNavigate("Session ended","interrupted"),this.activeModalPreset=null,this.resetBoardSession(),this.stopCaptureCamera(),this.handleCloseLiveCamera(null),this.handleCloseLiveScreen(null),Gn(),this.overlay&&(this.overlay.remove(),this.overlay=null)}teardownSession(){this.dismiss(),Wn()}enqueueBoardCommand(A,e){var r;e&&(this.boardClient=e),this.boardClient&&document.querySelector(".vnr-whiteboard-modal")&&this.ensureBoardTurnMonitor();const t=A.ctx.toolCallId;t&&(this.settledBoardToolCallIds.has(t)||((r=this.boardQueueActive)==null?void 0:r.ctx.toolCallId)===t||this.boardQueue.some(s=>s.ctx.toolCallId===t))||(this.boardQueue.push(A),BA("Board:Queue",`Enqueued ${A.presetId}`,{pending:this.boardQueue.length,toolCallId:A.ctx.toolCallId}),this.processBoardQueue())}processBoardQueue(){if(this.boardQueueActive||this.boardQueue.length===0)return;const A=this.boardQueue.shift();this.boardQueueActive=A,BA("Board:Queue",`Running ${A.presetId}`,{toolCallId:A.ctx.toolCallId});const e=(s,i)=>{if(this.boardQueueActive===A){if(A.settled||A.aborted){this.boardQueueActive=null;return}this.boardQueueActive=null,i!==void 0?this.settleBoardCancel(A,i):this.settleBoardComplete(A,s||{}),this.processBoardQueue()}},t=s=>e(s),r=s=>{this.activePresetGeneration++,e(null,s||"Cancelled"),!this.boardQueueActive&&this.boardQueue.length===0&&this.closeBoardUi()};A.presetId===b.TypeText?this.renderTypeText(A.ctx,t,r):A.presetId===b.Draw?this.renderDrawShapes(A.ctx,t,r):A.presetId===b.EraseDraw?this.renderEraseDrawingBoard(A.ctx,t,r):this.renderEraseText(A.ctx,t,r)}closeBoardUi(){this.boardTurnMonitor.stop(),this.boardViewMode="expanded",On(!1),this.dismissWhiteboard(),this.overlay&&(!document.body.contains(this.overlay)||!this.overlay.childElementCount)&&(this.overlay.remove(),this.overlay=null)}getBoardOverlay(){const A=document.querySelector(".vnr-whiteboard-modal");return(A==null?void 0:A.closest(".vnr-overlay"))??this.overlay}applyBoardLayoutMode(A,e){const t=A??this.getBoardOverlay(),r=e??document.querySelector(".vnr-whiteboard-modal");if(!t||!r)return;const s=this.boardViewMode==="reduced";t.classList.remove("vnr-whiteboard-overlay-hidden"),t.classList.add("vnr-whiteboard-overlay"),t.classList.toggle("vnr-whiteboard-overlay-reduced",s),t.classList.toggle("vnr-whiteboard-overlay-expanded",!s),this.syncBoardResizeButton(r.querySelector(".vnr-whiteboard-resize-btn")),On(!0,s),this.syncBoardDragLayout(r),this.ensureBoardTurnMonitor()}clearBoardDragStyles(A){A.style.removeProperty("position"),A.style.removeProperty("left"),A.style.removeProperty("top"),A.style.removeProperty("right"),A.style.removeProperty("bottom"),A.style.removeProperty("margin"),A.style.removeProperty("transform")}clampBoardDragPosition(A,e,t){const s=Math.max(8,window.innerWidth-A.offsetWidth-8),i=Math.max(8,window.innerHeight-A.offsetHeight-8);return{x:Math.min(s,Math.max(8,e)),y:Math.min(i,Math.max(8,t))}}applyBoardDragPosition(A,e,t){const r=this.clampBoardDragPosition(A,e,t);A.style.setProperty("position","fixed","important"),A.style.setProperty("left",`${r.x}px`,"important"),A.style.setProperty("top",`${r.y}px`,"important"),A.style.setProperty("right","auto","important"),A.style.setProperty("bottom","auto","important"),A.style.setProperty("margin","0","important"),A.style.setProperty("transform","none","important"),this.boardDragPosition=r}defaultReducedBoardPosition(A){const t=Math.max(96,20+(typeof window<"u"?Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("env(safe-area-inset-bottom)")||"0",10):0));return this.clampBoardDragPosition(A,window.innerWidth-A.offsetWidth-16,window.innerHeight-A.offsetHeight-t)}syncBoardDragLayout(A){if(this.boardViewMode==="reduced"){const e=this.boardDragPosition??this.defaultReducedBoardPosition(A);this.applyBoardDragPosition(A,e.x,e.y)}else this.clearBoardDragStyles(A)}wireBoardDrag(A,e){if(this.boardDragWiredModal===e)return;this.boardDragWiredModal=e;let t=!1,r=0,s=0,i=0,o=0;const a=d=>{if(this.boardViewMode!=="reduced"||d.target.closest("button"))return;t=!0,A.setPointerCapture(d.pointerId);const h=e.getBoundingClientRect();r=d.clientX,s=d.clientY,i=h.left,o=h.top,A.classList.add("is-dragging"),d.preventDefault()},l=d=>{t&&this.applyBoardDragPosition(e,i+(d.clientX-r),o+(d.clientY-s))},c=d=>{t&&(t=!1,A.classList.remove("is-dragging"),A.hasPointerCapture(d.pointerId)&&A.releasePointerCapture(d.pointerId))};A.addEventListener("pointerdown",a),A.addEventListener("pointermove",l),A.addEventListener("pointerup",c),A.addEventListener("pointercancel",c)}ensureBoardTurnMonitor(){this.boardClient&&this.boardTurnMonitor.start(A=>this.flushBoardContext(A))}revealBoardUi(A){this.applyBoardLayoutMode(this.getBoardOverlay(),A)}dismissNonBoardUi(){this.stopCaptureCamera(),this.handleCloseLiveCamera(null),this.handleCloseLiveScreen(null),Gn(),this.overlay&&!this.overlay.querySelector(".vnr-whiteboard-modal")&&(this.overlay.remove(),this.overlay=null)}settleBoardCancel(A,e,t="cancelled"){if(A.settled)return;A.aborted=!0,A.settled=!0;const r=A.ctx.toolCallId;r&&this.settledBoardToolCallIds.add(r);const s=this.chalkboardContent;t==="interrupted"&&this.sendBoardContextUpdate(A.ctx,s,e),A.onCancel(e,{status:t}),this.clearActiveBoardProgress()}settleBoardComplete(A,e){if(A.settled||A.aborted)return;A.settled=!0;const t=A.ctx.toolCallId;t&&this.settledBoardToolCallIds.add(t);const r=this.chalkboardContent;A.onComplete({status:"success",preset_id:A.presetId,tool_call_id:A.ctx.toolCallId,text_written:r,whiteboard_content:r,...this.buildBoardVerification(),...e}),this.clearActiveBoardProgress()}clearBoardAnimTimer(){this.boardAnimTimer&&(clearTimeout(this.boardAnimTimer),this.boardAnimTimer=null)}scheduleBoardAnim(A,e){this.clearBoardAnimTimer(),this.boardAnimTimer=setTimeout(()=>{this.boardAnimTimer=null,A()},e)}dismissWhiteboard(){document.querySelectorAll(".vnr-whiteboard-modal").forEach(A=>{var e;(e=A.closest(".vnr-overlay"))==null||e.remove()}),this.overlay&&!document.body.contains(this.overlay)&&(this.overlay=null)}stopCaptureCamera(){var A;this.captureActive=!1,this.captureLivenessInterval&&(clearInterval(this.captureLivenessInterval),this.captureLivenessInterval=null),(A=this.captureStream)==null||A.getTracks().forEach(e=>e.stop()),this.captureStream=null}getBrowserPermissionHint(){const A=navigator.userAgent;return/iPhone|iPad/i.test(A)?"Open Settings → Safari → Camera and allow access for this site.":/Android/i.test(A)?"Tap the lock icon in the address bar → Permissions → Camera → Allow.":"Click the camera icon in your browser's address bar and allow access."}fillCameraPermissionPrompt(A,e){A.style.display="flex",A.innerHTML=`
|
|
2733
|
+
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px;text-align:center;width:100%;height:100%;box-sizing:border-box">
|
|
2734
|
+
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="#f87171" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
2735
|
+
<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/>
|
|
2736
|
+
<line x1="1" y1="1" x2="23" y2="23"/>
|
|
2737
|
+
</svg>
|
|
2738
|
+
<p style="margin:0;font-size:14px;font-weight:600;color:#f87171">Camera access blocked</p>
|
|
2739
|
+
<p style="margin:0;font-size:12px;color:#94a3b8;line-height:1.5;max-width:300px">
|
|
2740
|
+
Allow camera access to continue. ${this.getBrowserPermissionHint()}
|
|
2741
|
+
</p>
|
|
2742
|
+
<div style="display:flex;gap:10px;margin-top:4px;flex-wrap:wrap;justify-content:center">
|
|
2743
|
+
<button type="button" id="vnr-cam-perm-retry" class="vnr-confirm-btn" style="padding:10px 18px">Try Again</button>
|
|
2744
|
+
${e.onDismiss?'<button type="button" id="vnr-cam-perm-dismiss" class="vnr-cancel-btn">Cancel</button>':""}
|
|
2745
|
+
</div>
|
|
2746
|
+
</div>
|
|
2747
|
+
`,A.querySelector("#vnr-cam-perm-retry").addEventListener("click",e.onRetry),e.onDismiss&&A.querySelector("#vnr-cam-perm-dismiss").addEventListener("click",e.onDismiss)}notifyCameraPermissionDenied(A,e){const t="Camera permission denied. Please allow camera access in your browser settings.";if(A!=null&&A.sendToolError&&e)try{A.sendToolError(e,t)}catch{}}showLiveCameraPermissionBanner(A,e){var r;(r=this.lvPermissionBanner)==null||r.remove();const t=document.createElement("div");t.id="vnr-live-cam-perm-banner",t.style.cssText=["position:fixed","bottom:24px","left:50%","transform:translateX(-50%)","z-index:2147483647","max-width:360px","width:calc(100% - 32px)","padding:16px 18px","border-radius:16px","background:#0f172a","border:1px solid rgba(248,113,113,0.35)","box-shadow:0 12px 32px rgba(0,0,0,0.35)","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif"].join(";"),t.innerHTML=`
|
|
2748
|
+
<p style="margin:0 0 6px;font-size:13px;font-weight:700;color:#f87171">Camera access blocked</p>
|
|
2749
|
+
<p style="margin:0 0 12px;font-size:12px;color:#94a3b8;line-height:1.5">${this.getBrowserPermissionHint()}</p>
|
|
2750
|
+
<div style="display:flex;gap:8px">
|
|
2751
|
+
<button type="button" id="vnr-lv-perm-retry" style="flex:1;padding:9px 14px;border:none;border-radius:10px;background:#6366f1;color:#fff;font-size:13px;font-weight:600;cursor:pointer">Try Again</button>
|
|
2752
|
+
<button type="button" id="vnr-lv-perm-dismiss" style="padding:9px 14px;border:1px solid rgba(255,255,255,0.15);border-radius:10px;background:transparent;color:#e2e8f0;font-size:13px;font-weight:600;cursor:pointer">Dismiss</button>
|
|
2753
|
+
</div>
|
|
2754
|
+
`,t.querySelector("#vnr-lv-perm-retry").addEventListener("click",A),t.querySelector("#vnr-lv-perm-dismiss").addEventListener("click",e),document.body.appendChild(t),this.lvPermissionBanner=t}async sendClientEvent(A,e,t){if(typeof(A==null?void 0:A.sendEventWhenReady)=="function"){await A.sendEventWhenReady(e,t);return}if(A!=null&&A.sendEvent){A.sendEvent(e,t);return}}handleOpenLiveCamera(A,e,t){this.handleCloseLiveScreen(e),this.handleCloseLiveCamera(e);const r=A.scope??"until_call_end",s=Math.min(Number(A.target_fps??1),Number(A.max_fps??3)),i=Number(A.max_width??640),o=A.reason??"camera_capture",a=Number(A.duration_sec??0),l=A.facing_mode??"environment",c=A.show_preview!==!1&&A.show_preview!=="false",d=`lv_${crypto.randomUUID()}`;this.lvSessionId=d,this.lvFrameSeq=0;const h=document.createElement("video");h.autoplay=!0,h.playsInline=!0,h.muted=!0,h.style.display="none",document.body.appendChild(h),this.lvVideo=h;const u=document.createElement("canvas");u.style.display="none",document.body.appendChild(u),this.lvCanvas=u,c&&(this.lvPip=this.createLivePip(l,()=>this.handleCloseLiveCamera(e))),(()=>{navigator.mediaDevices.getUserMedia({video:{facingMode:l,width:{ideal:i*2}}}).then(async B=>{var m;if(!this.lvSessionId){B.getTracks().forEach(w=>w.stop());return}if((m=this.lvPermissionBanner)==null||m.remove(),this.lvPermissionBanner=null,this.lvStream=B,h.srcObject=B,this.lvPip){const w=this.lvPip.querySelector("video");w&&(w.srcObject=B)}await this.sendClientEvent(e,"client_live_camera_started",{data:{session_id:d,scope:r,...r==="timed"&&a>0?{duration_sec:a}:{},reason:o,target_fps:s}});const f=Math.round(1e3/s);this.lvCaptureInterval=setInterval(()=>{this.captureAndSendFrame(e,d,i,o)},f),r==="timed"&&a>0&&(this.lvAutoStopTimeout=setTimeout(()=>{this.handleCloseLiveCamera(e)},a*1e3))}).catch(B=>{var f,m;this.lvSessionId=null,(f=this.lvStream)==null||f.getTracks().forEach(w=>w.stop()),this.lvStream=null,(m=this.lvPip)==null||m.remove(),this.lvPip=null,h.remove(),this.lvVideo=null,u.remove(),this.lvCanvas=null,this.notifyCameraPermissionDenied(e,t),this.showLiveCameraPermissionBanner(()=>this.handleOpenLiveCamera(A,e,t),()=>{var w;(w=this.lvPermissionBanner)==null||w.remove(),this.lvPermissionBanner=null})})})()}handleCloseLiveCamera(A){var t,r,s,i,o;const e=this.lvSessionId;this.lvSessionId=null,this.lvCaptureInterval&&(clearInterval(this.lvCaptureInterval),this.lvCaptureInterval=null),this.lvAutoStopTimeout&&(clearTimeout(this.lvAutoStopTimeout),this.lvAutoStopTimeout=null),(t=this.lvStream)==null||t.getTracks().forEach(a=>a.stop()),this.lvStream=null,(r=this.lvVideo)==null||r.remove(),this.lvVideo=null,(s=this.lvCanvas)==null||s.remove(),this.lvCanvas=null,(i=this.lvPip)==null||i.remove(),this.lvPip=null,(o=this.lvPermissionBanner)==null||o.remove(),this.lvPermissionBanner=null,e&&A&&this.sendClientEvent(A,"client_live_camera_stopped",{data:{session_id:e}})}classifyLiveScreenShareFailure(A){if(A instanceof DOMException){if(A.name==="AbortError")return"cancelled";if(A.name==="NotAllowedError"){const t=(A.message||"").toLowerCase();return t.includes("dismiss")||t.includes("cancel")||t.includes("abort")?"cancelled":"denied"}}const e=A instanceof Error?(A.message||"").toLowerCase():"";return e.includes("cancel")||e.includes("dismiss")||e.includes("abort")?"cancelled":"denied"}emitLiveScreenShareFailure(A,e,t,r,s,i){const o=s instanceof DOMException||s instanceof Error?s.name:void 0,a=i??(r==="cancelled"?"User cancelled screen share without selecting a source.":"Screen share permission was not granted."),l=r==="cancelled"?"client_live_screen_cancelled":"client_live_screen_denied";if(A!=null&&A.sendEvent&&A.sendEvent(l,{data:{...e?{session_id:e}:{},...t?{tool_call_id:t}:{},message:a,...o?{error_name:o}:{}}}),A!=null&&A.sendToolError&&t)try{A.sendToolError(t,a)}catch{}}notifyScreenShareUnavailable(A,e){this.emitLiveScreenShareFailure(A,null,e,"denied",void 0,"Screen sharing is not supported in this browser or device.")}showLiveScreenPermissionBanner(A,e,t){var o;(o=this.lsPermissionBanner)==null||o.remove();const r=A==="cancelled"?"Screen share cancelled":"Screen share blocked",s=A==="cancelled"?"You closed the picker without sharing. Try again when you are ready to show your screen.":"Choose a screen, window, or browser tab when prompted to share with the agent.",i=document.createElement("div");i.id="vnr-live-screen-perm-banner",i.style.cssText=["position:fixed","bottom:24px","left:50%","transform:translateX(-50%)","z-index:2147483647","max-width:360px","width:calc(100% - 32px)","padding:16px 18px","border-radius:16px","background:#0f172a","border:1px solid rgba(96,165,250,0.35)","box-shadow:0 12px 32px rgba(0,0,0,0.35)","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif"].join(";"),i.innerHTML=`
|
|
2755
|
+
<p style="margin:0 0 6px;font-size:13px;font-weight:700;color:#60a5fa">${r}</p>
|
|
2756
|
+
<p style="margin:0 0 12px;font-size:12px;color:#94a3b8;line-height:1.5">${s}</p>
|
|
2757
|
+
<div style="display:flex;gap:8px">
|
|
2758
|
+
<button type="button" id="vnr-ls-perm-retry" style="flex:1;padding:9px 14px;border:none;border-radius:10px;background:#6366f1;color:#fff;font-size:13px;font-weight:600;cursor:pointer">Try Again</button>
|
|
2759
|
+
<button type="button" id="vnr-ls-perm-dismiss" style="padding:9px 14px;border:1px solid rgba(255,255,255,0.15);border-radius:10px;background:transparent;color:#e2e8f0;font-size:13px;font-weight:600;cursor:pointer">Dismiss</button>
|
|
2760
|
+
</div>
|
|
2761
|
+
`,i.querySelector("#vnr-ls-perm-retry").addEventListener("click",e),i.querySelector("#vnr-ls-perm-dismiss").addEventListener("click",t),document.body.appendChild(i),this.lsPermissionBanner=i}handleOpenLiveScreen(A,e,t){var B;if(this.handleCloseLiveScreen(e),this.handleCloseLiveCamera(e),!((B=navigator.mediaDevices)!=null&&B.getDisplayMedia)){this.notifyScreenShareUnavailable(e,t);return}const r=A.scope??"until_call_end",s=Math.min(Number(A.target_fps??1),Number(A.max_fps??3)),i=Number(A.max_width??1280),o=A.reason??"screen_capture",a=Number(A.duration_sec??0),l=A.prefer_current_tab===!0||A.prefer_current_tab==="true",c=A.show_preview!==!1&&A.show_preview!=="false",d=`ls_${crypto.randomUUID()}`;this.lsSessionId=d,this.lsFrameSeq=0;const h=document.createElement("video");h.autoplay=!0,h.playsInline=!0,h.muted=!0,h.style.display="none",document.body.appendChild(h),this.lsVideo=h;const u=document.createElement("canvas");u.style.display="none",document.body.appendChild(u),this.lsCanvas=u,c&&(this.lsPip=this.createLiveScreenPip(()=>this.handleCloseLiveScreen(e))),(()=>{const f=l?{displaySurface:"browser"}:!0;navigator.mediaDevices.getDisplayMedia({video:f,audio:!1}).then(async m=>{var y,Q;if(!this.lsSessionId){m.getTracks().forEach(x=>x.stop());return}(y=this.lsPermissionBanner)==null||y.remove(),this.lsPermissionBanner=null,this.lsStream=m,h.srcObject=m;const w=m.getVideoTracks()[0];if(w&&(w.onended=()=>{this.handleCloseLiveScreen(e)}),this.lsPip){const x=this.lsPip.querySelector("video");x&&(x.srcObject=m)}const v=((Q=w==null?void 0:w.getSettings)==null?void 0:Q.call(w).displaySurface)??"unknown";await this.sendClientEvent(e,"client_live_screen_started",{data:{session_id:d,scope:r,...r==="timed"&&a>0?{duration_sec:a}:{},display_surface:v,reason:o,target_fps:s}});const C=Math.round(1e3/s);this.lsCaptureInterval=setInterval(()=>{this.captureAndSendScreenFrame(e,d,i,o)},C),r==="timed"&&a>0&&(this.lsAutoStopTimeout=setTimeout(()=>{this.handleCloseLiveScreen(e)},a*1e3))}).catch(m=>{var v,C;const w=this.classifyLiveScreenShareFailure(m);this.lsSessionId=null,(v=this.lsStream)==null||v.getTracks().forEach(y=>y.stop()),this.lsStream=null,(C=this.lsPip)==null||C.remove(),this.lsPip=null,h.remove(),this.lsVideo=null,u.remove(),this.lsCanvas=null,this.emitLiveScreenShareFailure(e,d,t,w,m),this.showLiveScreenPermissionBanner(w,()=>this.handleOpenLiveScreen(A,e,t),()=>{var y;(y=this.lsPermissionBanner)==null||y.remove(),this.lsPermissionBanner=null})})})()}handleCloseLiveScreen(A){var t,r,s,i,o;const e=this.lsSessionId;this.lsSessionId=null,this.lsCaptureInterval&&(clearInterval(this.lsCaptureInterval),this.lsCaptureInterval=null),this.lsAutoStopTimeout&&(clearTimeout(this.lsAutoStopTimeout),this.lsAutoStopTimeout=null),(t=this.lsStream)==null||t.getTracks().forEach(a=>a.stop()),this.lsStream=null,(r=this.lsVideo)==null||r.remove(),this.lsVideo=null,(s=this.lsCanvas)==null||s.remove(),this.lsCanvas=null,(i=this.lsPip)==null||i.remove(),this.lsPip=null,(o=this.lsPermissionBanner)==null||o.remove(),this.lsPermissionBanner=null,e&&A&&this.sendClientEvent(A,"client_live_screen_stopped",{data:{session_id:e}})}async uploadLiveStreamFrame(A,e,t,r){const s=`frame_${t}.jpg`;if(typeof A.uploadMediaFrame=="function")return A.uploadMediaFrame(e,r,s);const i=A.serverUrl||"";let o="";try{o=new URL(i).origin}catch{o=i.replace(/\/webrtc.*$/,"").replace(/\/$/,"")}const a=A.callId||"",l=`${o}/media/upload`,c=new FormData;c.append("file",e,s),c.append("call_id",a),c.append("reason",r);const d=await fetch(l,{method:"POST",body:c});if(!d.ok)throw new Error(`Upload HTTP ${d.status}`);const h=await d.json();if(!h.media_id||!h.url)throw new Error("Upload response missing media_id/url");return{media_id:h.media_id,url:h.url,content_type:h.content_type||"image/jpeg"}}async captureAndSendScreenFrame(A,e,t,r){if(!A||!this.lsVideo||!this.lsCanvas||!this.lsSessionId)return;const s=this.lsVideo;if(s.readyState<2)return;const i=this.lsCanvas,o=s.videoWidth||t,a=s.videoHeight||t,l=Math.min(1,t/o);i.width=Math.round(o*l),i.height=Math.round(a*l);const c=i.getContext("2d");if(!c)return;c.drawImage(s,0,0,i.width,i.height);let d;try{d=await new Promise((h,u)=>i.toBlob(g=>g?h(g):u(new Error("toBlob failed")),"image/jpeg",.75))}catch{return}try{const{media_id:h,url:u,content_type:g}=await this.uploadLiveStreamFrame(A,d,e,r);if(!this.lsSessionId||this.lsSessionId!==e||!h||!u)return;const B=++this.lsFrameSeq;await this.sendClientEvent(A,"client_media_frame",{data:{session_id:e,source:"screen",frame_seq:B,media_id:h,media_url:u,content_type:g,reason:r,viewport:{width:i.width,height:i.height}}})}catch{}}createLiveScreenPip(A){const e=document.createElement("div");if(e.id="vnr-live-screen-pip",e.style.cssText=["position:fixed","bottom:24px","right:24px","z-index:2147483647","width:220px","height:124px","border-radius:16px","overflow:hidden","background:#0f172a","border:1px solid rgba(96,165,250,0.25)","box-shadow:0 12px 32px rgba(0,0,0,0.35)","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif","transition:transform 0.2s ease"].join(";"),e.innerHTML=`
|
|
2762
|
+
<video autoplay playsinline muted style="width:100%;height:100%;object-fit:contain;display:block;background:#020617"></video>
|
|
2763
|
+
<div style="position:absolute;top:10px;left:10px;display:flex;align-items:center;gap:6px;padding:3px 8px;border-radius:6px;background:rgba(15,23,42,0.8);border:1px solid rgba(255,255,255,0.1);font-size:10px;font-weight:700;color:#f8fafc;text-transform:uppercase;letter-spacing:0.04em;pointer-events:none;">
|
|
2764
|
+
<span style="width:6px;height:6px;border-radius:50%;background:#3b82f6;flex-shrink:0;animation:vnr-pip-pulse 1.5s ease-in-out infinite;"></span>
|
|
2765
|
+
SCREEN
|
|
2766
|
+
</div>
|
|
2767
|
+
<button id="vnr-screen-pip-stop" style="position:absolute;top:10px;right:10px;width:22px;height:22px;border-radius:50%;background:rgba(15,23,42,0.8);border:1px solid rgba(255,255,255,0.1);color:#fff;font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background 0.2s,transform 0.2s;">✕</button>
|
|
2768
|
+
`,!document.getElementById("vnr-pip-style")){const t=document.createElement("style");t.id="vnr-pip-style",t.textContent=`
|
|
2769
|
+
@keyframes vnr-pip-pulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.5;transform:scale(1.2);}}
|
|
2770
|
+
#vnr-live-screen-pip:hover { transform: scale(1.02); }
|
|
2771
|
+
#vnr-screen-pip-stop:hover { background: rgba(239,68,68,0.9) !important; transform: scale(1.1); }
|
|
2772
|
+
`,document.head.appendChild(t)}return e.querySelector("#vnr-screen-pip-stop").addEventListener("click",()=>A()),document.body.appendChild(e),e}async captureAndSendFrame(A,e,t,r){if(!A||!this.lvVideo||!this.lvCanvas||!this.lvSessionId)return;const s=this.lvVideo;if(s.readyState<2)return;const i=this.lvCanvas,o=s.videoWidth||t,a=s.videoHeight||t,l=Math.min(1,t/o);i.width=Math.round(o*l),i.height=Math.round(a*l);const c=i.getContext("2d");if(!c)return;c.drawImage(s,0,0,i.width,i.height);let d;try{d=await new Promise((h,u)=>i.toBlob(g=>g?h(g):u(new Error("toBlob failed")),"image/jpeg",.75))}catch{return}try{const{media_id:h,url:u,content_type:g}=await this.uploadLiveStreamFrame(A,d,e,r);if(!this.lvSessionId||this.lvSessionId!==e||!h||!u)return;const B=++this.lvFrameSeq;await this.sendClientEvent(A,"client_media_frame",{data:{session_id:e,frame_seq:B,media_id:h,media_url:u,content_type:g,reason:r}})}catch{}}createLivePip(A,e){const t=document.createElement("div");t.id="vnr-live-pip";const r=A==="user";if(t.style.cssText=["position:fixed","bottom:24px","right:24px","z-index:2147483647","width:180px","height:135px","border-radius:16px","overflow:hidden","background:#0f172a","border:1px solid rgba(255,255,255,0.15)","box-shadow:0 12px 32px rgba(0,0,0,0.35)","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif","transition:transform 0.2s ease"].join(";"),t.innerHTML=`
|
|
2773
|
+
<video autoplay playsinline muted style="width:100%;height:100%;object-fit:cover;display:block;${r?"transform:scaleX(-1);":""}"></video>
|
|
2774
|
+
<div style="position:absolute;top:10px;left:10px;display:flex;align-items:center;gap:6px;padding:3px 8px;border-radius:6px;background:rgba(15,23,42,0.8);border:1px solid rgba(255,255,255,0.1);font-size:10px;font-weight:700;color:#f8fafc;text-transform:uppercase;letter-spacing:0.04em;pointer-events:none;">
|
|
2775
|
+
<span style="width:6px;height:6px;border-radius:50%;background:#ef4444;flex-shrink:0;animation:vnr-pip-pulse 1.5s ease-in-out infinite;"></span>
|
|
2776
|
+
REC
|
|
2777
|
+
</div>
|
|
2778
|
+
<button id="vnr-pip-stop" style="position:absolute;top:10px;right:10px;width:22px;height:22px;border-radius:50%;background:rgba(15,23,42,0.8);border:1px solid rgba(255,255,255,0.1);color:#fff;font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background 0.2s,transform 0.2s;">✕</button>
|
|
2779
|
+
`,!document.getElementById("vnr-pip-style")){const s=document.createElement("style");s.id="vnr-pip-style",s.textContent=`
|
|
2780
|
+
@keyframes vnr-pip-pulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.5;transform:scale(1.2);}}
|
|
2781
|
+
#vnr-live-pip:hover { transform: scale(1.02); }
|
|
2782
|
+
#vnr-pip-stop:hover { background: rgba(239,68,68,0.9) !important; transform: scale(1.1); }
|
|
2783
|
+
`,document.head.appendChild(s)}return t.querySelector("#vnr-pip-stop").addEventListener("click",()=>e()),document.body.appendChild(t),t}injectStyles(){if(this.styleInjected||document.getElementById("vnr-preset-styles"))return;const A=document.createElement("style");A.id="vnr-preset-styles",A.textContent=Yc,document.head.appendChild(A),this.styleInjected=!0}createOverlay(){const A=document.createElement("div");return A.className="vnr-overlay",document.body.appendChild(A),this.overlay=A,A}createModal(A,e,t){const r=document.createElement("div");return r.className="vnr-modal",r.style.position="relative",r.innerHTML=`
|
|
2784
|
+
<button class="vnr-close-btn" aria-label="Close">
|
|
2785
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
|
|
2786
|
+
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
|
2787
|
+
</svg>
|
|
2788
|
+
</button>
|
|
2789
|
+
<h2 class="vnr-title">${e}</h2>
|
|
2790
|
+
<div class="vnr-reason">
|
|
2791
|
+
<svg width="14" height="14" style="flex-shrink:0;margin-top:1px" fill="none" stroke="#9ca3af" stroke-width="2" viewBox="0 0 24 24">
|
|
2792
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
|
|
2793
|
+
</svg>
|
|
2794
|
+
<span>${t}</span>
|
|
2795
|
+
</div>
|
|
2796
|
+
`,A.appendChild(r),r}renderCalendar(A,e,t){this.bindActiveModalPreset(A,b.Calendar,e,t);const r=f=>{this.clearActiveModalPreset(),e({status:"success",preset_id:b.Calendar,...f})},s=f=>{this.clearActiveModalPreset(),t(f,{status:"cancelled"})},i=new Date;i.setHours(0,0,0,0),this.calViewYear=i.getFullYear(),this.calViewMonth=i.getMonth(),this.calSelectedTs=null,this.calSelectedTime=null;const o=A.clientFields.title||"Select Date & Time",a=A.args.reason||"Please select a preferred time for your appointment.",l=this.createOverlay(),c=this.createModal(l,o,a);c.querySelector(".vnr-close-btn").addEventListener("click",()=>{this.dismiss(),s("User closed the preset")});const d=document.createElement("div");c.appendChild(d);const h=document.createElement("div");h.style.display="none",c.appendChild(h);const u=document.createElement("div");u.className="vnr-actions",u.innerHTML=`
|
|
2797
|
+
<button class="vnr-cancel-btn">Cancel</button>
|
|
2798
|
+
<button class="vnr-confirm-btn" disabled>
|
|
2799
|
+
<svg width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>
|
|
2800
|
+
Confirm
|
|
2801
|
+
</button>
|
|
2802
|
+
`,c.appendChild(u);const g=u.querySelector(".vnr-confirm-btn");u.querySelector(".vnr-cancel-btn").addEventListener("click",()=>{this.dismiss(),s("User cancelled")}),g.addEventListener("click",()=>{if(!this.calSelectedTs||!this.calSelectedTime)return;const f=new Date(this.calSelectedTs),m=nr(this.calSelectedTime),w=f.getFullYear(),v=String(f.getMonth()+1).padStart(2,"0"),C=String(f.getDate()).padStart(2,"0"),y=`${w}-${v}-${C}`,Q=A.clientFields.timezone||"";let x=typeof this.calSelectedTime=="object"?{...this.calSelectedTime}:void 0;if(x){for(const F of["start","startTime","end","endTime"])if(x[F]&&typeof x[F]=="string"&&(x[F].includes("T")||!isNaN(Date.parse(x[F]))))try{x[F]=_c(new Date(x[F]),Q)}catch{}}this.dismiss(),r({date:y,time:m,timestamp:this.calSelectedTs,formatted:`${f.toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"})} at ${m}`,slot_data:x})});const B=()=>{const f=new Date;f.setHours(0,0,0,0);const m=new Date(this.calViewYear,this.calViewMonth,1).getDay(),w=new Date(this.calViewYear,this.calViewMonth+1,0).getDate(),v=new Date(this.calViewYear,this.calViewMonth,1).toLocaleDateString("en-US",{month:"long",year:"numeric"}),C=this.calViewYear===f.getFullYear()&&this.calViewMonth===f.getMonth();d.innerHTML=`
|
|
2803
|
+
<div class="vnr-month-nav">
|
|
2804
|
+
<button class="vnr-nav-btn" id="vnr-prev" ${C?"disabled":""}>
|
|
2805
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="15 18 9 12 15 6"/></svg>
|
|
2806
|
+
</button>
|
|
2807
|
+
<span class="vnr-month-label">${v}</span>
|
|
2808
|
+
<button class="vnr-nav-btn" id="vnr-next">
|
|
2809
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="9 18 15 12 9 6"/></svg>
|
|
2810
|
+
</button>
|
|
2811
|
+
</div>
|
|
2812
|
+
<div class="vnr-cal-grid" id="vnr-grid"></div>
|
|
2813
|
+
`,d.querySelector("#vnr-prev").addEventListener("click",()=>{this.calViewMonth===0?(this.calViewMonth=11,this.calViewYear--):this.calViewMonth--,B()}),d.querySelector("#vnr-next").addEventListener("click",()=>{this.calViewMonth===11?(this.calViewMonth=0,this.calViewYear++):this.calViewMonth++,B()});const y=d.querySelector("#vnr-grid");["Su","Mo","Tu","We","Th","Fr","Sa"].forEach(Q=>{const x=document.createElement("div");x.className="vnr-wd",x.textContent=Q,y.appendChild(x)});for(let Q=0;Q<m;Q++){const x=document.createElement("div");y.appendChild(x)}for(let Q=1;Q<=w;Q++){const x=new Date(this.calViewYear,this.calViewMonth,Q).getTime(),F=x<f.getTime(),I=x===f.getTime(),L=this.calSelectedTs===x,O=document.createElement("div");O.style.textAlign="center";const K=document.createElement("button");K.className="vnr-day-btn",F&&K.classList.add("vnr-day-past"),I&&!L&&K.classList.add("vnr-day-today"),L&&K.classList.add("vnr-day-sel"),K.disabled=F,K.textContent=String(Q),K.addEventListener("click",()=>{this.calSelectedTs=x,this.calSelectedTime=null,g.disabled=!0,B(),this.loadSlots(A,h,g)}),O.appendChild(K),y.appendChild(O)}};B()}loadSlots(A,e,t){const r=A.clientFields.slots_api_url;if(!this.calSelectedTs||!r){this.renderSlots(e,["09:00 AM","10:30 AM","01:00 PM","02:30 PM","04:00 PM"],t);return}const s=new Date(this.calSelectedTs),i=s.getFullYear(),o=String(s.getMonth()+1).padStart(2,"0"),a=String(s.getDate()).padStart(2,"0"),l=`${i}-${o}-${a}`,c=A.clientFields.timezone||"",d=Vc(i,s.getMonth(),s.getDate(),c),h=d.start,u=d.end,g=C=>{if(typeof C!="string")return C;let y=C.replace(/\{\{date\}\}/g,l).replace(/\{\{timezone\}\}/g,c).replace(/\{\{start_of_day\}\}/g,h.toISOString()).replace(/\{\{end_of_day\}\}/g,u.toISOString());return Object.entries(A.clientFields).forEach(([Q,x])=>{if(x!=null){const F=Q.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),I=new RegExp(`\\{\\{${F}\\}\\}`,"g");y=y.replace(I,String(x))}}),y},B=(A.clientFields.slots_api_method||"GET").toUpperCase();let f={"Content-Type":"application/json"};try{Object.entries(JSON.parse(A.clientFields.slots_api_headers||"{}")).forEach(([C,y])=>{f[C]=g(String(y))})}catch{}let m={};try{Object.entries(JSON.parse(A.clientFields.slots_api_body||"{}")).forEach(([C,y])=>{m[C]=g(String(y))})}catch{}let w=g(r);const v={method:B,headers:f};if(B==="GET"){const C=new URLSearchParams(Object.entries(m).map(([y,Q])=>[y,String(Q)])).toString();C&&(w+=(w.includes("?")?"&":"?")+C)}else v.body=JSON.stringify(m);e.style.display="block",e.innerHTML='<div class="vnr-divider"></div><div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Loading slots…</div>',fetch(w,v).then(C=>{if(!C.ok)throw new Error(`HTTP ${C.status}`);return C.json()}).then(C=>{let y=[];if(Array.isArray(C))y=C;else if(C&&typeof C=="object"){for(const Q of["slots","free_slots","times","data","available_slots"])if(Array.isArray(C[Q])){y=C[Q];break}}this.renderSlots(e,y,t)}).catch(()=>{e.innerHTML='<div class="vnr-divider"></div><div class="vnr-center" style="color:#ef4444">Failed to load slots. Please try again.</div>'})}renderSlots(A,e,t){const r=this.calSelectedTs?new Date(this.calSelectedTs).toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"}):"Available Times",s=e.some(o=>nr(o).length>8)?2:3;if(A.style.display="block",A.innerHTML=`
|
|
2814
|
+
<div class="vnr-divider"></div>
|
|
2815
|
+
<div class="vnr-section-label">${r}</div>
|
|
2816
|
+
${e.length===0?'<div class="vnr-center">No slots available for this date.</div>':`<div class="vnr-slots-grid" style="grid-template-columns:repeat(${s},1fr)"></div>`}
|
|
2817
|
+
`,e.length===0)return;const i=A.querySelector(".vnr-slots-grid");e.forEach(o=>{const a=document.createElement("button");a.className="vnr-slot-btn",this.calSelectedTime!==null&&(typeof o=="object"&&typeof this.calSelectedTime=="object"?JSON.stringify(o)===JSON.stringify(this.calSelectedTime):o===this.calSelectedTime)&&a.classList.add("vnr-slot-sel"),a.textContent=nr(o),a.addEventListener("click",()=>{this.calSelectedTime=o,t.disabled=!1,i.querySelectorAll(".vnr-slot-btn").forEach(c=>c.classList.remove("vnr-slot-sel")),a.classList.add("vnr-slot-sel")}),i.appendChild(a)})}collectFormFieldValues(A,e){const t={};for(const r of e){if(r.type==="checkbox"){const i=A.querySelector(`#vnr_${r.id}`);t[r.id]=!!(i!=null&&i.checked);continue}if(r.type==="radio"){const i=A.querySelector(`input[name="vnr_${r.id}"]:checked`);t[r.id]=(i==null?void 0:i.value)??"";continue}const s=A.querySelector(`#vnr_${r.id}`);t[r.id]=String((s==null?void 0:s.value)??"").trim()}return t}appendFormFieldElement(A,e,t){const r=document.createElement("div");r.className="vnr-field-wrap",r.dataset.fieldId=e.id;const s=e.placeholder||`Enter your ${e.label.toLowerCase()}`,i=l=>typeof l=="string"?l:l.value,o=l=>typeof l=="string"?l:l.label;if(e.type!=="checkbox"){const l=document.createElement("label");l.className="vnr-field-label",l.htmlFor=`vnr_${e.id}`,l.textContent=e.required?`${e.label} *`:e.label,r.appendChild(l)}switch(e.type){case"textarea":{const l=document.createElement("textarea");l.className="vnr-input vnr-textarea",l.id=`vnr_${e.id}`,l.rows=4,l.placeholder=s,typeof t=="string"&&(l.value=t),r.appendChild(l);break}case"select":{const l=document.createElement("select");l.className="vnr-input",l.id=`vnr_${e.id}`;const c=document.createElement("option");c.value="",c.textContent="Select…",l.appendChild(c);for(const d of e.options){const h=document.createElement("option");h.value=i(d),h.textContent=o(d),l.appendChild(h)}typeof t=="string"&&t&&(l.value=t),r.appendChild(l);break}case"radio":{const l=document.createElement("div");l.className="vnr-radio-group";const c=typeof t=="string"?t:"";e.options.forEach((d,h)=>{const u=document.createElement("label");u.className="vnr-radio-row";const g=document.createElement("input");g.type="radio",g.name=`vnr_${e.id}`,g.id=`vnr_${e.id}_${h}`;const B=i(d);g.value=B,c&&c===B&&(g.checked=!0);const f=document.createElement("span");f.textContent=o(d),u.appendChild(g),u.appendChild(f),l.appendChild(u)}),r.appendChild(l);break}case"checkbox":{const l=document.createElement("label");l.className="vnr-checkbox-row";const c=document.createElement("input");c.type="checkbox",c.id=`vnr_${e.id}`,c.checked=t===!0||t==="true";const d=document.createElement("span");d.textContent=e.required?`${e.label} *`:e.label,l.appendChild(c),l.appendChild(d),r.appendChild(l);break}default:{const l=document.createElement("input");l.className="vnr-input",l.id=`vnr_${e.id}`,l.placeholder=s,e.type==="phone"?l.type="tel":e.type==="email"||e.type==="number"||e.type==="date"?l.type=e.type:l.type="text",typeof t=="string"&&(l.value=t),r.appendChild(l);break}}const a=document.createElement("p");a.className="vnr-field-error",a.style.display="none",r.appendChild(a),A.appendChild(r)}showFormFieldErrors(A,e){A.querySelectorAll(".vnr-field-wrap").forEach(t=>{var o,a;const r=t.dataset.fieldId;if(!r)return;const s=t.querySelector(".vnr-field-error"),i=e[r];i&&s?(s.textContent=i,s.style.display="block",(o=t.querySelector(".vnr-input, .vnr-textarea"))==null||o.classList.add("vnr-input-error")):s&&(s.style.display="none",(a=t.querySelector(".vnr-input, .vnr-textarea"))==null||a.classList.remove("vnr-input-error"))})}renderForm(A,e,t){this.bindActiveModalPreset(A,b.Form,e,t);const r=f=>{this.clearActiveModalPreset(),e({status:"success",preset_id:b.Form,...f})},s=f=>{this.clearActiveModalPreset(),t(f,{status:"cancelled"})},i=A.args.title||A.clientFields.title||"Please fill out this form",o=A.args.reason||"Please provide the following information.",a=_e(A.args.fields??A.clientFields.fields),l=Gc(a,Oc(A.args,A.clientFields)),c=this.createOverlay(),d=this.createModal(c,i,o);d.querySelector(".vnr-close-btn").addEventListener("click",()=>{this.dismiss(),s("User closed")});const h=document.createElement("div");if(h.className="vnr-fields",a.length===0){const f=document.createElement("p");f.className="vnr-form-error",f.style.color="#dc2626",f.style.fontSize="13px",f.textContent="No form fields configured.",h.appendChild(f)}else a.forEach(f=>this.appendFormFieldElement(h,f,l[f.id]));d.appendChild(h);const u=document.createElement("p");u.className="vnr-form-error",u.style.cssText="display:none;color:#dc2626;font-size:13px;margin:8px 0 0;",d.appendChild(u);const g=document.createElement("div");g.className="vnr-actions",g.style.marginTop="16px",g.innerHTML=`
|
|
2818
|
+
<button class="vnr-cancel-btn">Cancel</button>
|
|
2819
|
+
<button class="vnr-confirm-btn">
|
|
2820
|
+
<svg width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>
|
|
2821
|
+
Submit
|
|
2822
|
+
</button>
|
|
2823
|
+
`,d.appendChild(g),g.querySelector(".vnr-cancel-btn").addEventListener("click",()=>{this.dismiss(),s("User cancelled")});const B=g.querySelector(".vnr-confirm-btn");a.length===0&&(B.disabled=!0),B.addEventListener("click",()=>{if(a.length===0){u.textContent="No form fields configured.",u.style.display="block";return}const f=this.collectFormFieldValues(d,a),m=Pc(a,f);if(Object.keys(m).length>0){this.showFormFieldErrors(d,m),u.textContent="Please fix the highlighted fields.",u.style.display="block";const v=Object.keys(m)[0],C=d.querySelector(`[data-field-id="${v}"]`),y=C==null?void 0:C.querySelector("input, textarea, select");y==null||y.focus();return}u.style.display="none",this.showFormFieldErrors(d,{}),B.disabled=!0,B.innerHTML='<div class="vnr-spinner"></div>';const w=Nc(a,f);setTimeout(()=>{this.dismiss(),r(w)},300)})}renderCamera(A,e,t,r){this.bindActiveModalPreset(A,b.Camera,e,t);const s=k=>{this.clearActiveModalPreset(),e({status:"success",preset_id:b.Camera,...k})},i=(k,AA="cancelled")=>{this.clearActiveModalPreset(),t(k,{status:AA})},o=this,a=A.clientFields.title||"Take a Photo",l=A.clientFields.description||"Point your camera at the subject, then tap capture.",c=A.clientFields.facing_mode||A.args.facing_mode||"environment",d=A.clientFields.reason||"camera_capture",h=A.clientFields.liveness_check===!0||A.clientFields.liveness_check==="true"||A.args.liveness_check===!0||A.args.liveness_check==="true";let u=null,g=null;this.stopCaptureCamera(),this.captureActive=!0;const B=this.createOverlay(),f=document.createElement("div");f.className="vnr-modal",f.style.cssText="position:relative;max-width:480px;width:100%",f.innerHTML=`
|
|
2824
|
+
<button class="vnr-close-btn" aria-label="Close">
|
|
2825
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
|
|
2826
|
+
</button>
|
|
2827
|
+
<h2 class="vnr-title" style="padding-right:32px">${a}</h2>
|
|
2828
|
+
<p style="margin:0 0 14px;font-size:13px;color:#6b7280;line-height:1.5">${l}</p>
|
|
2829
|
+
|
|
2830
|
+
<div class="vnr-liveness-toggle-wrap" style="display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;padding:8px 12px">
|
|
2831
|
+
<span style="font-size:12px;font-weight:600;color:#374151">Liveness Verification</span>
|
|
2832
|
+
<label class="vnr-switch" style="position:relative;display:inline-block;width:34px;height:20px">
|
|
2833
|
+
<input type="checkbox" id="vnr-cam-liveness-toggle" style="opacity:0;width:0;height:0">
|
|
2834
|
+
<span class="vnr-slider" style="position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.3s;border-radius:20px"></span>
|
|
2835
|
+
</label>
|
|
2836
|
+
</div>
|
|
2837
|
+
|
|
2838
|
+
<div class="vnr-video-wrap" id="vnr-cam-wrap" style="position:relative">
|
|
2839
|
+
<video id="vnr-cam-video" autoplay playsinline muted></video>
|
|
2840
|
+
<div id="vnr-cam-guide" style="display:none;position:absolute;inset:0;pointer-events:none;border:3px dashed rgba(255,255,255,0.45);border-radius:50%;margin:auto;width:180px;height:240px;box-shadow:0 0 0 9999px rgba(15,23,42,0.6);transition:border-color 0.3s ease, box-shadow 0.3s ease">
|
|
2841
|
+
<div id="vnr-cam-guide-text" style="position:absolute;bottom:-45px;left:-40px;right:-40px;text-align:center;color:#fff;font-size:11px;font-weight:600;background:rgba(15,23,42,0.85);padding:6px 10px;border-radius:6px;border:1px solid rgba(255,255,255,0.1)">
|
|
2842
|
+
Align your face
|
|
2843
|
+
</div>
|
|
2844
|
+
</div>
|
|
2845
|
+
<div id="vnr-cam-overlay" style="position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#0f172a">
|
|
2846
|
+
<div class="vnr-spinner" style="width:32px;height:32px;border-width:3px;border-color:rgba(255,255,255,.15);border-top-color:#fff"></div>
|
|
2847
|
+
<p style="margin:0;font-size:13px;color:#94a3b8">Opening camera…</p>
|
|
2848
|
+
</div>
|
|
2849
|
+
</div>
|
|
2850
|
+
|
|
2851
|
+
<div id="vnr-liveness-progress-container" style="display:none;margin-top:12px">
|
|
2852
|
+
<div style="display:flex;justify-content:space-between;font-size:11px;font-weight:700;color:#6b7280;margin-bottom:6px;letter-spacing:0.04em">
|
|
2853
|
+
<span>LIVENESS ANALYSIS</span>
|
|
2854
|
+
<span id="vnr-liveness-pct" style="color:#6366f1">0%</span>
|
|
2855
|
+
</div>
|
|
2856
|
+
<div style="width:100%;height:6px;background:#f3f4f6;border-radius:3px;overflow:hidden">
|
|
2857
|
+
<div id="vnr-liveness-bar" style="width:0%;height:100%;background:#6366f1;transition:width 0.1s linear"></div>
|
|
2858
|
+
</div>
|
|
2859
|
+
</div>
|
|
2860
|
+
|
|
2861
|
+
<canvas id="vnr-cam-canvas" style="display:none"></canvas>
|
|
2862
|
+
<div id="vnr-cam-status" style="display:none"></div>
|
|
2863
|
+
<div class="vnr-actions" style="margin-top:14px">
|
|
2864
|
+
<button class="vnr-cancel-btn" id="vnr-cam-cancel">Cancel</button>
|
|
2865
|
+
<button class="vnr-confirm-btn" id="vnr-cam-capture" disabled>
|
|
2866
|
+
<svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" viewBox="0 0 24 24"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>
|
|
2867
|
+
Capture & Send
|
|
2868
|
+
</button>
|
|
2869
|
+
</div>
|
|
2870
|
+
`,B.appendChild(f);const m=f.querySelector("#vnr-cam-video"),w=f.querySelector("#vnr-cam-canvas"),v=f.querySelector("#vnr-cam-overlay"),C=f.querySelector("#vnr-cam-status"),y=f.querySelector("#vnr-cam-capture"),Q=f.querySelector("#vnr-cam-liveness-toggle"),x=f.querySelector("#vnr-liveness-progress-container"),F=f.querySelector("#vnr-liveness-bar"),I=f.querySelector("#vnr-liveness-pct"),L=f.querySelector("#vnr-cam-guide"),O=f.querySelector("#vnr-cam-guide-text"),K=()=>{g&&(clearInterval(g),g=null),this.captureLivenessInterval=null,u==null||u.getTracks().forEach(k=>k.stop()),u=null,o.captureStream=null,m.srcObject=null};f.querySelector(".vnr-close-btn").addEventListener("click",()=>{K(),this.captureActive=!1,this.dismiss(),i("User closed")}),f.querySelector("#vnr-cam-cancel").addEventListener("click",()=>{K(),this.captureActive=!1,this.dismiss(),i("User cancelled")});const M=()=>{this.captureActive&&(v.style.display="flex",v.innerHTML=`
|
|
2871
|
+
<div class="vnr-spinner" style="width:32px;height:32px;border-width:3px;border-color:rgba(255,255,255,.15);border-top-color:#fff"></div>
|
|
2872
|
+
<p style="margin:0;font-size:13px;color:#94a3b8">Opening camera…</p>
|
|
2873
|
+
`,y.disabled=!0,navigator.mediaDevices.getUserMedia({video:{facingMode:{ideal:c}},audio:!1}).then(k=>{if(!this.captureActive){k.getTracks().forEach(AA=>AA.stop());return}return u=k,o.captureStream=k,m.srcObject=k,m.play().catch(()=>{})}).then(()=>{if(!(!this.captureActive||!u)){if(v.style.display="none",!f.querySelector(".vnr-live-badge")){const k=document.createElement("div");k.className="vnr-live-badge",k.innerHTML='<span class="vnr-live-dot"></span>LIVE',f.querySelector("#vnr-cam-wrap").appendChild(k)}Q.checked=h,Z()}}).catch(()=>{this.captureActive&&(this.notifyCameraPermissionDenied(r,A.toolCallId),this.fillCameraPermissionPrompt(v,{onRetry:M,onDismiss:()=>{K(),this.captureActive=!1,this.dismiss(),i("Camera permission denied","cancelled")}}))}))};M();function Z(){g&&(clearInterval(g),g=null,o.captureLivenessInterval=null),Q.checked?(x.style.display="block",L.style.display="block",y.disabled=!0,T()):(x.style.display="none",L.style.display="none",y.disabled=!1)}Q.addEventListener("change",Z);function T(){let k=null;const AA=[];let iA=1,oA=0,ZA=0,Sn=0,Pa=!1;const is=document.createElement("canvas"),Ka=is.getContext("2d");is.width=80,is.height=60,F.style.width="0%",F.style.backgroundColor="#6366f1",I.style.color="#6366f1",I.innerText="0%",L.style.borderColor="rgba(255,255,255,0.45)",L.style.boxShadow="0 0 0 9999px rgba(15,23,42,0.6)",O.innerText="Align your face in center",O.style.color="#fff",g=setInterval(()=>{if(!u||m.paused||m.ended)return;Ka.drawImage(m,0,0,80,60);const Me=Ka.getImageData(0,0,80,60).data;if(k){let Hn=0;for(let hA=0;hA<Me.length;hA+=4)Hn+=Math.abs(Me[hA]-k[hA]),Hn+=Math.abs(Me[hA+1]-k[hA+1]),Hn+=Math.abs(Me[hA+2]-k[hA+2]);const Ln=Hn/(Me.length/4*3);if(ZA===0){Sn++,AA.push(Ln);const hA=Math.min(100,Math.round(Sn/15*100));F.style.width=`${hA*.3}%`,I.innerText=`${Math.round(hA*.3)}%`,O.innerText="Hold still to calibrate…",O.style.color="#a5b4fc",Sn>=15&&(iA=AA.reduce((_f,Yf)=>_f+Yf,0)/AA.length,iA<.2&&(iA=.2),ZA=1,Sn=0,F.style.width="30%",I.innerText="30%")}else if(ZA===1){O.innerText="Now blink or turn head slightly",O.style.color="#ffd2d2";const hA=Math.max(3,iA*3.5);if(Ln>hA&&Ln<30){oA+=15,oA>70&&(oA=70,Pa=!0);const os=30+oA;F.style.width=`${os}%`,I.innerText=`${os}%`}else Pa&&Ln<=hA*1.5&&(ZA=2,F.style.width="100%",F.style.backgroundColor="#10b981",I.innerText="100%",I.style.color="#10b981",O.innerText="✓ Liveness Verified! Click Capture & Send.",O.style.color="#10b981",L.style.borderColor="#10b981",L.style.boxShadow="0 0 0 9999px rgba(16,185,129,0.2)",y.disabled=!1,g&&(clearInterval(g),g=null,o.captureLivenessInterval=null))}}k=Me},100),o.captureLivenessInterval=g}y.addEventListener("click",async()=>{if(!u||m.videoWidth===0)return;w.width=m.videoWidth,w.height=m.videoHeight,w.getContext("2d").drawImage(m,0,0),K(),f.querySelector("#vnr-cam-wrap").setAttribute("style","display:none"),f.querySelector(".vnr-liveness-toggle-wrap")&&(f.querySelector(".vnr-liveness-toggle-wrap").style.display="none"),x.style.display="none",y.disabled=!0,C.style.display="block",C.innerHTML='<div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Sending photo…</div>';try{const AA=await new Promise(oA=>w.toBlob(ZA=>oA(ZA),"image/jpeg",.85));if(!AA)throw new Error("Capture failed");const iA=new File([AA],`capture-${Date.now()}.jpg`,{type:"image/jpeg"});if(r&&typeof r.uploadMedia=="function"){const{media_id:oA,url:ZA}=await r.uploadMedia(iA,d,"User captured a photo via camera");C.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ Photo sent!</div>',setTimeout(()=>{this.dismiss(),s({file_name:iA.name,file_type:iA.type,file_size:iA.size,media_id:oA,url:ZA,message:"User captured and sent a photo."})},400)}else{const oA=w.toDataURL("image/jpeg",.85);C.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ Photo ready!</div>',setTimeout(()=>{this.dismiss(),s({file_name:iA.name,data_url:oA,message:"User captured a photo."})},400)}}catch(AA){C.innerHTML=`<div class="vnr-center" style="color:#ef4444">${(AA==null?void 0:AA.message)||"Capture failed"}</div>`}})}renderClipRegion(A,e,t,r){const s=A.args??{},i=String(s.reason??A.clientFields.reason??"page_clip"),o=String(s.prompt??s.message??A.clientFields.default_prompt??"").trim(),a=String(A.clientFields.hint??(o?`Select the area to answer: "${o}"`:"Drag to select an area — release to clip.")),l=Number(A.clientFields.min_region_px??24),c=d=>{Gn(),t(d,{status:"cancelled"})};if(typeof document>"u"){c("Page clip is only available in browser environments");return}El({hint:a,minSizePx:l}).then(async d=>{if(!d){c("User cancelled region selection");return}const h=new File([d.blob],`clip-${Date.now()}.jpg`,{type:"image/jpeg"}),u=o?`User clipped a page region and asked: ${o}`:"User clipped a region of the page and sent it for analysis.";try{await this.completeBlockingMediaTool(r,h,i,{preset_id:b.ClipRegion,region:d.region,viewport:d.viewport,pixel_size:d.pixelSize,prompt:o||void 0,message:u},e)}catch(g){const B=g instanceof Error?g.message:"Clip upload failed";t(B,{status:"cancelled"})}}).catch(d=>{c(d instanceof Error?d.message:"Region clip failed")})}async completeBlockingMediaTool(A,e,t,r,s){const i=A==null?void 0:A.uploadMediaForToolResult;let o,a;if(i&&typeof i=="function")try{const c=await i.call(A,e,t);o=c.media_id,a=c.url}catch{}if(o&&a){s({status:"success",media_id:o,url:a,...r});return}const l=await new Promise((c,d)=>{const h=new FileReader;h.onload=()=>c(String(h.result)),h.onerror=()=>d(new Error("Failed to read media blob")),h.readAsDataURL(e)});s({status:"success",data_url:l,...r})}renderTabScreenshot(A,e,t,r){const s=A.args??{},i=String(s.reason??A.clientFields.reason??"tab_screenshot"),o=String(s.prompt??s.message??A.clientFields.default_prompt??"").trim(),a=Number(s.max_width??A.clientFields.max_width??1280),l=Number(s.max_elements??A.clientFields.max_elements??80);if(typeof document>"u"){t("Tab screenshot is only available in browser environments");return}(async()=>{try{const c=_s({maxElements:Number.isFinite(l)?l:80}),d=Sl(c),u=`${o?`Tab snapshot captured. Context: ${o}`:"Tab snapshot of the visible page captured."}
|
|
2874
|
+
|
|
2875
|
+
COORDINATES ARE NORMALIZED VIEWPORT (0–1), NOT JPEG PIXELS. viewport=${c.viewport.width}x${c.viewport.height}
|
|
2876
|
+
|
|
2877
|
+
For screen_ink prefer css_selector (live DOM) OR copy stroke_points from below:
|
|
2878
|
+
${d}`,g={layout:c,elements:c.elements,element_count:c.elements.length,layout_summary:d,coordinate_system:c.coordinate_system,drawing_guide:"Use screen_ink with css_selector for exact placement, or strokes:[{ points: element.stroke_points, close:true }]. Coords are 0–1 viewport fractions."};e({status:"success",preset_id:b.TabScreenshot,viewport:c.viewport,prompt:o||void 0,message:u,...g}),(async()=>{try{let B=await Ls();Number.isFinite(a)&&a>0&&(B=Ts(B,a));const f=await Rn(B),m=new File([f],`tab-${Date.now()}.jpg`,{type:"image/jpeg"}),w=r==null?void 0:r.uploadMediaForToolResult;w&&typeof w=="function"&&await w.call(r,m,i)}catch{}})()}catch(c){const d=c instanceof Error?c.message:"Tab screenshot failed";t(d,{status:"cancelled"})}})()}renderUpload(A,e,t,r){this.bindActiveModalPreset(A,b.Upload,e,t);const s=C=>{this.clearActiveModalPreset(),e({status:"success",preset_id:b.Upload,...C})},i=C=>{this.clearActiveModalPreset(),t(C,{status:"cancelled"})},o=A.clientFields.title||"Upload a File",a=A.clientFields.description||"Drop or select a file to send to your agent.",l=A.clientFields.reason||"upload",c=A.clientFields.accept||"image/*,application/pdf,text/plain,text/csv";let d=null;const h=this.createOverlay(),u=document.createElement("div");u.className="vnr-modal",u.style.cssText="position:relative;max-width:480px;width:100%",u.innerHTML=`
|
|
2879
|
+
<button class="vnr-close-btn" aria-label="Close">
|
|
2880
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
|
|
2881
|
+
</button>
|
|
2882
|
+
<h2 class="vnr-title" style="padding-right:32px">${o}</h2>
|
|
2883
|
+
<p style="margin:0 0 14px;font-size:13px;color:#6b7280;line-height:1.5">${a}</p>
|
|
2884
|
+
<div class="vnr-dropzone" id="vnr-drop-zone">
|
|
2885
|
+
<div style="font-size:32px;margin-bottom:8px">📁</div>
|
|
2886
|
+
<p style="margin:0 0 4px;font-weight:600;color:#374151;font-size:14px">Drag & drop here</p>
|
|
2887
|
+
<p style="margin:0 0 14px;color:#9ca3af;font-size:12px">or click to browse</p>
|
|
2888
|
+
<span style="display:inline-block;padding:7px 16px;background:#111;color:#fff;border-radius:9px;font-size:13px;font-weight:600">Choose File</span>
|
|
2889
|
+
<p style="margin:12px 0 0;font-size:11px;color:#9ca3af">Images, PDF, CSV, Docs · Max 10 MB</p>
|
|
2890
|
+
</div>
|
|
2891
|
+
<input id="vnr-file-input" type="file" accept="${c}" style="display:none">
|
|
2892
|
+
<div id="vnr-file-preview" style="display:none;border:1px solid #e5e7eb;border-radius:12px;padding:14px;background:#f9fafb"></div>
|
|
2893
|
+
<div id="vnr-upload-status" style="display:none"></div>
|
|
2894
|
+
<div class="vnr-actions" style="margin-top:14px">
|
|
2895
|
+
<button class="vnr-cancel-btn" id="vnr-up-cancel">Cancel</button>
|
|
2896
|
+
<button class="vnr-confirm-btn" id="vnr-up-submit" disabled>
|
|
2897
|
+
<svg width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>
|
|
2898
|
+
Upload & Send
|
|
2899
|
+
</button>
|
|
2900
|
+
</div>
|
|
2901
|
+
`,h.appendChild(u);const g=u.querySelector("#vnr-drop-zone"),B=u.querySelector("#vnr-file-input"),f=u.querySelector("#vnr-file-preview"),m=u.querySelector("#vnr-upload-status"),w=u.querySelector("#vnr-up-submit");u.querySelector(".vnr-close-btn").addEventListener("click",()=>{this.dismiss(),i("User closed")}),u.querySelector("#vnr-up-cancel").addEventListener("click",()=>{this.dismiss(),i("User cancelled")});const v=C=>{d=C,g.style.display="none";const y=C.type.startsWith("image/")?"🖼️":C.type.includes("pdf")?"📄":"📁",Q=(C.size/1024).toFixed(1);f.style.display="block",f.innerHTML=`
|
|
2902
|
+
<div style="display:flex;align-items:center;gap:10px">
|
|
2903
|
+
<span style="font-size:28px">${y}</span>
|
|
2904
|
+
<div style="flex:1;min-width:0">
|
|
2905
|
+
<p style="margin:0;font-weight:600;font-size:13px;color:#111;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${C.name}</p>
|
|
2906
|
+
<p style="margin:3px 0 0;font-size:11px;color:#6b7280">${C.type||"unknown"} · ${Q} KB</p>
|
|
2907
|
+
</div>
|
|
2908
|
+
<button id="vnr-remove-file" style="width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #e5e7eb;border-radius:8px;cursor:pointer;color:#6b7280;flex-shrink:0">
|
|
2909
|
+
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
|
|
2910
|
+
</button>
|
|
2911
|
+
</div>
|
|
2912
|
+
`,f.querySelector("#vnr-remove-file").addEventListener("click",()=>{d=null,f.style.display="none",g.style.display="block",w.disabled=!0}),w.disabled=!1};g.addEventListener("click",()=>B.click()),g.addEventListener("dragover",C=>{C.preventDefault(),g.classList.add("drag")}),g.addEventListener("dragleave",()=>g.classList.remove("drag")),g.addEventListener("drop",C=>{var Q;C.preventDefault(),g.classList.remove("drag");const y=(Q=C.dataTransfer)==null?void 0:Q.files[0];y&&v(y)}),B.addEventListener("change",()=>{var y;const C=(y=B.files)==null?void 0:y[0];C&&v(C)}),w.addEventListener("click",async()=>{if(!d)return;const C=d;g.style.display="none",f.style.display="none",m.style.display="block",m.innerHTML='<div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Uploading…</div>',w.disabled=!0;try{if(r&&typeof r.uploadMedia=="function"){const{media_id:y,url:Q}=await r.uploadMedia(C,l,`User uploaded: ${C.name}`);m.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ File sent!</div>',setTimeout(()=>{this.dismiss(),s({file_name:C.name,file_type:C.type,file_size:C.size,media_id:y,url:Q,message:`User uploaded: ${C.name}`})},400)}else{const y=new FileReader;y.onload=Q=>{m.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ File ready!</div>',setTimeout(()=>{this.dismiss(),s({file_name:C.name,file_type:C.type,file_size:C.size,data_url:Q.target.result,message:`User uploaded: ${C.name}`})},400)},y.readAsDataURL(C)}}catch(y){m.innerHTML=`<div class="vnr-center" style="color:#ef4444">${(y==null?void 0:y.message)||"Upload failed. Please try again."}</div>`,w.disabled=!1,this.dismiss(),this.clearActiveModalPreset(),t((y==null?void 0:y.message)||"Upload failed",{status:"cancelled"})}})}extractElementRoute(A){const e=A.args||{},t=A.clientFields||{};return String(e.route||t.route||e.target_route||t.target_route||"").trim()}normalizeRouteForCompare(A){const e=(A.trim()||"/").split("#")[0],t=e.startsWith("/")?e:`/${e}`;try{const r=new URL(t,window.location.origin);return`${r.pathname}${r.search}`||"/"}catch{return t||"/"}}isCurrentRoute(A){const e=this.normalizeRouteForCompare(A);return(`${window.location.pathname}${window.location.search}`||"/")===e}parseDomTarget(A){const e=A.trim();return e?/^[.#\[]/.test(e)||e.includes(" ")||e.includes(">")?{selector:e}:{elementId:e.replace(/^#/,"")}:{}}findDomTarget(A){if(A.selector)try{const e=document.querySelector(A.selector);if(e)return e}catch{}return A.elementId?document.getElementById(A.elementId.replace(/^#/,"")):null}waitForRouteReady(A,e,t=6e3,r=100){return new Promise(s=>{const i=Date.now()+t,o=!!(e.elementId||e.selector),a=()=>{const l=this.isCurrentRoute(A),c=o?!!this.findDomTarget(e):!0;if(l&&c){s(!0);return}if(Date.now()>=i){s(l);return}window.setTimeout(a,r)};window.setTimeout(a,80)})}dispatchAgentNavigate(A,e){sl(A,{presetId:e.presetId,toolName:e.toolName});const t={url:A,path:A,handled:!1,initiated_by:"agent",preset_id:e.presetId};return window.dispatchEvent(new CustomEvent("vanira:navigate",{detail:t,cancelable:!0})),t}async withElementRoute(A,e,t,r,s){if(!A){r({navigated:!1});return}if(this.isCurrentRoute(A)){r({navigated:!1,route:A});return}const i=this.resolveNavigateTarget(A);if("external"in i){t("Element route must be a same-origin path");return}const o=i.internal;if(!this.dispatchAgentNavigate(o,{presetId:s,toolName:"element_route"}).handled){window.location.assign(o);return}if(!await this.waitForRouteReady(o,e)){t(`Timed out navigating to ${o} for element action`);return}r({navigated:!0,route:o})}resolveNavigateTarget(A){const e=A.trim()||"/";if(e.startsWith("http://")||e.startsWith("https://"))try{const t=new URL(e);return t.origin===window.location.origin?{internal:`${t.pathname}${t.search}${t.hash}`||"/"}:{external:e}}catch{return{internal:e}}return{internal:e}}renderNavigate(A,e,t){var l,c;const r=String(((l=A.clientFields)==null?void 0:l.target_url)||((c=A.args)==null?void 0:c.target_url)||"/"),s=A.toolCallId;if(s&&this.settledNavigateToolCallIds.has(s))return;this.activeNavigate={ctx:A,onComplete:e,onCancel:t,targetUrl:r};const i=this.resolveNavigateTarget(r);if("external"in i){window.open(i.external,"_blank","noopener,noreferrer"),this.completeNavigate({navigation_type:"external"});return}const o=i.internal;if(!this.dispatchAgentNavigate(o,{presetId:b.Navigate,toolName:"vanira_navigate"}).handled){this.cancelNavigate("No SPA listener handled vanira:navigate","cancelled");return}this.completeNavigate({path:o,navigation_type:"internal"})}renderHighlight(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.css_selector||s.css_selector||r.selector||s.selector||""),o=String(r.highlight_color||s.highlight_color||r.color||s.color||"#a855f7"),a=Number(r.duration_ms||s.duration_ms||3e3);if(!i){t("No css_selector provided for highlight");return}const l=document.querySelector(i);if(!l){t(`Element not found for selector: "${i}"`);return}const c=l.style.outline,d=l.style.outlineOffset,h=l.style.boxShadow,u=l.style.transition,g=l.style.scrollMarginTop;l.style.transition="outline 0.2s ease, box-shadow 0.2s ease",l.style.outline=`3px solid ${o}`,l.style.outlineOffset="6px",l.style.boxShadow=`0 0 0 8px ${o}33, 0 0 32px ${o}88`,l.style.scrollMarginTop="100px",l.scrollIntoView({behavior:"smooth",block:"center"}),setTimeout(()=>{l.style.outline=c,l.style.outlineOffset=d,l.style.boxShadow=h,l.style.transition=u,l.style.scrollMarginTop=g},a),e({status:"success",preset_id:b.HighlightElement,message:`Element highlighted: ${i}`})}renderScreenInk(A,e,t){const r=A.args||{},s=A.clientFields||{},i=Ne(),o=r.interactive===!0||r.user_draw===!0||s.interactive===!0||String(r.interactive??s.interactive??"").toLowerCase()==="true";(async()=>{const a=await i.applyInkFromArgs(r,s),l=a.strokes+a.labels;if(l===0&&!o){t("No valid strokes or labels (provide strokes[], labels[], or points)");return}const c=[];a.strokes>0&&c.push(`${a.strokes} stroke(s)`),a.labels>0&&c.push(`${a.labels} label(s)`),e({status:"success",preset_id:b.ScreenInk,message:o?`Drew ${c.join(" and ")}; user can freehand draw until cleared`:`Drew ${c.join(" and ")}`,stroke_count:a.strokes,label_count:a.labels,annotation_count:l,interactive:o||void 0})})()}renderScreenCursor(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.color||s.color||"#f97316"),o=String(r.label||s.label||""),a=Number(r.duration_ms??s.duration_ms??2500),c=Ne().showCursor({x:r.x??s.x,y:r.y??s.y,css_selector:String(r.css_selector||s.css_selector||r.selector||s.selector||"")||void 0,label:o||void 0,color:i,duration_ms:a});if(!c){t("No valid position for screen cursor (provide x/y or css_selector)");return}e({status:"success",preset_id:b.ScreenCursor,message:"Screen cursor shown",x:c.px,y:c.py})}renderScreenClick(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.color||s.color||"#f97316"),o=r.show_ripple??s.show_ripple??!0,a=r.show_cursor??s.show_cursor??!0,l=r.perform_click??s.perform_click??!0,c=String(r.css_selector||s.css_selector||r.selector||s.selector||"").trim();let d,h;if(c){const f=document.querySelector(c);if(!f){t(`Element not found for selector: "${c}"`);return}const m=f.getBoundingClientRect();d=m.left+m.width/2,h=m.top+m.height/2}else{const f=r.x??s.x,m=r.y??s.y;if(f==null||m==null){t("No valid position for screen click (provide x/y or css_selector)");return}const w=window.innerWidth,v=window.innerHeight,C=Number(f),y=Number(m);d=C>=0&&C<=1?C*w:C,h=y>=0&&y<=1?y*v:y}const u=Ne();a&&u.showCursor({x:d,y:h,color:i,duration_ms:800}),o&&u.showClickRipple(d,h,i);let g="",B="";if(l){const f=ql(d,h);f&&($l(f),g=f.tagName.toLowerCase(),B=f.id||"")}e({status:"success",preset_id:b.ScreenClick,message:l&&g?`Clicked ${g}${B?`#${B}`:""} at (${Math.round(d)}, ${Math.round(h)})`:`Click ripple at (${Math.round(d)}, ${Math.round(h)})`,x:d,y:h,clicked_tag:g||void 0,clicked_id:B||void 0})}renderClickElement(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.element_id||s.element_id||r.id||s.id||"").trim().replace(/^#/,""),o=r.scroll_before_click??s.scroll_before_click??!0,a=this.extractElementRoute(A);if(!i){t("No element_id provided for click");return}this.withElementRoute(a,{elementId:i},t,l=>{this.executeClickElement(i,o,l,e,t)},b.ClickElement)}executeClickElement(A,e,t,r,s){const i=document.getElementById(A);if(!i){s(`Element not found for id: "${A}"`);return}if(!this.isElementClickable(i)){s(`Element matched but is not clickable: "#${A}"`);return}e!==!1&&e!=="false"&&i.scrollIntoView({behavior:"smooth",block:"center"}),i.classList.add("vnr-click-pulse"),window.setTimeout(()=>i.classList.remove("vnr-click-pulse"),450),this.programmaticClick(i),r({status:"success",preset_id:b.ClickElement,element_id:A,...t.route?{route:t.route}:{},...t.navigated?{navigated_to_route:t.route}:{},message:`Clicked element: #${A}`,tag_name:i.tagName.toLowerCase(),element_text:(i.textContent||"").trim().slice(0,120)})}renderSelectOption(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.element_id||s.element_id||r.id||s.id||"").trim().replace(/^#/,""),o=this.extractElementRoute(A),a=String(r.option_value||s.option_value||"").trim(),l=String(r.option_label||s.option_label||r.option_text||s.option_text||"").trim();if(!i){t("No element_id provided for select");return}if(!a&&!l){t("Provide option_value or option_label");return}this.withElementRoute(o,{elementId:i},t,c=>{this.executeSelectOption(i,a,l,c,e,t)},b.SelectOption)}async executeSelectOption(A,e,t,r,s,i){var c,d,h,u;const o=document.getElementById(A);if(!o){i(`Element not found for id: "${A}"`);return}o.scrollIntoView({behavior:"smooth",block:"center"});let a="",l="";if(o instanceof HTMLSelectElement){if(!this.setNativeSelectValue(o,e,t)){i(`No matching option in #${A}`);return}a=o.value,l=((d=(c=o.options[o.selectedIndex])==null?void 0:c.text)==null?void 0:d.trim())||a}else{const g=o.querySelector("select");if(g instanceof HTMLSelectElement){if(!this.setNativeSelectValue(g,e,t)){i(`No matching option in #${A} select`);return}a=g.value,l=((u=(h=g.options[g.selectedIndex])==null?void 0:h.text)==null?void 0:u.trim())||a}else{if(!await this.selectCustomDropdownOption(o,e,t)){i(`Could not select option in #${A}`);return}a=e||t,l=t||e}}s({status:"success",preset_id:b.SelectOption,element_id:A,option_value:a||e,option_label:l||t,...r.route?{route:r.route}:{},...r.navigated?{navigated_to_route:r.route}:{},message:`Selected option in #${A}`})}setNativeSelectValue(A,e,t){const r=e.trim();if(r&&this.applyNativeSelectMatch(A,r,{matchValue:!0,matchLabel:!0}))return!0;const s=t.trim();return!!(s&&this.applyNativeSelectMatch(A,s,{matchValue:!0,matchLabel:!0}))}applyNativeSelectMatch(A,e,t){const r=e.trim();if(!r)return!1;const s=r.toLowerCase();for(const i of Array.from(A.options))if(t.matchValue&&i.value===r)return A.value=i.value,this.dispatchInputChange(A),!0;if(t.matchLabel)for(const i of Array.from(A.options)){const o=i.text.trim().toLowerCase();if(o===s||o.includes(s))return A.value=i.value,this.dispatchInputChange(A),!0}return!1}async selectCustomDropdownOption(A,e,t){this.programmaticClick(A),await new Promise(i=>window.setTimeout(i,200));const r=(t||e||"").trim().toLowerCase(),s=Array.from(document.querySelectorAll('[role="option"], [role="menuitem"], [role="menuitemradio"], li, button, a, div'));for(const i of s){if(!i.offsetParent&&i!==document.activeElement)continue;const o=(i.textContent||"").trim().toLowerCase(),a=i.getAttribute("data-value")||i.getAttribute("value")||"";if(e&&a===e)return this.programmaticClick(i),!0;if(r&&o&&(o===r||o.includes(r)))return this.programmaticClick(i),!0}return!1}renderSetDate(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.element_id||s.element_id||r.id||s.id||"").trim().replace(/^#/,""),o=this.extractElementRoute(A),a=String(r.date||s.date||"").trim(),l=String(r.input_kind||s.input_kind||"text").trim().toLowerCase(),c=String(r.text_format||s.text_format||"YYYY-MM-DD").trim();if(!i){t("No element_id provided for set date");return}if(!this.parseIsoDate(a)){t("date must be ISO YYYY-MM-DD");return}this.withElementRoute(o,{elementId:i},t,d=>{this.executeSetDate(i,a,l,c,d,e,t)},b.SetDate)}executeSetDate(A,e,t,r,s,i,o){const a=document.getElementById(A);if(!a){o(`Element not found for id: "${A}"`);return}if(!(a instanceof HTMLInputElement)&&!(a instanceof HTMLTextAreaElement)){o(`Element #${A} is not an input or textarea`);return}a.scrollIntoView({behavior:"smooth",block:"center"}),a.focus({preventScroll:!0});const l=t==="native_date"||a.type==="date",c=l?e:this.formatIsoDate(e,r);this.setNativeInputValue(a,c),i({status:"success",preset_id:b.SetDate,element_id:A,date:e,formatted_value:c,input_kind:l?"native_date":"text",text_format:l?"YYYY-MM-DD":r,...s.route?{route:s.route}:{},...s.navigated?{navigated_to_route:s.route}:{},message:`Set date on #${A}`})}parseIsoDate(A){const e=String(A).trim().match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!e)return null;const t=parseInt(e[1],10),r=parseInt(e[2],10),s=parseInt(e[3],10);return r<1||r>12||s<1||s>31?null:{y:e[1],mo:e[2],d:e[3],year:t,month:r,day:s}}formatIsoDate(A,e){const t=this.parseIsoDate(A);if(!t)return A;const{y:r,mo:s,d:i,month:o,day:a}=t,l=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];switch(e){case"DD/MM/YYYY":return`${i}/${s}/${r}`;case"MM/DD/YYYY":return`${s}/${i}/${r}`;case"DD-MM-YYYY":return`${i}-${s}-${r}`;case"D MMM YYYY":return`${a} ${l[o-1]} ${r}`;case"YYYY-MM-DD":default:return A}}setNativeInputValue(A,e){var s;const t=A instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,r=(s=Object.getOwnPropertyDescriptor(t,"value"))==null?void 0:s.set;r?r.call(A,e):A.value=e,this.dispatchInputChange(A)}dispatchInputChange(A){A.dispatchEvent(new Event("input",{bubbles:!0})),A.dispatchEvent(new Event("change",{bubbles:!0}))}isElementClickable(A){if(A.hasAttribute("disabled")||"disabled"in A&&A.disabled)return!1;const e=window.getComputedStyle(A);return!(e.display==="none"||e.visibility==="hidden"||e.pointerEvents==="none")}programmaticClick(A){try{A.focus({preventScroll:!0})}catch{}const e=A.tagName.toLowerCase(),t=e==="input"?A.type.toLowerCase():"";if((e==="button"||e==="a"||["submit","button","checkbox","radio","reset"].includes(t))&&typeof A.click=="function"){A.click();return}const s={bubbles:!0,cancelable:!0,view:window,button:0,buttons:1};A.dispatchEvent(new MouseEvent("mousedown",s)),A.dispatchEvent(new MouseEvent("mouseup",s)),A.dispatchEvent(new MouseEvent("click",s))}applyBoardSizeToModal(A){const e=jc[this.boardSizePreset],t=this.boardViewMode==="reduced"?.5:1,r=mi(e.maxWidth,t),s=mi(e.height,t);A.style.setProperty("width",r,"important"),A.style.setProperty("max-width",r,"important"),A.style.setProperty("height",s,"important"),A.style.setProperty("max-height",s,"important"),A.classList.toggle("is-reduced",t<1),this.boardViewMode==="reduced"&&this.syncBoardDragLayout(A)}syncBoardResizeButton(A){if(!A)return;const e=this.boardViewMode==="reduced";A.innerHTML=e?Jc:zc,A.setAttribute("aria-label",e?"Restore board size":"Shrink board to half size"),A.title=e?"Restore board size":"Shrink board to half size"}toggleBoardReduced(A){const e=this.boardViewMode==="reduced";this.boardViewMode=e?"expanded":"reduced",e||(this.boardDragPosition=null),this.applyBoardSizeToModal(A),this.applyBoardLayoutMode(this.getBoardOverlay(),A)}wireChalkboardChrome(A,e){let t=A.querySelector(".vnr-whiteboard-header");if(t){const r=t.querySelector(".vnr-whiteboard-resize-btn");r&&(r.onclick=()=>this.toggleBoardReduced(A));const s=t.querySelector(".vnr-whiteboard-close-btn");s&&(s.onclick=()=>{if(this.activePresetGeneration++,e)try{e()}catch{}this.closeBoardUi()})}else{t=document.createElement("div"),t.className="vnr-whiteboard-header";const r=document.createElement("button");r.type="button",r.className="vnr-whiteboard-action-btn vnr-whiteboard-resize-btn",r.onclick=()=>this.toggleBoardReduced(A);const s=document.createElement("button");s.type="button",s.className="vnr-whiteboard-action-btn is-close vnr-whiteboard-close-btn",s.innerHTML=Xc,s.setAttribute("aria-label","Close board"),s.title="Close board",s.onclick=()=>{if(this.activePresetGeneration++,e)try{e()}catch{}this.closeBoardUi()},t.appendChild(r),t.appendChild(s);const i=A.querySelector(".vnr-whiteboard-canvas-wrap");i?A.insertBefore(t,i):A.prepend(t)}this.applyBoardSizeToModal(A),this.applyBoardLayoutMode(this.getBoardOverlay(),A),t&&this.wireBoardDrag(t,A)}wireChalkboardCloseButton(A,e){this.wireChalkboardChrome(A,e)}styleChalkboardTextarea(A){A.style.width="100%",A.style.height="100%",A.style.flex="1",A.style.position="relative",A.style.zIndex="1",A.style.background="transparent",A.style.border="none",A.style.padding="20px 28px 24px",A.style.fontSize="22px",A.style.lineHeight="1.55",A.style.fontFamily="'Architects Daughter', 'Caveat', 'Chalkboard SE', 'Chalkboard', cursive, sans-serif",A.style.color="#ffffff",A.style.textShadow="0 0 3px rgba(255, 255, 255, 0.45), 0 0 8px rgba(255, 255, 255, 0.15)",A.style.outline="none",A.style.resize="none",A.style.boxSizing="border-box"}applySplitBoardLayout(A,e){let t=A.querySelector(".vnr-whiteboard-draw-zone");if(t)return t;BA("Board","Applying split layout — diagram top, notes below");const r=A.querySelector(".vnr-whiteboard-draw-layer");t=document.createElement("div"),t.className="vnr-whiteboard-draw-zone",t.style.flex="0 0 42%",t.style.minHeight="0",t.style.position="relative",t.style.width="100%",t.style.borderBottom="1px solid rgba(255,255,255,0.1)",t.style.background="#08080a";const s=document.createElement("div");for(s.className="vnr-whiteboard-text-zone",s.style.flex="1",s.style.minHeight="0",s.style.display="flex",s.style.flexDirection="column",s.style.position="relative",s.style.background="#0a0a0c",s.style.overflow="hidden";A.firstChild;)A.removeChild(A.firstChild);return A.appendChild(t),A.appendChild(s),s.appendChild(e),r?t.appendChild(r):Ae(t),this.styleChalkboardTextarea(e),this.syncBoardLayout(A),t}syncBoardLayout(A){const e=A.querySelector(".vnr-whiteboard-draw-zone");if(!e)return;const t=this.boardInk.strokes.length>0||this.boardInk.labels.length>0||this.boardDrawInProgress;e.style.display=t?"":"none",e.style.flex=t?"0 0 42%":"0 0 0",e.style.minHeight=t?"200px":"0",this.syncBoardChapterTitle(e),BA("Board:Layout",t?"diagram top + notes below":"notes full board",{strokes:this.boardInk.strokes.length,labels:this.boardInk.labels.length})}syncBoardChapterTitle(A){const e=A??document.querySelector(".vnr-whiteboard-draw-zone");if(!e)return;let t=e.querySelector(".vnr-board-chapter-title");if(!this.boardChapterTitle){t==null||t.remove();return}t||(t=document.createElement("div"),t.className="vnr-board-chapter-title",t.style.cssText=["position:absolute","top:10px","left:12px","right:12px","z-index:3","pointer-events:none","text-align:center","color:#4A9EFF",'font-family:"Architects Daughter","Caveat",cursive,sans-serif',"font-size:22px","line-height:1.3","text-shadow:none"].join(";"),e.appendChild(t)),t.textContent=this.boardChapterTitle}getBoardDrawZone(A){const e=this.upgradeChalkboardCanvas(A),t=this.applySplitBoardLayout(e,A);return this.syncBoardLayout(e),t}upgradeChalkboardCanvas(A){let e=A.closest(".vnr-whiteboard-canvas-wrap");if(e)return e;BA("Board","Upgrading legacy chalkboard — adding draw layer");const t=A.parentElement;if(!t)return A;e=document.createElement("div"),e.className="vnr-whiteboard-canvas-wrap",e.style.display="flex",e.style.flexDirection="column",e.style.flex="1",e.style.height="100%",e.style.position="relative",t.insertBefore(e,A),e.appendChild(A),A.style.position="relative",A.style.zIndex="1",A.style.background="transparent",this.applySplitBoardLayout(e,A);const r=e.querySelector(".vnr-whiteboard-draw-zone");return(this.boardInk.strokes.length>0||this.boardInk.labels.length>0)&&this.syncDiagramLayer(Ae(r)),e}ensureChalkboardTextarea(A){let e=document.querySelector(".vnr-whiteboard-textarea");if(e){this.syncChalkboardNotes();const i=this.upgradeChalkboardCanvas(e);this.applySplitBoardLayout(i,e);const o=i.querySelector(".vnr-whiteboard-draw-zone"),a=Ae(o);a.childElementCount<=1&&(this.boardInk.strokes.length>0||this.boardInk.labels.length>0)&&this.syncDiagramLayer(a);const l=e.closest(".vnr-whiteboard-modal");return l&&(this.wireChalkboardChrome(l,A),this.revealBoardUi(l)),this.syncBoardLayout(i),e}if(!document.getElementById("vnr-chalk-font")){const i=document.createElement("link");i.id="vnr-chalk-font",i.rel="stylesheet",i.href="https://fonts.googleapis.com/css2?family=Architects+Daughter&family=Caveat:wght@400;700&display=swap",document.head.appendChild(i)}const t=this.createOverlay();t.classList.add("vnr-whiteboard-overlay","vnr-whiteboard-overlay-expanded");const r=document.createElement("div");r.className="vnr-modal vnr-whiteboard-modal",r.style.position="relative",r.style.display="flex",r.style.flexDirection="column",r.style.background="#0d0e12",r.style.border="12px solid #5c4033",r.style.borderRadius="16px",r.style.boxShadow="0 25px 60px rgba(0,0,0,0.65), inset 0 0 30px rgba(0,0,0,0.95)",r.style.padding="0",r.style.overflow="hidden",this.applyBoardSizeToModal(r);const s=document.createElement("div");if(s.className="vnr-whiteboard-canvas-wrap",s.style.display="flex",s.style.flexDirection="column",s.style.flex="1",s.style.minHeight="0",s.style.height="auto",s.style.position="relative",e=document.createElement("textarea"),e.className="vnr-whiteboard-textarea",e.placeholder="Notes appear here…",e.value=this.chalkboardContent,e.addEventListener("input",()=>{this.chalkboardContent=e.value}),s.appendChild(e),this.applySplitBoardLayout(s,e),this.syncBoardLayout(s),this.boardInk.strokes.length>0||this.boardInk.labels.length>0){const i=s.querySelector(".vnr-whiteboard-draw-zone");this.syncDiagramLayer(Ae(i))}return r.appendChild(s),t.appendChild(r),this.wireChalkboardChrome(r,A),e}eraseChalkboardInMemory(A,e){return A==="words"?this.eraseLastWords(this.chalkboardContent,e):(this.boardChapterTitle="","")}renderEraseDrawingBoard(A,e,t){this.syncChalkboardNotes();const r=this.boardInk.strokes.length,s=this.boardInk.labels.length,i=r>0||s>0,o=document.querySelector(".vnr-whiteboard-textarea");if(o){const a=this.getBoardDrawZone(o),l=Ae(a);Ut(l);const c=o.closest(".vnr-whiteboard-canvas-wrap");c&&this.syncBoardLayout(c)}else if(i){this.ensureChalkboardTextarea(()=>t("User dismissed chalkboard"));const a=document.querySelector(".vnr-whiteboard-textarea");if(a){const l=this.getBoardDrawZone(a);Ut(Ae(l));const c=a.closest(".vnr-whiteboard-canvas-wrap");c&&this.syncBoardLayout(c)}}this.boardInk=Ht(),this.boardDrawInProgress=!1,this.boardChapterTitle="",BA("Board:EraseDraw","Cleared diagram panel (notes kept)",{strokesCleared:r,labelsCleared:s}),e({status:"success",preset_id:b.EraseDraw,message:i?`Cleared ${r} stroke(s) and ${s} label(s) from the diagram panel. Written notes were kept.`:"Diagram panel was already empty. Written notes were not changed.",strokes_cleared:r,labels_cleared:s,shapes_cleared:r+s,diagram_cleared:!0,notes_preserved:!0,whiteboard_content:this.chalkboardContent,text_written:this.chalkboardContent,board_snapshot:this.getBoardSnapshot(),...this.buildBoardVerification()})}renderDrawShapes(A,e,t){const r={...A.clientFields||{},...A.args||{}};this.syncChalkboardNotes();const s=vc(r,A.clientFields||{}),i=this.activePresetGeneration;if(BA("Board:Draw","draw_on_board invoked",{toolCallId:A.toolCallId,strokes:s.strokes.length,labels:s.labels.length,clearBefore:s.clearBefore,animate:s.animate,shape_duration_ms:s.durationMs}),!s.clearBefore&&s.strokes.length===0&&s.labels.length===0){uc("Board:Draw","No strokes or labels",r),e({status:"error",preset_id:b.Draw,message:"Provide strokes[] or labels[] (same as vanira_screen_ink), or flat points/path_d/label_text+coords. Use clear_old_diagrams_on_board:true to wipe the diagram.",board_snapshot:this.getBoardSnapshot()});return}const o=this.ensureChalkboardTextarea(()=>t("User dismissed chalkboard"));if(!o){e({status:"error",message:"Could not open chalkboard"});return}this.syncChalkboardNotes();const a=this.getBoardDrawZone(o),l=Ae(a);if(s.clearBefore){Ut(l),this.boardInk=Ht();const h=o.closest(".vnr-whiteboard-canvas-wrap");h&&this.syncBoardLayout(h),BA("Board:Draw","Cleared old diagrams on board (notes kept)")}if(s.strokes.length===0&&s.labels.length===0){e({status:"success",preset_id:b.Draw,message:"Old diagrams cleared from board",strokes_drawn:0,labels_drawn:0,shapes_drawn:0,clear_old_diagrams_on_board:!0,clear_drawings:!0,board_snapshot:this.getBoardSnapshot(),...this.buildBoardVerification()});return}const c=(h,u,g={})=>{this.boardDrawInProgress=!1;const B=i!==this.activePresetGeneration,f=o.closest(".vnr-whiteboard-canvas-wrap");f&&this.syncBoardLayout(f);const m={status:B?"cancelled":"success",preset_id:b.Draw,message:B?`Draw interrupted (${h} stroke(s), ${u} label(s) on board)`:`Drew ${h} stroke(s) and ${u} label(s) on chalkboard`,strokes_drawn:h,labels_drawn:u,shapes_drawn:h+u,shape_duration_ms:s.durationMs,clear_old_diagrams_on_board:s.clearBefore,clear_drawings:s.clearBefore,whiteboard_content:this.chalkboardContent,text_written:this.chalkboardContent,board_snapshot:this.getBoardSnapshot(),...this.buildBoardVerification(),...g};BA("Board:Draw","finished",m),e(m)};this.boardDrawInProgress=!0;const d=o.closest(".vnr-whiteboard-canvas-wrap");if(d&&this.syncBoardLayout(d),!s.animate||s.durationMs<=0){this.boardInk.strokes.push(...s.strokes),this.boardInk.labels.push(...s.labels),this.syncDiagramLayer(l),c(s.strokes.length,s.labels.length);return}(this.boardInk.strokes.length>0||this.boardInk.labels.length>0)&&ui(l,this.boardInk,{strokeColor:s.strokeColor,labelColor:s.labelColor,strokeWidth:s.strokeWidth}),Uc(l,s.strokes,s.labels,{strokeColor:s.strokeColor,labelColor:s.labelColor,strokeWidth:s.strokeWidth,animate:!0,durationMs:s.durationMs,gapMs:s.gapMs,isAborted:()=>i!==this.activePresetGeneration}).then(({strokesDrawn:h,labelsDrawn:u})=>{this.boardInk.strokes.push(...s.strokes),this.boardInk.labels.push(...s.labels);const g={};(h<s.strokes.length||u<s.labels.length)&&(g.flushed_remaining=!0),c(h,u,g)})}renderTypeText(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.element_id||s.element_id||r.css_selector||s.css_selector||r.selector||s.selector||"").trim(),o=i?this.extractElementRoute(A):"",a=l=>{this.executeTypeText(A,e,t,i,l)};if(!o){a({navigated:!1});return}this.withElementRoute(o,this.parseDomTarget(i),t,a,b.TypeText)}executeTypeText(A,e,t,r,s){const i=A.args||{},o=A.clientFields||{};let a=String(i.text_to_type||o.text_to_type||i.text||o.text||i.value||o.value||i.search_query||o.search_query||i.query||o.query||"");const{chapterTitle:l,body:c}=this.splitChapterHeading(a),d=Number(i.delay_ms!==void 0?i.delay_ms:o.delay_ms!==void 0?o.delay_ms:50),h=this.resolveTypingMode(A),u=x=>{const F={...x,...s.route?{route:s.route}:{},...s.navigated?{navigated_to_route:s.route}:{}};if(document.querySelector(".vnr-whiteboard-modal")){F.board_snapshot=this.getBoardSnapshot();const I=document.querySelector(".vnr-whiteboard-canvas-wrap");I&&this.syncBoardLayout(I)}e(F)};let g=null;r&&!l&&(g=this.findDomTarget(this.parseDomTarget(r)));const B=()=>{BA("Board:Type","Using chalkboard fallback",{toolCallId:A.toolCallId,textPreview:(c||a).slice(0,80),sessionChars:this.chalkboardContent.length});const x=this.ensureChalkboardTextarea(()=>t("User dismissed typing popup"));if(!x){u({status:"error",message:"Could not open chalkboard"});return}x.focus(),l&&(this.boardChapterTitle=l);const F=l&&!c?a.trim().split(`
|
|
2913
|
+
`)[0].trim():c||a;let I=this.chalkboardContent||"";const L=I?`
|
|
2914
|
+
${F}`:F,O=this.activePresetGeneration,K=d<=0;if(this.activeBoardProgress={ctx:A,mode:"type",textAtStart:I,plannedUnits:L.length,unitsDone:0},K){this.chalkboardContent=I+L,x.value=this.chalkboardContent,x.scrollTop=x.scrollHeight;const M=x.closest(".vnr-whiteboard-canvas-wrap");if(M){const Z=M.querySelector(".vnr-whiteboard-draw-zone");this.syncBoardChapterTitle(Z),this.syncBoardLayout(M)}this.syncBoardProgressUnits(L.length),BA("Board:Type","Chalkboard typed (instant)",{chars:this.chalkboardContent.length,preview:this.chalkboardContent.slice(0,120),chapter:l}),u({status:"success",preset_id:b.TypeText,typing_mode:"append",message:"Typed on chalkboard",whiteboard_content:this.chalkboardContent,text_written:this.chalkboardContent,...this.buildBoardVerification()})}else{let M=I,Z=0;const T=()=>{if(O!==this.activePresetGeneration){this.chalkboardContent=M,x.value=M;return}document.body.contains(x)&&(Z<L.length?(M+=L[Z],this.chalkboardContent=M,x.value=M,x.scrollTop=x.scrollHeight,Z++,this.syncBoardProgressUnits(Z),this.scheduleBoardAnim(T,d)):(this.syncBoardProgressUnits(L.length),u({status:"success",preset_id:b.TypeText,typing_mode:"append",message:"Typed on chalkboard",whiteboard_content:this.chalkboardContent,text_written:this.chalkboardContent,...this.buildBoardVerification()})))};T()}};if(!g){B();return}if(g.focus(),!(g instanceof HTMLInputElement||g instanceof HTMLTextAreaElement||"value"in g)){g.textContent=a,u({status:"success"});return}const m=g;let w=m.value||"";if(h==="replace"&&w&&(this.setNativeInputValue(m,""),w=""),d<=0){m.value=w+a,this.dispatchInputChange(m),u({status:"success",preset_id:b.TypeText,typing_mode:h,message:`Typed into ${r||"input"}`});return}let v=w,C=0;const y=this.activePresetGeneration,Q=()=>{y===this.activePresetGeneration&&document.body.contains(m)&&(C<a.length?(v+=a[C],m.value=v,m.dispatchEvent(new Event("input",{bubbles:!0})),C++,this.scheduleBoardAnim(Q,d)):(m.dispatchEvent(new Event("change",{bubbles:!0})),u({status:"success",preset_id:b.TypeText,typing_mode:h,message:`Typed into ${r||"input"}`})))};Q()}resolveTypingMode(A){const e=A.args||{},t=A.clientFields||{},r=String(e.typing_mode||t.typing_mode||"append").trim().toLowerCase();return r==="replace"||r==="clear"||r==="clear_first"||r==="erase_and_type"?"replace":"append"}renderEraseText(A,e,t){const r=A.args||{},s=A.clientFields||{},i=String(r.element_id||s.element_id||r.css_selector||s.css_selector||r.selector||s.selector||"").trim(),o=i?this.extractElementRoute(A):"",a=l=>{this.executeEraseText(A,e,t,i,l)};if(!o){a({navigated:!1});return}this.withElementRoute(o,this.parseDomTarget(i),t,a,b.EraseText)}executeEraseText(A,e,t,r,s){const i=A.args||{},o=A.clientFields||{},a=String(i.mode||o.mode||"all").trim().toLowerCase(),l=Number(i.num_words!==void 0?i.num_words:i.words_count!==void 0?i.words_count:i.count!==void 0?i.count:1),c=Number(i.delay_ms!==void 0?i.delay_ms:o.delay_ms!==void 0?o.delay_ms:50),d=C=>{e({...C,...s.route?{route:s.route}:{},...s.navigated?{navigated_to_route:s.route}:{}})};let h=null;if(r&&(h=this.findDomTarget(this.parseDomTarget(r))),h||(h=document.querySelector(".vnr-whiteboard-textarea")),!h&&this.chalkboardContent&&(h=this.ensureChalkboardTextarea(()=>t("User dismissed chalkboard"))),!h){if(this.chalkboardContent){this.chalkboardContent=this.eraseChalkboardInMemory(a,l),d({status:"success",erased_from_memory:!0});return}d({status:"error",message:"Target element not found"});return}if(h.classList.contains("vnr-whiteboard-textarea")){const C=h.closest(".vnr-whiteboard-modal");C&&this.wireChalkboardCloseButton(C,()=>t("User dismissed chalkboard"))}if(!(h instanceof HTMLInputElement)&&!(h instanceof HTMLTextAreaElement)){if(a==="words"){const C=h.textContent||"";h.textContent=this.eraseLastWords(C,l)}else h.textContent="";d({status:"success"});return}const u=h,g=u.value||"";let B="";if(a==="words"?B=this.eraseLastWords(g,l):B="",c<=0){if(u.value=B,u.classList.contains("vnr-whiteboard-textarea")){this.chalkboardContent=B;const C=Math.max(0,g.length-B.length);this.activeBoardProgress={ctx:A,mode:"erase",textAtStart:g,plannedUnits:C,unitsDone:C}}u.dispatchEvent(new Event("input",{bubbles:!0})),u.dispatchEvent(new Event("change",{bubbles:!0})),d({status:"success"});return}const f=this.activePresetGeneration,m=u.classList.contains("vnr-whiteboard-textarea"),w=Math.max(0,g.length-B.length);m&&(this.activeBoardProgress={ctx:A,mode:"erase",textAtStart:g,plannedUnits:w,unitsDone:0});const v=()=>{f===this.activePresetGeneration&&document.body.contains(u)&&(u.value.length>B.length?(u.value=u.value.slice(0,-1),m&&(this.chalkboardContent=u.value,this.syncBoardProgressUnits(g.length-u.value.length)),u.dispatchEvent(new Event("input",{bubbles:!0})),u.classList.contains("vnr-whiteboard-textarea")&&(u.scrollTop=u.scrollHeight),this.scheduleBoardAnim(v,Math.max(10,c/2))):(u.dispatchEvent(new Event("change",{bubbles:!0})),d({status:"success"})))};v()}eraseLastWords(A,e){if(!A)return"";const t=A.trimEnd();if(!t)return"";let r=t;for(let s=0;s<e;s++){const i=r.lastIndexOf(" "),o=r.lastIndexOf(`
|
|
2915
|
+
`),a=Math.max(i,o);if(a===-1){r="";break}else r=r.slice(0,a).trimEnd()}return r}}const Te=class Te extends Oa{constructor(e){super(e);p(this,"vaniraClient",null);p(this,"currentView",null);p(this,"presetRenderer",null);p(this,"boardAbortHandler",null);p(this,"clipRegionHandler",null);p(this,"isPanelOpen",!1);p(this,"callActive",!1);p(this,"callStatus","disconnected");p(this,"micMuted",!1);p(this,"eventSource",null);p(this,"pillAudioCtx",null);p(this,"pillAgentAnalyser",null);p(this,"pillAgentData",null);p(this,"pillActivityRaf",null);p(this,"pillLastTranscriptionAt",0);p(this,"pillActivityState","idle");p(this,"floatingButton",null);p(this,"floatingWelcomeChips",null);p(this,"voiceChatPill",null);p(this,"cleanCardLauncher",null);p(this,"humanPresenceLauncher",null);p(this,"panel",null);p(this,"welcomeChipsData",[]);p(this,"chatAdapter");p(this,"sessionManager",null);p(this,"sessionActive",!1);p(this,"widgetMode","voice_only");p(this,"agentId","");p(this,"prospectGroupId","");p(this,"chatServerUrl","");p(this,"prospectId","");p(this,"chatId",null);p(this,"conversationId",null);p(this,"widgetId","");p(this,"pkKey","");p(this,"chatInitialized",!1);p(this,"primaryColor","#000000");p(this,"secondaryColor","#111111");p(this,"gradient",null);p(this,"positionType","fixed");p(this,"position","bottom-right");p(this,"widgetIcon",null);p(this,"iconConfig",null);p(this,"chatWelcomeMessage",null);this.chatAdapter=new Cl,this.processConfig(e)}initSessionManager(){const e=this.widgetId||this.agentId||"default";this.sessionManager=new Kn(e),this.sessionManager.on("tab_took_over",()=>{this.sessionActive=!1,this.showTabConflictBanner("taken_over")}),this.sessionManager.on("session_cleared",()=>{});const t=this.sessionManager.claimSession();return this.sessionActive=t,t}restoreSessionMessages(){var a,l,c;const e=(a=this.sessionManager)==null?void 0:a.getSession();if(!e)return;const t=(c=(l=this.currentView)==null?void 0:l.getChatWindow)==null?void 0:c.call(l);if(!t)return;const r=e.messages.filter(d=>d.content.trim()!==""),s=`vanira_calls_${this.widgetId||this.agentId}`,i=JSON.parse(localStorage.getItem(s)||"[]");if(r.length===0&&i.length===0)return;t.clearMessages();const o=[...r.map((d,h)=>({type:"msg",role:d.role,content:d.content,ts:d.timestamp??h})),...i.map(d=>({type:"call",durationMs:d.durationMs,startedAt:d.startedAt,ts:d.startedAt}))];o.sort((d,h)=>d.ts-h.ts),o.forEach(d=>{d.type==="msg"?t.addMessage(d.role,d.content,d.ts):t.addCallRecord(d.durationMs,d.startedAt)})}showTabConflictBanner(e){var t,r;this.root&&((t=this.root.querySelector(".vanira-tab-conflict-banner"))==null||t.remove(),e==="conflict"&&((r=this.sessionManager)==null||r.forceClaimSession(),this.sessionActive=!0,this.widgetMode.includes("chat")&&this.initializeChatSession(!1)))}playMessageSound(e){try{if(!Te.audioContext){const o=window.AudioContext||window.webkitAudioContext;if(!o)return;Te.audioContext=new o}const t=Te.audioContext;t.state==="suspended"&&t.resume().catch(()=>{});const r=t.createOscillator(),s=t.createGain();r.connect(s),s.connect(t.destination);const i=t.currentTime;e==="send"?(r.type="sine",r.frequency.setValueAtTime(300,i),r.frequency.exponentialRampToValueAtTime(500,i+.05),s.gain.setValueAtTime(0,i),s.gain.linearRampToValueAtTime(.1,i+.01),s.gain.exponentialRampToValueAtTime(.001,i+.1),r.start(i),r.stop(i+.1)):(r.type="sine",r.frequency.setValueAtTime(500,i),r.frequency.exponentialRampToValueAtTime(800,i+.1),s.gain.setValueAtTime(0,i),s.gain.linearRampToValueAtTime(.15,i+.02),s.gain.exponentialRampToValueAtTime(.001,i+.2),r.start(i),r.stop(i+.2))}catch{}}handleWelcomePayload(e,t="assistant"){var i,o,a,l,c,d,h,u;if(!e||this.widgetMode==="voice_only")return;e.buttons&&Array.isArray(e.buttons)?this.welcomeChipsData=e.buttons:((i=e.widget)==null?void 0:i.type)==="button_list"&&((o=e.widget.data)!=null&&o.buttons)&&(this.welcomeChipsData=e.widget.data.buttons),this.updateWelcomeChipsVisibility();const r=(l=(a=this.currentView)==null?void 0:a.getChatWindow)==null?void 0:l.call(a);let s=e.text||e.response||e.content||e.message||"";if(!s&&!this.welcomeChipsData.length&&(s="Hey! how can I help you ?"),!s&&typeof e=="string"&&e.trim().startsWith("{"))try{const g=JSON.parse(e);s=g.text||g.response||g.content||g.message||"",((c=g.widget)==null?void 0:c.type)==="button_list"&&((d=g.widget.data)!=null&&d.buttons)&&(this.welcomeChipsData=g.widget.data.buttons)}catch{}if(r){if(!s&&this.welcomeChipsData.length===0)return;const g=(h=this.sessionManager)==null?void 0:h.getSession();(g==null?void 0:g.messages.some(f=>f.content===s&&f.role===t))||(s&&(r.addMessage(t,s),(u=this.sessionManager)==null||u.pushMessage(t,s)),this.welcomeChipsData.length>0&&r.addButtons(this.welcomeChipsData))}}async initializeChatSession(e=!1){var t,r,s,i,o;if(this.sessionActive&&!this.chatInitialized){this.chatInitialized=!0;try{KA.setChatUrl(this.chatServerUrl);const a=(t=this.sessionManager)==null?void 0:t.getSession();if(!e&&(a!=null&&a.prospectId)){this.prospectId=a.prospectId,this.chatId=a.chatId,this.conversationId=a.conversationId||null,this.restoreSessionMessages(),this.chatId&&!this.eventSource&&(this.eventSource=KA.listenForAdminReplies(this.chatId,this.prospectId,c=>{var d,h,u;(h=(d=this.currentView)==null?void 0:d.getChatWindow)==null||h.call(d).addMessage("assistant",c),(u=this.sessionManager)==null||u.pushMessage("assistant",c),this.playMessageSound("receive")}));return}this.prospectId||(this.prospectGroupId?this.prospectId=await KA.createChatProspect(this.prospectGroupId):this.prospectId=`anon_${Date.now()}_${Math.random().toString(36).substr(2,9)}`);const l=await KA.fetchWelcomeMessage(this.agentId,this.prospectId,this.widgetId||void 0,this.pkKey||void 0);l&&(this.handleWelcomePayload(l),l.chatId&&!this.chatId&&(this.chatId=l.chatId,this.eventSource||(this.eventSource=KA.listenForAdminReplies(this.chatId,this.prospectId,c=>{var d,h,u;(h=(d=this.currentView)==null?void 0:d.getChatWindow)==null||h.call(d).addMessage("assistant",c),(u=this.sessionManager)==null||u.pushMessage("assistant",c),this.playMessageSound("receive")}))),l.conversationId&&(this.conversationId=l.conversationId)),(r=this.sessionManager)==null||r.saveIds(this.prospectId,this.chatId,this.conversationId)}catch{const l="Hey! how can I help you ?";(i=(s=this.currentView)==null?void 0:s.getChatWindow)==null||i.call(s).addMessage("assistant",l),(o=this.sessionManager)==null||o.pushMessage("assistant",l)}}}async initialize(e,t){await super.initialize(e),this.processConfig(e),t&&(this.root=t),this.root&&this.ui_renderer(this.root)}processConfig(e){var t,r;if(this.widgetId=e.widgetId||e.widget_id||this.widgetId||"",this.agentId=e.agentId||e.agent_id||this.agentId||"",this.prospectGroupId=e.prospectGroupId||((t=e.client)==null?void 0:t.base_prospect_group_id)||this.prospectGroupId||"",this.widgetMode=e.widgetMode||e.mode||this.widgetMode||"voice_only",this.pkKey=e.pkKey||e.pk_key||e.publicKey||e.public_key||this.pkKey||"",this.primaryColor=e.primaryColor||e.primary_color||"#000000",this.secondaryColor=e.secondaryColor||e.secondary_color||"#111111",this.gradient=e.gradient||null,this.position=e.position||"bottom-right",this.positionType=e.positionType||"fixed",this.widgetIcon=e.widgetIcon||e.icon||null,this.iconConfig=e.iconConfig||e.icon_config||null,this.chatWelcomeMessage=e.chatWelcomeMessage||e.chat_welcome_message||((r=e.agent)==null?void 0:r.chat_welcome_message)||null,typeof this.chatWelcomeMessage=="string")try{this.chatWelcomeMessage=JSON.parse(this.chatWelcomeMessage)}catch{}this.chatServerUrl=e.serverUrl||e.chatServerUrl||"https://inboxapi.vanira.io",this.updateWelcomeChipsVisibility()}async create_call(e="continue"){var t,r,s,i;if(!(this.callActive||!this.agentId)){this.sessionActive||((t=this.sessionManager)==null||t.forceClaimSession(),this.sessionActive=!0),e==="new"&&((r=this.presetRenderer)==null||r.resetBoardSession());try{if(this.callActive=!0,this.micMuted=!1,this.syncMicMuteUi(),this.updateViewCallState(!0),this.updateViewStatus("connecting"),this.updateLauncherVisibility(),this.isPanelOpen&&this.minimizePanel(),!this.pkKey)throw new Error("[VaniraAI Widget] pk-key is required for voice calls");const o=((s=this.config)==null?void 0:s.serverUrl)||((i=this.config)==null?void 0:i.chatServerUrl),a=o&&!o.includes("travelr.club")?o:gA,l=e==="continue"?mt(this.agentId):null,c=new he({agentId:this.agentId,apiKey:this.pkKey,sessionBehavior:e,prospectId:this.prospectId||(l==null?void 0:l.prospectId)||void 0,callId:e==="continue"?l==null?void 0:l.callId:void 0,backendUrl:a});c.on("session_started",({prospectId:d,callId:h})=>{var u;d&&(this.prospectId=d,(u=this.sessionManager)==null||u.saveIds(d,this.chatId)),h&&Bs(this.agentId,h,d)}),c.on("connected",()=>this.updateViewStatus("connected")).on("disconnected",()=>this.end_call()).on("error",d=>{this.updateViewStatus("error",d)}).on("transcription",({text:d,isFinal:h})=>{var u,g;d.trim()&&(this.pillLastTranscriptionAt=Date.now()),(g=(u=this.currentView)==null?void 0:u.setTranscription)==null||g.call(u,d,h)}).on("track",({track:d})=>{var h;d.kind==="audio"&&this.setupPillAgentAudio(d),this.widgetMode.includes("avatar")&&d.kind==="video"&&((h=this.currentView)!=null&&h.setVideoTrack)&&this.currentView.setVideoTrack(d)}).on("tool_call",d=>{var g,B,f;if((g=this.presetRenderer)==null?void 0:g.handle(d,m=>{const w=pt(d.client_fields,d.arguments||d.args,d.name),v=d.tool_call_id;if(cs(w)&&v){const C=typeof m=="object"&&m!==null?m:{response:m};if(C.status==="cancelled")return;try{c.sendToolResult(v,C)}catch{}return}if(!(m&&(m.media_id||m.url)&&Tn(w))){if(Mn(w)&&w){const C=typeof m=="object"&&m!==null?m:{response:m};if(C.status==="cancelled")return;const y=ls(w,d.name,d.client_fields);c.triggerActionInterrupt(),c.sendActionTrigger(y,C);return}if(w){const C=ls(w,d.name,d.client_fields);c.triggerInterrupt(C,m)}}},(m,w)=>{var y,Q,x;const v=pt(d.client_fields,d.arguments||d.args,d.name),C=d.tool_call_id;if(cs(v)&&C){const F=(w==null?void 0:w.status)??"cancelled",I=String(((y=d.client_fields)==null?void 0:y.target_url)||(d.arguments||d.args||{}).target_url||"");try{const L=v===b.Navigate?((Q=this.presetRenderer)==null?void 0:Q.getNavigateTerminalResult(F,m,I||void 0))??{status:F,reason:m||"Navigation cancelled",preset_id:v,target_url:I||void 0}:((x=this.presetRenderer)==null?void 0:x.getBoardTerminalResult(F,m,v))??{status:F,reason:m||"User dismissed",preset_id:v};c.sendToolResult(C,L)}catch{}return}if(Tn(v)&&C){try{c.sendToolResult(C,{status:"cancelled",reason:m||"User dismissed",preset_id:v})}catch{}return}if(Mn(v)&&C){try{c.sendToolResult(C,{status:"cancelled",reason:m||"User dismissed",preset_id:v})}catch{}return}try{c.sendToolResult(C,{status:"cancelled",reason:"User dismissed"})}catch{}},c))return;const u=new CustomEvent("vaniraai:tool_call",{detail:d,bubbles:!0,composed:!0});(f=(B=this.root)==null?void 0:B.host)==null||f.dispatchEvent(u)}),this.vaniraClient=c,await c.start(),this.boardAbortHandler=d=>{var u;const h=d.detail||{};(u=this.presetRenderer)==null||u.abortBoardTools(h.reason||"Server interrupted",h.toolCallId)},window.addEventListener(wi,this.boardAbortHandler)}catch(o){this.updateViewStatus("error",(o==null?void 0:o.message)||String(o))}}}isCallActive(){var e;return this.callActive&&!!((e=this.vaniraClient)!=null&&e.isConnected)}updateContext(e){if(!this.isCallActive()||!this.vaniraClient)return!1;try{return this.vaniraClient.updateContext(e),!0}catch{return!1}}triggerInterrupt(e,t={}){if(!this.isCallActive()||!this.vaniraClient)return!1;try{return this.vaniraClient.triggerInterrupt(e,t),!0}catch{return!1}}sendToolResult(e,t){var r;if(!((r=this.vaniraClient)!=null&&r.isConnected)||!e)return!1;try{return this.vaniraClient.sendToolResult(e,t),!0}catch{return!1}}end_call(){var r,s;this.boardAbortHandler&&(window.removeEventListener(wi,this.boardAbortHandler),this.boardAbortHandler=null),this.clipRegionHandler&&(window.removeEventListener(vt,this.clipRegionHandler),this.clipRegionHandler=null);const e=(r=this.root)==null?void 0:r.host;e==null||e.classList.remove("vanira-clip-suppressed"),this.callActive=!1,this.callStatus="disconnected",this.micMuted=!1,this.syncMicMuteUi(),this.stopPillActivityMonitor();const t=this.vaniraClient;this.vaniraClient=null,t&&t.stop(),(s=this.presetRenderer)==null||s.teardownSession(),this.updateViewCallState(!1),this.updateLauncherVisibility()}updateViewCallState(e){var t;(t=this.currentView)!=null&&t.setCallActive&&this.currentView.setCallActive(e)}toggleMicMute(){return this.vaniraClient?(this.micMuted=this.vaniraClient.toggleMicrophoneMuted(),this.syncMicMuteUi(),this.micMuted):this.micMuted}syncMicMuteUi(){var e,t,r;(e=this.voiceChatPill)==null||e.setMicMuted(this.micMuted),(r=(t=this.currentView)==null?void 0:t.setMicMuted)==null||r.call(t,this.micMuted)}wireMicMuteControls(){var t,r,s;const e=()=>this.toggleMicMute();(t=this.voiceChatPill)==null||t.bindMicMuteToggle(e),(s=(r=this.currentView)==null?void 0:r.bindMicMuteToggle)==null||s.call(r,e)}updateViewStatus(e,t){var r,s,i,o,a;e==="connecting"?this.callStatus="connecting":e==="connected"?this.callStatus="connected":e==="error"?this.callStatus="error":this.callStatus="disconnected",(r=this.currentView)!=null&&r.setStatus&&this.currentView.setStatus(e,t),this.voiceChatPill&&this.callActive&&!this.isPanelOpen?e==="connected"?(this.pillActivityState="listening",this.voiceChatPill.setActivity("listening"),(i=(s=this.currentView)==null?void 0:s.setActivity)==null||i.call(s,"listening"),this.startPillActivityLoop()):this.voiceChatPill.setStatus(this.callStatus):e==="connected"&&(this.pillActivityState="listening",(a=(o=this.currentView)==null?void 0:o.setActivity)==null||a.call(o,"listening"),this.startPillActivityLoop())}setupPillAgentAudio(e){try{this.pillAudioCtx||(this.pillAudioCtx=new AudioContext),this.pillAudioCtx.state==="suspended"&&this.pillAudioCtx.resume();const t=new MediaStream([e]),r=this.pillAudioCtx.createMediaStreamSource(t);this.pillAgentAnalyser=this.pillAudioCtx.createAnalyser(),this.pillAgentAnalyser.fftSize=256,r.connect(this.pillAgentAnalyser),this.pillAgentData=new Uint8Array(this.pillAgentAnalyser.frequencyBinCount),this.startPillActivityLoop()}catch{}}readPillAgentLevel(){if(!this.pillAgentAnalyser||!this.pillAgentData)return 0;this.pillAgentAnalyser.getByteFrequencyData(this.pillAgentData);let e=0;const t=Math.min(48,this.pillAgentData.length);for(let r=0;r<t;r++)e+=this.pillAgentData[r];return t>0?e/t/255:0}startPillActivityLoop(){if(this.pillActivityRaf!==null)return;const e=()=>{var o,a;if(this.pillActivityRaf=requestAnimationFrame(e),!this.callActive||this.callStatus!=="connected")return;const t=this.readPillAgentLevel(),r=Date.now()-this.pillLastTranscriptionAt<1200,i=t>.06||r?"speaking":"listening";i!==this.pillActivityState&&(this.pillActivityState=i,this.voiceChatPill&&!this.isPanelOpen&&this.voiceChatPill.setActivity(i),(a=(o=this.currentView)==null?void 0:o.setActivity)==null||a.call(o,i))};this.pillActivityRaf=requestAnimationFrame(e)}stopPillActivityMonitor(){this.pillActivityRaf!==null&&(cancelAnimationFrame(this.pillActivityRaf),this.pillActivityRaf=null),this.pillAgentAnalyser=null,this.pillAgentData=null,this.pillLastTranscriptionAt=0,this.pillActivityState="idle",this.pillAudioCtx&&(this.pillAudioCtx.close().catch(()=>{}),this.pillAudioCtx=null)}ui_renderer(e){var l,c,d,h,u;this.root=e,this.root.innerHTML="",this.presetRenderer=new qc(e),this.root.host&&(this.positionType==="fixed"?this.root.host.classList.add("vanira-portal"):this.root.host.classList.remove("vanira-portal")),this.clipRegionHandler&&window.removeEventListener(vt,this.clipRegionHandler),this.clipRegionHandler=g=>{var m,w;const B=!!((m=g.detail)!=null&&m.active),f=(w=this.root)==null?void 0:w.host;f&&f.classList.toggle("vanira-clip-suppressed",B)},window.addEventListener(vt,this.clipRegionHandler);const t=document.createElement("style");t.textContent=`@keyframes vanira-slide-up {
|
|
2916
|
+
from { opacity:0; transform:translateY(16px); }
|
|
2917
|
+
to { opacity:1; transform:translateY(0); }
|
|
2918
|
+
}`,this.root.appendChild(t);const r=document.createElement("style");r.textContent=`
|
|
2919
|
+
${ll}
|
|
2920
|
+
:host { ${al(this.primaryColor,this.secondaryColor)} }
|
|
2921
|
+
${Qs.styles}
|
|
2922
|
+
${Fs.styles}
|
|
2923
|
+
${xs.styles}
|
|
2924
|
+
${this.gradient?`.widget-fab { background: ${this.gradient} !important; }`:""}
|
|
2925
|
+
.clean-card-launcher {
|
|
2926
|
+
position: fixed;
|
|
2927
|
+
z-index: 9999;
|
|
2928
|
+
bottom: 20px;
|
|
2929
|
+
right: 20px;
|
|
2930
|
+
background: #ffffff;
|
|
2931
|
+
border-radius: 14px;
|
|
2932
|
+
padding: 12px 14px 10px;
|
|
2933
|
+
box-shadow: 0 6px 28px rgba(0,0,0,0.15), 0 2px 6px rgba(0,0,0,0.08);
|
|
2934
|
+
display: flex;
|
|
2935
|
+
flex-direction: column;
|
|
2936
|
+
gap: 8px;
|
|
2937
|
+
min-width: 180px;
|
|
2938
|
+
max-width: 230px;
|
|
2939
|
+
cursor: pointer;
|
|
2940
|
+
pointer-events: auto !important;
|
|
2941
|
+
animation: fadeInScale 0.35s cubic-bezier(0.34,1.56,0.64,1);
|
|
2942
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
2943
|
+
}
|
|
2944
|
+
.clean-card-logo {
|
|
2945
|
+
font-size: 8px;
|
|
2946
|
+
font-weight: 800;
|
|
2947
|
+
letter-spacing: 0.18em;
|
|
2948
|
+
text-transform: uppercase;
|
|
2949
|
+
color: rgba(0,0,0,0.28);
|
|
2950
|
+
line-height: 1;
|
|
2951
|
+
}
|
|
2952
|
+
.clean-card-title {
|
|
2953
|
+
font-size: 12px;
|
|
2954
|
+
font-weight: 700;
|
|
2955
|
+
color: #0f172a;
|
|
2956
|
+
line-height: 1.3;
|
|
2957
|
+
margin: 1px 0 0;
|
|
2958
|
+
}
|
|
2959
|
+
.clean-card-welcome {
|
|
2960
|
+
font-size: 11px;
|
|
2961
|
+
font-weight: 600;
|
|
2962
|
+
color: #475569;
|
|
2963
|
+
margin-top: 4px;
|
|
2964
|
+
line-height: 1.2;
|
|
2965
|
+
}
|
|
2966
|
+
.clean-card-launcher.has-session-choice {
|
|
2967
|
+
cursor: default;
|
|
2968
|
+
gap: 10px;
|
|
2969
|
+
padding-bottom: 12px;
|
|
2970
|
+
}
|
|
2971
|
+
.clean-card-launcher.has-session-choice .clean-card-title {
|
|
2972
|
+
display: none;
|
|
2973
|
+
}
|
|
2974
|
+
.clean-card-btn {
|
|
2975
|
+
display: flex;
|
|
2976
|
+
align-items: center;
|
|
2977
|
+
justify-content: center;
|
|
2978
|
+
gap: 5px;
|
|
2979
|
+
width: 100%;
|
|
2980
|
+
padding: 7px 12px;
|
|
2981
|
+
border-radius: 8px;
|
|
2982
|
+
background: #0f172a;
|
|
2983
|
+
color: #ffffff;
|
|
2984
|
+
font-size: 10px;
|
|
2985
|
+
font-weight: 700;
|
|
2986
|
+
letter-spacing: 0.05em;
|
|
2987
|
+
text-transform: uppercase;
|
|
2988
|
+
border: none;
|
|
2989
|
+
cursor: pointer;
|
|
2990
|
+
box-shadow: 0 2px 6px rgba(0,0,0,0.15);
|
|
2991
|
+
transition: background 0.2s, transform 0.15s;
|
|
2992
|
+
}
|
|
2993
|
+
.clean-card-btn:hover {
|
|
2994
|
+
background: #1e293b;
|
|
2995
|
+
transform: scale(1.02);
|
|
2996
|
+
}
|
|
2997
|
+
.clean-card-btn svg {
|
|
2998
|
+
width: 12px;
|
|
2999
|
+
height: 12px;
|
|
3000
|
+
fill: currentColor;
|
|
3001
|
+
}
|
|
3002
|
+
`,this.root.appendChild(r);const s=`vanira_pos_${this.widgetId||this.agentId}`,i=localStorage.getItem(s);let o=null;if(i)try{o=JSON.parse(i)}catch{}if(this.floatingButton=new Qs(()=>this.togglePanel(),(g,B)=>{var f,m;(f=this.floatingWelcomeChips)==null||f.updateCoordinates(g,B,B>window.innerHeight/2),this.isPanelOpen&&((m=this.panel)==null||m.updatePosition({left:`${Math.max(20,Math.min(g-170,window.innerWidth-420))}px`,top:B>window.innerHeight/2?"auto":`${B+80}px`,bottom:B>window.innerHeight/2?`${window.innerHeight-B+20}px`:"auto"}))},(g,B)=>{localStorage.setItem(s,JSON.stringify({x:g,y:B}))}),this.floatingButton.setIcon(this.getFabIcon()),o?this.floatingButton.updateCoordinates(o.x,o.y):this.floatingButton.setPosition(this.getPosStyle()),this.floatingWelcomeChips=new Fs(g=>this.handleFloatingChipClick(g)),o?this.floatingWelcomeChips.updateCoordinates(o.x,o.y,o.y>window.innerHeight/2):this.floatingWelcomeChips.setPosition(this.getPosStyle()),this.panel=new xs(()=>this.handlePanelClose(),this.getPanelTitle(),()=>this.minimizePanel()),this.voiceChatPill=new ul(()=>this.openPanel(),()=>this.end_call(),"Voice chat"),this.root.appendChild(this.voiceChatPill.getElement()),this.root.appendChild(this.floatingWelcomeChips.getElement()),this.widgetIcon==="clean_assistant"){const g=((l=this.iconConfig)==null?void 0:l.logo_text)||"vanira",B=((c=this.iconConfig)==null?void 0:c.title)||"Vanira Voice AI Assistant",f=((d=this.iconConfig)==null?void 0:d.button_text)||"Begin Call",m=fs(this.agentId);let w=!1;const v=document.createElement("div");v.className="clean-card-launcher",v.innerHTML=`
|
|
3003
|
+
<div class="clean-card-header">
|
|
3004
|
+
<div class="clean-card-logo">${g}</div>
|
|
3005
|
+
<div class="clean-card-title">${B}</div>
|
|
3006
|
+
<div class="clean-card-welcome" style="display: none;">Welcome back</div>
|
|
3007
|
+
</div>
|
|
3008
|
+
${m?`
|
|
3009
|
+
<div class="session-selector-container" style="display: none;">
|
|
3010
|
+
<div class="session-option active" data-behavior="continue">
|
|
3011
|
+
<span class="session-icon" aria-hidden="true">${G.sessionContinue}</span>
|
|
3012
|
+
<span class="session-title">Continue</span>
|
|
3013
|
+
</div>
|
|
3014
|
+
<div class="session-option" data-behavior="new">
|
|
3015
|
+
<span class="session-icon" aria-hidden="true">${G.sessionRestart}</span>
|
|
3016
|
+
<span class="session-title">Restart</span>
|
|
3017
|
+
</div>
|
|
3018
|
+
</div>
|
|
3019
|
+
`:""}
|
|
3020
|
+
<button class="clean-card-btn" type="button">
|
|
3021
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
3022
|
+
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.14 12 19.79 19.79 0 0 1 1.07 3.4 2 2 0 0 1 3 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.09 8.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"/>
|
|
3023
|
+
</svg>
|
|
3024
|
+
${f}
|
|
3025
|
+
</button>
|
|
3026
|
+
`;const C=v.querySelector(".session-selector-container"),y=v.querySelector(".clean-card-welcome"),Q=v.querySelector(".clean-card-btn"),x=L=>{v.style.display="none",this.create_call(L)},F=()=>{w=!0,v.classList.add("has-session-choice"),y&&(y.style.display=""),C&&(C.style.display="flex"),Q&&(Q.style.display="none")},I=v.querySelectorAll(".session-option");I.forEach(L=>{L.addEventListener("click",O=>{if(O.stopPropagation(),!w)return;I.forEach(M=>M.classList.remove("active")),L.classList.add("active");const K=L.getAttribute("data-behavior");x(K)})}),Q==null||Q.addEventListener("click",L=>{if(L.stopPropagation(),m&&!w){F();return}m||x("continue")}),this.root.appendChild(v),this.cleanCardLauncher=v}else this.widgetIcon==="human_presence"?(this.humanPresenceLauncher=new gl(()=>this.openPanel(),{greeting:((h=this.iconConfig)==null?void 0:h.greeting)||"Hi there!",subtitle:((u=this.iconConfig)==null?void 0:u.subtitle)||"I'm here to help"}),this.root.appendChild(this.humanPresenceLauncher.getElement())):this.root.appendChild(this.floatingButton.getElement());this.root.appendChild(this.panel.getElement()),this.setupPanelContent(),this.chatWelcomeMessage&&!this.widgetMode.includes("chat")&&this.handleWelcomePayload(this.chatWelcomeMessage),this.initSessionManager()?this.widgetMode.includes("chat")&&this.initializeChatSession():this.showTabConflictBanner("conflict"),this.updateLauncherVisibility()}getFabIcon(){return this.widgetIcon&&yt[this.widgetIcon]?yt[this.widgetIcon]:this.widgetMode.includes("chat")?G.chat:G.voice_orb}getPanelTitle(){return"Assistant"}getPosStyle(){const e={"bottom-right":"bottom: 24px; right: 24px;","bottom-left":"bottom: 24px; left: 24px;","top-right":"top: 24px; right: 24px;","top-left":"top: 24px; left: 24px;"};return e[this.position]||e["bottom-right"]}setupPanelContent(){var t,r;const e=(s,i)=>{var c,d;const o=(d=(c=this.currentView)==null?void 0:c.getChatWindow)==null?void 0:d.call(c);o&&o.addCallRecord(s,i);const a=`vanira_calls_${this.widgetId||this.agentId}`,l=JSON.parse(localStorage.getItem(a)||"[]");l.push({durationMs:s,startedAt:i}),l.length>50&&l.splice(0,l.length-50),localStorage.setItem(a,JSON.stringify(l))};switch(this.widgetMode){case"chat_only":this.currentView=new Bl(s=>this.handleChatSend(s));break;case"chat_voice":this.currentView=new fl(s=>this.handleChatSend(s),()=>this.create_call(),()=>this.end_call(),this.primaryColor,this.secondaryColor,e);break;case"avatar_only":this.currentView=new wl(()=>this.create_call(),()=>this.end_call(),this.primaryColor,this.secondaryColor,e);break;case"chat_avatar":this.currentView=new ml(s=>this.handleChatSend(s),()=>this.create_call(),()=>this.end_call(),this.primaryColor,this.secondaryColor,e);break;case"voice_only":default:this.currentView=new pl(s=>this.create_call(s),()=>this.end_call(),this.primaryColor,this.secondaryColor,e,this.agentId);break}if(this.currentView&&this.panel){this.panel.setContent(this.currentView.getElement()),this.widgetMode==="voice_only"?this.panel.getElement().classList.add("voice-only-panel"):this.panel.getElement().classList.remove("voice-only-panel");const s=(r=(t=this.currentView).getChatWindow)==null?void 0:r.call(t);s&&s.setResolveCallback(()=>this.resolveActiveConversation())}this.wireMicMuteControls()}async handleChatSend(e){var r,s,i,o,a;if(!e)return;this.sessionActive||((r=this.sessionManager)==null||r.forceClaimSession(),this.sessionActive=!0,this.widgetMode.includes("chat")&&await this.initializeChatSession(!1));const t=(i=(s=this.currentView)==null?void 0:s.getChatWindow)==null?void 0:i.call(s);if(t){this.chatId&&!this.eventSource&&(this.eventSource=KA.listenForAdminReplies(this.chatId,this.prospectId,l=>{var c,d,h;(d=(c=this.currentView)==null?void 0:c.getChatWindow)==null||d.call(c).addMessage("assistant",l),(h=this.sessionManager)==null||h.pushMessage("assistant",l),this.playMessageSound("receive")})),t.addMessage("user",e),(o=this.sessionManager)==null||o.pushMessage("user",e),t.setTyping(!0),(a=this.sessionManager)==null||a.pushMessage("assistant","");try{let l=!1;await this.chatAdapter.sendMessage(e,this.agentId,this.prospectId,this.chatId,c=>{var d;l||(this.playMessageSound("receive"),l=!0),t.setTyping(!1),(c==null?void 0:c.type)==="button_list"&&((d=c.data)!=null&&d.buttons)&&(t.addButtons(c.data.buttons),this.welcomeChipsData=c.data.buttons,this.updateWelcomeChipsVisibility())},c=>{var d;l||(this.playMessageSound("receive"),l=!0),t.setTyping(!1),t.updateLastAssistantMessage(c),(d=this.sessionManager)==null||d.updateLastAssistantMessage(c)},(c,d)=>{var h;c&&(this.chatId=c),d&&(this.conversationId=d),(c||d)&&((h=this.sessionManager)==null||h.saveIds(this.prospectId,this.chatId,this.conversationId))},this.widgetId||void 0,this.pkKey||void 0)}catch{t.setTyping(!1),t.addMessage("assistant","Error sending message.")}}}minimizePanel(){this.closePanel()}handlePanelClose(){if(this.callActive){this.minimizePanel();return}this.closePanel()}updateLauncherVisibility(){var s,i,o;const e=this.callActive&&!this.isPanelOpen,t=!this.isPanelOpen&&!e;this.voiceChatPill&&(e?(this.callStatus==="connected"?(this.pillActivityState=this.pillActivityState==="speaking"?"speaking":"listening",this.voiceChatPill.setActivity(this.pillActivityState),this.startPillActivityLoop()):this.voiceChatPill.setStatus(this.callStatus),this.voiceChatPill.show()):(this.voiceChatPill.hide(),this.isPanelOpen&&this.callStatus==="connected"&&((i=(s=this.currentView)==null?void 0:s.setActivity)==null||i.call(s,this.pillActivityState==="speaking"?"speaking":"listening")))),this.callActive&&this.callStatus==="connected"&&this.startPillActivityLoop();const r=(o=this.floatingButton)==null?void 0:o.getElement();if(r){const a=this.isPanelOpen||e||this.widgetIcon==="clean_assistant"||this.widgetIcon==="human_presence";r.classList.toggle("hidden-launcher",a)}this.cleanCardLauncher&&(this.cleanCardLauncher.style.display=t&&this.widgetIcon==="clean_assistant"?"":"none"),this.humanPresenceLauncher&&(t&&this.widgetIcon==="human_presence"?this.humanPresenceLauncher.show():this.humanPresenceLauncher.hide()),this.updateWelcomeChipsVisibility()}togglePanel(){this.isPanelOpen?this.closePanel():this.openPanel()}openPanel(){var r,s,i,o;this.isPanelOpen=!0,this.updateWelcomeChipsVisibility();const e=(r=this.floatingButton)==null?void 0:r.getElement().getBoundingClientRect();if(e&&e.width>0){const a=e.top>window.innerHeight/2;(s=this.panel)==null||s.open({left:`${Math.max(20,Math.min(e.left-170,window.innerWidth-420))}px`,bottom:a?`${window.innerHeight-e.top+20}px`:void 0,top:a?void 0:`${e.top+80}px`})}else(i=this.panel)==null||i.open({bottom:"90px",right:"20px",left:"auto",top:"auto"});(o=this.root)!=null&&o.host&&this.root.host.classList.add("vanira-panel-open"),this.updateLauncherVisibility()}closePanel(){var e,t;this.isPanelOpen=!1,this.updateWelcomeChipsVisibility(),(e=this.panel)==null||e.close(),(t=this.root)!=null&&t.host&&this.root.host.classList.remove("vanira-panel-open"),this.updateLauncherVisibility()}updateWelcomeChipsVisibility(){if(!this.floatingWelcomeChips)return;!this.isPanelOpen&&!this.callActive&&this.welcomeChipsData.length>0?(this.floatingWelcomeChips.setChips(this.welcomeChipsData),this.floatingWelcomeChips.getElement().style.display="flex"):this.floatingWelcomeChips.getElement().style.display="none"}handleFloatingChipClick(e){this.openPanel(),this.handleChatSend(e)}async resolveActiveConversation(){var t,r,s;if(this.eventSource&&(this.eventSource.close(),this.eventSource=null),this.conversationId)try{await KA.resolveConversation(this.conversationId)}catch{}(t=this.sessionManager)==null||t.clearChatKeepProspect(),this.conversationId=null,this.chatId=null;const e=(s=(r=this.currentView)==null?void 0:r.getChatWindow)==null?void 0:s.call(r);e&&e.clearMessages(),this.chatInitialized=!1,await this.initializeChatSession(!0)}};p(Te,"audioContext",null);let rr=Te;class $c{static getProvider(A){return new rr(A)}}class Ci extends HTMLElement{constructor(){super();p(this,"shadow");p(this,"provider",null);p(this,"widgetId","");p(this,"agentId","");p(this,"pkKey","");p(this,"serverUrl","https://inboxapi.vanira.io");p(this,"position","bottom-right");p(this,"primaryColor","");p(this,"secondaryColor","");p(this,"gradient",null);p(this,"positionType","fixed");p(this,"widgetIcon",null);this.shadow=this.attachShadow({mode:"open"})}static get observedAttributes(){return["widget-id","agent-id","position","primary-color","secondary-color","server-url","gradient","position-type","pk-key","icon","widget-icon"]}connectedCallback(){this.readAttributes(),this.provider=$c.getProvider(this.buildInitialConfig()),!!(this.widgetId&&!this.agentId)?this.initializeExpandedConfig():this.provider&&this.provider.ui_renderer(this.shadow)}readAttributes(){this.widgetId=this.getAttribute("widget-id")||"",this.agentId=this.getAttribute("agent-id")||"",this.pkKey=this.getAttribute("pk-key")||"",this.serverUrl=this.getAttribute("server-url")||"https://inboxapi.vanira.io",this.position=this.getAttribute("position")||"bottom-right",this.primaryColor=this.getAttribute("primary-color")||"",this.secondaryColor=this.getAttribute("secondary-color")||"",this.gradient=this.getAttribute("gradient"),this.positionType=this.getAttribute("position-type")||"fixed",this.widgetIcon=this.getAttribute("icon")||this.getAttribute("widget-icon")}buildInitialConfig(){const e={widgetId:this.widgetId,agentId:this.agentId,pkKey:this.pkKey,serverUrl:this.serverUrl,position:this.position,positionType:this.positionType,gradient:this.gradient};return this.hasAttribute("primary-color")&&(e.primaryColor=this.primaryColor,e.primary_color=this.primaryColor),this.hasAttribute("secondary-color")&&(e.secondaryColor=this.secondaryColor,e.secondary_color=this.secondaryColor),(this.hasAttribute("icon")||this.hasAttribute("widget-icon"))&&(e.icon=this.widgetIcon,e.widgetIcon=this.widgetIcon),e}buildMergedConfig(e){return{...e,...this.hasAttribute("primary-color")?{primary_color:this.primaryColor,primaryColor:this.primaryColor}:{},...this.hasAttribute("secondary-color")?{secondary_color:this.secondaryColor,secondaryColor:this.secondaryColor}:{},...this.hasAttribute("icon")||this.hasAttribute("widget-icon")?{icon:this.widgetIcon,widgetIcon:this.widgetIcon}:{}}}async initializeExpandedConfig(){try{const e=await de.fetchWidgetConfig(this.widgetId,this.pkKey||void 0);this.provider&&await this.provider.initialize(this.buildMergedConfig(e),this.shadow)}catch{this.provider&&await this.provider.initialize(this.buildInitialConfig(),this.shadow)}}isCallActive(){var e;return((e=this.provider)==null?void 0:e.isCallActive())??!1}updateContext(e){var r;const t=((r=this.provider)==null?void 0:r.updateContext(e))??!1;return t&&this.dispatchHostEvent("vaniraai:context_updated",{context:e}),t}triggerInterrupt(e,t={}){var s;const r=((s=this.provider)==null?void 0:s.triggerInterrupt(e,t))??!1;return r&&this.dispatchHostEvent("vaniraai:action_triggered",{actionName:e,data:t}),r}sendToolResult(e,t){var s;return((s=this.provider)==null?void 0:s.sendToolResult(e,t))??!1}dispatchHostEvent(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}}if(customElements.get("vanira-convai")||customElements.define("vanira-convai",Ci),typeof window<"u"){window.VaniraConvAI=Ci,window.VaniraClient=he,window.VaniraAI=he,window.WebRTCClient=he;try{new URLSearchParams(window.location.search).has("vanira_debug")&&localStorage.setItem("vanira:debug","1"),hc(),localStorage.getItem("vanira:debug")==="1"&&BA("SDK","Debug logging on — inspect window.__VANIRA_DEBUG_LOG__")}catch{}}const $=document.currentScript;if($){const n=$.getAttribute("data-widget-id")||$.getAttribute("widget-id"),A=$.getAttribute("data-agent-id")||$.getAttribute("agent-id");if(n||A){const e=$.getAttribute("data-position")||$.getAttribute("position"),t=$.getAttribute("data-primary-color")||$.getAttribute("primary-color"),r=$.getAttribute("data-secondary-color")||$.getAttribute("secondary-color"),s=$.getAttribute("data-gradient")||$.getAttribute("gradient"),i=$.getAttribute("data-server-url")||$.getAttribute("server-url"),o=$.getAttribute("data-pk-key")||$.getAttribute("pk-key"),a=$.getAttribute("icon")||$.getAttribute("widget-icon"),l=document.createElement("vanira-convai");n&&l.setAttribute("widget-id",n),A&&l.setAttribute("agent-id",A),o&&l.setAttribute("pk-key",o),a&&l.setAttribute("icon",a),e&&l.setAttribute("position",e),t&&l.setAttribute("primary-color",t),r&&l.setAttribute("secondary-color",r),s&&l.setAttribute("gradient",s),i&&l.setAttribute("server-url",i),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>document.body.appendChild(l)):document.body.appendChild(l),l.addEventListener("vaniraai:tool_call",c=>{const d=c.detail,h=d==null?void 0:d.tool_call_id;typeof window.__vaniraai_tool_handler=="function"&&window.__vaniraai_tool_handler(d,{sendResult:u=>{h&&l.sendToolResult(h,u)}})})}}class rA{constructor(A,e,t,r){this.left=A,this.top=e,this.width=t,this.height=r}add(A,e,t,r){return new rA(this.left+A,this.top+e,this.width+t,this.height+r)}static fromClientRect(A,e){return new rA(e.left+A.windowBounds.left,e.top+A.windowBounds.top,e.width,e.height)}static fromDOMRectList(A,e){const t=Array.from(e);let r=t.find(s=>s.width!==0);return r||(r=t.find(s=>s.height!==0)),!r&&t.length>0&&(r=t[0]),r?new rA(r.left+A.windowBounds.left,r.top+A.windowBounds.top,r.width,r.height):rA.EMPTY}}rA.EMPTY=new rA(0,0,0,0);const Mt=(n,A)=>rA.fromClientRect(n,A.getBoundingClientRect()),Ad=n=>{const A=n.body,e=n.documentElement;if(!A||!e)throw new Error("Unable to get document size");const t=Math.max(Math.max(A.scrollWidth,e.scrollWidth),Math.max(A.offsetWidth,e.offsetWidth),Math.max(A.clientWidth,e.clientWidth)),r=Math.max(Math.max(A.scrollHeight,e.scrollHeight),Math.max(A.offsetHeight,e.offsetHeight),Math.max(A.clientHeight,e.clientHeight));return new rA(0,0,t,r)};for(var kt=function(n){for(var A=[],e=0,t=n.length;e<t;){var r=n.charCodeAt(e++);if(r>=55296&&r<=56319&&e<t){var s=n.charCodeAt(e++);(s&64512)===56320?A.push(((r&1023)<<10)+(s&1023)+65536):(A.push(r),e--)}else A.push(r)}return A},z=function(){for(var n=[],A=0;A<arguments.length;A++)n[A]=arguments[A];if(String.fromCodePoint)return String.fromCodePoint.apply(String,n);var e=n.length;if(!e)return"";for(var t=[],r=-1,s="";++r<e;){var i=n[r];i<=65535?t.push(i):(i-=65536,t.push((i>>10)+55296,i%1024+56320)),(r+1===e||t.length>16384)&&(s+=String.fromCharCode.apply(String,t),t.length=0)}return s},yi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ed=typeof Uint8Array>"u"?[]:new Uint8Array(256),Dt=0;Dt<yi.length;Dt++)ed[yi.charCodeAt(Dt)]=Dt;for(var vi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Ye=typeof Uint8Array>"u"?[]:new Uint8Array(256),Pt=0;Pt<vi.length;Pt++)Ye[vi.charCodeAt(Pt)]=Pt;for(var td=function(n){var A=n.length*.75,e=n.length,t,r=0,s,i,o,a;n[n.length-1]==="="&&(A--,n[n.length-2]==="="&&A--);var l=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u"&&typeof Uint8Array.prototype.slice<"u"?new ArrayBuffer(A):new Array(A),c=Array.isArray(l)?l:new Uint8Array(l);for(t=0;t<e;t+=4)s=Ye[n.charCodeAt(t)],i=Ye[n.charCodeAt(t+1)],o=Ye[n.charCodeAt(t+2)],a=Ye[n.charCodeAt(t+3)],c[r++]=s<<2|i>>4,c[r++]=(i&15)<<4|o>>2,c[r++]=(o&3)<<6|a&63;return l},nd=function(n){for(var A=n.length,e=[],t=0;t<A;t+=2)e.push(n[t+1]<<8|n[t]);return e},rd=function(n){for(var A=n.length,e=[],t=0;t<A;t+=4)e.push(n[t+3]<<24|n[t+2]<<16|n[t+1]<<8|n[t]);return e},te=5,sr=11,ir=2,sd=sr-te,bi=65536>>te,id=1<<te,or=id-1,od=1024>>te,ad=bi+od,ld=ad,cd=32,dd=ld+cd,hd=65536>>sr,ud=1<<sd,gd=ud-1,Qi=function(n,A,e){return n.slice?n.slice(A,e):new Uint16Array(Array.prototype.slice.call(n,A,e))},pd=function(n,A,e){return n.slice?n.slice(A,e):new Uint32Array(Array.prototype.slice.call(n,A,e))},Bd=function(n,A){var e=td(n),t=Array.isArray(e)?rd(e):new Uint32Array(e),r=Array.isArray(e)?nd(e):new Uint16Array(e),s=24,i=Qi(r,s/2,t[4]/2),o=t[5]===2?Qi(r,(s+t[4])/2):pd(t,Math.ceil((s+t[4])/4));return new fd(t[0],t[1],t[2],t[3],i,o)},fd=function(){function n(A,e,t,r,s,i){this.initialValue=A,this.errorValue=e,this.highStart=t,this.highValueIndex=r,this.index=s,this.data=i}return n.prototype.get=function(A){var e;if(A>=0){if(A<55296||A>56319&&A<=65535)return e=this.index[A>>te],e=(e<<ir)+(A&or),this.data[e];if(A<=65535)return e=this.index[bi+(A-55296>>te)],e=(e<<ir)+(A&or),this.data[e];if(A<this.highStart)return e=dd-hd+(A>>sr),e=this.index[e],e+=A>>te&gd,e=this.index[e],e=(e<<ir)+(A&or),this.data[e];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},n}(),xi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",wd=typeof Uint8Array>"u"?[]:new Uint8Array(256),Kt=0;Kt<xi.length;Kt++)wd[xi.charCodeAt(Kt)]=Kt;var md="KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==",Ei=50,Cd=1,Ui=2,Fi=3,yd=4,vd=5,Ii=7,Si=8,Hi=9,GA=10,ar=11,Li=12,lr=13,bd=14,ze=15,cr=16,Nt=17,Je=18,Qd=19,Ti=20,dr=21,Xe=22,hr=23,Be=24,uA=25,We=26,je=27,fe=28,xd=29,ne=30,Ed=31,Ot=32,Rt=33,ur=34,gr=35,pr=36,Ze=37,Br=38,Gt=39,Vt=40,fr=41,Mi=42,Ud=43,Fd=[9001,65288],ki="!",D="×",_t="÷",wr=Bd(md),TA=[ne,pr],mr=[Cd,Ui,Fi,vd],Di=[GA,Si],Pi=[je,We],Id=mr.concat(Di),Ki=[Br,Gt,Vt,ur,gr],Sd=[ze,lr],Hd=function(n,A){A===void 0&&(A="strict");var e=[],t=[],r=[];return n.forEach(function(s,i){var o=wr.get(s);if(o>Ei?(r.push(!0),o-=Ei):r.push(!1),["normal","auto","loose"].indexOf(A)!==-1&&[8208,8211,12316,12448].indexOf(s)!==-1)return t.push(i),e.push(cr);if(o===yd||o===ar){if(i===0)return t.push(i),e.push(ne);var a=e[i-1];return Id.indexOf(a)===-1?(t.push(t[i-1]),e.push(a)):(t.push(i),e.push(ne))}if(t.push(i),o===Ed)return e.push(A==="strict"?dr:Ze);if(o===Mi||o===xd)return e.push(ne);if(o===Ud)return s>=131072&&s<=196605||s>=196608&&s<=262141?e.push(Ze):e.push(ne);e.push(o)}),[t,e,r]},Cr=function(n,A,e,t){var r=t[e];if(Array.isArray(n)?n.indexOf(r)!==-1:n===r)for(var s=e;s<=t.length;){s++;var i=t[s];if(i===A)return!0;if(i!==GA)break}if(r===GA)for(var s=e;s>0;){s--;var o=t[s];if(Array.isArray(n)?n.indexOf(o)!==-1:n===o)for(var a=e;a<=t.length;){a++;var i=t[a];if(i===A)return!0;if(i!==GA)break}if(o!==GA)break}return!1},Ni=function(n,A){for(var e=n;e>=0;){var t=A[e];if(t===GA)e--;else return t}return 0},Ld=function(n,A,e,t,r){if(e[t]===0)return D;var s=t-1;if(Array.isArray(r)&&r[s]===!0)return D;var i=s-1,o=s+1,a=A[s],l=i>=0?A[i]:0,c=A[o];if(a===Ui&&c===Fi)return D;if(mr.indexOf(a)!==-1)return ki;if(mr.indexOf(c)!==-1||Di.indexOf(c)!==-1)return D;if(Ni(s,A)===Si)return _t;if(wr.get(n[s])===ar||(a===Ot||a===Rt)&&wr.get(n[o])===ar||a===Ii||c===Ii||a===Hi||[GA,lr,ze].indexOf(a)===-1&&c===Hi||[Nt,Je,Qd,Be,fe].indexOf(c)!==-1||Ni(s,A)===Xe||Cr(hr,Xe,s,A)||Cr([Nt,Je],dr,s,A)||Cr(Li,Li,s,A))return D;if(a===GA)return _t;if(a===hr||c===hr)return D;if(c===cr||a===cr)return _t;if([lr,ze,dr].indexOf(c)!==-1||a===bd||l===pr&&Sd.indexOf(a)!==-1||a===fe&&c===pr||c===Ti||TA.indexOf(c)!==-1&&a===uA||TA.indexOf(a)!==-1&&c===uA||a===je&&[Ze,Ot,Rt].indexOf(c)!==-1||[Ze,Ot,Rt].indexOf(a)!==-1&&c===We||TA.indexOf(a)!==-1&&Pi.indexOf(c)!==-1||Pi.indexOf(a)!==-1&&TA.indexOf(c)!==-1||[je,We].indexOf(a)!==-1&&(c===uA||[Xe,ze].indexOf(c)!==-1&&A[o+1]===uA)||[Xe,ze].indexOf(a)!==-1&&c===uA||a===uA&&[uA,fe,Be].indexOf(c)!==-1)return D;if([uA,fe,Be,Nt,Je].indexOf(c)!==-1)for(var d=s;d>=0;){var h=A[d];if(h===uA)return D;if([fe,Be].indexOf(h)!==-1)d--;else break}if([je,We].indexOf(c)!==-1)for(var d=[Nt,Je].indexOf(a)!==-1?i:s;d>=0;){var h=A[d];if(h===uA)return D;if([fe,Be].indexOf(h)!==-1)d--;else break}if(Br===a&&[Br,Gt,ur,gr].indexOf(c)!==-1||[Gt,ur].indexOf(a)!==-1&&[Gt,Vt].indexOf(c)!==-1||[Vt,gr].indexOf(a)!==-1&&c===Vt||Ki.indexOf(a)!==-1&&[Ti,We].indexOf(c)!==-1||Ki.indexOf(c)!==-1&&a===je||TA.indexOf(a)!==-1&&TA.indexOf(c)!==-1||a===Be&&TA.indexOf(c)!==-1||TA.concat(uA).indexOf(a)!==-1&&c===Xe&&Fd.indexOf(n[o])===-1||TA.concat(uA).indexOf(c)!==-1&&a===Je)return D;if(a===fr&&c===fr){for(var u=e[s],g=1;u>0&&(u--,A[u]===fr);)g++;if(g%2!==0)return D}return a===Ot&&c===Rt?D:_t},Td=function(n,A){A||(A={lineBreak:"normal",wordBreak:"normal"});var e=Hd(n,A.lineBreak),t=e[0],r=e[1],s=e[2];(A.wordBreak==="break-all"||A.wordBreak==="break-word")&&(r=r.map(function(o){return[uA,ne,Mi].indexOf(o)!==-1?Ze:o}));var i=A.wordBreak==="keep-all"?s.map(function(o,a){return o&&n[a]>=19968&&n[a]<=40959}):void 0;return[t,r,i]},Md=function(){function n(A,e,t,r){this.codePoints=A,this.required=e===ki,this.start=t,this.end=r}return n.prototype.slice=function(){return z.apply(void 0,this.codePoints.slice(this.start,this.end))},n}(),kd=function(n,A){var e=kt(n),t=Td(e,A),r=t[0],s=t[1],i=t[2],o=e.length,a=0,l=0;return{next:function(){if(l>=o)return{done:!0,value:null};for(var c=D;l<o&&(c=Ld(e,s,r,++l,i))===D;);if(c!==D||l===o){var d=new Md(e,c,a,l);return a=l,{value:d,done:!1}}return{done:!0,value:null}}}};const Dd=1,Pd=2,we=4,Oi=8,Yt=10,Ri=47,qe=92,Kd=9,Nd=32,zt=34,$e=61,Od=35,Rd=36,Gd=37,Jt=39,Xt=40,At=41,Vd=95,aA=45,_d=33,Yd=60,zd=62,Jd=64,Xd=91,Wd=93,jd=61,Zd=123,Wt=63,qd=125,Gi=124,$d=126,Ah=128,Vi=65533,yr=42,re=43,eh=44,th=58,nh=59,et=46,rh=0,sh=8,ih=11,oh=14,ah=31,lh=127,xA=-1,_i=48,Yi=97,zi=101,ch=102,dh=117,hh=122,Ji=65,Xi=69,Wi=70,uh=85,gh=90,sA=n=>n>=_i&&n<=57,ph=n=>n>=55296&&n<=57343,me=n=>sA(n)||n>=Ji&&n<=Wi||n>=Yi&&n<=ch,Bh=n=>n>=Yi&&n<=hh,fh=n=>n>=Ji&&n<=gh,wh=n=>Bh(n)||fh(n),mh=n=>n>=Ah,jt=n=>n===Yt||n===Kd||n===Nd,Zt=n=>wh(n)||mh(n)||n===Vd,ji=n=>Zt(n)||sA(n)||n===aA,Ch=n=>n>=rh&&n<=sh||n===ih||n>=oh&&n<=ah||n===lh,VA=(n,A)=>n!==qe?!1:A!==Yt,qt=(n,A,e)=>n===aA?Zt(A)||VA(A,e):Zt(n)?!0:!!(n===qe&&VA(n,A)),vr=(n,A,e)=>n===re||n===aA?sA(A)?!0:A===et&&sA(e):sA(n===et?A:n),yh=n=>{let A=0,e=1;(n[A]===re||n[A]===aA)&&(n[A]===aA&&(e=-1),A++);const t=[];for(;sA(n[A]);)t.push(n[A++]);const r=t.length?parseInt(z(...t),10):0;n[A]===et&&A++;const s=[];for(;sA(n[A]);)s.push(n[A++]);const i=s.length,o=i?parseInt(z(...s),10):0;(n[A]===Xi||n[A]===zi)&&A++;let a=1;(n[A]===re||n[A]===aA)&&(n[A]===aA&&(a=-1),A++);const l=[];for(;sA(n[A]);)l.push(n[A++]);const c=l.length?parseInt(z(...l),10):0;return e*(r+o*Math.pow(10,-i))*Math.pow(10,a*c)},vh={type:2},bh={type:3},Qh={type:4},xh={type:13},Eh={type:8},Uh={type:21},Fh={type:9},Ih={type:10},Sh={type:11},Hh={type:12},Lh={type:14},$t={type:23},Th={type:1},Mh={type:25},kh={type:24},Dh={type:26},Ph={type:27},Kh={type:28},Nh={type:29},Oh={type:31},br={type:32};class Zi{constructor(){this._value=[]}write(A){this._value=this._value.concat(kt(A))}read(){const A=[];let e=this.consumeToken();for(;e!==br;)A.push(e),e=this.consumeToken();return A}consumeToken(){const A=this.consumeCodePoint();switch(A){case zt:return this.consumeStringToken(zt);case Od:const e=this.peekCodePoint(0),t=this.peekCodePoint(1),r=this.peekCodePoint(2);if(ji(e)||VA(t,r)){const u=qt(e,t,r)?Pd:Dd;return{type:5,value:this.consumeName(),flags:u}}break;case Rd:if(this.peekCodePoint(0)===$e)return this.consumeCodePoint(),xh;break;case Jt:return this.consumeStringToken(Jt);case Xt:return vh;case At:return bh;case yr:if(this.peekCodePoint(0)===$e)return this.consumeCodePoint(),Lh;break;case re:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case eh:return Qh;case aA:const s=A,i=this.peekCodePoint(0),o=this.peekCodePoint(1);if(vr(s,i,o))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(qt(s,i,o))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(i===aA&&o===zd)return this.consumeCodePoint(),this.consumeCodePoint(),kh;break;case et:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case Ri:if(this.peekCodePoint(0)===yr)for(this.consumeCodePoint();;){let u=this.consumeCodePoint();if(u===yr&&(u=this.consumeCodePoint(),u===Ri))return this.consumeToken();if(u===xA)return this.consumeToken()}break;case th:return Dh;case nh:return Ph;case Yd:if(this.peekCodePoint(0)===_d&&this.peekCodePoint(1)===aA&&this.peekCodePoint(2)===aA)return this.consumeCodePoint(),this.consumeCodePoint(),Mh;break;case Jd:const a=this.peekCodePoint(0),l=this.peekCodePoint(1),c=this.peekCodePoint(2);if(qt(a,l,c))return{type:7,value:this.consumeName()};break;case Xd:return Kh;case qe:if(VA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case Wd:return Nh;case jd:if(this.peekCodePoint(0)===$e)return this.consumeCodePoint(),Eh;break;case Zd:return Sh;case qd:return Hh;case dh:case uh:const d=this.peekCodePoint(0),h=this.peekCodePoint(1);return d===re&&(me(h)||h===Wt)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case Gi:if(this.peekCodePoint(0)===$e)return this.consumeCodePoint(),Fh;if(this.peekCodePoint(0)===Gi)return this.consumeCodePoint(),Uh;break;case $d:if(this.peekCodePoint(0)===$e)return this.consumeCodePoint(),Ih;break;case xA:return br}return jt(A)?(this.consumeWhiteSpace(),Oh):sA(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):Zt(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:6,value:z(A)}}consumeCodePoint(){const A=this._value.shift();return typeof A>"u"?-1:A}reconsumeCodePoint(A){this._value.unshift(A)}peekCodePoint(A){return A>=this._value.length?-1:this._value[A]}consumeUnicodeRangeToken(){const A=[];let e=this.consumeCodePoint();for(;me(e)&&A.length<6;)A.push(e),e=this.consumeCodePoint();let t=!1;for(;e===Wt&&A.length<6;)A.push(e),e=this.consumeCodePoint(),t=!0;if(t){const s=parseInt(z(...A.map(o=>o===Wt?_i:o)),16),i=parseInt(z(...A.map(o=>o===Wt?Wi:o)),16);return{type:30,start:s,end:i}}const r=parseInt(z(...A),16);if(this.peekCodePoint(0)===aA&&me(this.peekCodePoint(1))){this.consumeCodePoint(),e=this.consumeCodePoint();const s=[];for(;me(e)&&s.length<6;)s.push(e),e=this.consumeCodePoint();const i=parseInt(z(...s),16);return{type:30,start:r,end:i}}else return{type:30,start:r,end:r}}consumeIdentLikeToken(){const A=this.consumeName();return A.toLowerCase()==="url"&&this.peekCodePoint(0)===Xt?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===Xt?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}}consumeUrlToken(){const A=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===xA)return{type:22,value:""};const e=this.peekCodePoint(0);if(e===Jt||e===zt){const t=this.consumeStringToken(this.consumeCodePoint());return t.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===xA||this.peekCodePoint(0)===At)?(this.consumeCodePoint(),{type:22,value:t.value}):(this.consumeBadUrlRemnants(),$t)}for(;;){const t=this.consumeCodePoint();if(t===xA||t===At)return{type:22,value:z(...A)};if(jt(t))return this.consumeWhiteSpace(),this.peekCodePoint(0)===xA||this.peekCodePoint(0)===At?(this.consumeCodePoint(),{type:22,value:z(...A)}):(this.consumeBadUrlRemnants(),$t);if(t===zt||t===Jt||t===Xt||Ch(t))return this.consumeBadUrlRemnants(),$t;if(t===qe)if(VA(t,this.peekCodePoint(0)))A.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),$t;else A.push(t)}}consumeWhiteSpace(){for(;jt(this.peekCodePoint(0));)this.consumeCodePoint()}consumeBadUrlRemnants(){for(;;){const A=this.consumeCodePoint();if(A===At||A===xA)return;VA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}}consumeStringSlice(A){let t="";for(;A>0;){const r=Math.min(5e4,A);t+=z(...this._value.splice(0,r)),A-=r}return this._value.shift(),t}consumeStringToken(A){let e="",t=0;do{const r=this._value[t];if(r===xA||r===void 0||r===A)return e+=this.consumeStringSlice(t),{type:0,value:e};if(r===Yt)return this._value.splice(0,t),Th;if(r===qe){const s=this._value[t+1];s!==xA&&s!==void 0&&(s===Yt?(e+=this.consumeStringSlice(t),t=-1,this._value.shift()):VA(r,s)&&(e+=this.consumeStringSlice(t),e+=z(this.consumeEscapedCodePoint()),t=-1))}t++}while(!0)}consumeNumber(){const A=[];let e=we,t=this.peekCodePoint(0);for((t===re||t===aA)&&A.push(this.consumeCodePoint());sA(this.peekCodePoint(0));)A.push(this.consumeCodePoint());t=this.peekCodePoint(0);let r=this.peekCodePoint(1);if(t===et&&sA(r))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),e=Oi;sA(this.peekCodePoint(0));)A.push(this.consumeCodePoint());t=this.peekCodePoint(0),r=this.peekCodePoint(1);const s=this.peekCodePoint(2);if((t===Xi||t===zi)&&((r===re||r===aA)&&sA(s)||sA(r)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),e=Oi;sA(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[yh(A),e]}consumeNumericToken(){const[A,e]=this.consumeNumber(),t=this.peekCodePoint(0),r=this.peekCodePoint(1),s=this.peekCodePoint(2);if(qt(t,r,s)){const i=this.consumeName();return{type:15,number:A,flags:e,unit:i}}return t===Gd?(this.consumeCodePoint(),{type:16,number:A,flags:e}):{type:17,number:A,flags:e}}consumeEscapedCodePoint(){const A=this.consumeCodePoint();if(me(A)){let e=z(A);for(;me(this.peekCodePoint(0))&&e.length<6;)e+=z(this.consumeCodePoint());jt(this.peekCodePoint(0))&&this.consumeCodePoint();const t=parseInt(e,16);return t===0||ph(t)||t>1114111?Vi:t}return A===xA?Vi:A}consumeName(){let A="";for(;;){const e=this.consumeCodePoint();if(ji(e))A+=z(e);else if(VA(e,this.peekCodePoint(0)))A+=z(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(e),A}}}class Ce{constructor(A){this._tokens=A}static create(A){const e=new Zi;return e.write(A),new Ce(e.read())}static parseValue(A){return Ce.create(A).parseComponentValue()}static parseValues(A){return Ce.create(A).parseComponentValues()}parseComponentValue(){let A=this.consumeToken();for(;A.type===31;)A=this.consumeToken();if(A.type===32)throw new SyntaxError("Error parsing CSS component value, unexpected EOF");this.reconsumeToken(A);const e=this.consumeComponentValue();do A=this.consumeToken();while(A.type===31);if(A.type===32)return e;throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one")}parseComponentValues(){const A=[];for(;;){const e=this.consumeComponentValue();if(e.type===32)return A;A.push(e),A.push()}}consumeComponentValue(){const A=this.consumeToken();switch(A.type){case 11:case 28:case 2:return this.consumeSimpleBlock(A.type);case 19:return this.consumeFunction(A)}return A}consumeSimpleBlock(A){const e={type:A,values:[]};let t=this.consumeToken();for(;;){if(t.type===32||Gh(t,A))return e;this.reconsumeToken(t),e.values.push(this.consumeComponentValue()),t=this.consumeToken()}}consumeFunction(A){const e={name:A.value,values:[],type:18};for(;;){const t=this.consumeToken();if(t.type===32||t.type===3)return e;this.reconsumeToken(t),e.values.push(this.consumeComponentValue())}}consumeToken(){const A=this._tokens.shift();return typeof A>"u"?br:A}reconsumeToken(A){this._tokens.unshift(A)}}const EA=n=>n.type===15,W=n=>n.type===17,H=n=>n.type===20,Rh=n=>n.type===0,tt=(n,A)=>H(n)&&n.value===A,An=n=>n.type!==31,tA=n=>n.type!==31&&n.type!==4,vA=n=>{const A=[];let e=[];return n.forEach(t=>{if(t.type===4){if(e.length===0)throw new Error("Error parsing function args, zero tokens for arg");A.push(e),e=[];return}t.type!==31&&e.push(t)}),e.length&&A.push(e),A},Gh=(n,A)=>A===11&&n.type===12||A===28&&n.type===29?!0:A===2&&n.type===3,Y=(n,A,e)=>Math.min(Math.max(n,A),e),lA=(n,A)=>[n[0]*A[0]+n[1]*A[1]+n[2]*A[2],n[3]*A[0]+n[4]*A[1]+n[5]*A[2],n[6]*A[0]+n[7]*A[1]+n[8]*A[2]],_A=n=>lA([3.2409699419045226,-1.537383177570094,-.4986107602930034,-.9692436362808796,1.8759675015077202,.04155505740717559,.05563007969699366,-.20397695888897652,1.0569715142428786],n),Qr=n=>lA([.41239079926595934,.357584339383878,.1804807884018343,.21263900587151027,.715168678767756,.07219231536073371,.01933081871559182,.11919477979462598,.9505321522496607],n),se=n=>n.map(A=>{const e=A<0?-1:1,t=Math.abs(A);return t>.0031308?e*(1.055*t**(1/2.4)-.055):12.92*A}),xr=n=>n.map(A=>{const e=A<0?-1:1,t=Math.abs(A);return t<=.04045?A/12.92:e*((t+.055)/1.055)**2.4}),Vh=n=>{const[A,e,t]=se(_A([n[0],n[1],n[2]]));return[A,e,t,n[3]]},_h=n=>{const[A,e,t]=_A([n[0],n[1],n[2]]);return[Y(Math.round(A*255),0,255),Y(Math.round(e*255),0,255),Y(Math.round(t*255),0,255),n[3]]},YA=n=>n.type===17||n.type===15,N=n=>n.type===16||YA(n),Yh=n=>n.type===18&&n.name==="calc",zh=(n,A=0)=>{const e=t=>{let r="";for(const s of t)if(s.type!==31){if(s.type===18)if(s.name==="calc"){const i=e(s.values);if(i===null)return null;r+=`(${i})`}else return null;else if(s.type===17)r+=s.number.toString();else if(s.type===15)s.unit==="px"?r+=s.number.toString():s.unit==="rem"||s.unit==="em"?r+=(s.number*16).toString():r+=s.number.toString();else if(s.type===16)r+=(s.number/100*A).toString();else if(s.type===6){const i=s.value;i==="+"||i==="-"||i==="*"||i==="/"?r+=` ${i} `:i==="("?r+="(":i===")"&&(r+=")")}}return r};try{const t=e(n.values);if(t===null||t.trim()==="")return null;const r=new Function("return "+t)();if(typeof r=="number"&&!isNaN(r))return{type:17,number:r,flags:we}}catch{return null}return null},qi=n=>n.length>1?[n[0],n[1]]:[n[0]],j={type:17,number:0,flags:we},ie={type:16,number:50,flags:we},UA={type:16,number:100,flags:we},nt=(n,A,e)=>{const[t,r]=n;return[S(t,A),S(typeof r<"u"?r:t,e)]},S=(n,A)=>{if(n.type===16)return n.number/100*A;if(EA(n))switch(n.unit){case"rem":case"em":return 16*n.number;case"px":default:return n.number}return n.number},$i="deg",Ao="grad",eo="rad",to="turn",ye={name:"angle",parse:(n,A)=>{if(A.type===15)switch(A.unit){case $i:return Math.PI*A.number/180;case Ao:return Math.PI/200*A.number;case eo:return A.number;case to:return Math.PI*2*A.number}throw new Error("Unsupported angle type")}},no=n=>n.type===15&&(n.unit===$i||n.unit===Ao||n.unit===eo||n.unit===to),ro=n=>{switch(n.filter(H).map(e=>e.value).join(" ")){case"to bottom right":case"to right bottom":case"left top":case"top left":return[j,j];case"to top":case"bottom":return wA(0);case"to bottom left":case"to left bottom":case"right top":case"top right":return[j,UA];case"to right":case"left":return wA(90);case"to top left":case"to left top":case"right bottom":case"bottom right":return[UA,UA];case"to bottom":case"top":return wA(180);case"to top right":case"to right top":case"left bottom":case"bottom left":return[UA,j];case"to left":case"right":return wA(270)}return 0},wA=n=>Math.PI*n/180,zA=n=>(255&n)===0,R=n=>{const A=255&n,e=255&n>>8,t=255&n>>16,r=255&n>>24;return A<255?`rgba(${r},${t},${e},${A/255})`:`rgb(${r},${t},${e})`},bA=(n,A,e,t)=>(n<<24|A<<16|e<<8|Math.round(t*255)<<0)>>>0,JA=(n,A)=>{if(n.type===17)return n.number;if(n.type===16){const e=A===3?1:255;return A===3?n.number/100*e:Math.round(n.number/100*e)}return 0},oe=n=>(n[0].type===20?n[0].value:"unknown")==="from",Jh=n=>bA(Y(Math.round(n[0]*255),0,255),Y(Math.round(n[1]*255),0,255),Y(Math.round(n[2]*255),0,255),Y(n[3],0,1)),Er=([n,A,e,t])=>{const r=se([n,A,e]);return bA(Y(Math.round(r[0]*255),0,255),Y(Math.round(r[1]*255),0,255),Y(Math.round(r[2]*255),0,255),t)},rt=n=>{const A=_A([n[0],n[1],n[2]]);return Er([A[0],A[1],A[2],n[3]])},Xh=(n,A)=>{if(oe(A.filter(tA)))throw new Error("Relative color not supported for lab()");const[e,t,r,s]=en(A),i=se(_A(rn([e,t,r])));return bA(Y(Math.round(i[0]*255),0,255),Y(Math.round(i[1]*255),0,255),Y(Math.round(i[2]*255),0,255),s)},Wh=(n,A)=>{if(oe(A.filter(tA)))throw new Error("Relative color not supported for oklab()");const[e,t,r,s]=en(A),i=se(_A(nn([e,t,r])));return bA(Y(Math.round(i[0]*255),0,255),Y(Math.round(i[1]*255),0,255),Y(Math.round(i[2]*255),0,255),s)},jh=(n,A)=>{if(oe(A.filter(tA)))throw new Error("Relative color not supported for oklch()");const[e,t,r,s]=ao(A),i=se(_A(nn(tn([e,t,r]))));return bA(Y(Math.round(i[0]*255),0,255),Y(Math.round(i[1]*255),0,255),Y(Math.round(i[2]*255),0,255),s)},Zh=(n,A)=>{if(oe(A.filter(tA)))throw new Error("Relative color not supported for lch()");const[e,t,r,s]=oo(A),i=se(_A(rn(tn([e,t,r]))));return bA(Y(Math.round(i[0]*255),0,255),Y(Math.round(i[1]*255),0,255),Y(Math.round(i[2]*255),0,255),s)},so=(n,A)=>{const e=A.filter(tA),[t,r,s,i]=e,o=(t.type===17?wA(t.number):ye.parse(n,t))/(Math.PI*2),a=N(r)?r.number/100:0,l=N(s)?s.number/100:0,c=typeof i<"u"&&N(i)?S(i,1):1;return[o,a,l,c]},io=(n,A)=>{if(oe(A))throw new Error("Relative color not supported for hsl()");const[e,t,r,s]=so(n,A),i=co([e,t,r]);return bA(i[0]*255,i[1]*255,i[2]*255,t===0?1:s)},oo=n=>{const A=n.filter(tA),e=N(A[0])?A[0].number:0,t=N(A[1])?A[1].number:0,r=W(A[2])||EA(A[2])?A[2].number:0,s=typeof A[4]<"u"&&N(A[4])?S(A[4],1):1;return[e,t,r,s]},en=n=>{const A=n.filter(tA),e=A[0].type===16?A[0].number/100:W(A[0])?A[0].number:0,t=A[1].type===16?A[1].number/100:W(A[1])?A[1].number:0,r=W(A[2])||EA(A[2])?A[2].number:0,s=typeof A[4]<"u"&&N(A[4])?S(A[4],1):1;return[e,t,r,s]},ao=n=>{const A=n.filter(tA),e=A[0].type===16?A[0].number/100:W(A[0])?A[0].number:0,t=A[1].type===16?A[1].number/100:W(A[1])?A[1].number:0,r=W(A[2])||EA(A[2])?A[2].number:0,s=typeof A[4]<"u"&&N(A[4])?S(A[4],1):1;return[e,t,r,s]},lo=n=>lA([1.0479297925449969,.022946870601609652,-.05019226628920524,.02962780877005599,.9904344267538799,-.017073799063418826,-.009243040646204504,.015055191490298152,.7518742814281371],n),Ur=n=>lA([.955473421488075,-.02309845494876471,.06325924320057072,-.0283697093338637,1.0099953980813041,.021041441191917323,.012314014864481998,-.020507649298898964,1.330365926242124],n),Fr=(n,A,e)=>(e<0&&(e+=1),e>=1&&(e-=1),e<1/6?(A-n)*e*6+n:e<1/2?A:e<2/3?(A-n)*6*(2/3-e)+n:n),co=([n,A,e])=>{if(A===0)return[e*255,e*255,e*255];const t=e<=.5?e*(A+1):e+A-e*A,r=e*2-t,s=Fr(r,t,n+1/3),i=Fr(r,t,n),o=Fr(r,t,n-1/3);return[s,i,o]},tn=([n,A,e])=>(A<0&&(A=0),isNaN(e)&&(e=0),[n,A*Math.cos(e*Math.PI/180),A*Math.sin(e*Math.PI/180)]),nn=n=>{const A=lA([1,.3963377773761749,.2158037573099136,1,-.1055613458156586,-.0638541728258133,1,-.0894841775298119,-1.2914855480194092],n),e=A.map(t=>t**3);return lA([1.2268798758459243,-.5578149944602171,.2813910456659647,-.0405757452148008,1.112286803280317,-.0717110580655164,-.0763729366746601,-.4214933324022432,1.5869240198367816],e)},rn=n=>{const A=(n[0]+16)/116,e=n[1]/500+A,t=A-n[2]/200,r=24389/27,s=24/116,i=[(e>s?e**3:(116*e-16)/r)*.3457/.3585,n[0]>8?A**3:n[0]/r,(t>s?t**3:(116*t-16)/r)*(1-.3457-.3585)/.3585];return Ur([i[0],i[1],i[2]])},qh=(n,A)=>{const e=A.filter(tA);if(e.length===3){const[t,r,s]=e.map(JA),i=xr([t/255,r/255,s/255]),[o,a,l]=Qr([i[0],i[1],i[2]]);return[o,a,l,1]}if(e.length===4){const[t,r,s,i]=e.map(JA),o=xr([t/255,r/255,s/255]),[a,l,c]=Qr([o[0],o[1],o[2]]);return[a,l,c,i]}return[0,0,0,1]},$h=(n,A)=>{const[e,t,r,s]=so(n,A),i=xr(co([e,t,r])),[o,a,l]=Qr([i[0],i[1],i[2]]);return[o,a,l,s]},Au=(n,A)=>{const[e,t,r,s]=en(A),[i,o,a]=rn([e,t,r]);return[i,o,a,s]},eu=(n,A)=>{const[e,t,r,s]=oo(A),[i,o,a]=rn(tn([e,t,r]));return[i,o,a,s]},tu=(n,A)=>{const[e,t,r,s]=ao(A),[i,o,a]=nn(tn([e,t,r]));return[i,o,a,s]},nu=(n,A)=>{const[e,t,r,s]=en(A),[i,o,a]=nn([e,t,r]);return[i,o,a,s]},ru=n=>Ur([n[0],n[1],n[2]]),ho=n=>n,su=n=>{const[A,e,t]=lo([n[0],n[2],n[3]]);return[A,e,t,n[3]]},uo=n=>rt([n[0],n[1],n[2],n[3]]),iu=n=>{const A=ru([n[0],n[1],n[2]]);return rt([A[0],A[1],A[2],n[3]])},ou=n=>lA([.4865709486482162,.26566769316909306,.1982172852343625,.2289745640697488,.6917385218365064,.079286914093745,0,.04511338185890264,1.043944368900976],n),au=n=>lA([2.493496911941425,-.9313836179191239,-.40271078445071684,-.8294889695615747,1.7626640603183463,.023624685841943577,.03584583024378447,-.07617238926804182,.9568845240076872],n),lu=n=>n.map(A=>{const e=A<0?-1:1;return A*e<=.04045?A/12.92:e*((A+.055)/1.055)**2.4||0}),cu=n=>se(n),du=n=>{const A=lu([n[0],n[1],n[2]]);return ou([A[0],A[1],A[2]])},hu=n=>{const[A,e,t]=cu(au([n[0],n[1],n[2]]));return[A,e,t,n[3]]},uu=n=>{const A=du([n[0],n[1],n[2]]);return rt([A[0],A[1],A[2],n[3]])},gu=n=>lA([2.0415879038107465,-.5650069742788596,-.34473135077832956,-.9692436362808795,1.8759675015077202,.04155505740717557,.013444280632031142,-.11836239223101838,1.0151749943912054],n),pu=n=>lA([.5766690429101305,.1855582379065463,.1882286462349947,.29734497525053605,.6273635662554661,.0752914584939978,.02703136138641234,.07068885253582723,.9913375368376388],n),Bu=n=>{const A=n.map(e=>{const t=e<0?-1:1,r=Math.abs(e);return t*r**2.19921875});return[A[0],A[1],A[2]]},fu=n=>{const A=n.map(e=>{const t=e<0?-1:1,r=Math.abs(e);return t*r**.4547069271758437});return[A[0],A[1],A[2]]},wu=n=>{const[A,e,t]=fu(gu([n[0],n[1],n[2]]));return[A,e,t,n[3]]},mu=n=>{const A=_A(pu(Bu([n[0],n[1],n[2]])));return Er([A[0],A[1],A[2],n[3]])},Cu=n=>lA([.7977666449006423,.13518129740053308,.0313477341283922,.2880748288194013,.711835234241873,8993693872564e-17,0,0,.8251046025104602],n),yu=n=>lA([1.3457868816471583,-.25557208737979464,-.05110186497554526,-.5446307051249019,1.5082477428451468,.02052744743642139,0,0,1.2119675456389452],n),vu=n=>n.map(A=>A<16/512?A/16:A**1.8),bu=n=>n.map(A=>A>1/512?A**(1/1.8):A*16),Qu=n=>{const A=vu([n[0],n[1],n[2]]);return Ur(Cu([A[0],A[1],A[2]]))},xu=n=>{const[A,e,t]=bu(yu(lo([n[0],n[1],n[2]])));return[A,e,t,n[3]]},Eu=n=>{const A=Qu([n[0],n[1],n[2]]);return rt([A[0],A[1],A[2],n[3]])},sn=1.09929682680944,go=.018053968510807,Uu=n=>n.map(function(A){return A<go*4.5?A/4.5:Math.pow((A+sn-1)/sn,1/.45)}),Fu=n=>n.map(function(A){return A>=go?sn*Math.pow(A,.45)-(sn-1):4.5*A}),Iu=n=>lA([.6369580483012914,.14461690358620832,.1688809751641721,.2627002120112671,.6779980715188708,.05930171646986196,0,.028072693049087428,1.060985057710791],n),Su=n=>lA([1.716651187971268,-.355670783776392,-.25336628137366,-.666684351832489,1.616481236634939,.0157685458139111,.017639857445311,-.042770613257809,.942103121235474],n),Hu=n=>{const A=Uu([n[0],n[1],n[2]]);return Iu([A[0],A[1],A[2]])},Lu=n=>{const[A,e,t]=Fu(Su([n[0],n[1],n[2]]));return[A,e,t,n[3]]},Tu=n=>{const A=Hu([n[0],n[1],n[2]]);return rt([A[0],A[1],A[2],n[3]])},XA={name:"color",parse:(n,A)=>{if(A.type===18){const e=Pu[A.name];if(typeof e>"u")throw new Error(`Attempting to parse an unsupported color function "${A.name}"`);return e(n,A.values)}if(A.type===5){const[e,t,r,s]=po(A);return bA(e,t,r,s)}if(A.type===20){const e=FA[A.value.toUpperCase()];if(typeof e<"u")return e}return FA.TRANSPARENT}},po=n=>{if(n.value.length===3){const A=n.value.substring(0,1),e=n.value.substring(1,2),t=n.value.substring(2,3);return[parseInt(A+A,16),parseInt(e+e,16),parseInt(t+t,16),1]}if(n.value.length===4){const A=n.value.substring(0,1),e=n.value.substring(1,2),t=n.value.substring(2,3),r=n.value.substring(3,4);return[parseInt(A+A,16),parseInt(e+e,16),parseInt(t+t,16),parseInt(r+r,16)/255]}if(n.value.length===6){const A=n.value.substring(0,2),e=n.value.substring(2,4),t=n.value.substring(4,6);return[parseInt(A,16),parseInt(e,16),parseInt(t,16),1]}if(n.value.length===8){const A=n.value.substring(0,2),e=n.value.substring(2,4),t=n.value.substring(4,6),r=n.value.substring(6,8);return[parseInt(A,16),parseInt(e,16),parseInt(t,16),parseInt(r,16)/255]}return[0,0,0,1]},Bo=(n,A)=>{const e=A.filter(tA);if(oe(e))throw new Error("Relative color not supported for rgb()");if(e.length===3){const[t,r,s]=e.map(JA);return bA(t,r,s,1)}if(e.length===4){const[t,r,s,i]=e.map(JA);return bA(t,r,s,i)}if(e.length===5&&e[3].type===6&&e[3].value==="/"){const t=JA(e[0],0),r=JA(e[1],1),s=JA(e[2],2),i=JA(e[4],3);return bA(t,r,s,i)}return 0},Mu=(n,A)=>{const e=A.filter(tA),t=e[0].type===20?e[0].value:"unknown";if(!oe(e)){const s=t,i=fo[s];if(typeof i>"u")throw new Error(`Attempting to parse an unsupported color space "${s}" for color() function`);const o=W(e[1])?e[1].number:0,a=W(e[2])?e[2].number:0,l=W(e[3])?e[3].number:0,c=e.length>4&&e[4].type===6&&e[4].value==="/"&&W(e[5])?e[5].number:1;return i([o,a,l,c])}else{const s=(w,v)=>{if(W(v))return v.number;const C=Q=>Q==="r"||Q==="x"?0:Q==="g"||Q==="y"?1:2;if(H(v)){const Q=C(v.value);return w[Q]}const y=Q=>{const x=Q.filter(tA);let F="(";for(const I of x)F+=I.type===18&&I.name==="calc"?y(I.values):W(I)?I.number:I.type===6||H(I)?I.value:"";return F+=")",F};if(v.type===18){const Q=v.values.filter(tA);if(v.name==="calc"){const x=y(Q).replace(/r|x/,w[0].toString()).replace(/g|y/,w[1].toString()).replace(/b|z/,w[2].toString());return new Function("return "+x)()}}return null},i=e[1].type===18?e[1].name:H(e[1])||e[1].type===5?"rgb":"unknown",o=H(e[2])?e[2].value:"unknown";let a=e[1].type===18?e[1].values:H(e[1])?[e[1]]:[];if(H(e[1])){if(typeof FA[e[1].value.toUpperCase()]>"u")throw new Error("Attempting to use unknown color in relative color 'from'");{const v=ve(n,e[1].value),C=255&v,y=255&v>>8,Q=255&v>>16;a=[{type:17,number:255&v>>24,flags:1},{type:17,number:Q,flags:1},{type:17,number:y,flags:1},{type:17,number:C>1?C/255:C,flags:1}]}}else if(e[1].type===5){const[w,v,C,y]=po(e[1]);a=[{type:17,number:w,flags:1},{type:17,number:v,flags:1},{type:17,number:C,flags:1},{type:17,number:y>1?y/255:y,flags:1}]}if(a.length===0)throw new Error("Attempting to use unknown color in relative color 'from'");if(o==="unknown")throw new Error("Attempting to use unknown colorspace in relative color 'to'");const l=ku[i],c=Du[o],d=fo[o];if(typeof l>"u")throw new Error(`Attempting to parse an unsupported color space "${i}" for color() function`);if(typeof c>"u")throw new Error(`Attempting to parse an unsupported color space "${o}" for color() function`);const h=l(n,a),u=c(h),g=s(u,e[3]),B=s(u,e[4]),f=s(u,e[5]),m=e.length>6&&e[6].type===6&&e[6].value==="/"&&W(e[7])?e[7].number:1;if(g===null||B===null||f===null)throw new Error("Invalid relative color in color() function");return d([g,B,f,m])}},fo={srgb:Jh,"srgb-linear":Er,"display-p3":uu,"a98-rgb":mu,"prophoto-rgb":Eu,xyz:uo,"xyz-d50":iu,"xyz-d65":uo,rec2020:Tu},ku={rgb:qh,hsl:$h,lab:Au,lch:eu,oklab:nu,oklch:tu},Du={srgb:Vh,"srgb-linear":_h,"display-p3":hu,"a98-rgb":wu,"prophoto-rgb":xu,xyz:ho,"xyz-d50":su,"xyz-d65":ho,rec2020:Lu},Pu={hsl:io,hsla:io,rgb:Bo,rgba:Bo,lch:Zh,oklch:jh,oklab:Wh,lab:Xh,color:Mu},ve=(n,A)=>XA.parse(n,Ce.create(A).parseComponentValue()),FA={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},Ku={name:"background-clip",initialValue:"border-box",prefix:!1,type:1,parse:(n,A)=>A.map(e=>{if(H(e))switch(e.value){case"padding-box":return 1;case"content-box":return 2}return 0})},Nu={name:"background-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},on=(n,A)=>{const e=XA.parse(n,A[0]),t=A[1];return t&&N(t)?{color:e,stop:t}:{color:e,stop:null}},wo=(n,A)=>{const e=n[0],t=n[n.length-1];e.stop===null&&(e.stop=j),t.stop===null&&(t.stop=UA);const r=[];let s=0;for(let o=0;o<n.length;o++){const a=n[o].stop;if(a!==null){const l=S(a,A);l>s?r.push(l):r.push(s),s=l}else r.push(null)}let i=null;for(let o=0;o<r.length;o++){const a=r[o];if(a===null)i===null&&(i=o);else if(i!==null){const l=o-i,c=r[i-1],d=(a-c)/(l+1);for(let h=1;h<=l;h++)r[i+h-1]=d*h;i=null}}return n.map(({color:o},a)=>({color:o,stop:Math.max(Math.min(1,r[a]/A),0)}))},Ou=(n,A,e)=>{const t=A/2,r=e/2,s=S(n[0],A)-t,i=r-S(n[1],e);return(Math.atan2(i,s)+Math.PI*2)%(Math.PI*2)},Ru=(n,A,e)=>{const t=typeof n=="number"?n:Ou(n,A,e),r=Math.abs(A*Math.sin(t))+Math.abs(e*Math.cos(t)),s=A/2,i=e/2,o=r/2,a=Math.sin(t-Math.PI/2)*o,l=Math.cos(t-Math.PI/2)*o;return[r,s-l,s+l,i-a,i+a]},QA=(n,A)=>Math.sqrt(n*n+A*A),mo=(n,A,e,t,r)=>[[0,0],[0,A],[n,0],[n,A]].reduce((i,o)=>{const[a,l]=o,c=QA(e-a,t-l);return(r?c<i.optimumDistance:c>i.optimumDistance)?{optimumCorner:o,optimumDistance:c}:i},{optimumDistance:r?1/0:-1/0,optimumCorner:null}).optimumCorner,Gu=(n,A,e,t,r)=>{let s=0,i=0;switch(n.size){case 0:n.shape===0?s=i=Math.min(Math.abs(A),Math.abs(A-t),Math.abs(e),Math.abs(e-r)):n.shape===1&&(s=Math.min(Math.abs(A),Math.abs(A-t)),i=Math.min(Math.abs(e),Math.abs(e-r)));break;case 2:if(n.shape===0)s=i=Math.min(QA(A,e),QA(A,e-r),QA(A-t,e),QA(A-t,e-r));else if(n.shape===1){const o=Math.min(Math.abs(e),Math.abs(e-r))/Math.min(Math.abs(A),Math.abs(A-t)),[a,l]=mo(t,r,A,e,!0);s=QA(a-A,(l-e)/o),i=o*s}break;case 1:n.shape===0?s=i=Math.max(Math.abs(A),Math.abs(A-t),Math.abs(e),Math.abs(e-r)):n.shape===1&&(s=Math.max(Math.abs(A),Math.abs(A-t)),i=Math.max(Math.abs(e),Math.abs(e-r)));break;case 3:if(n.shape===0)s=i=Math.max(QA(A,e),QA(A,e-r),QA(A-t,e),QA(A-t,e-r));else if(n.shape===1){const o=Math.max(Math.abs(e),Math.abs(e-r))/Math.max(Math.abs(A),Math.abs(A-t)),[a,l]=mo(t,r,A,e,!1);s=QA(a-A,(l-e)/o),i=o*s}break}return Array.isArray(n.size)&&(s=S(n.size[0],t),i=n.size.length===2?S(n.size[1],r):s),[s,i]},Vu=(n,A)=>{let e=wA(180);const t=[];return vA(A).forEach((r,s)=>{if(s===0){const o=r[0];if(o.type===20&&o.value==="to"){e=ro(r);return}else if(no(o)){e=ye.parse(n,o);return}}const i=on(n,r);t.push(i)}),{angle:e,stops:t,type:1}},an=(n,A)=>{let e=wA(180);const t=[];return vA(A).forEach((r,s)=>{if(s===0){const o=r[0];if(o.type===20&&["top","left","right","bottom"].indexOf(o.value)!==-1){e=ro(r);return}else if(no(o)){e=(ye.parse(n,o)+wA(270))%wA(360);return}}const i=on(n,r);t.push(i)}),{angle:e,stops:t,type:1}},_u=(n,A)=>{const e=wA(180),t=[];let r=1;const s=0,i=3,o=[];return vA(A).forEach((a,l)=>{const c=a[0];if(l===0){if(H(c)&&c.value==="linear"){r=1;return}else if(H(c)&&c.value==="radial"){r=2;return}}if(c.type===18){if(c.name==="from"){const d=XA.parse(n,c.values[0]);t.push({stop:j,color:d})}else if(c.name==="to"){const d=XA.parse(n,c.values[0]);t.push({stop:UA,color:d})}else if(c.name==="color-stop"){const d=c.values.filter(tA);if(d.length===2){const h=XA.parse(n,d[1]),u=d[0];W(u)&&t.push({stop:{type:16,number:u.number*100,flags:u.flags},color:h})}}}}),r===1?{angle:(e+wA(180))%wA(360),stops:t,type:r}:{size:i,shape:s,stops:t,position:o,type:r}},Co="closest-side",yo="farthest-side",vo="closest-corner",bo="farthest-corner",Qo="circle",xo="ellipse",Eo="cover",Uo="contain",Yu=(n,A)=>{let e=0,t=3;const r=[],s=[];return vA(A).forEach((i,o)=>{let a=!0;if(o===0){let l=!1;a=i.reduce((c,d)=>{if(l)if(H(d))switch(d.value){case"center":return s.push(ie),c;case"top":case"left":return s.push(j),c;case"right":case"bottom":return s.push(UA),c}else(N(d)||YA(d))&&s.push(d);else if(H(d))switch(d.value){case Qo:return e=0,!1;case xo:return e=1,!1;case"at":return l=!0,!1;case Co:return t=0,!1;case Eo:case yo:return t=1,!1;case Uo:case vo:return t=2,!1;case bo:return t=3,!1}else if(YA(d)||N(d))return Array.isArray(t)||(t=[]),t.push(d),!1;return c},a)}if(a){const l=on(n,i);r.push(l)}}),{size:t,shape:e,stops:r,position:s,type:2}},ln=(n,A)=>{let e=0,t=3;const r=[],s=[];return vA(A).forEach((i,o)=>{let a=!0;if(o===0?a=i.reduce((l,c)=>{if(H(c))switch(c.value){case"center":return s.push(ie),!1;case"top":case"left":return s.push(j),!1;case"right":case"bottom":return s.push(UA),!1}else if(N(c)||YA(c))return s.push(c),!1;return l},a):o===1&&(a=i.reduce((l,c)=>{if(H(c))switch(c.value){case Qo:return e=0,!1;case xo:return e=1,!1;case Uo:case Co:return t=0,!1;case yo:return t=1,!1;case vo:return t=2,!1;case Eo:case bo:return t=3,!1}else if(YA(c)||N(c))return Array.isArray(t)||(t=[]),t.push(c),!1;return l},a)),a){const l=on(n,i);r.push(l)}}),{size:t,shape:e,stops:r,position:s,type:2}},zu=n=>n.type===1,Ju=n=>n.type===2,Ir={name:"image",parse:(n,A)=>{if(A.type===22){const e={url:A.value,type:0};return n.cache.addImage(A.value),e}if(A.type===18){const e=Fo[A.name];if(typeof e>"u")throw new Error(`Attempting to parse an unsupported image function "${A.name}"`);return e(n,A.values)}throw new Error(`Unsupported image type ${A.type}`)}};function Xu(n){return!(n.type===20&&n.value==="none")&&(n.type!==18||!!Fo[n.name])}const Fo={"linear-gradient":Vu,"-moz-linear-gradient":an,"-ms-linear-gradient":an,"-o-linear-gradient":an,"-webkit-linear-gradient":an,"radial-gradient":Yu,"-moz-radial-gradient":ln,"-ms-radial-gradient":ln,"-o-radial-gradient":ln,"-webkit-radial-gradient":ln,"-webkit-gradient":_u},Wu={name:"background-image",initialValue:"none",type:1,prefix:!1,parse:(n,A)=>{if(A.length===0)return[];const e=A[0];return e.type===20&&e.value==="none"?[]:A.filter(t=>tA(t)&&Xu(t)).map(t=>Ir.parse(n,t))}},ju={name:"background-origin",initialValue:"border-box",prefix:!1,type:1,parse:(n,A)=>A.map(e=>{if(H(e))switch(e.value){case"padding-box":return 1;case"content-box":return 2}return 0})},Zu={name:"background-position",initialValue:"0% 0%",type:1,prefix:!1,parse:(n,A)=>vA(A).map(e=>e.map(t=>Yh(t)?zh(t,0):N(t)?t:null).filter(t=>t!==null)).map(qi)},qu={name:"background-repeat",initialValue:"repeat",prefix:!1,type:1,parse:(n,A)=>vA(A).map(e=>e.filter(H).map(t=>t.value).join(" ")).map($u)},$u=n=>{switch(n){case"no-repeat":return 1;case"repeat-x":case"repeat no-repeat":return 2;case"repeat-y":case"no-repeat repeat":return 3;case"repeat":default:return 0}};var be;(function(n){n.AUTO="auto",n.CONTAIN="contain",n.COVER="cover"})(be||(be={}));const Ag={name:"background-size",initialValue:"0",prefix:!1,type:1,parse:(n,A)=>vA(A).map(e=>e.filter(eg))},eg=n=>H(n)||N(n),cn=n=>({name:`border-${n}-color`,initialValue:"transparent",prefix:!1,type:3,format:"color"}),tg=cn("top"),ng=cn("right"),rg=cn("bottom"),sg=cn("left"),dn=n=>({name:`border-radius-${n}`,initialValue:"0 0",prefix:!1,type:1,parse:(A,e)=>qi(e.filter(N))}),ig=dn("top-left"),og=dn("top-right"),ag=dn("bottom-right"),lg=dn("bottom-left"),hn=n=>({name:`border-${n}-style`,initialValue:"solid",prefix:!1,type:2,parse:(A,e)=>{switch(e){case"none":return 0;case"dashed":return 2;case"dotted":return 3;case"double":return 4}return 1}}),cg=hn("top"),dg=hn("right"),hg=hn("bottom"),ug=hn("left"),un=n=>({name:`border-${n}-width`,initialValue:"0",type:0,prefix:!1,parse:(A,e)=>EA(e)?e.number:0}),gg=un("top"),pg=un("right"),Bg=un("bottom"),fg=un("left"),Sr={type:0},Hr=n=>{const[A]=n;return A?H(A)?A.value==="farthest-side"?"farthest-side":"closest-side":N(A)?A:"closest-side":"closest-side"},Io=n=>{let A=null,e=null;for(const t of n)if(H(t))switch(t.value){case"left":A=j;break;case"right":A=UA;break;case"top":e=j;break;case"bottom":e=UA;break;case"center":A===null?A=ie:e===null&&(e=ie);break}else N(t)&&(A===null?A=t:e===null&&(e=t));return{cx:A??ie,cy:e??ie}},wg=n=>{const A=[];for(const i of n)if(i.type!==31){if(H(i)&&i.value==="round")break;N(i)&&A.push(i)}const e=A[0]??j,t=A[1]??e,r=A[2]??e,s=A[3]??t;return{type:1,top:e,right:t,bottom:r,left:s}},mg=n=>{const A=n.filter(An),e=A.findIndex(s=>tt(s,"at")),t=e===-1?A:A.slice(0,e),r=e===-1?[]:A.slice(e+1);return{type:2,radius:Hr(t),...Io(r)}},Cg=n=>{const A=n.filter(An),e=A.findIndex(s=>tt(s,"at")),t=e===-1?A:A.slice(0,e),r=e===-1?[]:A.slice(e+1);return{type:3,rx:Hr(t.slice(0,1)),ry:Hr(t.slice(1,2)),...Io(r)}},yg=n=>{const A=vA(n),e=[];for(const t of A){if(t.length===1&&H(t[0]))continue;const r=t.filter(N);r.length>=2&&e.push([r[0],r[1]])}return{type:4,points:e}},vg=n=>{const A=n.find(e=>e.type===0);return A?{type:5,d:A.value}:Sr},bg={name:"clip-path",initialValue:"none",prefix:!1,type:0,parse:(n,A)=>{if(H(A)&&A.value==="none")return Sr;if(A.type===18)switch(A.name){case"inset":return wg(A.values);case"circle":return mg(A.values);case"ellipse":return Cg(A.values);case"polygon":return yg(A.values);case"path":return vg(A.values)}return Sr}},Qg={name:"color",initialValue:"transparent",prefix:!1,type:3,format:"color"},xg={name:"direction",initialValue:"ltr",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"rtl":return 1;case"ltr":default:return 0}}},Eg={name:"display",initialValue:"inline-block",prefix:!1,type:1,parse:(n,A)=>A.filter(H).reduce((e,t)=>e|Ug(t.value),0)},Ug=n=>{switch(n){case"block":case"-webkit-box":return 2;case"inline":return 4;case"run-in":return 8;case"flow":return 16;case"flow-root":return 32;case"table":return 64;case"flex":case"-webkit-flex":return 128;case"grid":case"-ms-grid":return 256;case"ruby":return 512;case"subgrid":return 1024;case"list-item":return 2048;case"table-row-group":return 4096;case"table-header-group":return 8192;case"table-footer-group":return 16384;case"table-row":return 32768;case"table-cell":return 65536;case"table-column-group":return 131072;case"table-column":return 262144;case"table-caption":return 524288;case"ruby-base":return 1048576;case"ruby-text":return 2097152;case"ruby-base-container":return 4194304;case"ruby-text-container":return 8388608;case"contents":return 16777216;case"inline-block":return 33554432;case"inline-list-item":return 67108864;case"inline-table":return 134217728;case"inline-flex":return 268435456;case"inline-grid":return 536870912}return 0},Fg={name:"float",initialValue:"none",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"left":return 1;case"right":return 2;case"inline-start":return 3;case"inline-end":return 4}return 0}},Ig={name:"letter-spacing",initialValue:"0",prefix:!1,type:0,parse:(n,A)=>A.type===20&&A.value==="normal"?0:A.type===17||A.type===15?A.number:0};var gn;(function(n){n.NORMAL="normal",n.STRICT="strict"})(gn||(gn={}));const Sg={name:"line-break",initialValue:"normal",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"strict":return gn.STRICT;case"normal":default:return gn.NORMAL}}},Hg={name:"line-height",initialValue:"normal",prefix:!1,type:4},So=(n,A)=>H(n)&&n.value==="normal"?1.2*A:n.type===17?A*n.number:N(n)?S(n,A):A,Lg={name:"list-style-image",initialValue:"none",type:0,prefix:!1,parse:(n,A)=>A.type===20&&A.value==="none"?null:Ir.parse(n,A)},Tg={name:"list-style-position",initialValue:"outside",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"inside":return 0;case"outside":default:return 1}}},Lr={name:"list-style-type",initialValue:"none",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"disc":return 0;case"circle":return 1;case"square":return 2;case"decimal":return 3;case"cjk-decimal":return 4;case"decimal-leading-zero":return 5;case"lower-roman":return 6;case"upper-roman":return 7;case"lower-greek":return 8;case"lower-alpha":return 9;case"upper-alpha":return 10;case"arabic-indic":return 11;case"armenian":return 12;case"bengali":return 13;case"cambodian":return 14;case"cjk-earthly-branch":return 15;case"cjk-heavenly-stem":return 16;case"cjk-ideographic":return 17;case"devanagari":return 18;case"ethiopic-numeric":return 19;case"georgian":return 20;case"gujarati":return 21;case"gurmukhi":return 22;case"hebrew":return 52;case"hiragana":return 23;case"hiragana-iroha":return 24;case"japanese-formal":return 25;case"japanese-informal":return 26;case"kannada":return 27;case"katakana":return 28;case"katakana-iroha":return 29;case"khmer":return 30;case"korean-hangul-formal":return 31;case"korean-hanja-formal":return 32;case"korean-hanja-informal":return 33;case"lao":return 34;case"lower-armenian":return 35;case"malayalam":return 36;case"mongolian":return 37;case"myanmar":return 38;case"oriya":return 39;case"persian":return 40;case"simp-chinese-formal":return 41;case"simp-chinese-informal":return 42;case"tamil":return 43;case"telugu":return 44;case"thai":return 45;case"tibetan":return 46;case"trad-chinese-formal":return 47;case"trad-chinese-informal":return 48;case"upper-armenian":return 49;case"disclosure-open":return 50;case"disclosure-closed":return 51;case"none":default:return-1}}},pn=n=>({name:`margin-${n}`,initialValue:"0",prefix:!1,type:4}),Mg=pn("top"),kg=pn("right"),Dg=pn("bottom"),Pg=pn("left"),Kg={name:"overflow",initialValue:"visible",prefix:!1,type:1,parse:(n,A)=>A.filter(H).map(e=>{switch(e.value){case"hidden":return 1;case"scroll":return 2;case"clip":return 3;case"auto":return 4;case"visible":default:return 0}})},Ng={name:"overflow-wrap",initialValue:"normal",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"break-word":return"break-word";case"normal":default:return"normal"}}},Bn=n=>({name:`padding-${n}`,initialValue:"0",prefix:!1,type:3,format:"length-percentage"}),Og=Bn("top"),Rg=Bn("right"),Gg=Bn("bottom"),Vg=Bn("left"),_g={name:"text-align",initialValue:"left",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"right":return 2;case"center":case"justify":return 1;case"left":default:return 0}}},Yg={name:"position",initialValue:"static",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"relative":return 1;case"absolute":return 2;case"fixed":return 3;case"sticky":return 4}return 0}},zg={name:"text-shadow",initialValue:"none",type:1,prefix:!1,parse:(n,A)=>A.length===1&&tt(A[0],"none")?[]:vA(A).map(e=>{const t={color:FA.TRANSPARENT,offsetX:j,offsetY:j,blur:j};let r=0;for(let s=0;s<e.length;s++){const i=e[s];YA(i)?(r===0?t.offsetX=i:r===1?t.offsetY=i:t.blur=i,r++):t.color=XA.parse(n,i)}return t})},Jg={name:"text-transform",initialValue:"none",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"uppercase":return 2;case"lowercase":return 1;case"capitalize":return 3}return 0}},Xg={name:"transform",initialValue:"none",prefix:!0,type:0,parse:(n,A)=>{if(A.type===20&&A.value==="none")return null;if(A.type===18){const e=Wg[A.name];if(typeof e>"u")throw new Error(`Attempting to parse an unsupported transform function "${A.name}"`);return e(n,A.values)}return null}},Wg={matrix:(n,A)=>{const e=A.filter(t=>t.type===17).map(t=>t.number);return e.length===6?e:null},matrix3d:(n,A)=>{const e=A.filter(l=>l.type===17).map(l=>l.number),[t,r,{},{},s,i,{},{},{},{},{},{},o,a]=e;return e.length===16?[t,r,s,i,o,a]:null},rotate:(n,A)=>{if(A.length!==1)return null;const e=A[0];let t=0;if(e.type===17&&e.number===0)t=0;else if(e.type===15)t=ye.parse(n,e);else return null;const r=Math.cos(t),s=Math.sin(t);return[r,s,-s,r,0,0]}},Ho={type:16,number:50,flags:we},jg=[Ho,Ho],Zg={name:"transform-origin",initialValue:"50% 50%",prefix:!0,type:1,parse:(n,A)=>{const e=A.filter(N);return e.length!==2?jg:[e[0],e[1]]}},qg={name:"rotate",initialValue:"none",prefix:!1,type:0,parse:(n,A)=>A.type===20&&A.value==="none"?null:A.type===17&&A.number===0?0:A.type===15?ye.parse(n,A)*180/Math.PI:null},$g={name:"visible",initialValue:"none",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"hidden":return 1;case"collapse":return 2;case"visible":default:return 0}}};var st;(function(n){n.NORMAL="normal",n.BREAK_ALL="break-all",n.KEEP_ALL="keep-all"})(st||(st={}));const Ap={name:"word-break",initialValue:"normal",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"break-all":return st.BREAK_ALL;case"keep-all":return st.KEEP_ALL;case"normal":default:return st.NORMAL}}},IA=n=>n!==0,ep=n=>n===3||n===4,tp={name:"writing-mode",initialValue:"horizontal-tb",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"vertical-rl":return 1;case"vertical-lr":return 2;case"sideways-rl":return 3;case"sideways-lr":return 4;case"horizontal-tb":default:return 0}}},np={name:"z-index",initialValue:"auto",prefix:!1,type:0,parse:(n,A)=>{if(A.type===20)return{auto:!0,order:0};if(W(A))return{auto:!1,order:A.number};throw new Error("Invalid z-index number parsed")}},Lo={name:"time",parse:(n,A)=>{if(A.type===15)switch(A.unit.toLowerCase()){case"s":return 1e3*A.number;case"ms":return A.number}throw new Error("Unsupported time type")}},rp={name:"opacity",initialValue:"1",type:0,prefix:!1,parse:(n,A)=>W(A)?A.number:1},sp={name:"text-decoration-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},ip={name:"text-decoration-line",initialValue:"none",prefix:!1,type:1,parse:(n,A)=>A.filter(H).map(e=>{switch(e.value){case"underline":return 1;case"overline":return 2;case"line-through":return 3;case"none":return 4}return 0}).filter(e=>e!==0)},op={name:"text-decoration-style",initialValue:"solid",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"double":return 1;case"dotted":return 2;case"dashed":return 3;case"wavy":return 4;case"solid":default:return 0}}},ap={name:"text-decoration-thickness",initialValue:"auto",prefix:!1,type:0,parse:(n,A)=>{if(H(A))switch(A.value){case"auto":return"auto";case"from-font":return"from-font"}return EA(A)?A.number:"auto"}},lp={name:"text-underline-offset",initialValue:"auto",prefix:!1,type:0,parse:(n,A)=>H(A)&&A.value==="auto"?"auto":EA(A)?A.number:"auto"},cp={name:"font-family",initialValue:"",prefix:!1,type:1,parse:(n,A)=>{const e=[],t=[];return A.forEach(r=>{switch(r.type){case 20:case 0:e.push(r.value);break;case 17:e.push(r.number.toString());break;case 4:t.push(e.join(" ")),e.length=0;break}}),e.length&&t.push(e.join(" ")),t.map(r=>r.indexOf(" ")===-1?r:`'${r}'`)}},dp={name:"font-size",initialValue:"0",prefix:!1,type:3,format:"length"},hp={name:"font-weight",initialValue:"normal",type:0,prefix:!1,parse:(n,A)=>{if(W(A))return A.number;if(H(A))switch(A.value){case"bold":return 700;case"normal":default:return 400}return 400}},up={name:"font-variant",initialValue:"none",type:1,prefix:!1,parse:(n,A)=>A.filter(H).map(e=>e.value)},gp={name:"font-style",initialValue:"normal",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"oblique":return"oblique";case"italic":return"italic";case"normal":default:return"normal"}}},_=(n,A)=>(n&A)!==0,pp={name:"content",initialValue:"none",type:1,prefix:!1,parse:(n,A)=>{if(A.length===0)return[];const e=A[0];return e.type===20&&e.value==="none"?[]:A}},Bp={name:"counter-increment",initialValue:"none",prefix:!0,type:1,parse:(n,A)=>{if(A.length===0)return null;const e=A[0];if(e.type===20&&e.value==="none")return null;const t=[],r=A.filter(An);for(let s=0;s<r.length;s++){const i=r[s],o=r[s+1];if(i.type===20){const a=o&&W(o)?o.number:1;t.push({counter:i.value,increment:a})}}return t}},fp={name:"counter-reset",initialValue:"none",prefix:!0,type:1,parse:(n,A)=>{if(A.length===0)return[];const e=[],t=A.filter(An);for(let r=0;r<t.length;r++){const s=t[r],i=t[r+1];if(H(s)&&s.value!=="none"){const o=i&&W(i)?i.number:0;e.push({counter:s.value,reset:o})}}return e}},wp={name:"duration",initialValue:"0s",prefix:!1,type:1,parse:(n,A)=>A.filter(EA).map(e=>Lo.parse(n,e))},mp={name:"quotes",initialValue:"none",prefix:!0,type:1,parse:(n,A)=>{if(A.length===0)return null;const e=A[0];if(e.type===20&&e.value==="none")return null;const t=[],r=A.filter(Rh);if(r.length%2!==0)return null;for(let s=0;s<r.length;s+=2){const i=r[s].value,o=r[s+1].value;t.push({open:i,close:o})}return t}},To=(n,A,e)=>{if(!n)return"";const t=n[Math.min(A,n.length-1)];return t?e?t.open:t.close:""},Cp={name:"box-shadow",initialValue:"none",type:1,prefix:!1,parse:(n,A)=>A.length===1&&tt(A[0],"none")?[]:vA(A).map(e=>{const t={color:255,offsetX:j,offsetY:j,blur:j,spread:j,inset:!1};let r=0;for(let s=0;s<e.length;s++){const i=e[s];tt(i,"inset")?t.inset=!0:YA(i)?(r===0?t.offsetX=i:r===1?t.offsetY=i:r===2?t.blur=i:t.spread=i,r++):t.color=XA.parse(n,i)}return t})},yp={name:"paint-order",initialValue:"normal",prefix:!1,type:1,parse:(n,A)=>{const e=[0,1,2],t=[];return A.filter(H).forEach(r=>{switch(r.value){case"stroke":t.push(1);break;case"fill":t.push(0);break;case"markers":t.push(2);break}}),e.forEach(r=>{t.indexOf(r)===-1&&t.push(r)}),t}},vp={name:"-webkit-text-stroke-color",initialValue:"currentcolor",prefix:!1,type:3,format:"color"},bp={name:"-webkit-text-stroke-width",initialValue:"0",type:0,prefix:!1,parse:(n,A)=>EA(A)?A.number:0},Qp={name:"-webkit-line-clamp",initialValue:"none",prefix:!0,type:0,parse:(n,A)=>A.type===20&&A.value==="none"?0:A.type===17?Math.max(0,Math.floor(A.number)):0},xp={name:"objectFit",initialValue:"fill",prefix:!1,type:1,parse:(n,A)=>A.filter(H).reduce((e,t)=>e|Ep(t.value),0)},Ep=n=>{switch(n){case"contain":return 2;case"cover":return 4;case"none":return 8;case"scale-down":return 16}return 0},Up={name:"text-overflow",initialValue:"clip",prefix:!1,type:2,parse:(n,A)=>{switch(A){case"ellipsis":return 1;case"clip":default:return 0}}};var cA;(function(n){n[n.AUTO=0]="AUTO",n[n.CRISP_EDGES=1]="CRISP_EDGES",n[n.PIXELATED=2]="PIXELATED",n[n.SMOOTH=3]="SMOOTH"})(cA||(cA={}));const Fp={name:"image-rendering",initialValue:"auto",prefix:!1,type:2,parse:(n,A)=>{switch(A.toLowerCase()){case"crisp-edges":case"-webkit-crisp-edges":case"-moz-crisp-edges":return cA.CRISP_EDGES;case"pixelated":case"-webkit-optimize-contrast":return cA.PIXELATED;case"smooth":case"high-quality":return cA.SMOOTH;case"auto":default:return cA.AUTO}}};class Ip{constructor(A,e){this.animationDuration=E(A,wp,e.animationDuration),this.backgroundClip=E(A,Ku,e.backgroundClip),this.backgroundColor=E(A,Nu,e.backgroundColor),this.backgroundImage=E(A,Wu,e.backgroundImage),this.backgroundOrigin=E(A,ju,e.backgroundOrigin),this.backgroundPosition=E(A,Zu,e.backgroundPosition),this.backgroundRepeat=E(A,qu,e.backgroundRepeat),this.backgroundSize=E(A,Ag,e.backgroundSize),this.borderTopColor=E(A,tg,e.borderTopColor),this.borderRightColor=E(A,ng,e.borderRightColor),this.borderBottomColor=E(A,rg,e.borderBottomColor),this.borderLeftColor=E(A,sg,e.borderLeftColor),this.borderTopLeftRadius=E(A,ig,e.borderTopLeftRadius),this.borderTopRightRadius=E(A,og,e.borderTopRightRadius),this.borderBottomRightRadius=E(A,ag,e.borderBottomRightRadius),this.borderBottomLeftRadius=E(A,lg,e.borderBottomLeftRadius),this.borderTopStyle=E(A,cg,e.borderTopStyle),this.borderRightStyle=E(A,dg,e.borderRightStyle),this.borderBottomStyle=E(A,hg,e.borderBottomStyle),this.borderLeftStyle=E(A,ug,e.borderLeftStyle),this.borderTopWidth=E(A,gg,e.borderTopWidth),this.borderRightWidth=E(A,pg,e.borderRightWidth),this.borderBottomWidth=E(A,Bg,e.borderBottomWidth),this.borderLeftWidth=E(A,fg,e.borderLeftWidth),this.boxShadow=E(A,Cp,e.boxShadow),this.clipPath=E(A,bg,e.clipPath),this.color=E(A,Qg,e.color),this.direction=E(A,xg,e.direction),this.display=E(A,Eg,e.display),this.float=E(A,Fg,e.cssFloat),this.fontFamily=E(A,cp,e.fontFamily),this.fontSize=E(A,dp,e.fontSize),this.fontStyle=E(A,gp,e.fontStyle),this.fontVariant=E(A,up,e.fontVariant),this.fontWeight=E(A,hp,e.fontWeight),this.letterSpacing=E(A,Ig,e.letterSpacing),this.lineBreak=E(A,Sg,e.lineBreak),this.lineHeight=E(A,Hg,e.lineHeight),this.listStyleImage=E(A,Lg,e.listStyleImage),this.listStylePosition=E(A,Tg,e.listStylePosition),this.listStyleType=E(A,Lr,e.listStyleType),this.marginTop=E(A,Mg,e.marginTop),this.marginRight=E(A,kg,e.marginRight),this.marginBottom=E(A,Dg,e.marginBottom),this.marginLeft=E(A,Pg,e.marginLeft),this.opacity=E(A,rp,e.opacity);const t=E(A,Kg,e.overflow);this.overflowX=t[0],this.overflowY=t[t.length>1?1:0],this.overflowWrap=E(A,Ng,e.overflowWrap),this.paddingTop=E(A,Og,e.paddingTop),this.paddingRight=E(A,Rg,e.paddingRight),this.paddingBottom=E(A,Gg,e.paddingBottom),this.paddingLeft=E(A,Vg,e.paddingLeft),this.paintOrder=E(A,yp,e.paintOrder),this.position=E(A,Yg,e.position),this.textAlign=E(A,_g,e.textAlign),this.textDecorationColor=E(A,sp,e.textDecorationColor??e.color),this.textDecorationLine=E(A,ip,e.textDecorationLine??e.textDecoration),this.textDecorationStyle=E(A,op,e.textDecorationStyle),this.textDecorationThickness=E(A,ap,e.textDecorationThickness),this.textUnderlineOffset=E(A,lp,e.textUnderlineOffset),this.textShadow=E(A,zg,e.textShadow),this.textTransform=E(A,Jg,e.textTransform),this.textOverflow=E(A,Up,e.textOverflow),this.transform=E(A,Xg,e.transform),this.transformOrigin=E(A,Zg,e.transformOrigin),this.rotate=E(A,qg,e.rotate),this.visibility=E(A,$g,e.visibility),this.webkitTextStrokeColor=E(A,vp,e.webkitTextStrokeColor),this.webkitTextStrokeWidth=E(A,bp,e.webkitTextStrokeWidth),this.webkitLineClamp=E(A,Qp,e.webkitLineClamp),this.wordBreak=E(A,Ap,e.wordBreak),this.writingMode=E(A,tp,e.writingMode),this.zIndex=E(A,np,e.zIndex),this.objectFit=E(A,xp,e.objectFit),this.imageRendering=E(A,Fp,e.imageRendering)}isVisible(){return this.display>0&&this.opacity>0&&this.visibility===0}isTransparent(){return zA(this.backgroundColor)}isTransformed(){return this.transform!==null||this.rotate!==null}isPositioned(){return this.position!==0}isPositionedWithZIndex(){return this.isPositioned()&&!this.zIndex.auto}isFloating(){return this.float!==0}isInlineLevel(){return _(this.display,4)||_(this.display,33554432)||_(this.display,268435456)||_(this.display,536870912)||_(this.display,67108864)||_(this.display,134217728)}}class Sp{constructor(A,e){this.content=E(A,pp,e.content),this.quotes=E(A,mp,e.quotes)}}class Mo{constructor(A,e){this.counterIncrement=E(A,Bp,e.counterIncrement),this.counterReset=E(A,fp,e.counterReset)}}const E=(n,A,e)=>{const t=new Zi,r=e!==null&&typeof e<"u"?e.toString():A.initialValue;t.write(r);const s=new Ce(t.read());switch(A.type){case 2:const i=s.parseComponentValue();return A.parse(n,H(i)?i.value:A.initialValue);case 0:return A.parse(n,s.parseComponentValue());case 1:return A.parse(n,s.parseComponentValues());case 4:return s.parseComponentValue();case 3:switch(A.format){case"angle":return ye.parse(n,s.parseComponentValue());case"color":return XA.parse(n,s.parseComponentValue());case"image":return Ir.parse(n,s.parseComponentValue());case"length":const o=s.parseComponentValue();return YA(o)?o:j;case"length-percentage":const a=s.parseComponentValue();return N(a)?a:j;case"time":return Lo.parse(n,s.parseComponentValue())}break}},MA=n=>n.nodeType===Node.ELEMENT_NODE,ko=n=>n.nodeType===Node.TEXT_NODE,Qe=n=>typeof n.className=="object",it=n=>MA(n)&&typeof n.style<"u"&&!Qe(n),Hp=n=>n.tagName==="LI",Lp=n=>n.tagName==="OL",Do=n=>!Qe(n)&&n.tagName.indexOf("-")>0,Tp="data-html2canvas-debug",Mp=n=>{if(typeof n.getAttribute!="function")return 0;switch(n.getAttribute(Tp)){case"all":return 1;case"clone":return 2;case"parse":return 3;case"render":return 4;default:return 0}},Tr=(n,A)=>{const e=Mp(n);return e===1||A===e};class Po{static normalizeElement(A,e){const t={};return it(A)&&(e.animationDuration.some(r=>r>0)&&(t.animationDuration=A.style.animationDuration,A.style.animationDuration="0s"),e.transform!==null&&(t.transform=A.style.transform,A.style.transform="translate(0, 0)"),e.rotate!==null&&(t.rotate=A.style.rotate,A.style.rotate="0deg",t.transform===void 0&&(t.transform=A.style.transform,A.style.transform="translate(0, 0)"))),t}static restoreElement(A,e){it(A)&&(e.animationDuration!==void 0&&(A.style.animationDuration=e.animationDuration),e.transform!==void 0&&(A.style.transform=e.transform),e.rotate!==void 0&&(A.style.rotate=e.rotate))}}class SA{constructor(A,e,t={}){this.context=A,this.textNodes=[],this.elements=[],this.flags=0,Tr(e,3),this.styles=new Ip(A,A.config.window.getComputedStyle(e,null)),t.normalizeDom!==!1&&it(e)&&(this.originalStyles=Po.normalizeElement(e,this.styles),this.originalElement=e),this.bounds=Mt(this.context,e),Tr(e,4)&&(this.flags|=16)}restore(){this.originalStyles&&this.originalElement&&(Po.restoreElement(this.originalElement,this.originalStyles),this.originalStyles=void 0,this.originalElement=void 0)}restoreTree(){this.restore();for(const A of this.elements)A.restoreTree()}}for(var kp="AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=",Ko="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ot=typeof Uint8Array>"u"?[]:new Uint8Array(256),fn=0;fn<Ko.length;fn++)ot[Ko.charCodeAt(fn)]=fn;for(var Dp=function(n){var A=n.length*.75,e=n.length,t,r=0,s,i,o,a;n[n.length-1]==="="&&(A--,n[n.length-2]==="="&&A--);var l=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u"&&typeof Uint8Array.prototype.slice<"u"?new ArrayBuffer(A):new Array(A),c=Array.isArray(l)?l:new Uint8Array(l);for(t=0;t<e;t+=4)s=ot[n.charCodeAt(t)],i=ot[n.charCodeAt(t+1)],o=ot[n.charCodeAt(t+2)],a=ot[n.charCodeAt(t+3)],c[r++]=s<<2|i>>4,c[r++]=(i&15)<<4|o>>2,c[r++]=(o&3)<<6|a&63;return l},Pp=function(n){for(var A=n.length,e=[],t=0;t<A;t+=2)e.push(n[t+1]<<8|n[t]);return e},Kp=function(n){for(var A=n.length,e=[],t=0;t<A;t+=4)e.push(n[t+3]<<24|n[t+2]<<16|n[t+1]<<8|n[t]);return e},ae=5,Mr=11,kr=2,Np=Mr-ae,No=65536>>ae,Op=1<<ae,Dr=Op-1,Rp=1024>>ae,Gp=No+Rp,Vp=Gp,_p=32,Yp=Vp+_p,zp=65536>>Mr,Jp=1<<Np,Xp=Jp-1,Oo=function(n,A,e){return n.slice?n.slice(A,e):new Uint16Array(Array.prototype.slice.call(n,A,e))},Wp=function(n,A,e){return n.slice?n.slice(A,e):new Uint32Array(Array.prototype.slice.call(n,A,e))},jp=function(n,A){var e=Dp(n),t=Array.isArray(e)?Kp(e):new Uint32Array(e),r=Array.isArray(e)?Pp(e):new Uint16Array(e),s=24,i=Oo(r,s/2,t[4]/2),o=t[5]===2?Oo(r,(s+t[4])/2):Wp(t,Math.ceil((s+t[4])/4));return new Zp(t[0],t[1],t[2],t[3],i,o)},Zp=function(){function n(A,e,t,r,s,i){this.initialValue=A,this.errorValue=e,this.highStart=t,this.highValueIndex=r,this.index=s,this.data=i}return n.prototype.get=function(A){var e;if(A>=0){if(A<55296||A>56319&&A<=65535)return e=this.index[A>>ae],e=(e<<kr)+(A&Dr),this.data[e];if(A<=65535)return e=this.index[No+(A-55296>>ae)],e=(e<<kr)+(A&Dr),this.data[e];if(A<this.highStart)return e=Yp-zp+(A>>Mr),e=this.index[e],e+=A>>ae&Xp,e=this.index[e],e=(e<<kr)+(A&Dr),this.data[e];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},n}(),Ro="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",qp=typeof Uint8Array>"u"?[]:new Uint8Array(256),wn=0;wn<Ro.length;wn++)qp[Ro.charCodeAt(wn)]=wn;var $p=1,Pr=2,Kr=3,Go=4,Vo=5,AB=7,_o=8,Nr=9,Or=10,Yo=11,zo=12,Jo=13,Xo=14,Rr=15,eB=function(n){for(var A=[],e=0,t=n.length;e<t;){var r=n.charCodeAt(e++);if(r>=55296&&r<=56319&&e<t){var s=n.charCodeAt(e++);(s&64512)===56320?A.push(((r&1023)<<10)+(s&1023)+65536):(A.push(r),e--)}else A.push(r)}return A},tB=function(){for(var n=[],A=0;A<arguments.length;A++)n[A]=arguments[A];if(String.fromCodePoint)return String.fromCodePoint.apply(String,n);var e=n.length;if(!e)return"";for(var t=[],r=-1,s="";++r<e;){var i=n[r];i<=65535?t.push(i):(i-=65536,t.push((i>>10)+55296,i%1024+56320)),(r+1===e||t.length>16384)&&(s+=String.fromCharCode.apply(String,t),t.length=0)}return s},nB=jp(kp),mA="×",Gr="÷",rB=function(n){return nB.get(n)},sB=function(n,A,e){var t=e-2,r=A[t],s=A[e-1],i=A[e];if(s===Pr&&i===Kr)return mA;if(s===Pr||s===Kr||s===Go||i===Pr||i===Kr||i===Go)return Gr;if(s===_o&&[_o,Nr,Yo,zo].indexOf(i)!==-1||(s===Yo||s===Nr)&&(i===Nr||i===Or)||(s===zo||s===Or)&&i===Or||i===Jo||i===Vo||i===AB||s===$p)return mA;if(s===Jo&&i===Xo){for(;r===Vo;)r=A[--t];if(r===Xo)return mA}if(s===Rr&&i===Rr){for(var o=0;r===Rr;)o++,r=A[--t];if(o%2===0)return mA}return Gr},iB=function(n){var A=eB(n),e=A.length,t=0,r=0,s=A.map(rB);return{next:function(){if(t>=e)return{done:!0,value:null};for(var i=mA;t<e&&(i=sB(A,s,++t))===mA;);if(i!==mA||t===e){var o=tB.apply(null,A.slice(r,t));return r=t,{value:o,done:!1}}return{done:!0,value:null}}}},oB=function(n){for(var A=iB(n),e=[],t;!(t=A.next()).done;)t.value&&e.push(t.value.slice());return e};const aB=n=>{if(n.createRange){const e=n.createRange();if(e.getBoundingClientRect){const t=n.createElement("boundtest");t.style.height="123px",t.style.display="block",n.body.appendChild(t),e.selectNode(t);const r=e.getBoundingClientRect(),s=Math.round(r.height);if(n.body.removeChild(t),s===123)return!0}}return!1},lB=n=>{const A=n.createElement("boundtest");A.style.width="50px",A.style.display="block",A.style.fontSize="12px",A.style.letterSpacing="0px",A.style.wordSpacing="0px",n.body.appendChild(A);const e=n.createRange();A.innerHTML=typeof"".repeat=="function"?"👨".repeat(10):"";const t=A.firstChild,r=kt(t.data).map(a=>z(a));let s=0,i={};const o=r.every((a,l)=>{e.setStart(t,s),e.setEnd(t,s+a.length);const c=e.getBoundingClientRect();s+=a.length;const d=c.x>i.x||c.y>i.y;return i=c,l===0?!0:d});return n.body.removeChild(A),o},cB=()=>typeof new Image().crossOrigin<"u",dB=()=>typeof new XMLHttpRequest().responseType=="string",hB=n=>{const A=new Image,e=n.createElement("canvas"),t=e.getContext("2d");if(!t)return!1;A.src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>";try{t.drawImage(A,0,0),e.toDataURL()}catch{return!1}return!0},Wo=n=>n[0]===0&&n[1]===255&&n[2]===0&&n[3]===255,uB=n=>{const A=n.createElement("canvas"),e=100;A.width=e,A.height=e;const t=A.getContext("2d");if(!t)return Promise.reject(!1);t.fillStyle="rgb(0, 255, 0)",t.fillRect(0,0,e,e);const r=new Image,s=A.toDataURL();r.src=s;const i=Vr(e,e,0,0,r);return t.fillStyle="red",t.fillRect(0,0,e,e),jo(i).then(o=>{t.drawImage(o,0,0);const a=t.getImageData(0,0,e,e).data;t.fillStyle="red",t.fillRect(0,0,e,e);const l=n.createElement("div");return l.style.backgroundImage=`url(${s})`,l.style.height=`${e}px`,Wo(a)?jo(Vr(e,e,0,0,l)):Promise.reject(!1)}).then(o=>(t.drawImage(o,0,0),Wo(t.getImageData(0,0,e,e).data))).catch(()=>!1)},Vr=(n,A,e,t,r)=>{const s="http://www.w3.org/2000/svg",i=document.createElementNS(s,"svg"),o=document.createElementNS(s,"foreignObject");return i.setAttributeNS(null,"width",n.toString()),i.setAttributeNS(null,"height",A.toString()),o.setAttributeNS(null,"width","100%"),o.setAttributeNS(null,"height","100%"),o.setAttributeNS(null,"x",e.toString()),o.setAttributeNS(null,"y",t.toString()),o.setAttributeNS(null,"externalResourcesRequired","true"),i.appendChild(o),o.appendChild(r),i},jo=n=>new Promise((A,e)=>{const t=new Image;t.onload=()=>A(t),t.onerror=e,t.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(n))}`}),nA={get SUPPORT_RANGE_BOUNDS(){const n=aB(document);return Object.defineProperty(nA,"SUPPORT_RANGE_BOUNDS",{value:n}),n},get SUPPORT_WORD_BREAKING(){const n=nA.SUPPORT_RANGE_BOUNDS&&lB(document);return Object.defineProperty(nA,"SUPPORT_WORD_BREAKING",{value:n}),n},get SUPPORT_SVG_DRAWING(){const n=hB(document);return Object.defineProperty(nA,"SUPPORT_SVG_DRAWING",{value:n}),n},get SUPPORT_FOREIGNOBJECT_DRAWING(){const n=typeof Array.from=="function"&&typeof window.fetch=="function"?uB(document):Promise.resolve(!1);return Object.defineProperty(nA,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:n}),n},get SUPPORT_CORS_IMAGES(){const n=cB();return Object.defineProperty(nA,"SUPPORT_CORS_IMAGES",{value:n}),n},get SUPPORT_RESPONSE_TYPE(){const n=dB();return Object.defineProperty(nA,"SUPPORT_RESPONSE_TYPE",{value:n}),n},get SUPPORT_CORS_XHR(){const n="withCredentials"in new XMLHttpRequest;return Object.defineProperty(nA,"SUPPORT_CORS_XHR",{value:n}),n},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){const n=!!(typeof Intl<"u"&&Intl.Segmenter);return Object.defineProperty(nA,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:n}),n}};class le{constructor(A,e){this.text=A,this.bounds=e}}const gB=(n,A,e,t)=>{const r=fB(A,e),s=[];let i=0;return r.forEach(o=>{if(e.textDecorationLine.length||o.trim().length>0)if(nA.SUPPORT_RANGE_BOUNDS){const a=Zo(t,i,o.length).getClientRects();if(a.length>1){const l=xe(o);let c=0;l.forEach(d=>{s.push(new le(d,rA.fromDOMRectList(n,Zo(t,c+i,d.length).getClientRects()))),c+=d.length})}else s.push(new le(o,rA.fromDOMRectList(n,a)))}else{const a=t.splitText(o.length);s.push(new le(o,pB(n,t))),t=a}else nA.SUPPORT_RANGE_BOUNDS||(t=t.splitText(o.length));i+=o.length}),s},pB=(n,A)=>{const e=A.ownerDocument;if(e){const t=e.createElement("html2canvaswrapper");t.appendChild(A.cloneNode(!0));const r=A.parentNode;if(r){r.replaceChild(t,A);const s=Mt(n,t);return t.firstChild&&r.replaceChild(t.firstChild,t),s}}return rA.EMPTY},Zo=(n,A,e)=>{const t=n.ownerDocument;if(!t)throw new Error("Node has no owner document");const r=t.createRange();return r.setStart(n,A),r.setEnd(n,A+e),r},xe=n=>{if(nA.SUPPORT_NATIVE_TEXT_SEGMENTATION){const A=new Intl.Segmenter(void 0,{granularity:"grapheme"});return Array.from(A.segment(n)).map(e=>e.segment)}return oB(n)},BB=(n,A)=>{if(nA.SUPPORT_NATIVE_TEXT_SEGMENTATION){const e=new Intl.Segmenter(void 0,{granularity:"word"});return Array.from(e.segment(n)).map(t=>t.segment)}return mB(n,A)},fB=(n,A)=>IA(A.writingMode)||A.letterSpacing!==0?xe(n):BB(n,A),wB=[32,160,4961,65792,65793,4153,4241],mB=(n,A)=>{const e=kd(n,{lineBreak:A.lineBreak,wordBreak:A.overflowWrap==="break-word"?"break-word":A.wordBreak}),t=[];let r;for(;!(r=e.next()).done;)if(r.value){const s=r.value.slice(),i=kt(s);let o="";i.forEach(a=>{wB.indexOf(a)===-1?o+=z(a):(o.length&&t.push(o),t.push(z(a)),o="")}),o.length&&t.push(o)}return t};class CB{constructor(A,e,t){this.text=yB(e.data,t.textTransform),this.text.length!==e.data.length&&(e.data=this.text),this.textBounds=gB(A,this.text,t,e)}}const yB=(n,A)=>{switch(A){case 1:return n.toLowerCase();case 3:return n.replace(vB,bB);case 2:return n.toUpperCase();default:return n}},vB=/(^|\s|:|-|\(|\))([a-z])/g,bB=(n,A,e)=>n.length>0?A+e.toUpperCase():n;class qo extends SA{constructor(A,e){super(A,e),this.src=e.currentSrc||e.src,this.intrinsicWidth=e.naturalWidth,this.intrinsicHeight=e.naturalHeight,this.context.cache.addImage(this.src)}}class $o extends SA{constructor(A,e){super(A,e),this.canvas=e,this.intrinsicWidth=e.width,this.intrinsicHeight=e.height}}class Aa extends SA{constructor(A,e){super(A,e);const t=new XMLSerializer,r=Mt(A,e);e.setAttribute("width",`${r.width}px`),e.setAttribute("height",`${r.height}px`),this.svg=`data:image/svg+xml,${encodeURIComponent(t.serializeToString(e))}`,this.intrinsicWidth=e.width.baseVal.value,this.intrinsicHeight=e.height.baseVal.value,this.context.cache.addImage(this.svg)}}class ea extends SA{constructor(A,e){super(A,e),this.value=e.value}}class _r extends SA{constructor(A,e){super(A,e),this.start=e.start,this.reversed=typeof e.reversed=="boolean"&&e.reversed===!0}}const QB=[{type:15,flags:0,unit:"px",number:3}],xB=[{type:16,flags:0,number:50}],EB=n=>n.width>n.height?new rA(n.left+(n.width-n.height)/2,n.top,n.height,n.height):n.width<n.height?new rA(n.left,n.top+(n.height-n.width)/2,n.width,n.width):n,UB=n=>{const A=n.type===IB?new Array(n.value.length+1).join("•"):n.value;return A.length===0?n.placeholder||"":A},FB=n=>n.value.length===0&&!!n.placeholder,mn="checkbox",Cn="radio",IB="password",ta=707406591,SB=1970632191;class at extends SA{constructor(A,e){switch(super(A,e),this.type=e.type.toLowerCase(),this.checked=e.checked,this.value=UB(e),this.isPlaceholder=FB(e),(this.type===mn||this.type===Cn)&&(this.styles.backgroundColor=3739148031,this.styles.borderTopColor=this.styles.borderRightColor=this.styles.borderBottomColor=this.styles.borderLeftColor=2779096575,this.styles.borderTopWidth=this.styles.borderRightWidth=this.styles.borderBottomWidth=this.styles.borderLeftWidth=1,this.styles.borderTopStyle=this.styles.borderRightStyle=this.styles.borderBottomStyle=this.styles.borderLeftStyle=1,this.styles.backgroundClip=[0],this.styles.backgroundOrigin=[0],this.bounds=EB(this.bounds)),this.type){case mn:this.styles.borderTopRightRadius=this.styles.borderTopLeftRadius=this.styles.borderBottomRightRadius=this.styles.borderBottomLeftRadius=QB;break;case Cn:this.styles.borderTopRightRadius=this.styles.borderTopLeftRadius=this.styles.borderBottomRightRadius=this.styles.borderBottomLeftRadius=xB;break}}}class na extends SA{constructor(A,e){super(A,e);const t=e.options[e.selectedIndex||0];this.value=t&&t.text||""}}class ra extends SA{constructor(A,e){super(A,e),this.value=e.value}}class sa extends SA{constructor(A,e,t){super(A,e),this.src=e.src,this.width=parseInt(e.width,10)||0,this.height=parseInt(e.height,10)||0,this.backgroundColor=this.styles.backgroundColor,this.parseTreeFn=t;try{if(e.contentWindow&&e.contentWindow.document&&e.contentWindow.document.documentElement&&this.parseTreeFn){this.tree=this.parseTreeFn(A,e.contentWindow.document.documentElement);const r=e.contentWindow.document.documentElement?ve(A,getComputedStyle(e.contentWindow.document.documentElement).backgroundColor):FA.TRANSPARENT,s=e.contentWindow.document.body?ve(A,getComputedStyle(e.contentWindow.document.body).backgroundColor):FA.TRANSPARENT;this.backgroundColor=zA(r)?zA(s)?this.styles.backgroundColor:s:r}}catch{}}}const HB=["OL","UL","MENU"],yn=(n,A,e,t)=>{for(let r=A.firstChild,s;r;r=s)if(s=r.nextSibling,ko(r)&&r.data.length>0)e.textNodes.push(new CB(n,r,e.styles));else if(MA(r))if(lt(r)&&r.assignedNodes)r.assignedNodes().forEach(i=>yn(n,i,e,t));else{const i=ia(n,r);i.styles.isVisible()&&(LB(r,i,t)?i.flags|=4:TB(i.styles)&&(i.flags|=2),HB.indexOf(r.tagName)!==-1&&(i.flags|=8),e.elements.push(i),r.slot,r.shadowRoot?yn(n,r.shadowRoot,i,t):!vn(r)&&!aa(r)&&!bn(r)&&yn(n,r,i,t))}},ia=(n,A)=>zr(A)?new qo(n,A):la(A)?new $o(n,A):aa(A)?new Aa(n,A):Hp(A)?new ea(n,A):Lp(A)?new _r(n,A):MB(A)?new at(n,A):bn(A)?new na(n,A):vn(A)?new ra(n,A):da(A)?new sa(n,A,oa):new SA(n,A),oa=(n,A)=>{const e=ia(n,A);return e.flags|=4,yn(n,A,e,e),e},LB=(n,A,e)=>A.styles.isPositionedWithZIndex()||A.styles.opacity<1||A.styles.isTransformed()||Yr(n)&&e.styles.isTransparent(),TB=n=>n.isPositioned()||n.isFloating()?!0:_(n.display,268435456)||_(n.display,33554432)||_(n.display,536870912)||_(n.display,134217728),MB=n=>n.tagName==="INPUT",kB=n=>n.tagName==="HTML",aa=n=>n.tagName==="svg",Yr=n=>n.tagName==="BODY",la=n=>n.tagName==="CANVAS",ca=n=>n.tagName==="VIDEO",zr=n=>n.tagName==="IMG",da=n=>n.tagName==="IFRAME",Jr=n=>n.tagName==="STYLE",ha=n=>n.tagName==="SCRIPT",vn=n=>n.tagName==="TEXTAREA",bn=n=>n.tagName==="SELECT",lt=n=>n.tagName==="SLOT";class DB{constructor(){this.counters={}}getCounterValue(A){const e=this.counters[A];return e&&e.length?e[e.length-1]:1}getCounterValues(A){const e=this.counters[A];return e||[]}pop(A){A.forEach(e=>this.counters[e].pop())}parse(A){const e=A.counterIncrement,t=A.counterReset;let r=!0;e!==null&&e.forEach(i=>{const o=this.counters[i.counter];o&&i.increment!==0&&(r=!1,o.length||o.push(1),o[Math.max(0,o.length-1)]+=i.increment)});const s=[];return r&&t.forEach(i=>{let o=this.counters[i.counter];s.push(i.counter),o||(o=this.counters[i.counter]=[]),o.push(i.reset)}),s}}const ua={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]},ga={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["Ք","Փ","Ւ","Ց","Ր","Տ","Վ","Ս","Ռ","Ջ","Պ","Չ","Ո","Շ","Ն","Յ","Մ","Ճ","Ղ","Ձ","Հ","Կ","Ծ","Խ","Լ","Ի","Ժ","Թ","Ը","Է","Զ","Ե","Դ","Գ","Բ","Ա"]},PB={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:["י׳","ט׳","ח׳","ז׳","ו׳","ה׳","ד׳","ג׳","ב׳","א׳","ת","ש","ר","ק","צ","פ","ע","ס","נ","מ","ל","כ","יט","יח","יז","טז","טו","י","ט","ח","ז","ו","ה","ד","ג","ב","א"]},KB={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["ჵ","ჰ","ჯ","ჴ","ხ","ჭ","წ","ძ","ც","ჩ","შ","ყ","ღ","ქ","ფ","ჳ","ტ","ს","რ","ჟ","პ","ო","ჲ","ნ","მ","ლ","კ","ი","თ","ჱ","ზ","ვ","ე","დ","გ","ბ","ა"]},Ee=(n,A,e,t,r,s)=>n<A||n>e?dt(n,r,s.length>0):t.integers.reduce((i,o,a)=>{for(;n>=o;)n-=o,i+=t.values[a];return i},"")+s,pa=(n,A,e,t)=>{let r="";do e||n--,r=t(n)+r,n/=A;while(n*A>=A);return r},J=(n,A,e,t,r)=>{const s=e-A+1;return(n<0?"-":"")+(pa(Math.abs(n),s,t,i=>z(Math.floor(i%s)+A))+r)},ce=(n,A,e=". ")=>{const t=A.length;return pa(Math.abs(n),t,!1,r=>A[Math.floor(r%t)])+e},Ue=1,WA=2,jA=4,ct=8,kA=(n,A,e,t,r,s)=>{if(n<-9999||n>9999)return dt(n,4,r.length>0);let i=Math.abs(n),o=r;if(i===0)return A[0]+o;for(let a=0;i>0&&a<=4;a++){const l=i%10;l===0&&_(s,Ue)&&o!==""?o=A[l]+o:l>1||l===1&&a===0||l===1&&a===1&&_(s,WA)||l===1&&a===1&&_(s,jA)&&n>100||l===1&&a>1&&_(s,ct)?o=A[l]+(a>0?e[a-1]:"")+o:l===1&&a>0&&(o=e[a-1]+o),i=Math.floor(i/10)}return(n<0?t:"")+o},Ba="十百千萬",fa="拾佰仟萬",wa="マイナス",Xr="마이너스",dt=(n,A,e)=>{const t=e?". ":"",r=e?"、":"",s=e?", ":"",i=e?" ":"";switch(A){case 0:return"•"+i;case 1:return"◦"+i;case 2:return"◾"+i;case 5:const o=J(n,48,57,!0,t);return o.length<4?`0${o}`:o;case 4:return ce(n,"〇一二三四五六七八九",r);case 6:return Ee(n,1,3999,ua,3,t).toLowerCase();case 7:return Ee(n,1,3999,ua,3,t);case 8:return J(n,945,969,!1,t);case 9:return J(n,97,122,!1,t);case 10:return J(n,65,90,!1,t);case 11:return J(n,1632,1641,!0,t);case 12:case 49:return Ee(n,1,9999,ga,3,t);case 35:return Ee(n,1,9999,ga,3,t).toLowerCase();case 13:return J(n,2534,2543,!0,t);case 14:case 30:return J(n,6112,6121,!0,t);case 15:return ce(n,"子丑寅卯辰巳午未申酉戌亥",r);case 16:return ce(n,"甲乙丙丁戊己庚辛壬癸",r);case 17:case 48:return kA(n,"零一二三四五六七八九",Ba,"負",r,WA|jA|ct);case 47:return kA(n,"零壹貳參肆伍陸柒捌玖",fa,"負",r,Ue|WA|jA|ct);case 42:return kA(n,"零一二三四五六七八九",Ba,"负",r,WA|jA|ct);case 41:return kA(n,"零壹贰叁肆伍陆柒捌玖",fa,"负",r,Ue|WA|jA|ct);case 26:return kA(n,"〇一二三四五六七八九","十百千万",wa,r,0);case 25:return kA(n,"零壱弐参四伍六七八九","拾百千万",wa,r,Ue|WA|jA);case 31:return kA(n,"영일이삼사오육칠팔구","십백천만",Xr,s,Ue|WA|jA);case 33:return kA(n,"零一二三四五六七八九","十百千萬",Xr,s,0);case 32:return kA(n,"零壹貳參四五六七八九","拾百千",Xr,s,Ue|WA|jA);case 18:return J(n,2406,2415,!0,t);case 20:return Ee(n,1,19999,KB,3,t);case 21:return J(n,2790,2799,!0,t);case 22:return J(n,2662,2671,!0,t);case 52:return Ee(n,1,10999,PB,3,t);case 23:return ce(n,"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん");case 24:return ce(n,"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす");case 27:return J(n,3302,3311,!0,t);case 28:return ce(n,"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン",r);case 29:return ce(n,"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス",r);case 34:return J(n,3792,3801,!0,t);case 37:return J(n,6160,6169,!0,t);case 38:return J(n,4160,4169,!0,t);case 39:return J(n,2918,2927,!0,t);case 40:return J(n,1776,1785,!0,t);case 43:return J(n,3046,3055,!0,t);case 44:return J(n,3174,3183,!0,t);case 45:return J(n,3664,3673,!0,t);case 46:return J(n,3872,3881,!0,t);case 3:default:return J(n,48,57,!0,t)}},Wr="data-html2canvas-ignore",NB=n=>{let A=n;for(;A;){if(A.parentNode&&A.parentNode.host)return A.parentNode;const e=A.getRootNode();if(e&&e!==A.ownerDocument&&e.host)return e;A=A.parentNode}return null};class ma{constructor(A,e,t){if(this.context=A,this.options=t,this.scrolledElements=[],this.referenceElement=e,this.counters=new DB,this.quoteDepth=0,!e.ownerDocument)throw new Error("Cloned element does not have an owner document");if(!this.options.iframeContainer){const r=NB(e);r&&(this.options.iframeContainer=r)}this.documentElement=this.cloneNode(e.ownerDocument.documentElement,!1)}toIFrame(A,e){var h,u;const t=OB(A,e,this.options.iframeContainer);if(!t.contentWindow)throw new Error("Unable to find iframe window");const r=A.defaultView.pageXOffset,s=A.defaultView.pageYOffset,i=t.contentWindow,o=i.document,a=VB(t).then(async()=>{this.scrolledElements.forEach(JB),i&&(i.scrollTo(e.left,e.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(i.scrollY!==e.top||i.scrollX!==e.left)&&(this.context.logger.warn("Unable to restore scroll position for cloned document"),this.context.windowBounds=this.context.windowBounds.add(i.scrollX-e.left,i.scrollY-e.top,0,0)));const g=this.options.onclone,B=this.clonedReferenceElement;if(typeof B>"u")throw new Error(`Error finding the ${this.referenceElement.nodeName} in the cloned document`);return o.fonts&&o.fonts.ready&&await o.fonts.ready,/(AppleWebKit)/g.test(navigator.userAgent)&&await GB(o),typeof g=="function"?Promise.resolve().then(()=>g(o,B)).then(()=>t):t}),l=A.baseURI;o.open();const c=YB(document.doctype)+"<html></html>";try{const g=(h=this.referenceElement.ownerDocument)==null?void 0:h.defaultView,B=g&&g.trustedTypes;let f=(u=B==null?void 0:B.getPolicy)==null?void 0:u.call(B,"html2canvas-pro");!f&&B&&(f=B.createPolicy("html2canvas-pro",{createHTML:m=>m})),f?o.write(f.createHTML(c)):o.write(c)}catch{o.write(c)}zB(this.referenceElement.ownerDocument,r,s),o.close();const d=o.adoptNode(this.documentElement);return qB(d,l),o.replaceChild(d,o.documentElement),a}createElementClone(A){if(Tr(A,2),la(A))return this.createCanvasClone(A);if(ca(A))return this.createVideoClone(A);if(Jr(A))return this.createStyleClone(A);const e=A.cloneNode(!1);return zr(e)&&(zr(A)&&A.currentSrc&&A.currentSrc!==A.src&&(e.src=A.currentSrc,e.srcset=""),e.loading==="lazy"&&(e.loading="eager")),Do(e)&&!Qe(e)?this.createCustomElementClone(e):e}createCustomElementClone(A){const e=document.createElement("div");if(e.className=A.className,jr(A.style,e),A.shadowRoot)try{e.attachShadow({mode:"open"})}catch(t){this.context.logger.error("Failed to attach shadow root to custom element clone:",t)}return e}createStyleClone(A){try{const t=A.sheet;if(t&&t.cssRules){const r=[].slice.call(t.cssRules,0).reduce((i,o)=>o&&typeof o.cssText=="string"?i+o.cssText:i,""),s=A.cloneNode(!1);return s.textContent=r,this.options.cspNonce&&(s.nonce=this.options.cspNonce),s}}catch(t){if(this.context.logger.error("Unable to access cssRules property",t),t.name!=="SecurityError")throw t}const e=A.cloneNode(!1);return this.options.cspNonce&&(e.nonce=this.options.cspNonce),e}createCanvasClone(A){if(this.options.inlineImages&&A.ownerDocument){const t=A.ownerDocument.createElement("img");try{return t.src=A.toDataURL(),t}catch{this.context.logger.info("Unable to inline canvas contents, canvas is tainted",A)}}const e=A.cloneNode(!1);try{e.width=A.width,e.height=A.height;const t=A.getContext("2d"),r=e.getContext("2d",{willReadFrequently:!0});if(r)if(!this.options.allowTaint&&t)r.putImageData(t.getImageData(0,0,A.width,A.height),0,0);else{const s=A.getContext("webgl2")??A.getContext("webgl");if(s){const i=s.getContextAttributes();(i==null?void 0:i.preserveDrawingBuffer)===!1&&this.context.logger.warn("Unable to clone WebGL context as it has preserveDrawingBuffer=false",A)}r.drawImage(A,0,0)}return e}catch{this.context.logger.info("Unable to clone canvas as it is tainted",A)}return e}createVideoClone(A){const e=A.ownerDocument.createElement("canvas");e.width=A.offsetWidth,e.height=A.offsetHeight;const t=e.getContext("2d");try{return t&&(t.drawImage(A,0,0,e.width,e.height),this.options.allowTaint||t.getImageData(0,0,e.width,e.height)),e}catch{this.context.logger.info("Unable to clone video as it is tainted",A)}const r=A.ownerDocument.createElement("canvas");return r.width=A.offsetWidth,r.height=A.offsetHeight,r}appendChildNode(A,e,t){(!MA(e)||!ha(e)&&!e.hasAttribute(Wr)&&(typeof this.options.ignoreElements!="function"||!this.options.ignoreElements(e)))&&(!this.options.copyStyles||!MA(e)||!Jr(e))&&A.appendChild(this.cloneNode(e,t))}shouldCloneChild(A){return!MA(A)||!ha(A)&&!A.hasAttribute(Wr)&&(typeof this.options.ignoreElements!="function"||!this.options.ignoreElements(A))}shouldCloneStyleElement(A){return!this.options.copyStyles||!MA(A)||!Jr(A)}safeAppendClonedChild(A,e,t){this.shouldCloneChild(e)&&this.shouldCloneStyleElement(e)&&A.appendChild(this.cloneNode(e,t))}cloneAssignedNodes(A,e,t){A.forEach(r=>{this.safeAppendClonedChild(e,r,t)})}cloneSlotFallbackContent(A,e,t){for(let r=A.firstChild;r;r=r.nextSibling)this.safeAppendClonedChild(e,r,t)}cloneSlotElement(A,e,t){if(!lt(A))return;const r=A;if(typeof r.assignedNodes!="function"){this.context.logger.warn("HTMLSlotElement.assignedNodes is not available",A),this.cloneSlotFallbackContent(A,e,t);return}const s=r.assignedNodes();if(!s||!Array.isArray(s)){this.context.logger.warn("assignedNodes() did not return a valid array",A),this.cloneSlotFallbackContent(A,e,t);return}s.length>0?this.cloneAssignedNodes(s,e,t):this.cloneSlotFallbackContent(A,e,t)}cloneShadowDOMChildren(A,e,t){for(let r=A.firstChild;r;r=r.nextSibling)MA(r)&<(r)?this.cloneSlotElement(r,e,t):this.safeAppendClonedChild(e,r,t)}cloneLightDOMChildren(A,e,t){for(let r=A.firstChild;r;r=r.nextSibling)this.appendChildNode(e,r,t)}cloneSlotElementAsLightDOM(A,e,t){if(!lt(A))return;const r=A;if(typeof r.assignedNodes!="function"){for(let i=A.firstChild;i;i=i.nextSibling)this.appendChildNode(e,i,t);return}const s=r.assignedNodes();if(s&&Array.isArray(s)&&s.length>0)s.forEach(i=>this.appendChildNode(e,i,t));else for(let i=A.firstChild;i;i=i.nextSibling)this.appendChildNode(e,i,t)}cloneShadowDOMAsLightDOM(A,e,t){for(let r=A.firstChild;r;r=r.nextSibling)MA(r)&<(r)?this.cloneSlotElementAsLightDOM(r,e,t):this.appendChildNode(e,r,t)}cloneChildNodes(A,e,t){A.shadowRoot&&e.shadowRoot?(this.cloneShadowDOMChildren(A.shadowRoot,e.shadowRoot,t),this.cloneLightDOMChildren(A,e,t)):A.shadowRoot&&!e.shadowRoot?this.cloneShadowDOMAsLightDOM(A.shadowRoot,e,t):this.cloneLightDOMChildren(A,e,t)}cloneNode(A,e){if(ko(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);const t=A.ownerDocument.defaultView;if(t&&MA(A)&&(it(A)||Qe(A))){const r=this.createElementClone(A);r.style.transitionProperty="none";const s=t.getComputedStyle(A),i=t.getComputedStyle(A,":before"),o=t.getComputedStyle(A,":after");this.referenceElement===A&&it(r)&&(this.clonedReferenceElement=r),Yr(r)&&jB(r,this.options.cspNonce);const a=this.counters.parse(new Mo(this.context,s)),l=this.resolvePseudoContent(A,r,i,ht.BEFORE);Do(A)&&(e=!0),ca(A)||this.cloneChildNodes(A,r,e),l&&r.insertBefore(l,r.firstChild);const c=this.resolvePseudoContent(A,r,o,ht.AFTER);return c&&r.appendChild(c),this.counters.pop(a),(s&&(this.options.copyStyles||Qe(A))&&!da(A)||e)&&jr(s,r),(A.scrollTop!==0||A.scrollLeft!==0)&&this.scrolledElements.push([r,A.scrollLeft,A.scrollTop]),(vn(A)||bn(A))&&(vn(r)||bn(r))&&(r.value=A.value),r}return A.cloneNode(!1)}resolvePseudoContent(A,e,t,r){if(!t)return;const s=t.content,i=e.ownerDocument;if(!i||!s||s==="none"||s==="-moz-alt-content"||t.display==="none")return;this.counters.parse(new Mo(this.context,t));const o=new Sp(this.context,t),a=i.createElement("html2canvaspseudoelement");jr(t,a),o.content.forEach(c=>{if(c.type===0)a.appendChild(i.createTextNode(c.value));else if(c.type===22){const d=i.createElement("img");d.src=c.value,d.style.opacity="1",a.appendChild(d)}else if(c.type===18){if(c.name==="attr"){const d=c.values.filter(H);d.length&&a.appendChild(i.createTextNode(A.getAttribute(d[0].value)||""))}else if(c.name==="counter"){const[d,h]=c.values.filter(tA);if(d&&H(d)){const u=this.counters.getCounterValue(d.value),g=h&&H(h)?Lr.parse(this.context,h.value):3;a.appendChild(i.createTextNode(dt(u,g,!1)))}}else if(c.name==="counters"){const[d,h,u]=c.values.filter(tA);if(d&&H(d)){const g=this.counters.getCounterValues(d.value),B=u&&H(u)?Lr.parse(this.context,u.value):3,f=h&&h.type===0?h.value:"",m=g.map(w=>dt(w,B,!1)).join(f);a.appendChild(i.createTextNode(m))}}}else if(c.type===20)switch(c.value){case"open-quote":a.appendChild(i.createTextNode(To(o.quotes,this.quoteDepth++,!0)));break;case"close-quote":a.appendChild(i.createTextNode(To(o.quotes,--this.quoteDepth,!1)));break;default:a.appendChild(i.createTextNode(c.value))}}),a.className=`${Zr} ${qr}`;const l=r===ht.BEFORE?` ${Zr}`:` ${qr}`;return Qe(e)?e.className.baseValue+=l:e.className+=l,a}static destroy(A){return A.parentNode?(A.parentNode.removeChild(A),!0):!1}}var ht;(function(n){n[n.BEFORE=0]="BEFORE",n[n.AFTER=1]="AFTER"})(ht||(ht={}));const OB=(n,A,e)=>{const t=n.createElement("iframe");return t.className="html2canvas-container",t.style.visibility="hidden",t.style.position="fixed",t.style.left="-10000px",t.style.top="0px",t.style.border="0",t.width=A.width.toString(),t.height=A.height.toString(),t.scrolling="no",t.setAttribute(Wr,"true"),(e||n.body).appendChild(t),t},RB=n=>new Promise(A=>{if(n.complete){A();return}if(!n.src){A();return}n.onload=A,n.onerror=A}),GB=n=>Promise.all([].slice.call(n.images,0).map(RB)),VB=n=>new Promise((A,e)=>{const t=n.contentWindow;if(!t)return e("No window assigned for iframe");const r=t.document;t.onload=n.onload=()=>{t.onload=n.onload=null;const s=setInterval(()=>{r.body.childNodes.length>0&&r.readyState==="complete"&&(clearInterval(s),A(n))},50)}}),_B=["all","d","content"],jr=(n,A)=>{for(let e=n.length-1;e>=0;e--){const t=n.item(e);_B.indexOf(t)===-1&&!t.startsWith("--")&&A.style.setProperty(t,n.getPropertyValue(t))}return A},YB=n=>{let A="";return n&&(A+="<!DOCTYPE ",n.name&&(A+=n.name),n.internalSubset&&(A+=" "+n.internalSubset.replace(/"/g,""").replace(/>/g,">")),n.publicId?(A+=' PUBLIC "'+n.publicId.replace(/"/g,""")+'"',n.systemId&&(A+=' "'+n.systemId.replace(/"/g,""")+'"')):n.systemId&&(A+=' SYSTEM "'+n.systemId.replace(/"/g,""")+'"'),A+=">"),A},zB=(n,A,e)=>{n&&n.defaultView&&(A!==n.defaultView.pageXOffset||e!==n.defaultView.pageYOffset)&&n.defaultView.scrollTo(A,e)},JB=([n,A,e])=>{n.scrollLeft=A,n.scrollTop=e},XB=":before",WB=":after",Zr="___html2canvas___pseudoelement_before",qr="___html2canvas___pseudoelement_after",Ca=`{
|
|
3027
|
+
content: "" !important;
|
|
3028
|
+
display: none !important;
|
|
3029
|
+
}`,jB=(n,A)=>{ZB(n,`.${Zr}${XB}${Ca}
|
|
3030
|
+
.${qr}${WB}${Ca}`,A)},ZB=(n,A,e)=>{const t=n.ownerDocument;if(t){const r=t.createElement("style");r.textContent=A,e&&(r.nonce=e),n.appendChild(r)}},qB=(n,A)=>{const e=n.ownerDocument.createElement("base");e.href=A;const t=n.getElementsByTagName("head").item(0);t==null||t.insertBefore(e,(t==null?void 0:t.firstChild)??null)};class U{constructor(A,e){this.type=0,this.x=A,this.y=e}add(A,e){return new U(this.x+A,this.y+e)}}const Fe=(n,A,e)=>new U(n.x+(A.x-n.x)*e,n.y+(A.y-n.y)*e);class DA{constructor(A,e,t,r){this.type=1,this.start=A,this.startControl=e,this.endControl=t,this.end=r}subdivide(A,e){const t=Fe(this.start,this.startControl,A),r=Fe(this.startControl,this.endControl,A),s=Fe(this.endControl,this.end,A),i=Fe(t,r,A),o=Fe(r,s,A),a=Fe(i,o,A);return e?new DA(this.start,t,i,a):new DA(a,o,s,this.end)}add(A,e){return new DA(this.start.add(A,e),this.startControl.add(A,e),this.endControl.add(A,e),this.end.add(A,e))}reverse(){return new DA(this.end,this.endControl,this.startControl,this.start)}}const dA=n=>n.type===1;class $B{constructor(A){const e=A.styles,t=A.bounds;let[r,s]=nt(e.borderTopLeftRadius,t.width,t.height),[i,o]=nt(e.borderTopRightRadius,t.width,t.height),[a,l]=nt(e.borderBottomRightRadius,t.width,t.height),[c,d]=nt(e.borderBottomLeftRadius,t.width,t.height);const h=[];h.push((r+i)/t.width),h.push((c+a)/t.width),h.push((s+d)/t.height),h.push((o+l)/t.height);const u=Math.max(...h);u>1&&(r/=u,s/=u,i/=u,o/=u,a/=u,l/=u,c/=u,d/=u);const g=t.width-i,B=t.height-l,f=t.width-a,m=t.height-d,w=e.borderTopWidth,v=e.borderRightWidth,C=e.borderBottomWidth,y=e.borderLeftWidth,Q=S(e.paddingTop,A.bounds.width),x=S(e.paddingRight,A.bounds.width),F=S(e.paddingBottom,A.bounds.width),I=S(e.paddingLeft,A.bounds.width);this.topLeftBorderDoubleOuterBox=r>0||s>0?V(t.left+y/3,t.top+w/3,r-y/3,s-w/3,P.TOP_LEFT):new U(t.left+y/3,t.top+w/3),this.topRightBorderDoubleOuterBox=r>0||s>0?V(t.left+g,t.top+w/3,i-v/3,o-w/3,P.TOP_RIGHT):new U(t.left+t.width-v/3,t.top+w/3),this.bottomRightBorderDoubleOuterBox=a>0||l>0?V(t.left+f,t.top+B,a-v/3,l-C/3,P.BOTTOM_RIGHT):new U(t.left+t.width-v/3,t.top+t.height-C/3),this.bottomLeftBorderDoubleOuterBox=c>0||d>0?V(t.left+y/3,t.top+m,c-y/3,d-C/3,P.BOTTOM_LEFT):new U(t.left+y/3,t.top+t.height-C/3),this.topLeftBorderDoubleInnerBox=r>0||s>0?V(t.left+y*2/3,t.top+w*2/3,r-y*2/3,s-w*2/3,P.TOP_LEFT):new U(t.left+y*2/3,t.top+w*2/3),this.topRightBorderDoubleInnerBox=r>0||s>0?V(t.left+g,t.top+w*2/3,i-v*2/3,o-w*2/3,P.TOP_RIGHT):new U(t.left+t.width-v*2/3,t.top+w*2/3),this.bottomRightBorderDoubleInnerBox=a>0||l>0?V(t.left+f,t.top+B,a-v*2/3,l-C*2/3,P.BOTTOM_RIGHT):new U(t.left+t.width-v*2/3,t.top+t.height-C*2/3),this.bottomLeftBorderDoubleInnerBox=c>0||d>0?V(t.left+y*2/3,t.top+m,c-y*2/3,d-C*2/3,P.BOTTOM_LEFT):new U(t.left+y*2/3,t.top+t.height-C*2/3),this.topLeftBorderStroke=r>0||s>0?V(t.left+y/2,t.top+w/2,r-y/2,s-w/2,P.TOP_LEFT):new U(t.left+y/2,t.top+w/2),this.topRightBorderStroke=r>0||s>0?V(t.left+g,t.top+w/2,i-v/2,o-w/2,P.TOP_RIGHT):new U(t.left+t.width-v/2,t.top+w/2),this.bottomRightBorderStroke=a>0||l>0?V(t.left+f,t.top+B,a-v/2,l-C/2,P.BOTTOM_RIGHT):new U(t.left+t.width-v/2,t.top+t.height-C/2),this.bottomLeftBorderStroke=c>0||d>0?V(t.left+y/2,t.top+m,c-y/2,d-C/2,P.BOTTOM_LEFT):new U(t.left+y/2,t.top+t.height-C/2),this.topLeftBorderBox=r>0||s>0?V(t.left,t.top,r,s,P.TOP_LEFT):new U(t.left,t.top),this.topRightBorderBox=i>0||o>0?V(t.left+g,t.top,i,o,P.TOP_RIGHT):new U(t.left+t.width,t.top),this.bottomRightBorderBox=a>0||l>0?V(t.left+f,t.top+B,a,l,P.BOTTOM_RIGHT):new U(t.left+t.width,t.top+t.height),this.bottomLeftBorderBox=c>0||d>0?V(t.left,t.top+m,c,d,P.BOTTOM_LEFT):new U(t.left,t.top+t.height),this.topLeftPaddingBox=r>0||s>0?V(t.left+y,t.top+w,Math.max(0,r-y),Math.max(0,s-w),P.TOP_LEFT):new U(t.left+y,t.top+w),this.topRightPaddingBox=i>0||o>0?V(t.left+Math.min(g,t.width-v),t.top+w,g>t.width+v?0:Math.max(0,i-v),Math.max(0,o-w),P.TOP_RIGHT):new U(t.left+t.width-v,t.top+w),this.bottomRightPaddingBox=a>0||l>0?V(t.left+Math.min(f,t.width-y),t.top+Math.min(B,t.height-C),Math.max(0,a-v),Math.max(0,l-C),P.BOTTOM_RIGHT):new U(t.left+t.width-v,t.top+t.height-C),this.bottomLeftPaddingBox=c>0||d>0?V(t.left+y,t.top+Math.min(m,t.height-C),Math.max(0,c-y),Math.max(0,d-C),P.BOTTOM_LEFT):new U(t.left+y,t.top+t.height-C),this.topLeftContentBox=r>0||s>0?V(t.left+y+I,t.top+w+Q,Math.max(0,r-(y+I)),Math.max(0,s-(w+Q)),P.TOP_LEFT):new U(t.left+y+I,t.top+w+Q),this.topRightContentBox=i>0||o>0?V(t.left+Math.min(g,t.width+y+I),t.top+w+Q,g>t.width+y+I?0:i-y+I,o-(w+Q),P.TOP_RIGHT):new U(t.left+t.width-(v+x),t.top+w+Q),this.bottomRightContentBox=a>0||l>0?V(t.left+Math.min(f,t.width-(y+I)),t.top+Math.min(B,t.height+w+Q),Math.max(0,a-(v+x)),l-(C+F),P.BOTTOM_RIGHT):new U(t.left+t.width-(v+x),t.top+t.height-(C+F)),this.bottomLeftContentBox=c>0||d>0?V(t.left+y+I,t.top+m,Math.max(0,c-(y+I)),d-(C+F),P.BOTTOM_LEFT):new U(t.left+y+I,t.top+t.height-(C+F))}}var P;(function(n){n[n.TOP_LEFT=0]="TOP_LEFT",n[n.TOP_RIGHT=1]="TOP_RIGHT",n[n.BOTTOM_RIGHT=2]="BOTTOM_RIGHT",n[n.BOTTOM_LEFT=3]="BOTTOM_LEFT"})(P||(P={}));const V=(n,A,e,t,r)=>{const s=4*((Math.sqrt(2)-1)/3),i=e*s,o=t*s,a=n+e,l=A+t;switch(r){case P.TOP_LEFT:return new DA(new U(n,l),new U(n,l-o),new U(a-i,A),new U(a,A));case P.TOP_RIGHT:return new DA(new U(n,A),new U(n+i,A),new U(a,l-o),new U(a,l));case P.BOTTOM_RIGHT:return new DA(new U(a,A),new U(a,A+o),new U(n+i,l),new U(n,l));case P.BOTTOM_LEFT:default:return new DA(new U(a,l),new U(a-i,l),new U(n,A+o),new U(n,A))}},Qn=n=>[n.topLeftBorderBox,n.topRightBorderBox,n.bottomRightBorderBox,n.bottomLeftBorderBox],Af=n=>[n.topLeftContentBox,n.topRightContentBox,n.bottomRightContentBox,n.bottomLeftContentBox],xn=n=>[n.topLeftPaddingBox,n.topRightPaddingBox,n.bottomRightPaddingBox,n.bottomLeftPaddingBox];class ya{constructor(A,e,t){this.offsetX=A,this.offsetY=e,this.matrix=t,this.type=0,this.target=6}}class En{constructor(A,e){this.path=A,this.target=e,this.type=1}}class ef{constructor(A){this.opacity=A,this.type=2,this.target=6}}class ut{constructor(A){this.applyClip=A,this.type=3,this.target=6}}const tf=n=>n.type===0,va=n=>n.type===1,nf=n=>n.type===2,rf=n=>n.type===3,ba=(n,A)=>n.length===A.length?n.some((e,t)=>e===A[t]):!1,sf=(n,A,e,t,r)=>n.map((s,i)=>{switch(i){case 0:return s.add(A,e);case 1:return s.add(A+t,e);case 2:return s.add(A+t,e+r);case 3:return s.add(A,e+r)}return s});class Qa{constructor(A){this.element=A,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]}}class xa{constructor(A,e){if(this.container=A,this.parent=e,this.effects=[],this.curves=new $B(this.container),this.container.styles.opacity<1&&this.effects.push(new ef(this.container.styles.opacity)),this.container.styles.rotate!==null){const t=this.container.styles.transformOrigin,r=this.container.bounds.left+S(t[0],this.container.bounds.width),s=this.container.bounds.top+S(t[1],this.container.bounds.height),o=this.container.styles.rotate*Math.PI/180,a=Math.cos(o),l=Math.sin(o),c=[a,l,-l,a,0,0];this.effects.push(new ya(r,s,c))}if(this.container.styles.transform!==null){const t=this.container.styles.transformOrigin,r=this.container.bounds.left+S(t[0],this.container.bounds.width),s=this.container.bounds.top+S(t[1],this.container.bounds.height),i=this.container.styles.transform;this.effects.push(new ya(r,s,i))}if(this.container.styles.overflowX!==0){const t=Qn(this.curves),r=xn(this.curves);ba(t,r)?this.effects.push(new En(t,6)):(this.effects.push(new En(t,2)),this.effects.push(new En(r,4)))}if(this.container.styles.clipPath.type!==0){const t=of(this.container.styles.clipPath,this.container.bounds);t&&this.effects.push(t)}}getEffects(A){let e=[2,3].indexOf(this.container.styles.position)===-1,t=this.parent;const r=this.effects.slice(0);for(;t;){const s=t.effects.filter(i=>!va(i));if(e||t.container.styles.position!==0||!t.parent){if(e=[2,3].indexOf(t.container.styles.position)===-1,t.container.styles.overflowX!==0){const i=Qn(t.curves),o=xn(t.curves);ba(i,o)||r.unshift(new En(o,6))}r.unshift(...s)}else r.unshift(...s);t=t.parent}return r.filter(s=>_(s.target,A))}}const Ea=(n,A,e,t,r)=>n==="closest-side"?Math.min(A-e,t-A):n==="farthest-side"?Math.max(A-e,t-A):S(n,r),of=(n,A)=>{const{left:e,top:t,width:r,height:s}=A;switch(n.type){case 1:{const i=S(n.left,r),o=S(n.top,s),a=e+i,l=t+o,c=Math.max(0,r-i-S(n.right,r)),d=Math.max(0,s-o-S(n.bottom,s));return new ut(h=>{h.beginPath(),h.rect(a,l,c,d),h.clip()})}case 2:{const i=e+S(n.cx,r),o=t+S(n.cy,s);let a;return n.radius==="closest-side"?a=Math.min(i-e,o-t,e+r-i,t+s-o):n.radius==="farthest-side"?a=Math.max(i-e,o-t,e+r-i,t+s-o):a=S(n.radius,Math.sqrt(r*r+s*s)/Math.SQRT2),new ut(l=>{l.beginPath(),l.arc(i,o,Math.max(0,a),0,Math.PI*2),l.clip()})}case 3:{const i=e+S(n.cx,r),o=t+S(n.cy,s),a=Ea(n.rx,i,e,e+r,r),l=Ea(n.ry,o,t,t+s,s);return new ut(c=>{c.beginPath(),c.ellipse(i,o,Math.max(0,a),Math.max(0,l),0,0,Math.PI*2),c.clip()})}case 4:{const i=n.points.map(([o,a])=>[e+S(o,r),t+S(a,s)]);return new ut(o=>{if(o.beginPath(),i.length>0){o.moveTo(i[0][0],i[0][1]);for(let a=1;a<i.length;a++)o.lineTo(i[a][0],i[a][1]);o.closePath()}o.clip()})}case 5:{const{d:i}=n;return new ut(o=>{try{const a=o.getTransform();o.translate(e,t),o.clip(new Path2D(i)),o.setTransform(a)}catch{}})}case 0:return null;default:return null}},$r=(n,A,e,t)=>{n.container.elements.forEach(r=>{const s=_(r.flags,4),i=_(r.flags,2),o=new xa(r,n);_(r.styles.display,2048)&&t.push(o);const a=_(r.flags,8)?[]:t;if(s||i){const l=s||r.styles.isPositioned()?e:A,c=new Qa(o);if(r.styles.isPositioned()||r.styles.opacity<1||r.styles.isTransformed()){const d=r.styles.zIndex.order;if(d<0){let h=0;l.negativeZIndex.some((u,g)=>d>u.element.container.styles.zIndex.order?(h=g,!1):h>0),l.negativeZIndex.splice(h,0,c)}else if(d>0){let h=0;l.positiveZIndex.some((u,g)=>d>=u.element.container.styles.zIndex.order?(h=g+1,!1):h>0),l.positiveZIndex.splice(h,0,c)}else l.zeroOrAutoZIndexOrTransformedOrOpacity.push(c)}else r.styles.isFloating()?l.nonPositionedFloats.push(c):l.nonPositionedInlineLevel.push(c);$r(o,c,s?c:e,a)}else r.styles.isInlineLevel()?A.inlineLevel.push(o):A.nonInlineLevel.push(o),$r(o,A,e,a);_(r.flags,8)&&Ua(r,a)})},Ua=(n,A)=>{let e=n instanceof _r?n.start:1;const t=n instanceof _r?n.reversed:!1;for(let r=0;r<A.length;r++){const s=A[r];s.container instanceof ea&&typeof s.container.value=="number"&&s.container.value!==0&&(e=s.container.value),s.listValue=dt(e,s.container.styles.listStyleType,!0),e+=t?-1:1}},af=n=>{const A=new xa(n,null),e=new Qa(A),t=[];return $r(A,e,e,t),Ua(A.container,t),e},Fa=n=>{const A=n.bounds,e=n.styles;return A.add(e.borderLeftWidth,e.borderTopWidth,-(e.borderRightWidth+e.borderLeftWidth),-(e.borderTopWidth+e.borderBottomWidth))},gt=n=>{const A=n.styles,e=n.bounds,t=S(A.paddingLeft,e.width),r=S(A.paddingRight,e.width),s=S(A.paddingTop,e.width),i=S(A.paddingBottom,e.width);return e.add(t+A.borderLeftWidth,s+A.borderTopWidth,-(A.borderRightWidth+A.borderLeftWidth+t+r),-(A.borderTopWidth+A.borderBottomWidth+s+i))},lf=(n,A)=>n===0?A.bounds:n===2?gt(A):Fa(A),cf=(n,A)=>n===0?A.bounds:n===2?gt(A):Fa(A),As=(n,A,e)=>{const t=lf(Se(n.styles.backgroundOrigin,A),n),r=cf(Se(n.styles.backgroundClip,A),n),s=df(Se(n.styles.backgroundSize,A),e,t);let[i,o]=s;const a=nt(Se(n.styles.backgroundPosition,A),t.width-i,t.height-o),l=hf(Se(n.styles.backgroundRepeat,A),a,s,t,r),c=Math.round(t.left+a[0]),d=Math.round(t.top+a[1]);return i=Math.max(1,i),o=Math.max(1,o),[l,c,d,i,o]},Ie=n=>H(n)&&n.value===be.AUTO,Un=n=>typeof n=="number",df=(n,[A,e,t],r)=>{const[s,i]=n;if(!s)return[0,0];if(N(s)&&i&&N(i))return[S(s,r.width),S(i,r.height)];const o=Un(t);if(H(s)&&(s.value===be.CONTAIN||s.value===be.COVER))return Un(t)?r.width/r.height<t!=(s.value===be.COVER)?[r.width,r.width/t]:[r.height*t,r.height]:[r.width,r.height];const a=Un(A),l=Un(e),c=a||l;if(Ie(s)&&(!i||Ie(i))){if(a&&l)return[A,e];if(!o&&!c)return[r.width,r.height];if(c&&o){const B=a?A:e*t,f=l?e:A/t;return[B,f]}const u=a?A:r.width,g=l?e:r.height;return[u,g]}if(o){let u=0,g=0;return N(s)?u=S(s,r.width):N(i)&&(g=S(i,r.height)),Ie(s)?u=g*t:(!i||Ie(i))&&(g=u/t),[u,g]}let d=null,h=null;if(N(s)?d=S(s,r.width):i&&N(i)&&(h=S(i,r.height)),d!==null&&(!i||Ie(i))&&(h=a&&l?d/A*e:r.height),h!==null&&Ie(s)&&(d=a&&l?h/e*A:r.width),d!==null&&h!==null)return[d,h];throw new Error("Unable to calculate background-size for element")},Se=(n,A)=>{const e=n[A];return typeof e>"u"?n[0]:e},hf=(n,[A,e],[t,r],s,i)=>{switch(n){case 2:return[new U(Math.round(s.left),Math.round(s.top+e)),new U(Math.round(s.left+s.width),Math.round(s.top+e)),new U(Math.round(s.left+s.width),Math.round(r+s.top+e)),new U(Math.round(s.left),Math.round(r+s.top+e))];case 3:return[new U(Math.round(s.left+A),Math.round(s.top)),new U(Math.round(s.left+A+t),Math.round(s.top)),new U(Math.round(s.left+A+t),Math.round(s.height+s.top)),new U(Math.round(s.left+A),Math.round(s.height+s.top))];case 1:return[new U(Math.round(s.left+A),Math.round(s.top+e)),new U(Math.round(s.left+A+t),Math.round(s.top+e)),new U(Math.round(s.left+A+t),Math.round(s.top+e+r)),new U(Math.round(s.left+A),Math.round(s.top+e+r))];default:return[new U(Math.round(i.left),Math.round(i.top)),new U(Math.round(i.left+i.width),Math.round(i.top)),new U(Math.round(i.left+i.width),Math.round(i.height+i.top)),new U(Math.round(i.left),Math.round(i.height+i.top))]}},uf="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",Ia="Hidden Text";class gf{constructor(A){this._data={},this._document=A}parseMetrics(A,e){const t=this._document.createElement("div"),r=this._document.createElement("img"),s=this._document.createElement("span"),i=this._document.body;t.style.visibility="hidden",t.style.fontFamily=A,t.style.fontSize=e,t.style.margin="0",t.style.padding="0",t.style.whiteSpace="nowrap",i.appendChild(t),r.src=uf,r.width=1,r.height=1,r.style.margin="0",r.style.padding="0",r.style.verticalAlign="baseline",s.style.fontFamily=A,s.style.fontSize=e,s.style.margin="0",s.style.padding="0",s.appendChild(this._document.createTextNode(Ia)),t.appendChild(s),t.appendChild(r);const o=r.offsetTop-s.offsetTop+2;t.removeChild(s),t.appendChild(this._document.createTextNode(Ia)),t.style.lineHeight="normal",r.style.verticalAlign="super";const a=r.offsetTop-t.offsetTop+2;return i.removeChild(t),{baseline:o,middle:a}}getMetrics(A,e){const t=`${A} ${e}`;return typeof this._data[t]>"u"&&(this._data[t]=this.parseMetrics(A,e)),this._data[t]}}class Sa{constructor(A,e){this.context=A,this.options=e}}class pf{constructor(A){this.ctx=A.ctx,this.context=A.context,this.canvas=A.canvas}async renderBackgroundImage(A){let e=A.styles.backgroundImage.length-1;for(const t of A.styles.backgroundImage.slice(0).reverse())t.type===0?await this.renderBackgroundURLImage(A,t,e):zu(t)?this.renderLinearGradient(A,t,e):Ju(t)&&this.renderRadialGradient(A,t,e),e--}async renderBackgroundURLImage(A,e,t){let r;const s=e.url;try{r=await this.context.cache.match(s)}catch{this.context.logger.error(`Error loading background-image ${s}`)}if(r){const i=isNaN(r.width)||r.width===0?1:r.width,o=isNaN(r.height)||r.height===0?1:r.height,[a,l,c,d,h]=As(A,t,[i,o,i/o]),u=this.ctx.createPattern(this.resizeImage(r,d,h,A.styles.imageRendering),"repeat");this.renderRepeat(a,u,l,c)}}renderLinearGradient(A,e,t){const[r,s,i,o,a]=As(A,t,[null,null,null]),[l,c,d,h,u]=Ru(e.angle,o,a),B=(this.canvas.ownerDocument??document).createElement("canvas");B.width=o,B.height=a;const f=B.getContext("2d"),m=f.createLinearGradient(c,h,d,u);if(wo(e.stops,l||1).forEach(w=>m.addColorStop(w.stop,R(w.color))),f.fillStyle=m,f.fillRect(0,0,o,a),o>0&&a>0){const w=this.ctx.createPattern(B,"repeat");this.renderRepeat(r,w,s,i)}}renderRadialGradient(A,e,t){const[r,s,i,o,a]=As(A,t,[null,null,null]),l=e.position.length===0?[ie]:e.position,c=S(l[0],o),d=S(l[l.length-1],a);let[h,u]=Gu(e,c,d,o,a);if((h===0||u===0)&&(h=Math.max(h,.01),u=Math.max(u,.01)),h>0&&u>0){const g=this.ctx.createRadialGradient(s+c,i+d,0,s+c,i+d,h);if(wo(e.stops,h*2).forEach(B=>g.addColorStop(B.stop,R(B.color))),this.path(r),this.ctx.fillStyle=g,h!==u){const B=A.bounds.left+.5*A.bounds.width,f=A.bounds.top+.5*A.bounds.height,m=u/h,w=1/m;this.ctx.save(),this.ctx.translate(B,f),this.ctx.transform(1,0,0,m,0,0),this.ctx.translate(-B,-f),this.ctx.fillRect(s,w*(i-f)+f,o,a*w),this.ctx.restore()}else this.ctx.fill()}}renderRepeat(A,e,t,r){this.path(A),this.ctx.fillStyle=e,this.ctx.translate(t,r),this.ctx.fill(),this.ctx.translate(-t,-r)}resizeImage(A,e,t,r){const i=(this.canvas.ownerDocument??document).createElement("canvas");i.width=Math.max(1,e),i.height=Math.max(1,t);const o=i.getContext("2d");return r===cA.PIXELATED||r===cA.CRISP_EDGES?(this.context.logger.debug("Disabling image smoothing for background image due to CSS image-rendering"),o.imageSmoothingEnabled=!1):r===cA.SMOOTH?(this.context.logger.debug("Enabling image smoothing for background image due to CSS image-rendering: smooth"),o.imageSmoothingEnabled=!0):o.imageSmoothingEnabled=this.ctx.imageSmoothingEnabled,this.ctx.imageSmoothingQuality&&(o.imageSmoothingQuality=this.ctx.imageSmoothingQuality),o.drawImage(A,0,0,A.width,A.height,0,0,e,t),i}path(A){this.ctx.beginPath(),this.formatPath(A),this.ctx.closePath()}formatPath(A){A.forEach((e,t)=>{const r=dA(e)?e.start:e;t===0?this.ctx.moveTo(r.x,r.y):this.ctx.lineTo(r.x,r.y),dA(e)&&this.ctx.bezierCurveTo(e.startControl.x,e.startControl.y,e.endControl.x,e.endControl.y,e.end.x,e.end.y)})}}const Ha=(n,A)=>{switch(A){case 0:return CA(n.topLeftBorderBox,n.topLeftPaddingBox,n.topRightBorderBox,n.topRightPaddingBox);case 1:return CA(n.topRightBorderBox,n.topRightPaddingBox,n.bottomRightBorderBox,n.bottomRightPaddingBox);case 2:return CA(n.bottomRightBorderBox,n.bottomRightPaddingBox,n.bottomLeftBorderBox,n.bottomLeftPaddingBox);case 3:default:return CA(n.bottomLeftBorderBox,n.bottomLeftPaddingBox,n.topLeftBorderBox,n.topLeftPaddingBox)}},Bf=(n,A)=>{switch(A){case 0:return CA(n.topLeftBorderBox,n.topLeftBorderDoubleOuterBox,n.topRightBorderBox,n.topRightBorderDoubleOuterBox);case 1:return CA(n.topRightBorderBox,n.topRightBorderDoubleOuterBox,n.bottomRightBorderBox,n.bottomRightBorderDoubleOuterBox);case 2:return CA(n.bottomRightBorderBox,n.bottomRightBorderDoubleOuterBox,n.bottomLeftBorderBox,n.bottomLeftBorderDoubleOuterBox);case 3:default:return CA(n.bottomLeftBorderBox,n.bottomLeftBorderDoubleOuterBox,n.topLeftBorderBox,n.topLeftBorderDoubleOuterBox)}},ff=(n,A)=>{switch(A){case 0:return CA(n.topLeftBorderDoubleInnerBox,n.topLeftPaddingBox,n.topRightBorderDoubleInnerBox,n.topRightPaddingBox);case 1:return CA(n.topRightBorderDoubleInnerBox,n.topRightPaddingBox,n.bottomRightBorderDoubleInnerBox,n.bottomRightPaddingBox);case 2:return CA(n.bottomRightBorderDoubleInnerBox,n.bottomRightPaddingBox,n.bottomLeftBorderDoubleInnerBox,n.bottomLeftPaddingBox);case 3:default:return CA(n.bottomLeftBorderDoubleInnerBox,n.bottomLeftPaddingBox,n.topLeftBorderDoubleInnerBox,n.topLeftPaddingBox)}},wf=(n,A)=>{switch(A){case 0:return Fn(n.topLeftBorderStroke,n.topRightBorderStroke);case 1:return Fn(n.topRightBorderStroke,n.bottomRightBorderStroke);case 2:return Fn(n.bottomRightBorderStroke,n.bottomLeftBorderStroke);case 3:default:return Fn(n.bottomLeftBorderStroke,n.topLeftBorderStroke)}},Fn=(n,A)=>{const e=[];return dA(n)?e.push(n.subdivide(.5,!1)):e.push(n),dA(A)?e.push(A.subdivide(.5,!0)):e.push(A),e},CA=(n,A,e,t)=>{const r=[];return dA(n)?r.push(n.subdivide(.5,!1)):r.push(n),dA(e)?r.push(e.subdivide(.5,!0)):r.push(e),dA(t)?r.push(t.subdivide(.5,!0).reverse()):r.push(t),dA(A)?r.push(A.subdivide(.5,!1).reverse()):r.push(A),r};class mf{constructor(A,e){this.ctx=A.ctx,this.pathCallbacks=e}async renderSolidBorder(A,e,t){this.pathCallbacks.path(Ha(t,e)),this.ctx.fillStyle=R(A),this.ctx.fill()}async renderDoubleBorder(A,e,t,r){if(e<3){await this.renderSolidBorder(A,t,r);return}const s=Bf(r,t);this.pathCallbacks.path(s),this.ctx.fillStyle=R(A),this.ctx.fill();const i=ff(r,t);this.pathCallbacks.path(i),this.ctx.fill()}async renderDashedDottedBorder(A,e,t,r,s){this.ctx.save();const i=wf(r,t),o=Ha(r,t);s===2&&(this.pathCallbacks.path(o),this.ctx.clip());let a,l,c,d;dA(o[0])?(a=o[0].start.x,l=o[0].start.y):(a=o[0].x,l=o[0].y),dA(o[1])?(c=o[1].end.x,d=o[1].end.y):(c=o[1].x,d=o[1].y);let h;t===0||t===2?h=Math.abs(a-c):h=Math.abs(l-d),this.ctx.beginPath(),s===3?this.pathCallbacks.formatPath(i):this.pathCallbacks.formatPath(o.slice(0,2));let u=e<3?e*3:e*2,g=e<3?e*2:e;s===3&&(u=e,g=e);let B=!0;if(h<=u*2)B=!1;else if(h<=u*2+g){const f=h/(2*u+g);u*=f,g*=f}else{const f=Math.floor((h+g)/(u+g)),m=(h-f*u)/(f-1),w=(h-(f+1)*u)/f;g=w<=0||Math.abs(g-m)<Math.abs(g-w)?m:w}if(B&&(s===3?this.ctx.setLineDash([0,u+g]):this.ctx.setLineDash([u,g])),s===3?(this.ctx.lineCap="round",this.ctx.lineWidth=e):this.ctx.lineWidth=e*2+1.1,this.ctx.strokeStyle=R(A),this.ctx.stroke(),this.ctx.setLineDash([]),s===2){if(dA(o[0])){const f=o[3],m=o[0];this.ctx.beginPath(),this.pathCallbacks.formatPath([new U(f.end.x,f.end.y),new U(m.start.x,m.start.y)]),this.ctx.stroke()}if(dA(o[1])){const f=o[1],m=o[2];this.ctx.beginPath(),this.pathCallbacks.formatPath([new U(f.end.x,f.end.y),new U(m.start.x,m.start.y)]),this.ctx.stroke()}}this.ctx.restore()}}class Cf{constructor(A,e){this.activeEffects=[],this.ctx=A.ctx,this.pathCallback=e}applyEffects(A){for(;this.activeEffects.length;)this.popEffect();A.forEach(e=>this.applyEffect(e))}applyEffect(A){this.ctx.save(),nf(A)?this.ctx.globalAlpha=A.opacity:tf(A)?(this.ctx.translate(A.offsetX,A.offsetY),this.ctx.transform(A.matrix[0],A.matrix[1],A.matrix[2],A.matrix[3],A.matrix[4],A.matrix[5]),this.ctx.translate(-A.offsetX,-A.offsetY)):va(A)?(this.pathCallback.path(A.path),this.ctx.clip()):rf(A)&&A.applyClip(this.ctx),this.activeEffects.push(A)}popEffect(){this.activeEffects.pop(),this.ctx.restore()}getActiveEffectCount(){return this.activeEffects.length}hasActiveEffects(){return this.activeEffects.length>0}}const yf=["-apple-system","system-ui"],vf=/[\u2E80-\u2FFF\u3000-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF\uFF01-\uFFEF]/,es=n=>vf.test(n),bf=()=>{if(typeof navigator>"u")return null;const n=navigator.userAgent,A=/iPhone|iPad|iPod/.test(n),e=/Macintosh/.test(n)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>1;if(!A&&!e)return null;const t=[/(?:iPhone|CPU(?:\siPhone)?)\sOS\s(\d+)[\._](\d+)/,/Version\/(\d+)\.(\d+)/];for(const r of t){const s=n.match(r);if(s&&s[1])return parseInt(s[1],10)}return null},Qf=n=>{const A=bf();return A!==null&&A>=15&&A<17?n.map(e=>yf.indexOf(e)!==-1?'-apple-system, "Helvetica Neue", Arial, sans-serif':e):n};class xf{constructor(A){this.ctx=A.ctx,this.options=A.options}iterateLettersWithLetterSpacing(A,e,t,r,s){if(IA(r)){this.iterateVerticalGlyphs(A,e,t,r,s);return}const i=xe(A.text),o=A.bounds.top+t;let a=A.bounds.left;for(const l of i){if(es(l)){const c=this.ctx.textBaseline;this.ctx.textBaseline="ideographic",s(l,a,o),this.ctx.textBaseline=c}else s(l,a,o);a+=this.ctx.measureText(l).width+e}}iterateVerticalGlyphs(A,e,t,r,s){const i=xe(A.text);let o=A.bounds.top;for(const a of i){if(ep(r)||!es(a)&&a.trim().length>0)this.ctx.save(),this.ctx.translate(A.bounds.left+t,o),this.ctx.rotate(r===4?-Math.PI/2:Math.PI/2),s(a,0,0),this.ctx.restore();else{const l=this.ctx.textBaseline;es(a)&&(this.ctx.textBaseline="ideographic"),s(a,A.bounds.left,o+t),this.ctx.textBaseline=l}o+=this.ctx.measureText(a).width+e}}renderTextWithLetterSpacing(A,e,t,r=0){e===0&&!IA(r)?this.ctx.fillText(A.text,A.bounds.left,A.bounds.top+t):this.iterateLettersWithLetterSpacing(A,e,t,r,(s,i,o)=>{this.ctx.fillText(s,i,o)})}renderTextBoundWithPaintOrder(A,e,t){t.forEach(r=>{switch(r){case 0:this.ctx.fillStyle=R(e.color),this.renderTextWithLetterSpacing(A,e.letterSpacing,e.fontSize.number,e.writingMode);break;case 1:e.webkitTextStrokeWidth&&A.text.trim().length&&(this.ctx.strokeStyle=R(e.webkitTextStrokeColor),this.ctx.lineWidth=e.webkitTextStrokeWidth,this.ctx.lineJoin=typeof window<"u"&&window.chrome?"miter":"round",e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.strokeText(A.text,A.bounds.left,A.bounds.top+e.fontSize.number):this.iterateLettersWithLetterSpacing(A,e.letterSpacing,e.fontSize.number,e.writingMode,(s,i,o)=>this.ctx.strokeText(s,i,o)),this.ctx.strokeStyle="",this.ctx.lineWidth=0,this.ctx.lineJoin="miter");break}})}renderTextDecoration(A,e){this.ctx.fillStyle=R(e.textDecorationColor||e.color);let t=1;typeof e.textDecorationThickness=="number"?t=e.textDecorationThickness:e.textDecorationThickness==="from-font"&&(t=Math.max(1,Math.floor(e.fontSize.number*.05)));let r=0;typeof e.textUnderlineOffset=="number"&&(r=e.textUnderlineOffset);const s=e.textDecorationStyle;e.textDecorationLine.forEach(i=>{let o=0;switch(i){case 1:o=A.top+A.height-t+r;break;case 2:o=A.top;break;case 3:o=A.top+(A.height/2-t/2);break;default:return}this.drawDecorationLine(A.left,o,A.width,t,s)})}drawDecorationLine(A,e,t,r,s){switch(s){case 0:this.ctx.fillRect(A,e,t,r);break;case 1:const i=Math.max(1,r);this.ctx.fillRect(A,e,t,r),this.ctx.fillRect(A,e+r+i,t,r);break;case 2:this.ctx.save(),this.ctx.beginPath(),this.ctx.setLineDash([r,r*2]),this.ctx.lineWidth=r,this.ctx.strokeStyle=this.ctx.fillStyle,this.ctx.moveTo(A,e+r/2),this.ctx.lineTo(A+t,e+r/2),this.ctx.stroke(),this.ctx.restore();break;case 3:this.ctx.save(),this.ctx.beginPath(),this.ctx.setLineDash([r*3,r*2]),this.ctx.lineWidth=r,this.ctx.strokeStyle=this.ctx.fillStyle,this.ctx.moveTo(A,e+r/2),this.ctx.lineTo(A+t,e+r/2),this.ctx.stroke(),this.ctx.restore();break;case 4:this.ctx.save(),this.ctx.beginPath(),this.ctx.lineWidth=r,this.ctx.strokeStyle=this.ctx.fillStyle;const o=r*2,a=r*4;let l=A;for(this.ctx.moveTo(l,e+r/2);l<A+t;){const c=Math.min(l+a/2,A+t);if(this.ctx.quadraticCurveTo(l+a/4,e+r/2-o,c,e+r/2),l=c,l<A+t){const d=Math.min(l+a/2,A+t);this.ctx.quadraticCurveTo(l+a/4,e+r/2+o,d,e+r/2),l=d}}this.ctx.stroke(),this.ctx.restore();break;default:this.ctx.fillRect(A,e,t,r)}}truncateTextWithEllipsis(A,e,t){const r="…",s=this.ctx.measureText(r).width,i=xe(A);if(t===0){const o=c=>this.ctx.measureText(i.slice(0,c).join("")).width+s<=e;let a=0,l=i.length;for(;a<l;){const c=a+l+1>>1;o(c)?a=c:l=c-1}return i.slice(0,a).join("")+r}else{let o=s;const a=[];for(const l of i){const c=this.ctx.measureText(l).width;if(o+c>e)break;a.push(l),o+=c+t}return a.join("")+r}}createFontStyle(A){const e=A.fontVariant.filter(s=>s==="normal"||s==="small-caps").join(""),t=Qf(A.fontFamily).join(", "),r=EA(A.fontSize)?`${A.fontSize.number}${A.fontSize.unit}`:`${A.fontSize.number}px`;return[[A.fontStyle,e,A.fontWeight,r,t].join(" "),t,r]}async renderTextNode(A,e,t){const[r]=this.createFontStyle(e);this.ctx.font=r,this.ctx.direction=e.direction===1?"rtl":"ltr",this.ctx.textAlign="left",this.ctx.textBaseline="alphabetic";const s=e.paintOrder,i=e.fontSize.number*1.5;if(e.webkitLineClamp>0&&(e.display&2)!==0&&e.overflowY===1&&A.textBounds.length>0){const d=[];let h=[],u=A.textBounds[0].bounds.top;A.textBounds.forEach(B=>{Math.abs(B.bounds.top-u)>=i*.5?(h.length>0&&d.push(h),h=[B],u=B.bounds.top):h.push(B)}),h.length>0&&d.push(h);const g=e.webkitLineClamp;if(d.length>g){for(let f=0;f<g-1;f++)d[f].forEach(m=>{this.renderTextBoundWithPaintOrder(m,e,s)});const B=d[g-1];if(B&&B.length>0&&t){const f=B.map(y=>y.text).join(""),m=B[0],w=t.width-(m.bounds.left-t.left),v=this.truncateTextWithEllipsis(f,w,e.letterSpacing),C=new le(v,m.bounds);s.forEach(y=>{switch(y){case 0:this.ctx.fillStyle=R(e.color),e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.fillText(v,m.bounds.left,m.bounds.top+e.fontSize.number):this.iterateLettersWithLetterSpacing(C,e.letterSpacing,e.fontSize.number,e.writingMode,(Q,x,F)=>this.ctx.fillText(Q,x,F));break;case 1:e.webkitTextStrokeWidth&&v.trim().length&&(this.ctx.strokeStyle=R(e.webkitTextStrokeColor),this.ctx.lineWidth=e.webkitTextStrokeWidth,this.ctx.lineJoin=typeof window<"u"&&window.chrome?"miter":"round",e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.strokeText(v,m.bounds.left,m.bounds.top+e.fontSize.number):this.iterateLettersWithLetterSpacing(C,e.letterSpacing,e.fontSize.number,e.writingMode,(Q,x,F)=>this.ctx.strokeText(Q,x,F)),this.ctx.strokeStyle="",this.ctx.lineWidth=0,this.ctx.lineJoin="miter");break}})}return}}const a=e.textOverflow===1&&t&&e.overflowX===1&&A.textBounds.length>0;let l=!1,c="";if(a){const d=A.textBounds[0].bounds.top;if(A.textBounds.every(u=>Math.abs(u.bounds.top-d)<i*.5)){let u=A.textBounds.map(f=>f.text).join("");u=u.replace(/\s+/g," ").trim();const g=this.ctx.measureText(u).width,B=t.width;g>B&&(l=!0,c=this.truncateTextWithEllipsis(u,B,e.letterSpacing))}}if(l){const d=A.textBounds[0],h=new le(c,d.bounds);s.forEach(u=>{switch(u){case 0:{this.ctx.fillStyle=R(e.color),e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.fillText(c,d.bounds.left,d.bounds.top+e.fontSize.number):this.iterateLettersWithLetterSpacing(h,e.letterSpacing,e.fontSize.number,e.writingMode,(B,f,m)=>this.ctx.fillText(B,f,m));const g=e.textShadow;g.length&&c.trim().length&&(g.slice(0).reverse().forEach(B=>{this.ctx.shadowColor=R(B.color),this.ctx.shadowOffsetX=B.offsetX.number*this.options.scale,this.ctx.shadowOffsetY=B.offsetY.number*this.options.scale,this.ctx.shadowBlur=B.blur.number,e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.fillText(c,d.bounds.left,d.bounds.top+e.fontSize.number):this.iterateLettersWithLetterSpacing(h,e.letterSpacing,e.fontSize.number,e.writingMode,(f,m,w)=>this.ctx.fillText(f,m,w))}),this.ctx.shadowColor="",this.ctx.shadowOffsetX=0,this.ctx.shadowOffsetY=0,this.ctx.shadowBlur=0);break}case 1:e.webkitTextStrokeWidth&&c.trim().length&&(this.ctx.strokeStyle=R(e.webkitTextStrokeColor),this.ctx.lineWidth=e.webkitTextStrokeWidth,this.ctx.lineJoin=typeof window<"u"&&window.chrome?"miter":"round",e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.strokeText(c,d.bounds.left,d.bounds.top+e.fontSize.number):this.iterateLettersWithLetterSpacing(h,e.letterSpacing,e.fontSize.number,e.writingMode,(g,B,f)=>this.ctx.strokeText(g,B,f)),this.ctx.strokeStyle="",this.ctx.lineWidth=0,this.ctx.lineJoin="miter");break}});return}A.textBounds.forEach(d=>{s.forEach(h=>{switch(h){case 0:{this.ctx.fillStyle=R(e.color),this.renderTextWithLetterSpacing(d,e.letterSpacing,e.fontSize.number,e.writingMode);const u=e.textShadow;u.length&&d.text.trim().length&&(u.slice(0).reverse().forEach(g=>{this.ctx.shadowColor=R(g.color),this.ctx.shadowOffsetX=g.offsetX.number*this.options.scale,this.ctx.shadowOffsetY=g.offsetY.number*this.options.scale,this.ctx.shadowBlur=g.blur.number,this.renderTextWithLetterSpacing(d,e.letterSpacing,e.fontSize.number,e.writingMode)}),this.ctx.shadowColor="",this.ctx.shadowOffsetX=0,this.ctx.shadowOffsetY=0,this.ctx.shadowBlur=0),e.textDecorationLine.length&&this.renderTextDecoration(d.bounds,e);break}case 1:{if(e.webkitTextStrokeWidth&&d.text.trim().length){this.ctx.strokeStyle=R(e.webkitTextStrokeColor),this.ctx.lineWidth=e.webkitTextStrokeWidth,this.ctx.lineJoin=typeof window<"u"&&window.chrome?"miter":"round";const u=e.fontSize.number;e.letterSpacing===0&&!IA(e.writingMode)?this.ctx.strokeText(d.text,d.bounds.left,d.bounds.top+u):this.iterateLettersWithLetterSpacing(d,e.letterSpacing,u,e.writingMode,(g,B,f)=>this.ctx.strokeText(g,B,f)),this.ctx.strokeStyle="",this.ctx.lineWidth=0,this.ctx.lineJoin="miter"}break}}})})}}const Ef=1e4;class ts extends Sa{constructor(A,e){super(A,e),this.canvas=e.canvas?e.canvas:document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),e.canvas||(this.canvas.width=Math.floor(e.width*e.scale),this.canvas.height=Math.floor(e.height*e.scale),this.canvas.style.width=`${e.width}px`,this.canvas.style.height=`${e.height}px`),this.fontMetrics=new gf(document),this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-e.x,-e.y),this.ctx.textBaseline="bottom",e.imageSmoothing!==void 0&&(this.ctx.imageSmoothingEnabled=e.imageSmoothing),e.imageSmoothingQuality&&(this.ctx.imageSmoothingQuality=e.imageSmoothingQuality),this.backgroundRenderer=new pf({ctx:this.ctx,context:this.context,canvas:this.canvas,options:{width:e.width,height:e.height,scale:e.scale}}),this.borderRenderer=new mf({ctx:this.ctx},{path:t=>this.path(t),formatPath:t=>this.formatPath(t)}),this.effectsRenderer=new Cf({ctx:this.ctx},{path:t=>this.path(t)}),this.textRenderer=new xf({ctx:this.ctx,context:this.context,options:{scale:e.scale}}),this.context.logger.debug(`Canvas renderer initialized (${e.width}x${e.height}) with scale ${e.scale}`)}async renderStack(A){A.element.container.styles.isVisible()&&await this.renderStackContent(A)}async renderNode(A){_(A.container.flags,16),A.container.styles.isVisible()&&(await this.renderNodeBackgroundAndBorders(A),await this.renderNodeContent(A))}renderReplacedElement(A,e,t){const r=t.naturalWidth||A.intrinsicWidth,s=t.naturalHeight||A.intrinsicHeight;if(t&&r>0&&s>0){const i=gt(A),o=xn(e);this.path(o),this.ctx.save(),this.ctx.clip();let a=0,l=0,c=r,d=s,h=i.left,u=i.top,g=i.width,B=i.height;const{objectFit:f}=A.styles,m=g/B,w=c/d;if(f===2)w>m?(B=g/w,u+=(i.height-B)/2):(g=B*w,h+=(i.width-g)/2);else if(f===4)w>m?(c=d*m,a+=(r-c)/2):(d=c/m,l+=(s-d)/2);else if(f===8)c>g?(a+=(c-g)/2,c=g):(h+=(g-c)/2,g=c),d>B?(l+=(d-B)/2,d=B):(u+=(B-d)/2,B=d);else if(f===16){const v=w>m?g:B*w,C=c>g?c:g;v<C?w>m?(B=g/w,u+=(i.height-B)/2):(g=B*w,h+=(i.width-g)/2):(c>g?(a+=(c-g)/2,c=g):(h+=(g-c)/2,g=c),d>B?(l+=(d-B)/2,d=B):(u+=(B-d)/2,B=d))}this.ctx.drawImage(t,a,l,c,d,h,u,g,B),this.ctx.restore()}}async renderNodeContent(A){this.effectsRenderer.applyEffects(A.getEffects(4));const e=A.container,t=A.curves,r=e.styles,s=gt(e);for(const i of e.textNodes)await this.textRenderer.renderTextNode(i,r,s);if(e instanceof qo)try{const i=await this.context.cache.match(e.src),o=this.ctx.imageSmoothingEnabled;r.imageRendering===cA.PIXELATED||r.imageRendering===cA.CRISP_EDGES?(this.context.logger.debug(`Disabling image smoothing for ${e.src} due to CSS image-rendering: ${r.imageRendering===cA.PIXELATED?"pixelated":"crisp-edges"}`),this.ctx.imageSmoothingEnabled=!1):r.imageRendering===cA.SMOOTH&&(this.context.logger.debug(`Enabling image smoothing for ${e.src} due to CSS image-rendering: smooth`),this.ctx.imageSmoothingEnabled=!0),this.renderReplacedElement(e,t,i),this.ctx.imageSmoothingEnabled=o}catch{this.context.logger.error(`Error loading image ${e.src}`)}if(e instanceof $o&&this.renderReplacedElement(e,t,e.canvas),e instanceof Aa)try{const i=await this.context.cache.match(e.svg);this.renderReplacedElement(e,t,i)}catch{this.context.logger.error(`Error loading svg ${e.svg.substring(0,255)}`)}if(e instanceof sa&&e.tree){const o=await new ts(this.context,{scale:this.options.scale,backgroundColor:e.backgroundColor,x:0,y:0,width:e.width,height:e.height}).render(e.tree);e.width&&e.height&&this.ctx.drawImage(o,0,0,e.width,e.height,e.bounds.left,e.bounds.top,e.bounds.width,e.bounds.height)}if(e instanceof at){const i=Math.min(e.bounds.width,e.bounds.height);e.type===mn?e.checked&&(this.ctx.save(),this.path([new U(e.bounds.left+i*.39363,e.bounds.top+i*.79),new U(e.bounds.left+i*.16,e.bounds.top+i*.5549),new U(e.bounds.left+i*.27347,e.bounds.top+i*.44071),new U(e.bounds.left+i*.39694,e.bounds.top+i*.5649),new U(e.bounds.left+i*.72983,e.bounds.top+i*.23),new U(e.bounds.left+i*.84,e.bounds.top+i*.34085),new U(e.bounds.left+i*.39363,e.bounds.top+i*.79)]),this.ctx.fillStyle=R(ta),this.ctx.fill(),this.ctx.restore()):e.type===Cn&&e.checked&&(this.ctx.save(),this.ctx.beginPath(),this.ctx.arc(e.bounds.left+i/2,e.bounds.top+i/2,i/4,0,Math.PI*2,!0),this.ctx.fillStyle=R(ta),this.ctx.fill(),this.ctx.restore())}if(Uf(e)&&e.value.length){const[i,o,a]=this.textRenderer.createFontStyle(r),{baseline:l}=this.fontMetrics.getMetrics(o,a);this.ctx.font=i;const c=e instanceof at&&e.isPlaceholder;this.ctx.fillStyle=R(c?SB:r.color),this.ctx.textBaseline="alphabetic",this.ctx.textAlign=If(e.styles.textAlign);const d=gt(e);let h=0;switch(e.styles.textAlign){case 1:h+=d.width/2;break;case 2:h+=d.width;break}let u=0;if(e instanceof at){const B=S(r.fontSize,0);u=(d.height-B)/2}const g=d.add(h,u,0,0);this.ctx.save(),this.path([new U(d.left,d.top),new U(d.left+d.width,d.top),new U(d.left+d.width,d.top+d.height),new U(d.left,d.top+d.height)]),this.ctx.clip(),this.textRenderer.renderTextWithLetterSpacing(new le(e.value,g),r.letterSpacing,l,r.writingMode),this.ctx.restore(),this.ctx.textBaseline="alphabetic",this.ctx.textAlign="left"}if(_(e.styles.display,2048)){if(e.styles.listStyleImage!==null){const i=e.styles.listStyleImage;if(i.type===0){let o;const a=i.url;try{o=await this.context.cache.match(a),this.ctx.drawImage(o,e.bounds.left-(o.width+10),e.bounds.top)}catch{this.context.logger.error(`Error loading list-style-image ${a}`)}}}else if(A.listValue&&e.styles.listStyleType!==-1){const[i]=this.textRenderer.createFontStyle(r);this.ctx.font=i,this.ctx.fillStyle=R(r.color),this.ctx.textBaseline="middle",this.ctx.textAlign="right";const o=new rA(e.bounds.left,e.bounds.top+S(e.styles.paddingTop,e.bounds.width),e.bounds.width,So(r.lineHeight,r.fontSize.number)/2+1);this.textRenderer.renderTextWithLetterSpacing(new le(A.listValue,o),r.letterSpacing,So(r.lineHeight,r.fontSize.number)/2+2,r.writingMode),this.ctx.textBaseline="bottom",this.ctx.textAlign="left"}}}async renderStackContent(A){_(A.element.container.flags,16),await this.renderNodeBackgroundAndBorders(A.element);for(const e of A.negativeZIndex)await this.renderStack(e);await this.renderNodeContent(A.element);for(const e of A.nonInlineLevel)await this.renderNode(e);for(const e of A.nonPositionedFloats)await this.renderStack(e);for(const e of A.nonPositionedInlineLevel)await this.renderStack(e);for(const e of A.inlineLevel)await this.renderNode(e);for(const e of A.zeroOrAutoZIndexOrTransformedOrOpacity)await this.renderStack(e);for(const e of A.positiveZIndex)await this.renderStack(e)}mask(A){this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.lineTo(this.options.width,0),this.ctx.lineTo(this.options.width,this.options.height),this.ctx.lineTo(0,this.options.height),this.ctx.lineTo(0,0),this.formatPath(A.slice(0).reverse()),this.ctx.closePath()}path(A){this.ctx.beginPath(),this.formatPath(A),this.ctx.closePath()}formatPath(A){A.forEach((e,t)=>{const r=dA(e)?e.start:e;t===0?this.ctx.moveTo(r.x,r.y):this.ctx.lineTo(r.x,r.y),dA(e)&&this.ctx.bezierCurveTo(e.startControl.x,e.startControl.y,e.endControl.x,e.endControl.y,e.end.x,e.end.y)})}async renderNodeBackgroundAndBorders(A){this.effectsRenderer.applyEffects(A.getEffects(2));const e=A.container.styles,t=!zA(e.backgroundColor)||e.backgroundImage.length,r=[{style:e.borderTopStyle,color:e.borderTopColor,width:e.borderTopWidth},{style:e.borderRightStyle,color:e.borderRightColor,width:e.borderRightWidth},{style:e.borderBottomStyle,color:e.borderBottomColor,width:e.borderBottomWidth},{style:e.borderLeftStyle,color:e.borderLeftColor,width:e.borderLeftWidth}],s=Ff(Se(e.backgroundClip,0),A.curves);(t||e.boxShadow.length)&&(this.ctx.save(),this.path(s),this.ctx.clip(),zA(e.backgroundColor)||(this.ctx.fillStyle=R(e.backgroundColor),this.ctx.fill()),await this.backgroundRenderer.renderBackgroundImage(A.container),this.ctx.restore(),e.boxShadow.slice(0).reverse().forEach(o=>{this.ctx.save();const a=Qn(A.curves),l=o.inset?0:Ef,c=sf(a,-l+(o.inset?1:-1)*o.spread.number,(o.inset?1:-1)*o.spread.number,o.spread.number*(o.inset?-2:2),o.spread.number*(o.inset?-2:2));o.inset?(this.path(a),this.ctx.clip(),this.mask(c)):(this.mask(a),this.ctx.clip(),this.path(c)),this.ctx.shadowOffsetX=o.offsetX.number+l,this.ctx.shadowOffsetY=o.offsetY.number,this.ctx.shadowColor=R(o.color),this.ctx.shadowBlur=o.blur.number,this.ctx.fillStyle=o.inset?R(o.color):"rgba(0,0,0,1)",this.ctx.fill(),this.ctx.restore()}));let i=0;for(const o of r)o.style!==0&&!zA(o.color)&&o.width>0&&(o.style===2?await this.borderRenderer.renderDashedDottedBorder(o.color,o.width,i,A.curves,2):o.style===3?await this.borderRenderer.renderDashedDottedBorder(o.color,o.width,i,A.curves,3):o.style===4?await this.borderRenderer.renderDoubleBorder(o.color,o.width,i,A.curves):await this.borderRenderer.renderSolidBorder(o.color,i,A.curves)),i++}async render(A){this.options.backgroundColor&&(this.ctx.fillStyle=R(this.options.backgroundColor),this.ctx.fillRect(this.options.x,this.options.y,this.options.width,this.options.height));const e=af(A);return await this.renderStack(e),this.effectsRenderer.applyEffects([]),this.canvas}}const Uf=n=>n instanceof ra||n instanceof na?!0:n instanceof at&&n.type!==Cn&&n.type!==mn,Ff=(n,A)=>{switch(n){case 0:return Qn(A);case 2:return Af(A);case 1:default:return xn(A)}},If=n=>{switch(n){case 1:return"center";case 2:return"right";case 0:default:return"left"}};class Sf extends Sa{constructor(A,e){super(A,e),this.canvas=e.canvas?e.canvas:document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.options=e,this.canvas.width=Math.floor(e.width*e.scale),this.canvas.height=Math.floor(e.height*e.scale),this.canvas.style.width=`${e.width}px`,this.canvas.style.height=`${e.height}px`,this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-e.x,-e.y),this.context.logger.debug(`EXPERIMENTAL ForeignObject renderer initialized (${e.width}x${e.height} at ${e.x},${e.y}) with scale ${e.scale}`)}async render(A){const e=Vr(this.options.width*this.options.scale,this.options.height*this.options.scale,this.options.scale,this.options.scale,A),t=await Hf(e);return this.options.backgroundColor&&(this.ctx.fillStyle=R(this.options.backgroundColor),this.ctx.fillRect(0,0,this.options.width*this.options.scale,this.options.height*this.options.scale)),this.ctx.drawImage(t,-this.options.x*this.options.scale,-this.options.y*this.options.scale),this.canvas}}const Hf=n=>new Promise((A,e)=>{const t=new Image;t.onload=()=>{A(t)},t.onerror=e,t.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(n))}`});class La{constructor({id:A,enabled:e}){this.id=A,this.enabled=e,this.start=Date.now()}debug(...A){this.enabled&&(typeof window<"u"&&window.console&&typeof console.debug=="function"||this.info(...A))}getTime(){return Date.now()-this.start}info(...A){this.enabled&&typeof window<"u"&&window.console}warn(...A){this.enabled&&(typeof window<"u"&&window.console&&typeof console.warn=="function"||this.info(...A))}error(...A){this.enabled&&(typeof window<"u"&&window.console&&typeof console.error=="function"||this.info(...A))}}La.instances={};class Lf{constructor(A,e){if(this.context=A,this._options=e,this._cache=new Map,this._pendingOperations=new Map,this.maxSize=e.maxCacheSize??100,this.maxSize<1)throw new Error("Cache maxSize must be at least 1");this.maxSize>1e4&&this.context.logger.warn(`Cache maxSize ${this.maxSize} is very large and may cause memory issues. Consider using a smaller value (recommended: 100-1000).`)}addImage(A){const e=this._pendingOperations.get(A);if(e)return e;if(this.has(A)){const t=this._cache.get(A);return t&&(t.lastAccessed=Date.now()),Promise.resolve()}if(rs(A)||Df(A)){const t=this._addImageInternal(A);return this._pendingOperations.set(A,t),t.finally(()=>{this._pendingOperations.delete(A)}),t}return Promise.resolve()}async _addImageInternal(A){const e=this._options.imageTimeout??15e3,t=new Promise((s,i)=>{setTimeout(()=>{i(new Error(`Image load timeout after ${e}ms: ${A}`))},e)}),r=Promise.race([this.loadImage(A),t]);r.catch(s=>{this.context.logger.error(`Failed to load image ${A}: ${s instanceof Error?s.message:"Unknown error"}`)}),this.set(A,r)}match(A){const e=this._cache.get(A);if(e)return e.lastAccessed=Date.now(),e.value}set(A,e){if(this._cache.has(A)){const t=this._cache.get(A);t.value=e,t.lastAccessed=Date.now();return}this._cache.size>=this.maxSize&&this.evictLRU(),this._cache.set(A,{value:e,lastAccessed:Date.now()})}evictLRU(){let A=null,e=1/0;for(const[t,r]of this._cache.entries())r.lastAccessed<e&&(e=r.lastAccessed,A=t);A&&(this._cache.delete(A),this.context.logger.debug(`Cache: Evicted LRU entry: ${A}`))}size(){return this._cache.size}getMaxSize(){return this.maxSize}clear(){this._cache.clear()}async loadImage(A){const e=this.context.originChecker,t=a=>e.isSameOrigin(a),r=typeof this._options.customIsSameOrigin=="function"?await this._options.customIsSameOrigin(A,t):t(A),s=!ns(A)&&this._options.useCORS===!0&&nA.SUPPORT_CORS_IMAGES&&!r,i=!ns(A)&&!r&&!rs(A)&&typeof this._options.proxy=="string"&&nA.SUPPORT_CORS_XHR&&!s;if(!r&&this._options.allowTaint===!1&&!ns(A)&&!rs(A)&&!i&&!s)return;let o=A;return i&&(o=await this.proxy(o)),this.context.logger.debug(`Added image ${A.substring(0,256)}`),await new Promise((a,l)=>{const c=new Image;c.onload=()=>a(c),c.onerror=l,(Pf(o)||s)&&(c.crossOrigin="anonymous"),c.src=o,c.complete===!0&&setTimeout(()=>a(c),500),this._options.imageTimeout>0&&setTimeout(()=>l(`Timed out (${this._options.imageTimeout}ms) loading image`),this._options.imageTimeout)})}has(A){return this._cache.has(A)}keys(){return Promise.resolve(Object.keys(this._cache))}proxy(A){const e=this._options.proxy;if(!e)throw new Error("No proxy defined");const t=A.substring(0,256);return new Promise((r,s)=>{const i=nA.SUPPORT_RESPONSE_TYPE?"blob":"text",o=new XMLHttpRequest;o.onload=()=>{if(o.status===200)if(i==="text")r(o.response);else{const l=new FileReader;l.addEventListener("load",()=>r(l.result),!1),l.addEventListener("error",c=>s(c),!1),l.readAsDataURL(o.response)}else s(`Failed to proxy resource ${t} with status code ${o.status}`)},o.onerror=s;const a=e.indexOf("?")>-1?"&":"?";if(o.open("GET",`${e}${a}url=${encodeURIComponent(A)}&responseType=${i}`),i!=="text"&&o instanceof XMLHttpRequest&&(o.responseType=i),this._options.imageTimeout){const l=this._options.imageTimeout;o.timeout=l,o.ontimeout=()=>s(`Timed out (${l}ms) proxying ${t}`)}o.send()})}}const Tf=/^data:image\/svg\+xml/i,Mf=/^data:image\/.*;base64,/i,kf=/^data:image\/.*/i,Df=n=>nA.SUPPORT_SVG_DRAWING||!Kf(n),ns=n=>kf.test(n),Pf=n=>Mf.test(n),rs=n=>n.substr(0,4)==="blob",Kf=n=>n.substr(-3).toLowerCase()==="svg"||Tf.test(n);class Nf{constructor(A){if(!A||!A.document)throw new Error("Valid window object required for OriginChecker");if(!A.location||!A.location.href)throw new Error("Window object must have valid location");this.link=A.document.createElement("a"),this.origin=this.getOrigin(A.location.href)}getOrigin(A){return this.link.href=A,this.link.href=this.link.href,this.link.protocol+this.link.hostname+this.link.port}isSameOrigin(A){return this.getOrigin(A)===this.origin}getContextOrigin(){return this.origin}}class In{constructor(A,e,t){this.windowBounds=e,this.instanceName=`#${In.instanceCount++}`,this.config=t,this.logger=new La({id:this.instanceName,enabled:A.logging}),this.originChecker=new Nf(t.window),this.cache=A.cache??t.cache??new Lf(this,A)}}In.instanceCount=1;class He{constructor(A={}){if(this.window=A.window||(typeof window<"u"?window:null),!this.window)throw new Error("Window object is required but not available");this.cspNonce=A.cspNonce,this.cache=A.cache}static fromElement(A,e={}){const t=A.ownerDocument;if(!t)throw new Error("Element is not attached to a document");const r=t.defaultView;if(!r)throw new Error("Document is not attached to a window");return new He({window:r,...e})}clone(A={}){return new He({window:A.window||this.window,cspNonce:A.cspNonce??this.cspNonce,cache:A.cache??this.cache})}}function $f(n){}class Ta{constructor(A={}){this.config={maxImageTimeout:3e5,allowDataUrls:!0,...A}}validateUrl(A,e="general"){if(!A||typeof A!="string")return{valid:!1,error:"URL must be a non-empty string"};if(A.startsWith("data:"))return this.config.allowDataUrls?{valid:!0,sanitized:A}:{valid:!1,error:"Data URLs are not allowed"};if(A.startsWith("blob:"))return{valid:!0,sanitized:A};try{const t=new URL(A);if(!["http:","https:"].includes(t.protocol))return{valid:!1,error:`Protocol ${t.protocol} is not allowed. Only http and https are permitted.`};if(e==="proxy"&&this.config.allowedProxyDomains&&this.config.allowedProxyDomains.length>0){const r=t.hostname.toLowerCase();if(!this.config.allowedProxyDomains.some(i=>{const o=i.toLowerCase();return r===o||r.endsWith("."+o)}))return{valid:!1,error:`Proxy domain ${t.hostname} is not in the allowed list`}}if(e==="proxy"){if(!this.config.allowLocalhostProxy){const r=t.hostname.toLowerCase();if(r==="localhost"||r==="127.0.0.1"||r==="::1")return{valid:!1,error:"Localhost is not allowed for proxy URLs"};if(this.isPrivateIP(r))return{valid:!1,error:"Private IP addresses are not allowed for proxy URLs"};if(r.startsWith("169.254.")||r.startsWith("fe80:"))return{valid:!1,error:"Link-local addresses are not allowed for proxy URLs"}}return{valid:!0,sanitized:A,requiresRuntimeCheck:!0}}return{valid:!0,sanitized:A}}catch(t){return{valid:!1,error:`Invalid URL format: ${t instanceof Error?t.message:"Unknown error"}`}}}isPrivateIP(A){return[/^0\./,/^10\./,/^100\.(6[4-9]|[7-9][0-9]|1[0-1][0-9]|12[0-7])\./,/^127\./,/^169\.254\./,/^172\.(1[6-9]|2[0-9]|3[0-1])\./,/^192\.0\.0\./,/^192\.0\.2\./,/^192\.168\./,/^198\.(1[8-9])\./,/^198\.51\.100\./,/^203\.0\.113\./,/^2(2[4-9]|3[0-9])\./,/^24[0-9]\./,/^255\.255\.255\.255$/].some(t=>t.test(A))?!0:A.includes(":")?this.isPrivateIPv6(A):!1}isPrivateIPv6(A){const r=A.toLowerCase().trim().replace(/^\[|\]$/g,"").split("%")[0];if(/^(0:){7}1$/.test(r)||r==="::1"||/^(0:){7}0$/.test(r)||r==="::")return!0;const s=this.expandIPv6(r);if(!s)return this.isPrivateIPv6Prefix(r);const i=parseInt(s.substring(0,2),16);if(i>=252&&i<=253)return!0;if(i===254){const o=parseInt(s.substring(2,4),16);if(o>=128&&o<=191)return!0}return i===255}expandIPv6(A){try{if(A.includes("::")){const e=A.split("::");if(e.length>2)return null;const t=e[0]?e[0].split(":"):[],r=e[1]?e[1].split(":"):[],s=8-t.length-r.length;if(s<0)return null;const i=Array(s).fill("0000");return[...t,...i,...r].map(a=>a.padStart(4,"0")).join(":")}else{const e=A.split(":");return e.length!==8?null:e.map(t=>t.padStart(4,"0")).join(":")}}catch{return null}}isPrivateIPv6Prefix(A){return!!(/^fc[0-9a-f]{0,2}:?/i.test(A)||/^fd[0-9a-f]{0,2}:?/i.test(A)||/^fe[89ab][0-9a-f]:?/i.test(A)||/^ff[0-9a-f]{0,2}:?/i.test(A))}validateCspNonce(A){return!A||typeof A!="string"?{valid:!1,error:"CSP nonce must be a non-empty string"}:A.length<16?{valid:!1,error:"CSP nonce is too short (minimum 16 characters recommended)"}:/^[A-Za-z0-9+/=_-]+$/.test(A)?{valid:!0,sanitized:A}:{valid:!1,error:"CSP nonce contains invalid characters"}}validateImageTimeout(A){return typeof A!="number"||isNaN(A)?{valid:!1,error:"Image timeout must be a number"}:A<0?{valid:!1,error:"Image timeout cannot be negative"}:this.config.maxImageTimeout&&A>this.config.maxImageTimeout?{valid:!1,error:`Image timeout ${A}ms exceeds maximum allowed ${this.config.maxImageTimeout}ms`}:{valid:!0,sanitized:A}}validateDimensions(A,e){if(typeof A!="number"||typeof e!="number")return{valid:!1,error:"Dimensions must be numbers"};if(isNaN(A)||isNaN(e))return{valid:!1,error:"Dimensions cannot be NaN"};if(A<=0||e<=0)return{valid:!1,error:"Dimensions must be positive"};const t=32767;return A>t||e>t?{valid:!1,error:`Dimensions exceed maximum allowed (${t}px)`}:{valid:!0,sanitized:{width:A,height:e}}}validateScale(A){return typeof A!="number"||isNaN(A)?{valid:!1,error:"Scale must be a number"}:A<=0?{valid:!1,error:"Scale must be positive"}:A>10?{valid:!1,error:"Scale factor too large (maximum 10x)"}:{valid:!0,sanitized:A}}validateElement(A){return A?typeof A!="object"?{valid:!1,error:"Element must be an object"}:typeof HTMLElement<"u"&&A instanceof HTMLElement?A.ownerDocument?{valid:!0}:{valid:!1,error:"Element must be attached to a document"}:A.ownerDocument?A.ownerDocument.defaultView?{valid:!0}:{valid:!1,error:"Document must be attached to a window (ownerDocument.defaultView required)"}:{valid:!1,error:"Element must be attached to a document (ownerDocument required)"}:{valid:!1,error:"Element is required"}}validateOptions(A){const e=[],t=A.proxy;if(t!=null&&typeof t=="string"&&t.length>0){const r=this.validateUrl(t,"proxy");r.valid||e.push(`Proxy: ${r.error}`)}if(A.imageTimeout!==void 0){const r=this.validateImageTimeout(A.imageTimeout);r.valid||e.push(`Image timeout: ${r.error}`)}if(A.width!==void 0||A.height!==void 0){const r=A.width??800,s=A.height??600,i=this.validateDimensions(r,s);i.valid||e.push(`Dimensions: ${i.error}`)}if(A.scale!==void 0){const r=this.validateScale(A.scale);r.valid||e.push(`Scale: ${r.error}`)}if(A.cspNonce!==void 0){const r=this.validateCspNonce(A.cspNonce);r.valid||e.push(`CSP nonce: ${r.error}`)}if(this.config.customValidator){const r=this.config.customValidator(A,"options");r.valid||e.push(`Custom validation: ${r.error}`)}return e.length>0?{valid:!1,error:e.join("; ")}:{valid:!0}}}function Ma(n={}){return new Ta({allowDataUrls:!0,maxImageTimeout:3e5,...n})}class ka{constructor(A,e=!0){this.context=A,this.activeMetrics=new Map,this.completedMetrics=[],this.enabled=e,this.getTime=typeof performance<"u"&&typeof performance.now=="function"?()=>performance.now():()=>Date.now()}start(A,e){var t;this.enabled&&(this.activeMetrics.has(A)&&((t=this.context)==null||t.logger.warn(`Performance metric '${A}' already started. Overwriting.`)),this.activeMetrics.set(A,{name:A,startTime:this.getTime(),metadata:e}))}end(A){var t,r;if(!this.enabled)return;const e=this.activeMetrics.get(A);if(!e){(t=this.context)==null||t.logger.warn(`Performance metric '${A}' not found. Was start() called?`);return}return e.endTime=this.getTime(),e.duration=e.endTime-e.startTime,this.completedMetrics.push(e),this.activeMetrics.delete(A),(r=this.context)==null||r.logger.debug(`⏱️ ${A}: ${e.duration.toFixed(2)}ms`,e.metadata),e}measure(A,e,t){this.start(A,t);try{const r=e();return this.end(A),r}catch(r){throw this.end(A),r}}async measureAsync(A,e,t){this.start(A,t);try{const r=await e();return this.end(A),r}catch(r){throw this.end(A),r}}getMetrics(){return[...this.completedMetrics]}getMetric(A){return this.completedMetrics.find(e=>e.name===A)}getSummary(){const A=this.completedMetrics.reduce((t,r)=>t+(r.duration||0),0),e=this.completedMetrics.map(t=>({name:t.name,duration:t.duration||0,percentage:A>0?((t.duration||0)/A*100).toFixed(1)+"%":"0%"}));return{totalDuration:A,metrics:this.getMetrics(),breakdown:e}}logSummary(){if(!this.enabled||this.completedMetrics.length===0||!this.context)return;const A=this.getSummary();this.context.logger.info(`
|
|
3031
|
+
📊 Performance Summary (Total: ${A.totalDuration.toFixed(2)}ms):`),A.breakdown.sort((e,t)=>t.duration-e.duration).forEach(e=>{this.context.logger.info(` ${e.name.padEnd(20)} ${e.duration.toFixed(2).padStart(8)}ms ${e.percentage.padStart(6)}`)})}clear(){this.activeMetrics.clear(),this.completedMetrics.splice(0)}isEnabled(){return this.enabled}getActiveMetrics(){return Array.from(this.activeMetrics.keys())}}const ss=(n,A={},e)=>{const t=e||He.fromElement(n,{cspNonce:A.cspNonce,cache:A.cache});return Rf(n,A,t)},Da=n=>{typeof window<"u"&&(new He({window,cspNonce:n}),void 0)};ss.setCspNonce=Da;const Of=n=>{["scale","width","height","imageTimeout","x","y","windowWidth","windowHeight","scrollX","scrollY"].forEach(e=>{const t=n[e];if(t!=null&&typeof t!="number"){const r=Number(t);Number.isNaN(r)||(n[e]=r)}})},Rf=async(n,A,e)=>{if(Of(A),!A.skipValidation){const M=A.validator||Ma(),Z=M.validateElement(n);if(!Z.valid)throw new Error(Z.error);const T=M.validateOptions(A);if(!T.valid)throw new Error(`Invalid options: ${T.error}`)}if(!n||typeof n!="object")throw new Error("Invalid element provided as first argument");const t=n.ownerDocument;if(!t)throw new Error("Element is not attached to a Document");const r=t.defaultView;if(!r)throw new Error("Document is not attached to a Window");const s={allowTaint:A.allowTaint??!1,imageTimeout:A.imageTimeout??15e3,proxy:A.proxy,useCORS:A.useCORS??!1,customIsSameOrigin:A.customIsSameOrigin},i={logging:A.logging??!0,cache:A.cache??e.cache,...s},o=800,a=600,l=0,c=r,d={windowWidth:A.windowWidth??c.innerWidth??o,windowHeight:A.windowHeight??c.innerHeight??a,scrollX:A.scrollX??c.pageXOffset??l,scrollY:A.scrollY??c.pageYOffset??l},h=new rA(d.scrollX,d.scrollY,d.windowWidth,d.windowHeight),u=new In(i,h,e),g=A.enablePerformanceMonitoring??A.logging??!1,B=new ka(u,g);B.start("total",{width:d.windowWidth,height:d.windowHeight});const f=A.foreignObjectRendering??!1,m={allowTaint:A.allowTaint??!1,onclone:A.onclone,ignoreElements:A.ignoreElements,iframeContainer:A.iframeContainer,inlineImages:f,copyStyles:f,cspNonce:A.cspNonce??e.cspNonce};u.logger.debug(`Starting document clone with size ${h.width}x${h.height} scrolled to ${-h.left},${-h.top}`),B.start("clone");const w=new ma(u,n,m),v=w.clonedReferenceElement;if(!v)throw new Error("Unable to find element in cloned iframe");const C=await w.toIFrame(t,h);B.end("clone");const{width:y,height:Q,left:x,top:F}=Yr(v)||kB(v)?Ad(v.ownerDocument):Mt(u,v),I=Gf(u,v,A.backgroundColor),L={canvas:A.canvas,backgroundColor:I,scale:A.scale??r.devicePixelRatio??1,x:(A.x??0)+x,y:(A.y??0)+F,width:A.width??Math.ceil(y),height:A.height??Math.ceil(Q),imageSmoothing:A.imageSmoothing,imageSmoothingQuality:A.imageSmoothingQuality};let O,K;try{return f?(u.logger.debug("Document cloned, using foreign object rendering"),B.start("render-foreignobject"),O=await new Sf(u,L).render(v),B.end("render-foreignobject")):(u.logger.debug(`Document cloned, element located at ${x},${F} with size ${y}x${Q} using computed rendering`),u.logger.debug("Starting DOM parsing"),B.start("parse"),K=oa(u,v),B.end("parse"),I===K.styles.backgroundColor&&(K.styles.backgroundColor=FA.TRANSPARENT),u.logger.debug(`Starting renderer for element at ${L.x},${L.y} with size ${L.width}x${L.height}`),B.start("render"),O=await new ts(u,L).render(K),B.end("render")),B.start("cleanup"),(A.removeContainer??!0)&&(ma.destroy(C)||u.logger.error("Cannot detach cloned iframe as it is not in the DOM anymore")),B.end("cleanup"),B.end("total"),u.logger.debug("Finished rendering"),g&&B.logSummary(),O}finally{K&&K.restoreTree()}},Gf=(n,A,e)=>{const t=A.ownerDocument,r=t.documentElement?ve(n,getComputedStyle(t.documentElement).backgroundColor):FA.TRANSPARENT,s=t.body?ve(n,getComputedStyle(t.body).backgroundColor):FA.TRANSPARENT,i=typeof e=="string"?ve(n,e):e===null?FA.TRANSPARENT:4294967295;return A===t.documentElement?zA(r)?zA(s)?i:s:r:i},Vf=Object.freeze(Object.defineProperty({__proto__:null,Html2CanvasConfig:He,get IMAGE_RENDERING(){return cA},PerformanceMonitor:ka,Validator:Ta,createDefaultValidator:Ma,default:ss,html2canvas:ss,setCspNonce:Da},Symbol.toStringTag,{value:"Module"}))})();
|