vibefortress 0.1.32 → 0.1.52

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/dist/panel.html CHANGED
@@ -112,7 +112,7 @@ Boolean requesting whether a visible border and background is provided by the ho
112
112
  - omitted: host decides border`)}),z({method:W(`ui/request-display-mode`),params:z({mode:Dg.describe(`The display mode being requested.`)})});var Wg=z({mode:Dg.describe(`The display mode that was actually set. May differ from requested if not supported.`)}).passthrough(),Gg=V([W(`model`),W(`app`)]).describe(`Tool visibility scope - who can access the tool.`);z({resourceUri:P().optional(),visibility:R(Gg).optional().describe(`Who can access this tool. Default: ["model", "app"]
113
113
  - "model": Tool visible to and callable by the agent
114
114
  - "app": Tool callable by the app from this server only`),csp:yl().optional(),permissions:yl().optional()}),z({mimeTypes:R(P()).optional().describe('Array of supported MIME types for UI resources.\nMust include `"text/html;profile=mcp-app"` for MCP Apps support.')}),z({method:W(`ui/download-file`),params:z({contents:R(V([Hd,Ud])).describe(`Resource contents to download — embedded (inline data) or linked (host fetches). Uses standard MCP resource types.`)})}),z({method:W(`ui/message`),params:z({role:W(`user`).describe(`Message role, currently only "user" is supported.`),content:R(Wd).describe(`Message content blocks (text, image, etc.).`)})}),z({method:W(`ui/notifications/sandbox-resource-ready`),params:z({html:P().describe(`HTML content to load into the inner iframe.`),sandbox:P().optional().describe(`Optional override for the inner iframe's sandbox attribute.`),csp:Mg.optional().describe(`CSP configuration from resource metadata.`),permissions:Ng.optional().describe(`Sandbox permissions from resource metadata.`)})});var Kg=z({method:W(`ui/notifications/tool-result`),params:$d.describe(`Standard MCP tool execution result.`)}),qg=z({toolInfo:z({id:Ou.optional().describe(`JSON-RPC id of the tools/call request.`),tool:Xd.describe(`Tool definition including name, inputSchema, etc.`)}).optional().describe(`Metadata of the tool call that instantiated this App.`),theme:Eg.optional().describe(`Current color theme preference.`),styles:Rg.optional().describe(`Style configuration for theming the app.`),displayMode:Dg.optional().describe(`How the UI is currently displayed.`),availableDisplayModes:R(Dg).optional().describe(`Display modes the host supports.`),containerDimensions:V([z({height:F().describe(`Fixed container height in pixels.`)}),z({maxHeight:V([F(),fl()]).optional().describe(`Maximum container height in pixels.`)})]).and(V([z({width:F().describe(`Fixed container width in pixels.`)}),z({maxWidth:V([F(),fl()]).optional().describe(`Maximum container width in pixels.`)})])).optional().describe(`Container dimensions. Represents the dimensions of the iframe or other
115
- container holding the app. Specify either width or maxWidth, and either height or maxHeight.`),locale:P().optional().describe(`User's language and region preference in BCP 47 format.`),timeZone:P().optional().describe(`User's timezone in IANA format.`),userAgent:P().optional().describe(`Host application identifier.`),platform:V([W(`web`),W(`desktop`),W(`mobile`)]).optional().describe(`Platform type for responsive design decisions.`),deviceCapabilities:z({touch:I().optional().describe(`Whether the device supports touch input.`),hover:I().optional().describe(`Whether the device supports hover interactions.`)}).optional().describe(`Device input capabilities.`),safeAreaInsets:z({top:F().describe(`Top safe area inset in pixels.`),right:F().describe(`Right safe area inset in pixels.`),bottom:F().describe(`Bottom safe area inset in pixels.`),left:F().describe(`Left safe area inset in pixels.`)}).optional().describe(`Mobile safe area boundaries in pixels.`)}).passthrough(),Jg=z({method:W(`ui/notifications/host-context-changed`),params:qg.describe(`Partial context update containing only changed fields.`)});z({method:W(`ui/update-model-context`),params:z({content:R(Wd).optional().describe(`Context content blocks (text, image, etc.).`),structuredContent:H(P(),L().describe(`Structured content for machine-readable context data.`)).optional().describe(`Structured content for machine-readable context data.`)})}),z({method:W(`ui/initialize`),params:z({appInfo:Vu.describe(`App identification (name and version).`),appCapabilities:Ug.describe(`Features and capabilities this app provides.`),protocolVersion:P().describe(`Protocol version this app supports.`)})});var Yg=z({protocolVersion:P().describe(`Negotiated protocol version string (e.g., "2025-11-21").`),hostInfo:Vu.describe(`Host application identification and version.`),hostCapabilities:Hg.describe(`Features and capabilities provided by the host.`),hostContext:qg.describe(`Rich context about the host environment.`)}).passthrough(),Xg={target:`draft-2020-12`};async function Zg(e,t){let n=e[`~standard`];if(n.jsonSchema)return n.jsonSchema[t](Xg);throw Error(`Schema (vendor: ${n.vendor}) does not implement Standard JSON Schema (~standard.jsonSchema). Use a library that does (zod v4, ArkType, Valibot) or wrap your schema accordingly.`)}async function Qg(e,t,n=``){let r=await e[`~standard`].validate(t);if(r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `);throw Error(n+e)}return r.value}function $g(e,t){let n={...e,...t};return t.experimental!==void 0&&(n.experimental={...e.experimental,...t.experimental}),t.tools!==void 0&&(n.tools={...e.tools,...t.tools}),n}var e_=class e extends eg{_appInfo;_appCapabilities;options;_hostCapabilities;_hostInfo;_hostContext;_registeredTools={};_initializedSent=!1;_registeredEvents=new Set;_events=new yg;_methods=new bg;setRequestHandler=(...e)=>{let[t,...n]=Sg(`request`,e)??e;this._methods.claim(t,`setRequestHandler`),super.setRequestHandler.call(this,t,...n)};setNotificationHandler=(...e)=>{let[t,...n]=Sg(`notification`,e)??e;this._methods.claim(t,`setNotificationHandler`),super.setNotificationHandler.call(this,t,...n)};removeRequestHandler=e=>{this._methods.release(e),super.removeRequestHandler(e)};removeNotificationHandler=e=>{this._methods.release(e),super.removeNotificationHandler(e)};replaceRequestHandler=(e,...t)=>{this._methods.replace(e),super.setRequestHandler.call(this,e,...t)};_assertInitialized(e){if(this._initializedSent)return;let t=`[ext-apps] App.${e}() called before connect() completed the ui/initialize handshake. Await app.connect() before calling this method, or move data loading to an ontoolresult handler.`;if(this.options?.strict)throw Error(t);console.warn(`${t}. This will throw in a future release.`)}eventSchemas={toolinput:Pg,toolinputpartial:Fg,toolresult:Kg,toolcancelled:Ig,hostcontextchanged:Jg};static ONE_SHOT_EVENTS=new Set([`toolinput`,`toolinputpartial`,`toolresult`,`toolcancelled`]);_everHadListener=new Set;_assertHandlerTiming(t){if(!e.ONE_SHOT_EVENTS.has(t)||this._everHadListener.has(t)||(this._everHadListener.add(t),!this._initializedSent))return;let n=`[ext-apps] "${String(t)}" handler registered after connect() completed the ui/initialize handshake. The host may have already sent this notification. Register handlers before calling app.connect().`;if(this.options?.strict)throw Error(n);console.warn(n)}setEventHandler(e,t){t&&this._assertHandlerTiming(e),this._ensureEventSlot(e),this._events.setHandler(e,t)}addEventListener(e,t){this._assertHandlerTiming(e),this._ensureEventSlot(e),this._events.addEventListener(e,t)}removeEventListener(e,t){this._events.removeEventListener(e,t)}_ensureEventSlot(e){if(this._registeredEvents.has(e))return;let t=this.eventSchemas[e];if(!t)throw Error(`Unknown event: ${String(e)}`);this.setNotificationHandler(t.shape.method.value,{params:t.shape.params},t=>{let n=t;e===`hostcontextchanged`&&(this._hostContext={...this._hostContext,...n}),this._events.dispatch(e,n)}),this._registeredEvents.add(e)}getEventHandler(e){return this._events.getHandler(e)}warnIfRequestHandlerReplaced(e,t,n){t&&n&&console.warn(`[MCP Apps] ${e} handler replaced. Previous handler will no longer be called.`)}constructor(e,t={},n={autoResize:!0}){super(n),this._appInfo=e,this._appCapabilities=t,this.options=n,this._methods.replace(`notifications/cancelled`),this._methods.replace(`notifications/progress`),n.allowUnsafeEval||nn({jitless:!0}),this.replaceRequestHandler(`ping`,e=>(console.log(`Received ping:`,e.params),{})),this.setEventHandler(`hostcontextchanged`,void 0)}buildContext(e){return e}registerAppCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after transport is established`);this._appCapabilities=$g(this._appCapabilities,e)}registerTool(e,t,n){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let r=this,i=()=>{r._initializedSent&&r._appCapabilities.tools?.listChanged&&r.sendToolListChanged()},a=t.inputSchema!==void 0,o={title:t.title,description:t.description,inputSchema:t.inputSchema,outputSchema:t.outputSchema,annotations:t.annotations,_meta:t._meta,enabled:!0,enable(){this.enabled=!0,i()},disable(){this.enabled=!1,i()},update(e){Object.assign(this,e),i()},remove(){r._registeredTools[e]===o&&(delete r._registeredTools[e],i())},handler:async(t,r)=>{if(!o.enabled)throw Error(`Tool ${e} is disabled`);let i;if(a){let a=o.inputSchema;i=await n(a?await Qg(a,t??{},`Invalid input for tool ${e}: `):t??{},r)}else i=await n(r);return o.outputSchema&&!i.isError&&(i.structuredContent=await Qg(o.outputSchema,i.structuredContent,`Invalid output for tool ${e}: `)),i}};return this._registeredTools[e]=o,!this._appCapabilities.tools&&!this.transport&&this.registerAppCapabilities({tools:{listChanged:!0}}),this.ensureToolHandlersInitialized(),i(),o}_toolHandlersInitialized=!1;ensureToolHandlersInitialized(){this._toolHandlersInitialized||(this._toolHandlersInitialized=!0,this.oncalltool=async(e,t)=>{let n=this._registeredTools[e.name];if(!n)throw Error(`Tool ${e.name} not found`);return n.handler(e.arguments,t)},this.onlisttools=async(e,t)=>({tools:await Promise.all(Object.entries(this._registeredTools).filter(([e,t])=>t.enabled).map(async([e,t])=>{let n={name:e,title:t.title,description:t.description,inputSchema:t.inputSchema?await Zg(t.inputSchema,`input`):{type:`object`,properties:{}}};return t.outputSchema&&(n.outputSchema=await Zg(t.outputSchema,`output`)),t.annotations&&(n.annotations=t.annotations),t._meta&&(n._meta=t._meta),n}))}))}async sendToolListChanged(e={}){this._assertInitialized(`sendToolListChanged`),await this.notification({method:`notifications/tools/list_changed`,params:e})}getHostCapabilities(){return this._hostCapabilities}getHostVersion(){return this._hostInfo}getHostContext(){return this._hostContext}get ontoolinput(){return this.getEventHandler(`toolinput`)}set ontoolinput(e){this.setEventHandler(`toolinput`,e)}get ontoolinputpartial(){return this.getEventHandler(`toolinputpartial`)}set ontoolinputpartial(e){this.setEventHandler(`toolinputpartial`,e)}get ontoolresult(){return this.getEventHandler(`toolresult`)}set ontoolresult(e){this.setEventHandler(`toolresult`,e)}get ontoolcancelled(){return this.getEventHandler(`toolcancelled`)}set ontoolcancelled(e){this.setEventHandler(`toolcancelled`,e)}get onhostcontextchanged(){return this.getEventHandler(`hostcontextchanged`)}set onhostcontextchanged(e){this.setEventHandler(`hostcontextchanged`,e)}_onteardown;get onteardown(){return this._onteardown}set onteardown(e){this.warnIfRequestHandlerReplaced(`onteardown`,this._onteardown,e),this._onteardown=e,this.replaceRequestHandler(`ui/resource-teardown`,{params:zg.shape.params,result:Bg},(e,t)=>{if(!this._onteardown)throw Error(`No onteardown handler set`);return this._onteardown(e,t)})}_oncalltool;get oncalltool(){return this._oncalltool}set oncalltool(e){this.warnIfRequestHandlerReplaced(`oncalltool`,this._oncalltool,e),this._oncalltool=e,this.replaceRequestHandler(`tools/call`,(e,t)=>{if(!this._oncalltool)throw Error(`No oncalltool handler set`);return this._oncalltool(e.params,t)})}_onlisttools;get onlisttools(){return this._onlisttools}set onlisttools(e){this.warnIfRequestHandlerReplaced(`onlisttools`,this._onlisttools,e),this._onlisttools=e,this.replaceRequestHandler(`tools/list`,(e,t)=>{if(!this._onlisttools)throw Error(`No onlisttools handler set`);return this._onlisttools(e.params,t)})}assertCapabilityForMethod(e){if(e===`sampling/createMessage`&&!this._hostCapabilities?.sampling)throw Error(`Host does not support sampling (required for ${e})`)}assertRequestHandlerCapability(e){switch(e){case`tools/call`:case`tools/list`:if(!this._appCapabilities.tools)throw Error(`Client does not support tool capability (required for ${e})`);return;default:return}}assertNotificationCapability(e){}async callServerTool(e,t){if(this._assertInitialized(`callServerTool`),typeof e==`string`)throw Error(`callServerTool() expects an object as its first argument, but received a string ("${e}"). Did you mean: callServerTool({ name: "${e}", arguments: { ... } })?`);return await this.request({method:`tools/call`,params:e},{onprogress:()=>{},resetTimeoutOnProgress:!0,...t})}async readServerResource(e,t){return this._assertInitialized(`readServerResource`),await this.request({method:`resources/read`,params:e},t)}async listServerResources(e,t){return this._assertInitialized(`listServerResources`),await this.request({method:`resources/list`,params:e},t)}async createSamplingMessage(e,t){return this._assertInitialized(`createSamplingMessage`),await this.request({method:`sampling/createMessage`,params:e},t)}sendMessage(e,t){return this._assertInitialized(`sendMessage`),this.request({method:`ui/message`,params:e},jg,t)}sendLog(e){return this.notification({method:`notifications/message`,params:e})}updateModelContext(e,t){return this._assertInitialized(`updateModelContext`),this.request({method:`ui/update-model-context`,params:e},Fu,t)}openLink(e,t){return this._assertInitialized(`openLink`),this.request({method:`ui/open-link`,params:e},kg,t)}sendOpenLink=this.openLink;downloadFile(e,t){return this._assertInitialized(`downloadFile`),this.request({method:`ui/download-file`,params:e},Ag,t)}requestTeardown(e={}){return this.notification({method:`ui/notifications/request-teardown`,params:e})}requestDisplayMode(e,t){return this._assertInitialized(`requestDisplayMode`),this.request({method:`ui/request-display-mode`,params:e},Wg,t)}sendSizeChanged(e){return this.notification({method:`ui/notifications/size-changed`,params:e})}setupSizeChangedNotifications(){let e=!1,t=0,n=0,r=()=>{e||(e=!0,requestAnimationFrame(()=>{e=!1;let r=document.documentElement,i=r.style.height;r.style.height=`max-content`;let a=Math.ceil(r.getBoundingClientRect().height);r.style.height=i;let o=Math.ceil(window.innerWidth);(o!==t||a!==n)&&(t=o,n=a,this.sendSizeChanged({width:o,height:a}))}))};r();let i=new ResizeObserver(r);return i.observe(document.documentElement),i.observe(document.body),()=>i.disconnect()}async connect(e=new Tg(window.parent,window.parent),t){if(this.transport)throw Error(`App is already connected. Call close() before connecting again.`);this._initializedSent=!1;try{await super.connect(e);let n=await this.request({method:`ui/initialize`,params:{appCapabilities:this._appCapabilities,appInfo:this._appInfo,protocolVersion:wg}},Yg,t);if(n===void 0)throw Error(`Server sent invalid initialize result: ${n}`);this._hostCapabilities=n.hostCapabilities,this._hostInfo=n.hostInfo,this._hostContext=n.hostContext,await this.notification({method:`ui/notifications/initialized`}),this._initializedSent=!0,this.options?.autoResize&&this.setupSizeChangedNotifications()}catch(e){throw this.close(),e}}},t_=null,n_=new Set,r_=window.parent===window,i_=e=>e?.view&&n_.forEach(t=>t(e));function a_(e){return n_.add(e),()=>n_.delete(e)}async function o_(){if(r_)return;t_=new e_({name:`vibefort-panel`,version:`0.1.0`},{}),t_.ontoolresult=e=>i_(e.structuredContent),t_.onhostcontextchanged=e=>{e.theme&&document.documentElement.setAttribute(`data-theme`,e.theme)},await t_.connect();let e=t_.getHostContext()?.theme;e&&document.documentElement.setAttribute(`data-theme`,e)}async function s_(e,t){return(await(await fetch(`/mcp`,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json, text/event-stream`,authorization:`Bearer vf_dev_token`},body:JSON.stringify({jsonrpc:`2.0`,id:1,method:`tools/call`,params:{name:e,arguments:t}})})).json()).result}async function c_(e,t={}){let n=r_?await s_(e,t):await t_.callServerTool({name:e,arguments:t});if(n?.isError)throw Error(n.content?.[0]?.text??`Request failed`);return n?.structuredContent}async function l_(e){r_?window.dispatchEvent(new CustomEvent(`vf-toast`,{detail:`Would ask Claude: “${e}”`})):await t_.sendMessage({role:`user`,content:[{type:`text`,text:e}]})}function u_(e){r_||!t_?window.open(e,`_blank`,`noopener`):t_.openLink({url:e})}async function d_(e){let t=await c_(`get_results`,e?{repo:e}:{});return i_(t),t}var f_=[`critical`,`high`,`medium`,`low`],p_={critical:`danger`,high:`warning`,medium:`info`,low:`secondary`},m_={critical:`bg-danger-solid`,high:`bg-warning-solid`,medium:`bg-info-solid`,low:`bg-secondary-solid`},h_={A:`#16a34a`,B:`#65a30d`,C:`#ca8a04`,D:`#ea580c`,F:`#dc2626`},g_={A:`Looking solid`,B:`Pretty good`,C:`Needs work`,D:`Risky`,F:`Not safe to launch`},__={open:`Open`,fix_proposed:`Fix proposed`,fixed:`Fixed`,false_positive:`False positive`,accepted_risk:`Accepted risk`},v_=[`fixed`,`false_positive`,`accepted_risk`],y_=e=>{if(!e)return`never`;let t=Math.round((Date.now()-new Date(e).getTime())/6e4);return t<1?`just now`:t<60?`${t} min ago`:t<1440?`${Math.round(t/60)} h ago`:`${Math.round(t/1440)} d ago`};function b_(){return(0,p.jsxs)(`svg`,{width:`22`,height:`22`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:[(0,p.jsx)(`path`,{d:`M12 2.5 4.5 5.4v5.6c0 4.5 3 8.3 7.5 10.5 4.5-2.2 7.5-6 7.5-10.5V5.4L12 2.5Z`,fill:`currentColor`,opacity:`.15`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinejoin:`round`}),(0,p.jsx)(`path`,{d:`m8.8 11.9 2.2 2.2 4.3-4.5`,stroke:`currentColor`,strokeWidth:`1.9`,strokeLinecap:`round`,strokeLinejoin:`round`})]})}function x_({grade:e,score:t}){let n=2*Math.PI*38;return(0,p.jsxs)(`div`,{className:`relative size-[104px] shrink-0`,role:`img`,"aria-label":`Security grade ${e}, score ${t} out of 100`,children:[(0,p.jsxs)(`svg`,{viewBox:`0 0 96 96`,className:`size-full -rotate-90`,children:[(0,p.jsx)(`circle`,{cx:`48`,cy:`48`,r:38,fill:`none`,strokeWidth:`8`,className:`stroke-[var(--color-border-subtle)]`}),(0,p.jsx)(`circle`,{cx:`48`,cy:`48`,r:38,fill:`none`,strokeWidth:`8`,strokeLinecap:`round`,stroke:h_[e],strokeDasharray:n,strokeDashoffset:n*(1-t/100),style:{transition:`stroke-dashoffset .6s ease`}})]}),(0,p.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center`,children:[(0,p.jsx)(`span`,{className:`text-4xl font-semibold leading-none`,style:{color:h_[e]},children:e}),(0,p.jsxs)(`span`,{className:`mt-1 text-xs text-tertiary`,children:[t,`/100`]})]})]})}function S_({f:e,repo:t,onChange:n}){let[r,i]=(0,m.useState)(!1),[a,o]=(0,m.useState)(!1),[s,c]=(0,m.useState)(null),l=v_.includes(e.status),u=async t=>{o(!0),c(null);try{await c_(`update_finding`,{finding_id:e.id,status:t}),await n()}catch(e){c(e.message)}finally{o(!1)}};return(0,p.jsxs)(`li`,{className:`rounded-xl border border-default bg-surface ${l?`opacity-60`:``}`,children:[(0,p.jsxs)(`button`,{className:`flex w-full items-start gap-3 p-3 text-left`,"aria-expanded":r,onClick:()=>i(!r),children:[(0,p.jsx)(ae,{color:p_[e.severity],variant:`soft`,size:`sm`,className:`mt-0.5 shrink-0 uppercase`,children:e.severity}),(0,p.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,p.jsx)(`span`,{className:`block break-words text-sm font-medium text-default`,children:e.title}),(0,p.jsxs)(`span`,{className:`mt-0.5 block truncate text-xs text-tertiary`,children:[(0,p.jsx)(`span`,{className:`font-medium text-secondary`,children:e.ref}),` · `,e.file,`:`,e.line]})]}),e.status!==`open`&&(0,p.jsx)(ae,{color:e.status===`fixed`?`success`:`secondary`,variant:`outline`,size:`sm`,className:`shrink-0`,children:__[e.status]}),(0,p.jsx)(`span`,{"aria-hidden":!0,className:`mt-1 text-tertiary transition-transform ${r?`rotate-90`:``}`,children:`›`})]}),r&&(0,p.jsxs)(`div`,{className:`space-y-3 border-t border-subtle p-3 text-sm`,children:[(0,p.jsxs)(`section`,{children:[(0,p.jsx)(`h4`,{className:`mb-1 text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`What’s wrong`}),(0,p.jsx)(`p`,{className:`break-words text-secondary`,children:e.explanation})]}),(0,p.jsxs)(`section`,{children:[(0,p.jsx)(`h4`,{className:`mb-1 text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`What an attacker could do`}),(0,p.jsx)(`p`,{className:`break-words text-secondary`,children:e.attack_scenario})]}),e.excerpt&&(0,p.jsx)(`pre`,{className:`overflow-x-auto rounded-lg bg-surface-secondary p-3 text-xs text-default`,children:(0,p.jsx)(`code`,{children:e.excerpt})}),(0,p.jsxs)(`section`,{children:[(0,p.jsx)(`h4`,{className:`mb-1 text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`How to fix`}),(0,p.jsx)(`p`,{className:`break-words text-secondary`,children:e.fix_guidance})]}),(0,p.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:[e.owasp,e.cwe,e.rule_id,`${e.confidence} confidence`].map(e=>(0,p.jsx)(ae,{variant:`outline`,color:`secondary`,size:`sm`,children:e},e))}),s&&(0,p.jsx)(`p`,{role:`alert`,className:`text-xs text-danger`,children:s}),(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[e.status===`open`&&(0,p.jsx)(E,{color:`primary`,size:`sm`,onClick:()=>l_(`Fix Vibe Fortress finding ${e.ref} ("${e.title}") in ${t}: call start_scan with repo "${t}", kind "fix" and finding_id "${e.ref}", follow its instructions, and open a pull request on a new branch (never push to main).`),children:`Fix this`}),e.pr_url&&(0,p.jsx)(E,{variant:`outline`,color:`secondary`,size:`sm`,onClick:()=>u_(e.pr_url),children:`View pull request`}),e.status===`open`&&(0,p.jsx)(E,{variant:`ghost`,color:`secondary`,size:`sm`,disabled:a,onClick:()=>u(`false_positive`),children:`False positive`}),e.status===`open`&&(0,p.jsx)(E,{variant:`ghost`,color:`secondary`,size:`sm`,disabled:a,onClick:()=>u(`accepted_risk`),children:`Accept risk`}),(e.status===`false_positive`||e.status===`accepted_risk`)&&(0,p.jsx)(E,{variant:`ghost`,color:`secondary`,size:`sm`,disabled:a,onClick:()=>u(`open`),children:`Reopen`})]})]})]})}function C_({label:e,used:t,max:n}){let r=n<0?8:Math.min(100,t/Math.max(1,n)*100);return(0,p.jsxs)(`div`,{children:[(0,p.jsxs)(`div`,{className:`mb-1 flex justify-between text-sm`,children:[(0,p.jsx)(`span`,{className:`text-secondary`,children:e}),(0,p.jsxs)(`span`,{className:`text-default`,children:[t,` / `,n<0?`unlimited`:n]})]}),(0,p.jsx)(`div`,{className:`h-2 overflow-hidden rounded-full bg-surface-tertiary`,role:`progressbar`,"aria-label":e,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":n<0?void 0:n,children:(0,p.jsx)(`div`,{className:`h-full rounded-full bg-primary-solid`,style:{width:`${r}%`}})})]})}var w_=e=>{let t=e.entitlement,n=e=>e?e.slice(0,10):``;return t.source===`trial`?`Free trial: ${t.trial_days_left} day${t.trial_days_left===1?``:`s`} left (ends ${n(t.trial_ends_at)}). No card needed.`:t.source===`subscription`?t.subscription?.cancelling?`Cancelled: you keep Pro until ${n(t.subscription.paid_through)}.`:t.subscription?.payment_issue?`The last payment failed: update your card in billing.`:`Pro${t.subscription?.interval===`year`?`, annual`:t.subscription?.interval===`month`?`, monthly`:``}${t.subscription?.paid_through?`, paid through ${n(t.subscription.paid_through)}`:``}.`:t.trial_ends_at?`Free. Your trial ended ${n(t.trial_ends_at)}.`:`Free plan.`},T_=e=>e<0?`Unlimited`:String(e);function E_({yes:e,label:t}){return(0,p.jsxs)(`span`,{className:`inline-flex items-center gap-1 ${e?`text-success`:`text-danger`}`,children:[(0,p.jsx)(`span`,{"aria-hidden":!0,className:`font-semibold`,children:e?`✓`:`✗`}),t?(0,p.jsx)(`span`,{className:`text-default`,children:t}):null,(0,p.jsxs)(`span`,{className:`sr-only`,children:[e?`Included`:`Not included`,t?`: ${t}`:``]})]})}var D_=[{label:`Projects`,cell:e=>({yes:e.repos!==0,label:T_(e.repos)})},{label:`Deep scans a month`,cell:e=>({yes:e.deepScans!==0,label:e.deepScans===0?void 0:T_(e.deepScans)})},{label:`Check-again scans a month`,cell:e=>({yes:e.diffScans!==0,label:e.diffScans===0?void 0:T_(e.diffScans)})},{label:`Fix pull requests a month`,cell:e=>({yes:e.fixPrs!==0,label:e.fixPrs===0?void 0:T_(e.fixPrs)})},{label:`Live config checks`,cell:e=>({yes:e.liveChecks})},{label:`Team workspaces`,cell:e=>({yes:e.team})},{label:`README badge`,cell:e=>({yes:e.badge})}];function O_({a:e}){if(!e.plans)return null;let t=[[`free`,`Free`],[`pro`,`Pro`]],n=e.entitlement.source===`trial`;return(0,p.jsx)(`div`,{className:`overflow-hidden rounded-xl border border-default bg-surface`,"data-testid":`plan-compare`,children:(0,p.jsxs)(`table`,{className:`w-full table-fixed border-collapse text-sm`,children:[(0,p.jsx)(`caption`,{className:`sr-only`,children:`Free compared with Pro`}),(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{children:[(0,p.jsx)(`th`,{scope:`col`,className:`w-[44%] p-2 text-left text-xs font-medium text-tertiary`,children:(0,p.jsx)(`span`,{className:`sr-only`,children:`Feature`})}),t.map(([t,r])=>(0,p.jsxs)(`th`,{scope:`col`,"data-current":e.plan===t,className:`p-2 text-left font-semibold ${e.plan===t?`bg-primary-surface text-default`:`text-secondary`}`,children:[r,e.plan===t&&(0,p.jsxs)(`span`,{className:`mt-0.5 block text-[11px] font-medium text-primary`,children:[`Your plan`,n?` (trial)`:``]})]},t))]})}),(0,p.jsx)(`tbody`,{children:D_.map(n=>(0,p.jsxs)(`tr`,{className:`border-t border-subtle`,children:[(0,p.jsx)(`th`,{scope:`row`,className:`p-2 text-left text-xs font-normal text-secondary`,children:n.label}),t.map(([t])=>{let r=n.cell(e.plans[t]);return(0,p.jsx)(`td`,{className:`p-2 align-top ${e.plan===t?`bg-primary-surface`:``}`,children:(0,p.jsx)(E_,{yes:r.yes,label:r.label})},t)})]},n.label))})]})})}function k_({a:e,go:t}){let n=e.badge??null,[r,i]=(0,m.useState)(!1),[a,o]=(0,m.useState)(null),s=async()=>{i(!0),o(null);try{t(await c_(`billing_options`))}catch(e){o(e.message)}finally{i(!1)}},c=n?`[![Scanned by Vibe Fortress](${n.image})](${n.page})`:null;return(0,p.jsxs)(`div`,{className:`space-y-4`,children:[(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-4`,children:[(0,p.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,p.jsx)(`div`,{className:`font-medium text-default`,children:`Your plan`}),(0,p.jsx)(ae,{color:e.plan===`pro`?`success`:`secondary`,variant:`soft`,children:e.entitlement.source===`trial`?`Pro trial`:e.plan===`pro`?`Pro`:`Free`})]}),(0,p.jsx)(`p`,{className:`mb-3 text-sm text-secondary`,children:w_(e)}),(0,p.jsxs)(`div`,{className:`space-y-3`,children:[(0,p.jsx)(C_,{label:`Repos`,used:e.usage.repos,max:e.limits.repos}),(0,p.jsx)(C_,{label:`Deep scans this month`,used:e.usage.deep,max:e.limits.deepScans}),(0,p.jsx)(C_,{label:`Check-again scans this month`,used:e.usage.diff,max:e.limits.diffScans}),(0,p.jsx)(C_,{label:`Fix pull requests this month`,used:e.usage.fix,max:e.limits.fixPrs})]}),(0,p.jsxs)(`p`,{className:`mt-3 text-xs text-tertiary`,children:[`Monthly counts start again on `,e.resets_at.slice(0,10),`.`]})]}),(0,p.jsx)(O_,{a:e}),e.upgrade_url?(0,p.jsxs)(`div`,{className:`rounded-xl border border-primary-surface bg-primary-surface p-4`,children:[(0,p.jsxs)(`h3`,{className:`font-medium text-default`,children:[`Vibe Fortress Pro, €`,e.price_eur.month,`/month or €`,e.price_eur.year,`/year`]}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Cancel anytime. VAT added where it applies.`}),(0,p.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,p.jsx)(E,{color:`primary`,onClick:()=>u_(e.upgrade_url_month??e.upgrade_url),children:e.entitlement.source===`trial`?`Keep Pro, monthly`:`Upgrade, monthly`}),e.upgrade_url_year?(0,p.jsx)(E,{variant:`outline`,color:`secondary`,onClick:()=>u_(e.upgrade_url_year),children:`Annual, save €${e.price_eur.month*12-e.price_eur.year}`}):null]})]}):e.portal_url?(0,p.jsxs)(`div`,{children:[(0,p.jsx)(E,{variant:`outline`,color:`secondary`,disabled:r,onClick:s,children:`Manage billing`}),a&&(0,p.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:a}),(0,p.jsx)(`p`,{className:`mt-1 text-xs text-tertiary`,children:`Billing opens in your browser. Cancel anytime.`})]}):null,e.live_checks&&(0,p.jsxs)(`details`,{className:`rounded-xl border border-default bg-surface p-4`,"data-testid":`live-connections`,children:[(0,p.jsxs)(`summary`,{className:`flex cursor-pointer items-center justify-between gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm font-medium`,children:`See what is included in live config checks`}),(0,p.jsx)(ae,{color:e.live_checks.included?`success`:`secondary`,variant:`soft`,children:e.live_checks.included?`In your plan`:`Trial and Pro`})]}),(0,p.jsx)(`p`,{className:`my-2 text-sm text-secondary`,children:`Your own Claude reads the real settings of your services, read-only, through connectors you already have. Connect these:`}),(0,p.jsx)(`ul`,{className:`space-y-2 text-sm`,children:e.live_checks.connections.map(e=>(0,p.jsxs)(`li`,{children:[(0,p.jsx)(`b`,{className:`text-default`,children:e.label}),` `,(0,p.jsxs)(`span`,{className:`text-tertiary`,children:[`via `,e.connectors.join(` or `)]}),(0,p.jsx)(`div`,{className:`text-secondary`,children:e.access})]},e.service))}),(0,p.jsx)(`p`,{className:`mt-2 text-xs text-tertiary`,children:`Never paste a token into chat, and never let Claude run a call that can change something.`})]}),c&&(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-4`,children:[(0,p.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`README badge`}),(0,p.jsx)(`pre`,{className:`overflow-x-auto rounded-lg bg-surface-secondary p-2 text-xs`,children:(0,p.jsx)(`code`,{children:c})}),(0,p.jsx)(E,{className:`mt-2`,size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>navigator.clipboard?.writeText(c),children:`Copy markdown`})]}),(0,p.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>u_(e.export_url),children:`Export my data`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`danger`,onClick:()=>u_(e.delete_url),children:`Delete my account`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>u_(e.privacy_url),children:`Privacy`})]}),(0,p.jsx)(`p`,{className:`text-xs text-tertiary`,children:`Secrets and dependency alerts stay free on every plan, with no account. Vibe Fortress never stores your source code.`})]})}function A_({c:e}){if(!e)return null;if(!e.recorded)return(0,p.jsx)(`p`,{className:`mt-3 text-xs text-tertiary`,children:`Coverage not recorded for this scan.`});let t=e.empty_steps.length>0||(e.percent??100)<70;return(0,p.jsxs)(`div`,{className:`mt-4 rounded-xl border border-subtle p-3`,"aria-label":`Scan coverage`,children:[(0,p.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Coverage`}),(0,p.jsx)(`span`,{className:t?`font-semibold text-warning`:`font-semibold`,children:e.percent===null?`n/a`:`${e.percent}%`})]}),(0,p.jsxs)(`div`,{className:`mt-1 text-xs text-secondary`,children:[e.reviewed,` of `,e.planned,` planned files reviewed · `,e.steps.reported,`/`,e.steps.total,` steps reported`]}),e.percent!==null&&(0,p.jsx)(`div`,{className:`mt-2 h-1.5 overflow-hidden rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full ${t?`bg-warning-solid`:`bg-primary-solid`}`,style:{width:`${e.percent}%`}})}),e.empty_steps.length>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-warning`,children:[`Reviewed nothing: `,e.empty_steps.join(`; `)]}),e.not_reviewed.length>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsxs)(`summary`,{className:`cursor-pointer`,children:[e.not_reviewed.length,` not reviewed`]}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:e.not_reviewed.map(e=>(0,p.jsxs)(`li`,{className:`break-all font-mono`,children:[e.file,e.reason?(0,p.jsxs)(`span`,{className:`font-sans text-tertiary`,children:[` — `,e.reason]}):null]},e.file))})]})]})}function j_({inv:e,spot:t,commit:n}){if(!e)return(0,p.jsx)(`p`,{className:`mt-3 text-xs text-tertiary`,children:`File inventory not recorded for this scan.`});let r=e.mode===`check-again`?e.changed?.not_reviewed.length??0:e.not_covered,i=[[`reviewed`,e.reviewed],[`excluded`,e.excluded],[e.mode===`check-again`?`unchanged`:`not covered`,e.mode===`check-again`?e.unchanged:e.not_covered]];return(0,p.jsxs)(`div`,{className:`mt-4 rounded-xl border border-subtle p-3`,"aria-label":`File inventory`,children:[(0,p.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Files in the branch`}),(0,p.jsxs)(`span`,{className:`font-semibold`,children:[e.total,e.cut?` (list covers ${e.listed})`:``]})]}),(0,p.jsx)(`div`,{className:`mt-2 grid grid-cols-3 gap-2 text-center text-xs`,children:i.map(([e,t])=>(0,p.jsxs)(`div`,{className:`rounded-lg border border-subtle p-2 ${e===`not covered`&&t>0?`text-warning`:``}`,children:[(0,p.jsx)(`div`,{className:`text-base font-semibold`,children:t}),(0,p.jsx)(`div`,{className:`text-tertiary`,children:e})]},e))}),e.mode===`check-again`&&e.changed&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-secondary`,children:[`Check-again: `,e.changed.total,` changed, `,e.changed.reviewable,` reviewable, `,e.changed.reviewed,` reviewed.`]}),Object.keys(e.excluded_by_reason).length>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-secondary`,children:[`Excluded: `,Object.entries(e.excluded_by_reason).map(([e,t])=>`${t} ${e}`).join(`, `)]}),r>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,open:!0,children:[(0,p.jsxs)(`summary`,{className:`cursor-pointer font-medium text-warning`,children:[r,` `,e.mode===`check-again`?`changed files not reviewed`:`not covered`]}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:(e.mode===`check-again`?(e.changed?.not_reviewed??[]).map(e=>({file:e,note:void 0})):e.not_covered_files).map(e=>(0,p.jsxs)(`li`,{className:`break-all font-mono`,children:[e.file,e.note?(0,p.jsxs)(`span`,{className:`font-sans text-tertiary`,children:[` — `,e.note]}):null]},e.file))}),e.not_covered_more>0&&(0,p.jsxs)(`p`,{className:`mt-1 text-tertiary`,children:[`…and `,e.not_covered_more,` more (full list in your data export).`]})]}),e.reviewed_by_step.length>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsx)(`summary`,{className:`cursor-pointer`,children:`Why files were reviewed`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:e.reviewed_by_step.map(e=>(0,p.jsxs)(`li`,{children:[e.step,` `,(0,p.jsxs)(`span`,{className:`text-tertiary`,children:[`(`,e.files,`)`]})]},e.step))})]}),e.unknown_refs.length>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-warning`,children:[e.unknown_refs.length,` file(s) named in the app map are not in the branch and were ignored.`]}),t&&t.answers.length>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Spot checks (`,t.answers.length,`, seed `,t.seed,`)`]}),(0,p.jsxs)(`p`,{className:`mt-1 text-tertiary`,children:[`Vibe Fortress cannot verify the quoted text. Open each file at `,n??`the scanned commit`,` and compare the lines yourself.`]}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-1`,children:t.answers.map(e=>(0,p.jsxs)(`li`,{children:[(0,p.jsxs)(`span`,{className:`break-all font-mono`,children:[e.file,`:`,e.start_line,`-`,e.end_line]}),` `,(0,p.jsxs)(`span`,{className:e.sha_matches?`text-tertiary`:`font-semibold text-warning`,children:[`sha `,e.blob_sha,e.sha_matches?` matches`:` DIFFERS`]}),(0,p.jsx)(`pre`,{className:`mt-0.5 overflow-x-auto rounded bg-surface-tertiary p-1.5 font-mono`,children:e.text})]},e.file+e.start_line))})]})]})}var M_={view:`local`,project:`acme/shop`,scanned_at:new Date().toISOString(),deep_reviewed:0,grade:`D`,score:55,kind:`quick`,engines:[],remaining:1,counts:{critical:1,high:1,medium:1,low:0},findings:[{ref:`VF-L-1`,severity:`critical`,title:`Live Stripe key in code`,file:`src/config.js`,line:2,reason:`Anyone who can read the repository can charge or refund customers with this key.`,owasp:`A02:2021`,cwe:`CWE-798`,status:`open`},{ref:`VF-L-2`,severity:`high`,title:`SQL built from user input`,file:`src/db.js`,line:2,reason:`An attacker can read or change every row by crafting the name.`,owasp:`A03:2021`,cwe:`CWE-89`,status:`open`,review:{verdict:`confirmed`,reason:`The name comes straight from the request.`}}]};function N_({a:e}){let t=e.state??(e.pending?`pending`:e.linked?`linked`:`none`),n=e.next_steps??[];return(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress account`,"data-testid":`link-status`,"data-state":t,children:[t===`pending`&&(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Approve this code in your browser`}),e.code&&(0,p.jsx)(`div`,{className:`mt-1 font-mono text-3xl font-semibold tracking-widest`,"aria-label":`Link code ${e.code}`,children:e.code}),(0,p.jsx)(`p`,{className:`mt-1 text-xs text-secondary`,children:`Check that the same code shows on the page, then approve. You never copy a token.`}),e.url&&(0,p.jsxs)(`p`,{className:`mt-2 break-all text-xs text-tertiary`,children:[`Address: `,(0,p.jsx)(`span`,{className:`select-all font-mono`,children:e.url})]}),(0,p.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[e.url&&(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>u_(e.url),children:`Open Vibe Fortress in the browser`}),(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>l_(`I approved the Vibe Fortress link. Please confirm it.`),children:`I approved it`})]})]}),t===`linked`&&(0,p.jsxs)(`div`,{children:[(0,p.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Account linked`}),(0,p.jsx)(ae,{color:e.plan===`pro`?`success`:`secondary`,variant:`soft`,children:e.source===`trial`?`Pro trial`:e.plan===`pro`?`Pro`:e.plan===`free`?`Free`:`Linked`})]}),e.workspace&&(0,p.jsxs)(`p`,{className:`mt-1 text-sm text-secondary`,children:[`Workspace: `,e.workspace]}),e.source===`trial`&&typeof e.trial_days_left==`number`&&(0,p.jsxs)(`p`,{className:`mt-1 text-sm text-secondary`,children:[`Free trial: `,e.trial_days_left,` day`,e.trial_days_left===1?``:`s`,` left. No card needed.`]}),e.source===`subscription`&&(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Your subscription is active.`}),e.reachable===!1&&(0,p.jsx)(`p`,{className:`mt-1 text-xs text-warning`,children:`The server could not be reached, so the plan shown may be out of date.`}),(0,p.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[e.web_url&&(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>u_(e.web_url),children:`Open Vibe Fortress`}),e.plan!==`pro`&&e.upgrade_url&&(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>u_(e.upgrade_url),children:e.source===`trial`?`Keep Pro after the trial`:`See plans`})]}),e.plan!==`pro`&&e.upgrade_url&&(0,p.jsxs)(`p`,{className:`mt-2 break-all text-xs text-tertiary`,children:[`Plans: `,(0,p.jsx)(`span`,{className:`select-all font-mono`,children:e.upgrade_url})]})]}),t===`none`&&(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`No account linked`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Vibe Fortress works without one: secrets, dependency alerts and quick code checks stay free. A free 30-day trial adds deep review, live checks and a web dashboard. Your code never leaves your computer.`}),(0,p.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Link my Vibe Fortress account.`),children:`Link my account`})})]}),n.length>0&&(0,p.jsxs)(`div`,{className:`mt-4 border-t border-subtle pt-3`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Suggested next steps`}),(0,p.jsx)(`ul`,{className:`mt-1 list-disc space-y-1 pl-5 text-sm text-secondary`,children:n.map(e=>(0,p.jsx)(`li`,{children:e},e))})]})]})}var P_={none:{view:`local-account`,state:`none`,linked:!1},pending:{view:`local-account`,state:`pending`,pending:!0,code:`K7M2-QX9P`,url:`http://localhost:8793/app/link?code=K7M2-QX9P`},trial:{view:`local-account`,state:`linked`,linked:!0,workspace:`Ada's workspace`,plan:`pro`,source:`trial`,trial_days_left:27,web_url:`http://localhost:8793/app/`,upgrade_url:`http://localhost:8793/app/plan`,next_steps:[`Run a deep review of your open findings.`]},pro:{view:`local-account`,state:`linked`,linked:!0,workspace:`Ada's workspace`,plan:`pro`,source:`subscription`,web_url:`http://localhost:8793/app/`}};function F_({o:e}){return e.state===`scanned`?(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress check`,"data-testid":`offer`,"data-state":`scanned`,children:[(0,p.jsxs)(`div`,{className:`text-sm font-medium`,children:[e.project,` is already checked`]}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Nothing more to start here.`}),(0,p.jsx)(`div`,{className:`mt-3`,children:(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Show my Vibe Fortress security results.`),children:`Show the results`})})]}):e.state===`snoozed`?(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress check`,"data-testid":`offer`,"data-state":`snoozed`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Okay, I will remind you later`}),(0,p.jsxs)(`p`,{className:`mt-1 text-sm text-secondary`,children:[`Vibe Fortress stays quiet about `,e.project,` until `,e.quiet_until?.slice(0,10),`. `,e.type_hint]}),(0,p.jsx)(`div`,{className:`mt-3`,children:(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>l_(`Yes, run the Vibe Fortress quick check on this project (${e.project}).`),children:`Start the check now`})})]}):(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress check`,"data-testid":`offer`,"data-state":`offer`,children:[(0,p.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`Quick security check`}),(0,p.jsxs)(`h2`,{className:`mt-1 break-words text-lg font-semibold`,children:[`Check `,e.project,` for security problems?`]}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Vibe Fortress looks for leaked passwords, risky packages and common mistakes in apps built with AI.`}),(0,p.jsx)(`h3`,{className:`mt-4 text-sm font-medium`,children:`What I will do now`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-1.5 text-sm text-secondary`,children:e.checklist.map(e=>(0,p.jsxs)(`li`,{className:`flex gap-2`,children:[(0,p.jsx)(`span`,{"aria-hidden":!0,className:`text-success`,children:`✓`}),(0,p.jsx)(`span`,{className:`min-w-0 break-words`,children:e})]},e))}),(0,p.jsxs)(`div`,{className:`mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2`,children:[(0,p.jsxs)(`div`,{className:`rounded-xl border border-subtle p-3`,children:[(0,p.jsx)(`h3`,{className:`text-sm font-medium`,children:`Free, no account`}),(0,p.jsx)(`ul`,{className:`mt-1 list-disc space-y-0.5 pl-4 text-xs text-secondary`,children:e.free.map(e=>(0,p.jsx)(`li`,{children:e},e))})]}),(0,p.jsxs)(`div`,{className:`rounded-xl border border-subtle p-3`,children:[(0,p.jsx)(`h3`,{className:`text-sm font-medium`,children:`An account adds`}),(0,p.jsx)(`ul`,{className:`mt-1 list-disc space-y-0.5 pl-4 text-xs text-secondary`,children:e.account.map(e=>(0,p.jsx)(`li`,{children:e},e))})]})]}),(0,p.jsx)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:e.buttons.map(e=>(0,p.jsx)(E,{size:`sm`,color:e.id===`yes`?`primary`:`secondary`,variant:e.id===`yes`?`solid`:e.id===`no`?`outline`:`ghost`,onClick:()=>l_(e.message),children:e.label},e.id))}),(0,p.jsx)(`p`,{className:`mt-3 text-xs text-secondary`,children:e.type_hint}),(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-tertiary`,children:[(0,p.jsx)(`summary`,{className:`cursor-pointer`,children:`What each button tells Claude`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-1`,children:e.buttons.map(e=>(0,p.jsxs)(`li`,{children:[(0,p.jsxs)(`span`,{className:`font-medium text-secondary`,children:[e.label,`:`]}),` `,(0,p.jsx)(`span`,{className:`select-all`,children:e.message})]},e.id))})]})]})}function I_({r:e,go:t}){let[n,r]=(0,m.useState)(e.reason),[i,a]=(0,m.useState)(null),o=async()=>{a(null);try{t(await c_(`account`))}catch(e){a(e.message)}},s=e.reasons.find(e=>e.id===n);return e.state===`none`?(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Billing`,"data-testid":`retention`,"data-state":`none`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`You have no subscription`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`There is nothing to cancel.`}),(0,p.jsx)(`div`,{className:`mt-3`,children:(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:o,children:`Back to my plan`})}),i&&(0,p.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:i})]}):(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Before you go to billing`,"data-testid":`retention`,"data-state":`subscriber`,children:[(0,p.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Before you go to billing`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`What is wrong? Pick one if you like. You do not have to.`}),(0,p.jsx)(`div`,{role:`group`,"aria-label":`What is wrong`,className:`mt-3 flex flex-wrap gap-2`,children:e.reasons.map(e=>(0,p.jsx)(E,{size:`sm`,variant:n===e.id?`solid`:`outline`,color:n===e.id?`primary`:`secondary`,"aria-pressed":n===e.id,onClick:()=>r(n===e.id?null:e.id),children:e.label},e.id))}),s&&(0,p.jsx)(`ul`,{className:`mt-3 space-y-2`,"aria-label":`What could help`,children:s.options.map(e=>(0,p.jsxs)(`li`,{className:`rounded-xl border border-subtle p-3`,children:[(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm font-medium`,children:e.label}),!e.real&&(0,p.jsx)(ae,{color:`secondary`,variant:`outline`,size:`sm`,children:`Placeholder, not available yet`})]}),(0,p.jsx)(`p`,{className:`mt-0.5 break-words text-xs text-secondary`,children:e.detail}),(0,p.jsx)(`div`,{className:`mt-2`,children:(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>e.kind===`link`?u_(e.url):l_(e.message),children:e.kind===`link`?`Open in billing`:`Ask Claude`})}),(0,p.jsx)(`p`,{className:`mt-1 break-words text-xs text-tertiary`,children:e.kind===`link`?(0,p.jsxs)(p.Fragment,{children:[`Opens: `,(0,p.jsx)(`span`,{className:`select-all font-mono break-all`,children:e.url})]}):(0,p.jsxs)(p.Fragment,{children:[`Sends: `,(0,p.jsx)(`span`,{className:`select-all`,children:e.message})]})})]},e.id))}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2 border-t border-subtle pt-3`,children:[e.portal_url?(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>u_(e.portal_url),children:`Continue to billing`}):(0,p.jsx)(`span`,{className:`text-sm text-secondary`,children:`Billing is not available on this server.`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:o,children:`Back to my plan`})]}),e.portal_url&&(0,p.jsxs)(`p`,{className:`mt-2 break-all text-xs text-tertiary`,children:[`Billing address: `,(0,p.jsx)(`span`,{className:`select-all font-mono`,children:e.portal_url})]}),e.fake&&(0,p.jsx)(`p`,{className:`mt-1 text-xs text-tertiary`,children:`Test billing: no real money.`}),i&&(0,p.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:i})]})}function L_(){return(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4 text-center`,"data-testid":`fallback`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`The answer is in the text above`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Tell Claude “check my app” to scan, or “what is my plan” to see your account.`})]})}function R_({d:e}){let t=e.findings.map(e=>e.ref).join(`, `);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,p.jsx)(x_,{grade:e.grade,score:e.score}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,p.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.project}),(0,p.jsx)(`div`,{className:`mt-1 text-xl font-semibold`,children:g_[e.grade]}),(0,p.jsxs)(`div`,{className:`mt-0.5 text-xs text-tertiary`,children:[e.base?`Branch check against ${e.base}`:`Quick check`,` · `,y_(e.scanned_at),` · your code stayed on this computer`]})]})]}),(0,p.jsx)(`div`,{className:`mt-4 grid grid-cols-4 gap-2`,children:f_.map(t=>(0,p.jsxs)(`div`,{"aria-label":`${e.counts[t]} ${t} findings`,className:`rounded-lg border border-default p-2`,children:[(0,p.jsx)(`div`,{className:`text-xl font-semibold leading-none`,children:e.counts[t]}),(0,p.jsx)(`div`,{className:`mt-1 text-[11px] capitalize text-tertiary`,children:t}),(0,p.jsx)(`div`,{className:`mt-1.5 h-1 rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full ${m_[t]}`,style:{width:`${Math.min(100,e.counts[t]*25)}%`}})})]},t))}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[e.findings.length>0&&(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Yes, fix these Vibe Fortress findings on a new branch (${t}). Do not open a pull request until I say so.`),children:`Fix these on a branch`}),e.findings.length>0&&(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>l_(`Yes, run a Vibe Fortress deep review of these findings.`),children:`Deep review`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>l_(`What does a Vibe Fortress account give me? Show my plan.`),children:`Get protection`})]})]}),e.findings.length===0?(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-6 text-center`,children:[(0,p.jsx)(`div`,{className:`text-2xl`,"aria-hidden":!0,children:`🛡️`}),(0,p.jsx)(`div`,{className:`mt-1 font-medium`,children:`Nothing urgent found`}),(0,p.jsx)(`div`,{className:`text-sm text-secondary`,children:`This quick check matches known patterns; a deep review reads the code for the rest.`})]}):(0,p.jsx)(`ul`,{className:`space-y-2`,"aria-label":`Findings, worst first`,children:e.findings.map(e=>(0,p.jsx)(`li`,{className:`rounded-xl border border-default bg-surface p-3`,children:(0,p.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,p.jsx)(ae,{color:p_[e.severity],variant:`soft`,size:`sm`,className:`mt-0.5 shrink-0 uppercase`,children:e.severity}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,p.jsxs)(`div`,{className:`break-words text-sm font-medium`,children:[e.title,e.branchNew?` · new on this branch`:``]}),(0,p.jsxs)(`div`,{className:`mt-0.5 break-all text-xs text-tertiary`,children:[(0,p.jsx)(`span`,{className:`font-medium text-secondary`,children:e.ref}),` · `,e.file,e.line?`:${e.line}`:``]}),(0,p.jsx)(`p`,{className:`mt-1.5 break-words text-sm text-secondary`,children:e.reason}),e.review&&e.review.verdict!==`false_positive`&&(0,p.jsxs)(`p`,{className:`mt-1.5 break-words text-xs text-secondary`,children:[(0,p.jsxs)(`span`,{className:`font-medium`,children:[`Deep review: `,e.review.verdict===`confirmed`?`confirmed`:`unsure`,`.`]}),` `,e.review.reason]})]})]})},e.ref))}),e.remaining>0&&(0,p.jsxs)(`p`,{className:`text-center text-xs text-tertiary`,children:[e.remaining,` more: ask Claude “show the rest”.`]})]})}function z_({data:e,setError:t}){let[n,r]=(0,m.useState)(`all`),[i,a]=(0,m.useState)(!1),o=async()=>{try{await d_(e.repo.full_name)}catch(e){t(String(e))}},s=(0,m.useMemo)(()=>e.findings.filter(e=>(i||!v_.includes(e.status))&&(n===`all`||e.severity===n)),[e,n,i]),c=e.findings.filter(e=>v_.includes(e.status)).length;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,p.jsx)(x_,{grade:e.grade.grade,score:e.grade.score}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[e.repos.length>1?(0,p.jsx)(`select`,{"aria-label":`Repository`,className:`w-full rounded-md border border-default bg-surface px-2 py-1 text-sm font-medium text-default`,value:e.repo.full_name,onChange:e=>d_(e.target.value).catch(e=>t(String(e))),children:e.repos.map(e=>(0,p.jsxs)(`option`,{value:e.full_name,children:[e.full_name,e.grade?` · ${e.grade}`:``]},e.full_name))}):(0,p.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.repo.full_name}),(0,p.jsx)(`div`,{className:`mt-1 text-xl font-semibold`,children:g_[e.grade.grade]}),(0,p.jsxs)(`div`,{className:`mt-0.5 text-xs text-tertiary`,children:[`Last scan `,y_(e.repo.last_scan_at),e.repo.last_scanned_commit?` · ${e.repo.last_scanned_commit.slice(0,7)}`:``]})]})]}),e.progress&&(0,p.jsxs)(`div`,{className:`mt-3`,role:`status`,children:[(0,p.jsxs)(`div`,{className:`mb-1 flex justify-between text-xs text-secondary`,children:[(0,p.jsx)(`span`,{children:`Scan in progress…`}),(0,p.jsxs)(`span`,{children:[e.progress.done,`/`,e.progress.total,` steps`]})]}),(0,p.jsx)(`div`,{className:`h-1.5 overflow-hidden rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full bg-primary-solid transition-all`,style:{width:`${e.progress.done/Math.max(1,e.progress.total)*100}%`}})})]}),(0,p.jsx)(`div`,{className:`mt-4 grid grid-cols-4 gap-2`,children:f_.map(t=>(0,p.jsxs)(`button`,{"aria-pressed":n===t,"aria-label":`${e.grade.counts[t]} ${t} findings`,onClick:()=>r(n===t?`all`:t),className:`rounded-lg border p-2 text-left transition ${n===t?`border-strong bg-surface-secondary`:`border-subtle hover:bg-surface-secondary`}`,children:[(0,p.jsx)(`div`,{className:`text-xl font-semibold leading-none`,children:e.grade.counts[t]}),(0,p.jsx)(`div`,{className:`mt-1 text-[11px] capitalize text-tertiary`,children:t}),(0,p.jsx)(`div`,{className:`mt-1.5 h-1 rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full ${m_[t]}`,style:{width:`${Math.min(100,e.grade.counts[t]*25)}%`}})})]},t))}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Check again: call start_scan with kind "diff" for ${e.repo.full_name} and review only what changed since the last scan.`),children:`Check again`}),c>0&&(0,p.jsxs)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>a(!i),children:[i?`Hide`:`Show`,` `,c,` closed`]}),n!==`all`&&(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>r(`all`),children:`Clear filter`})]}),(0,p.jsx)(A_,{c:e.scan_coverage??null}),(e.unconfirmed?.length??0)>0&&(0,p.jsxs)(`p`,{className:`mt-3 text-xs text-warning`,children:[`Not confirmed either way (still open): `,e.unconfirmed.map(e=>`${e.ref} (${e.file}:${e.line})`).join(`, `)]}),(0,p.jsx)(j_,{inv:e.scan_inventory??null,spot:e.spot_checks??null,commit:e.scan?.head_commit}),e.coverage&&(0,p.jsx)(`p`,{className:`mt-3 text-xs text-tertiary`,children:e.coverage})]}),s.length===0?(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-6 text-center`,children:[(0,p.jsx)(`div`,{className:`text-2xl`,"aria-hidden":!0,children:`🛡️`}),(0,p.jsx)(`div`,{className:`mt-1 font-medium`,children:`Nothing to fix here`}),(0,p.jsx)(`div`,{className:`text-sm text-secondary`,children:n===`all`?`No open findings. Say “check again” after your next changes.`:`No open ${n} findings.`})]}):(0,p.jsx)(`ul`,{className:`space-y-2`,"aria-label":`Findings, worst first`,children:s.map(t=>(0,p.jsx)(S_,{f:t,repo:e.repo.full_name,onChange:o},t.id))})]})}function B_(){let e=new URLSearchParams(location.search),[t,n]=(0,m.useState)(e.has(`local`)?M_:P_[e.get(`link`)??``]??null),[r,i]=(0,m.useState)(null),[a,o]=(0,m.useState)(null),[s,c]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{if(!window.matchMedia)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>{(r_||!document.documentElement.getAttribute(`data-theme`))&&document.documentElement.setAttribute(`data-theme`,e.matches?`dark`:`light`)};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,m.useEffect)(()=>{let r=a_(e=>n(e)),a=e.get(`view`),s={account:`account`,retention:`billing_options`,results:`get_results`};o_().then(async()=>{r_&&!t&&(a&&s[a]?n(await c_(s[a])):await d_()),c(!0)}).catch(e=>{o(String(e)),c(!0)});let l=e=>{i(e.detail),setTimeout(()=>i(null),4e3)};return window.addEventListener(`vf-toast`,l),()=>{r(),window.removeEventListener(`vf-toast`,l)}},[]),a)return(0,p.jsxs)(`div`,{role:`alert`,className:`p-4 text-sm text-danger`,children:[`Something went wrong: `,a]});if(!s)return(0,p.jsx)(`div`,{className:`p-6 text-sm text-tertiary`,role:`status`,children:`Loading Vibe Fortress…`});let l=e=>n(e),u=t?.view;return(0,p.jsxs)(`main`,{className:`mx-auto max-w-2xl space-y-4 p-4 text-default`,"data-view":u??`none`,children:[(0,p.jsxs)(`header`,{className:`flex items-center gap-2 text-primary`,children:[(0,p.jsx)(b_,{}),(0,p.jsx)(`span`,{className:`text-lg font-semibold tracking-tight text-default`,children:`Vibe Fortress`})]}),u===`results`?(0,p.jsx)(z_,{data:t,setError:o}):u===`account`?(0,p.jsx)(k_,{a:t,go:l}):u===`retention`?(0,p.jsx)(I_,{r:t,go:l},JSON.stringify(t.reason)):u===`offer`?(0,p.jsx)(F_,{o:t}):u===`local`?(0,p.jsx)(R_,{d:t}):u===`local-account`?(0,p.jsx)(N_,{a:t}):(0,p.jsx)(L_,{}),r&&(0,p.jsx)(`div`,{role:`status`,className:`fixed inset-x-4 bottom-4 mx-auto max-w-md rounded-xl bg-surface-elevated p-3 text-sm shadow-lg ring-1 ring-[var(--color-border-default)]`,children:r})]})}(0,te.createRoot)(document.getElementById(`root`)).render((0,p.jsx)(m.StrictMode,{children:(0,p.jsx)(g,{linkComponent:`a`,children:(0,p.jsx)(B_,{})})}));</script>
115
+ container holding the app. Specify either width or maxWidth, and either height or maxHeight.`),locale:P().optional().describe(`User's language and region preference in BCP 47 format.`),timeZone:P().optional().describe(`User's timezone in IANA format.`),userAgent:P().optional().describe(`Host application identifier.`),platform:V([W(`web`),W(`desktop`),W(`mobile`)]).optional().describe(`Platform type for responsive design decisions.`),deviceCapabilities:z({touch:I().optional().describe(`Whether the device supports touch input.`),hover:I().optional().describe(`Whether the device supports hover interactions.`)}).optional().describe(`Device input capabilities.`),safeAreaInsets:z({top:F().describe(`Top safe area inset in pixels.`),right:F().describe(`Right safe area inset in pixels.`),bottom:F().describe(`Bottom safe area inset in pixels.`),left:F().describe(`Left safe area inset in pixels.`)}).optional().describe(`Mobile safe area boundaries in pixels.`)}).passthrough(),Jg=z({method:W(`ui/notifications/host-context-changed`),params:qg.describe(`Partial context update containing only changed fields.`)});z({method:W(`ui/update-model-context`),params:z({content:R(Wd).optional().describe(`Context content blocks (text, image, etc.).`),structuredContent:H(P(),L().describe(`Structured content for machine-readable context data.`)).optional().describe(`Structured content for machine-readable context data.`)})}),z({method:W(`ui/initialize`),params:z({appInfo:Vu.describe(`App identification (name and version).`),appCapabilities:Ug.describe(`Features and capabilities this app provides.`),protocolVersion:P().describe(`Protocol version this app supports.`)})});var Yg=z({protocolVersion:P().describe(`Negotiated protocol version string (e.g., "2025-11-21").`),hostInfo:Vu.describe(`Host application identification and version.`),hostCapabilities:Hg.describe(`Features and capabilities provided by the host.`),hostContext:qg.describe(`Rich context about the host environment.`)}).passthrough(),Xg={target:`draft-2020-12`};async function Zg(e,t){let n=e[`~standard`];if(n.jsonSchema)return n.jsonSchema[t](Xg);throw Error(`Schema (vendor: ${n.vendor}) does not implement Standard JSON Schema (~standard.jsonSchema). Use a library that does (zod v4, ArkType, Valibot) or wrap your schema accordingly.`)}async function Qg(e,t,n=``){let r=await e[`~standard`].validate(t);if(r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `);throw Error(n+e)}return r.value}function $g(e,t){let n={...e,...t};return t.experimental!==void 0&&(n.experimental={...e.experimental,...t.experimental}),t.tools!==void 0&&(n.tools={...e.tools,...t.tools}),n}var e_=class e extends eg{_appInfo;_appCapabilities;options;_hostCapabilities;_hostInfo;_hostContext;_registeredTools={};_initializedSent=!1;_registeredEvents=new Set;_events=new yg;_methods=new bg;setRequestHandler=(...e)=>{let[t,...n]=Sg(`request`,e)??e;this._methods.claim(t,`setRequestHandler`),super.setRequestHandler.call(this,t,...n)};setNotificationHandler=(...e)=>{let[t,...n]=Sg(`notification`,e)??e;this._methods.claim(t,`setNotificationHandler`),super.setNotificationHandler.call(this,t,...n)};removeRequestHandler=e=>{this._methods.release(e),super.removeRequestHandler(e)};removeNotificationHandler=e=>{this._methods.release(e),super.removeNotificationHandler(e)};replaceRequestHandler=(e,...t)=>{this._methods.replace(e),super.setRequestHandler.call(this,e,...t)};_assertInitialized(e){if(this._initializedSent)return;let t=`[ext-apps] App.${e}() called before connect() completed the ui/initialize handshake. Await app.connect() before calling this method, or move data loading to an ontoolresult handler.`;if(this.options?.strict)throw Error(t);console.warn(`${t}. This will throw in a future release.`)}eventSchemas={toolinput:Pg,toolinputpartial:Fg,toolresult:Kg,toolcancelled:Ig,hostcontextchanged:Jg};static ONE_SHOT_EVENTS=new Set([`toolinput`,`toolinputpartial`,`toolresult`,`toolcancelled`]);_everHadListener=new Set;_assertHandlerTiming(t){if(!e.ONE_SHOT_EVENTS.has(t)||this._everHadListener.has(t)||(this._everHadListener.add(t),!this._initializedSent))return;let n=`[ext-apps] "${String(t)}" handler registered after connect() completed the ui/initialize handshake. The host may have already sent this notification. Register handlers before calling app.connect().`;if(this.options?.strict)throw Error(n);console.warn(n)}setEventHandler(e,t){t&&this._assertHandlerTiming(e),this._ensureEventSlot(e),this._events.setHandler(e,t)}addEventListener(e,t){this._assertHandlerTiming(e),this._ensureEventSlot(e),this._events.addEventListener(e,t)}removeEventListener(e,t){this._events.removeEventListener(e,t)}_ensureEventSlot(e){if(this._registeredEvents.has(e))return;let t=this.eventSchemas[e];if(!t)throw Error(`Unknown event: ${String(e)}`);this.setNotificationHandler(t.shape.method.value,{params:t.shape.params},t=>{let n=t;e===`hostcontextchanged`&&(this._hostContext={...this._hostContext,...n}),this._events.dispatch(e,n)}),this._registeredEvents.add(e)}getEventHandler(e){return this._events.getHandler(e)}warnIfRequestHandlerReplaced(e,t,n){t&&n&&console.warn(`[MCP Apps] ${e} handler replaced. Previous handler will no longer be called.`)}constructor(e,t={},n={autoResize:!0}){super(n),this._appInfo=e,this._appCapabilities=t,this.options=n,this._methods.replace(`notifications/cancelled`),this._methods.replace(`notifications/progress`),n.allowUnsafeEval||nn({jitless:!0}),this.replaceRequestHandler(`ping`,e=>(console.log(`Received ping:`,e.params),{})),this.setEventHandler(`hostcontextchanged`,void 0)}buildContext(e){return e}registerAppCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after transport is established`);this._appCapabilities=$g(this._appCapabilities,e)}registerTool(e,t,n){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let r=this,i=()=>{r._initializedSent&&r._appCapabilities.tools?.listChanged&&r.sendToolListChanged()},a=t.inputSchema!==void 0,o={title:t.title,description:t.description,inputSchema:t.inputSchema,outputSchema:t.outputSchema,annotations:t.annotations,_meta:t._meta,enabled:!0,enable(){this.enabled=!0,i()},disable(){this.enabled=!1,i()},update(e){Object.assign(this,e),i()},remove(){r._registeredTools[e]===o&&(delete r._registeredTools[e],i())},handler:async(t,r)=>{if(!o.enabled)throw Error(`Tool ${e} is disabled`);let i;if(a){let a=o.inputSchema;i=await n(a?await Qg(a,t??{},`Invalid input for tool ${e}: `):t??{},r)}else i=await n(r);return o.outputSchema&&!i.isError&&(i.structuredContent=await Qg(o.outputSchema,i.structuredContent,`Invalid output for tool ${e}: `)),i}};return this._registeredTools[e]=o,!this._appCapabilities.tools&&!this.transport&&this.registerAppCapabilities({tools:{listChanged:!0}}),this.ensureToolHandlersInitialized(),i(),o}_toolHandlersInitialized=!1;ensureToolHandlersInitialized(){this._toolHandlersInitialized||(this._toolHandlersInitialized=!0,this.oncalltool=async(e,t)=>{let n=this._registeredTools[e.name];if(!n)throw Error(`Tool ${e.name} not found`);return n.handler(e.arguments,t)},this.onlisttools=async(e,t)=>({tools:await Promise.all(Object.entries(this._registeredTools).filter(([e,t])=>t.enabled).map(async([e,t])=>{let n={name:e,title:t.title,description:t.description,inputSchema:t.inputSchema?await Zg(t.inputSchema,`input`):{type:`object`,properties:{}}};return t.outputSchema&&(n.outputSchema=await Zg(t.outputSchema,`output`)),t.annotations&&(n.annotations=t.annotations),t._meta&&(n._meta=t._meta),n}))}))}async sendToolListChanged(e={}){this._assertInitialized(`sendToolListChanged`),await this.notification({method:`notifications/tools/list_changed`,params:e})}getHostCapabilities(){return this._hostCapabilities}getHostVersion(){return this._hostInfo}getHostContext(){return this._hostContext}get ontoolinput(){return this.getEventHandler(`toolinput`)}set ontoolinput(e){this.setEventHandler(`toolinput`,e)}get ontoolinputpartial(){return this.getEventHandler(`toolinputpartial`)}set ontoolinputpartial(e){this.setEventHandler(`toolinputpartial`,e)}get ontoolresult(){return this.getEventHandler(`toolresult`)}set ontoolresult(e){this.setEventHandler(`toolresult`,e)}get ontoolcancelled(){return this.getEventHandler(`toolcancelled`)}set ontoolcancelled(e){this.setEventHandler(`toolcancelled`,e)}get onhostcontextchanged(){return this.getEventHandler(`hostcontextchanged`)}set onhostcontextchanged(e){this.setEventHandler(`hostcontextchanged`,e)}_onteardown;get onteardown(){return this._onteardown}set onteardown(e){this.warnIfRequestHandlerReplaced(`onteardown`,this._onteardown,e),this._onteardown=e,this.replaceRequestHandler(`ui/resource-teardown`,{params:zg.shape.params,result:Bg},(e,t)=>{if(!this._onteardown)throw Error(`No onteardown handler set`);return this._onteardown(e,t)})}_oncalltool;get oncalltool(){return this._oncalltool}set oncalltool(e){this.warnIfRequestHandlerReplaced(`oncalltool`,this._oncalltool,e),this._oncalltool=e,this.replaceRequestHandler(`tools/call`,(e,t)=>{if(!this._oncalltool)throw Error(`No oncalltool handler set`);return this._oncalltool(e.params,t)})}_onlisttools;get onlisttools(){return this._onlisttools}set onlisttools(e){this.warnIfRequestHandlerReplaced(`onlisttools`,this._onlisttools,e),this._onlisttools=e,this.replaceRequestHandler(`tools/list`,(e,t)=>{if(!this._onlisttools)throw Error(`No onlisttools handler set`);return this._onlisttools(e.params,t)})}assertCapabilityForMethod(e){if(e===`sampling/createMessage`&&!this._hostCapabilities?.sampling)throw Error(`Host does not support sampling (required for ${e})`)}assertRequestHandlerCapability(e){switch(e){case`tools/call`:case`tools/list`:if(!this._appCapabilities.tools)throw Error(`Client does not support tool capability (required for ${e})`);return;default:return}}assertNotificationCapability(e){}async callServerTool(e,t){if(this._assertInitialized(`callServerTool`),typeof e==`string`)throw Error(`callServerTool() expects an object as its first argument, but received a string ("${e}"). Did you mean: callServerTool({ name: "${e}", arguments: { ... } })?`);return await this.request({method:`tools/call`,params:e},{onprogress:()=>{},resetTimeoutOnProgress:!0,...t})}async readServerResource(e,t){return this._assertInitialized(`readServerResource`),await this.request({method:`resources/read`,params:e},t)}async listServerResources(e,t){return this._assertInitialized(`listServerResources`),await this.request({method:`resources/list`,params:e},t)}async createSamplingMessage(e,t){return this._assertInitialized(`createSamplingMessage`),await this.request({method:`sampling/createMessage`,params:e},t)}sendMessage(e,t){return this._assertInitialized(`sendMessage`),this.request({method:`ui/message`,params:e},jg,t)}sendLog(e){return this.notification({method:`notifications/message`,params:e})}updateModelContext(e,t){return this._assertInitialized(`updateModelContext`),this.request({method:`ui/update-model-context`,params:e},Fu,t)}openLink(e,t){return this._assertInitialized(`openLink`),this.request({method:`ui/open-link`,params:e},kg,t)}sendOpenLink=this.openLink;downloadFile(e,t){return this._assertInitialized(`downloadFile`),this.request({method:`ui/download-file`,params:e},Ag,t)}requestTeardown(e={}){return this.notification({method:`ui/notifications/request-teardown`,params:e})}requestDisplayMode(e,t){return this._assertInitialized(`requestDisplayMode`),this.request({method:`ui/request-display-mode`,params:e},Wg,t)}sendSizeChanged(e){return this.notification({method:`ui/notifications/size-changed`,params:e})}setupSizeChangedNotifications(){let e=!1,t=0,n=0,r=()=>{e||(e=!0,requestAnimationFrame(()=>{e=!1;let r=document.documentElement,i=r.style.height;r.style.height=`max-content`;let a=Math.ceil(r.getBoundingClientRect().height);r.style.height=i;let o=Math.ceil(window.innerWidth);(o!==t||a!==n)&&(t=o,n=a,this.sendSizeChanged({width:o,height:a}))}))};r();let i=new ResizeObserver(r);return i.observe(document.documentElement),i.observe(document.body),()=>i.disconnect()}async connect(e=new Tg(window.parent,window.parent),t){if(this.transport)throw Error(`App is already connected. Call close() before connecting again.`);this._initializedSent=!1;try{await super.connect(e);let n=await this.request({method:`ui/initialize`,params:{appCapabilities:this._appCapabilities,appInfo:this._appInfo,protocolVersion:wg}},Yg,t);if(n===void 0)throw Error(`Server sent invalid initialize result: ${n}`);this._hostCapabilities=n.hostCapabilities,this._hostInfo=n.hostInfo,this._hostContext=n.hostContext,await this.notification({method:`ui/notifications/initialized`}),this._initializedSent=!0,this.options?.autoResize&&this.setupSizeChangedNotifications()}catch(e){throw this.close(),e}}},t_=null,n_=new Set,r_=window.parent===window,i_=e=>e?.view&&n_.forEach(t=>t(e));function a_(e){return n_.add(e),()=>n_.delete(e)}async function o_(){if(r_)return;t_=new e_({name:`vibefort-panel`,version:`0.1.0`},{}),t_.ontoolresult=e=>i_(e.structuredContent),t_.onhostcontextchanged=e=>{e.theme&&document.documentElement.setAttribute(`data-theme`,e.theme)},await t_.connect();let e=t_.getHostContext()?.theme;e&&document.documentElement.setAttribute(`data-theme`,e)}async function s_(e,t){return(await(await fetch(`/mcp`,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json, text/event-stream`,authorization:`Bearer vf_dev_token`},body:JSON.stringify({jsonrpc:`2.0`,id:1,method:`tools/call`,params:{name:e,arguments:t}})})).json()).result}async function c_(e,t={}){let n=r_?await s_(e,t):await t_.callServerTool({name:e,arguments:t});if(n?.isError)throw Error(n.content?.[0]?.text??`Request failed`);return n?.structuredContent}async function l_(e){r_?window.dispatchEvent(new CustomEvent(`vf-toast`,{detail:`Would ask Claude: “${e}”`})):await t_.sendMessage({role:`user`,content:[{type:`text`,text:e}]})}function u_(e){r_||!t_?window.open(e,`_blank`,`noopener`):t_.openLink({url:e})}async function d_(e){let t=await c_(`get_results`,e?{repo:e}:{});return i_(t),t}var f_=[`critical`,`high`,`medium`,`low`],p_={critical:`danger`,high:`warning`,medium:`info`,low:`secondary`},m_={critical:`bg-danger-solid`,high:`bg-warning-solid`,medium:`bg-info-solid`,low:`bg-secondary-solid`},h_={A:`#16a34a`,B:`#65a30d`,C:`#ca8a04`,D:`#ea580c`,F:`#dc2626`},g_={A:`Looking solid`,B:`Pretty good`,C:`Needs work`,D:`Risky`,F:`Not safe to launch`},__={open:`Open`,fix_proposed:`Fix proposed`,fixed:`Fixed`,false_positive:`False positive`,accepted_risk:`Accepted risk`},v_=[`fixed`,`false_positive`,`accepted_risk`],y_=e=>{if(!e)return`never`;let t=Math.round((Date.now()-new Date(e).getTime())/6e4);return t<1?`just now`:t<60?`${t} min ago`:t<1440?`${Math.round(t/60)} h ago`:`${Math.round(t/1440)} d ago`};function b_(){return(0,p.jsxs)(`svg`,{width:`22`,height:`22`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:[(0,p.jsx)(`path`,{d:`M12 2.5 4.5 5.4v5.6c0 4.5 3 8.3 7.5 10.5 4.5-2.2 7.5-6 7.5-10.5V5.4L12 2.5Z`,fill:`currentColor`,opacity:`.15`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinejoin:`round`}),(0,p.jsx)(`path`,{d:`m8.8 11.9 2.2 2.2 4.3-4.5`,stroke:`currentColor`,strokeWidth:`1.9`,strokeLinecap:`round`,strokeLinejoin:`round`})]})}function x_({grade:e,score:t}){let n=2*Math.PI*38;return(0,p.jsxs)(`div`,{className:`relative size-[104px] shrink-0`,role:`img`,"aria-label":`Security grade ${e}, score ${t} out of 100`,children:[(0,p.jsxs)(`svg`,{viewBox:`0 0 96 96`,className:`size-full -rotate-90`,children:[(0,p.jsx)(`circle`,{cx:`48`,cy:`48`,r:38,fill:`none`,strokeWidth:`8`,className:`stroke-[var(--color-border-subtle)]`}),(0,p.jsx)(`circle`,{cx:`48`,cy:`48`,r:38,fill:`none`,strokeWidth:`8`,strokeLinecap:`round`,stroke:h_[e],strokeDasharray:n,strokeDashoffset:n*(1-t/100),style:{transition:`stroke-dashoffset .6s ease`}})]}),(0,p.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center`,children:[(0,p.jsx)(`span`,{className:`text-4xl font-semibold leading-none`,style:{color:h_[e]},children:e}),(0,p.jsxs)(`span`,{className:`mt-1 text-xs text-tertiary`,children:[t,`/100`]})]})]})}function S_({f:e,repo:t,onChange:n}){let[r,i]=(0,m.useState)(!1),[a,o]=(0,m.useState)(!1),[s,c]=(0,m.useState)(null),l=v_.includes(e.status),u=async t=>{o(!0),c(null);try{await c_(`update_finding`,{finding_id:e.id,status:t}),await n()}catch(e){c(e.message)}finally{o(!1)}};return(0,p.jsxs)(`li`,{className:`rounded-xl border border-default bg-surface ${l?`opacity-60`:``}`,children:[(0,p.jsxs)(`button`,{className:`flex w-full items-start gap-3 p-3 text-left`,"aria-expanded":r,onClick:()=>i(!r),children:[(0,p.jsx)(ae,{color:p_[e.severity],variant:`soft`,size:`sm`,className:`mt-0.5 shrink-0 uppercase`,children:e.severity}),(0,p.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,p.jsx)(`span`,{className:`block break-words text-sm font-medium text-default`,children:e.title}),(0,p.jsxs)(`span`,{className:`mt-0.5 block truncate text-xs text-tertiary`,children:[(0,p.jsx)(`span`,{className:`font-medium text-secondary`,children:e.ref}),` · `,e.file,`:`,e.line]})]}),e.status!==`open`&&(0,p.jsx)(ae,{color:e.status===`fixed`?`success`:`secondary`,variant:`outline`,size:`sm`,className:`shrink-0`,children:__[e.status]}),(0,p.jsx)(`span`,{"aria-hidden":!0,className:`mt-1 text-tertiary transition-transform ${r?`rotate-90`:``}`,children:`›`})]}),r&&(0,p.jsxs)(`div`,{className:`space-y-3 border-t border-subtle p-3 text-sm`,children:[(0,p.jsxs)(`section`,{children:[(0,p.jsx)(`h4`,{className:`mb-1 text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`What’s wrong`}),(0,p.jsx)(`p`,{className:`break-words text-secondary`,children:e.explanation})]}),(0,p.jsxs)(`section`,{children:[(0,p.jsx)(`h4`,{className:`mb-1 text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`What an attacker could do`}),(0,p.jsx)(`p`,{className:`break-words text-secondary`,children:e.attack_scenario})]}),e.excerpt&&(0,p.jsx)(`pre`,{className:`overflow-x-auto rounded-lg bg-surface-secondary p-3 text-xs text-default`,children:(0,p.jsx)(`code`,{children:e.excerpt})}),(0,p.jsxs)(`section`,{children:[(0,p.jsx)(`h4`,{className:`mb-1 text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`How to fix`}),(0,p.jsx)(`p`,{className:`break-words text-secondary`,children:e.fix_guidance})]}),(0,p.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:[e.owasp,e.cwe,e.rule_id,`${e.confidence} confidence`,...e.review_label?[e.review_label]:[]].map(e=>(0,p.jsx)(ae,{variant:`outline`,color:`secondary`,size:`sm`,children:e},e))}),e.counter_check&&(0,p.jsxs)(`p`,{className:`break-words text-xs text-tertiary`,children:[`Counter-check, as reported by the agent: `,e.counter_check.claim,` (`,e.counter_check.file,`:`,e.counter_check.line,`)`]}),s&&(0,p.jsx)(`p`,{role:`alert`,className:`text-xs text-danger`,children:s}),(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[e.status===`open`&&(0,p.jsx)(E,{color:`primary`,size:`sm`,onClick:()=>l_(`Fix Vibe Fortress finding ${e.ref} ("${e.title}") in ${t}: call start_scan with repo "${t}", kind "fix" and finding_id "${e.ref}", follow its instructions, and open a pull request on a new branch (never push to main).`),children:`Fix this`}),e.pr_url&&(0,p.jsx)(E,{variant:`outline`,color:`secondary`,size:`sm`,onClick:()=>u_(e.pr_url),children:`View pull request`}),e.status===`open`&&(0,p.jsx)(E,{variant:`ghost`,color:`secondary`,size:`sm`,disabled:a,onClick:()=>u(`false_positive`),children:`False positive`}),e.status===`open`&&(0,p.jsx)(E,{variant:`ghost`,color:`secondary`,size:`sm`,disabled:a,onClick:()=>u(`accepted_risk`),children:`Accept risk`}),(e.status===`false_positive`||e.status===`accepted_risk`)&&(0,p.jsx)(E,{variant:`ghost`,color:`secondary`,size:`sm`,disabled:a,onClick:()=>u(`open`),children:`Reopen`})]})]})]})}function C_({label:e,used:t,max:n}){let r=n<0?8:Math.min(100,t/Math.max(1,n)*100);return(0,p.jsxs)(`div`,{children:[(0,p.jsxs)(`div`,{className:`mb-1 flex justify-between text-sm`,children:[(0,p.jsx)(`span`,{className:`text-secondary`,children:e}),(0,p.jsxs)(`span`,{className:`text-default`,children:[t,` / `,n<0?`unlimited`:n]})]}),(0,p.jsx)(`div`,{className:`h-2 overflow-hidden rounded-full bg-surface-tertiary`,role:`progressbar`,"aria-label":e,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":n<0?void 0:n,children:(0,p.jsx)(`div`,{className:`h-full rounded-full bg-primary-solid`,style:{width:`${r}%`}})})]})}var w_=e=>{let t=e.entitlement,n=e=>e?e.slice(0,10):``;return t.source===`trial`?`Free trial: ${t.trial_days_left} day${t.trial_days_left===1?``:`s`} left (ends ${n(t.trial_ends_at)}). No card needed.`:t.source===`subscription`?t.subscription?.cancelling?`Cancelled: you keep Pro until ${n(t.subscription.paid_through)}.`:t.subscription?.payment_issue?`The last payment failed: update your card in billing.`:`Pro${t.subscription?.interval===`year`?`, annual`:t.subscription?.interval===`month`?`, monthly`:``}${t.subscription?.paid_through?`, paid through ${n(t.subscription.paid_through)}`:``}.`:t.trial_ends_at?`Free. Your trial ended ${n(t.trial_ends_at)}.`:`Free plan.`},T_=e=>e<0?`Unlimited`:String(e);function E_({yes:e,label:t}){return(0,p.jsxs)(`span`,{className:`inline-flex items-center gap-1 ${e?`text-success`:`text-danger`}`,children:[(0,p.jsx)(`span`,{"aria-hidden":!0,className:`font-semibold`,children:e?`✓`:`✗`}),t?(0,p.jsx)(`span`,{className:`text-default`,children:t}):null,(0,p.jsxs)(`span`,{className:`sr-only`,children:[e?`Included`:`Not included`,t?`: ${t}`:``]})]})}var D_=[{label:`Projects`,cell:e=>({yes:e.repos!==0,label:T_(e.repos)})},{label:`Deep scans a month`,cell:e=>({yes:e.deepScans!==0,label:e.deepScans===0?void 0:T_(e.deepScans)})},{label:`Check-again scans a month`,cell:e=>({yes:e.diffScans!==0,label:e.diffScans===0?void 0:T_(e.diffScans)})},{label:`Fix pull requests a month`,cell:e=>({yes:e.fixPrs!==0,label:e.fixPrs===0?void 0:T_(e.fixPrs)})},{label:`Live config checks`,cell:e=>({yes:e.liveChecks})},{label:`Team workspaces`,cell:e=>({yes:e.team})},{label:`README badge`,cell:e=>({yes:e.badge})}];function O_({a:e}){if(!e.plans)return null;let t=[[`free`,`Free`],[`pro`,`Pro`]],n=e.entitlement.source===`trial`;return(0,p.jsx)(`div`,{className:`overflow-hidden rounded-xl border border-default bg-surface`,"data-testid":`plan-compare`,children:(0,p.jsxs)(`table`,{className:`w-full table-fixed border-collapse text-sm`,children:[(0,p.jsx)(`caption`,{className:`sr-only`,children:`Free compared with Pro`}),(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{children:[(0,p.jsx)(`th`,{scope:`col`,className:`w-[44%] p-2 text-left text-xs font-medium text-tertiary`,children:(0,p.jsx)(`span`,{className:`sr-only`,children:`Feature`})}),t.map(([t,r])=>(0,p.jsxs)(`th`,{scope:`col`,"data-current":e.plan===t,className:`p-2 text-left font-semibold ${e.plan===t?`bg-primary-surface text-default`:`text-secondary`}`,children:[r,e.plan===t&&(0,p.jsxs)(`span`,{className:`mt-0.5 block text-[11px] font-medium text-primary`,children:[`Your plan`,n?` (trial)`:``]})]},t))]})}),(0,p.jsx)(`tbody`,{children:D_.map(n=>(0,p.jsxs)(`tr`,{className:`border-t border-subtle`,children:[(0,p.jsx)(`th`,{scope:`row`,className:`p-2 text-left text-xs font-normal text-secondary`,children:n.label}),t.map(([t])=>{let r=n.cell(e.plans[t]);return(0,p.jsx)(`td`,{className:`p-2 align-top ${e.plan===t?`bg-primary-surface`:``}`,children:(0,p.jsx)(E_,{yes:r.yes,label:r.label})},t)})]},n.label))})]})})}function k_({a:e,go:t}){let n=e.badge??null,[r,i]=(0,m.useState)(!1),[a,o]=(0,m.useState)(null),s=async()=>{i(!0),o(null);try{t(await c_(`billing_options`))}catch(e){o(e.message)}finally{i(!1)}},c=n?`[![Scanned by Vibe Fortress](${n.image})](${n.page})`:null;return(0,p.jsxs)(`div`,{className:`space-y-4`,children:[(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-4`,children:[(0,p.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,p.jsx)(`div`,{className:`font-medium text-default`,children:`Your plan`}),(0,p.jsx)(ae,{color:e.plan===`pro`?`success`:`secondary`,variant:`soft`,children:e.entitlement.source===`trial`?`Pro trial`:e.plan===`pro`?`Pro`:`Free`})]}),(0,p.jsx)(`p`,{className:`mb-3 text-sm text-secondary`,children:w_(e)}),(0,p.jsxs)(`div`,{className:`space-y-3`,children:[(0,p.jsx)(C_,{label:`Repos`,used:e.usage.repos,max:e.limits.repos}),(0,p.jsx)(C_,{label:`Deep scans this month`,used:e.usage.deep,max:e.limits.deepScans}),(0,p.jsx)(C_,{label:`Check-again scans this month`,used:e.usage.diff,max:e.limits.diffScans}),(0,p.jsx)(C_,{label:`Fix pull requests this month`,used:e.usage.fix,max:e.limits.fixPrs})]}),(0,p.jsxs)(`p`,{className:`mt-3 text-xs text-tertiary`,children:[`Monthly counts start again on `,e.resets_at.slice(0,10),`.`]})]}),(0,p.jsx)(O_,{a:e}),e.upgrade_url?(0,p.jsxs)(`div`,{className:`rounded-xl border border-primary-surface bg-primary-surface p-4`,children:[(0,p.jsxs)(`h3`,{className:`font-medium text-default`,children:[`Vibe Fortress Pro, €`,e.price_eur.month,`/month or €`,e.price_eur.year,`/year`]}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Cancel anytime. VAT added where it applies.`}),(0,p.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,p.jsx)(E,{color:`primary`,onClick:()=>u_(e.upgrade_url_month??e.upgrade_url),children:e.entitlement.source===`trial`?`Keep Pro, monthly`:`Upgrade, monthly`}),e.upgrade_url_year?(0,p.jsx)(E,{variant:`outline`,color:`secondary`,onClick:()=>u_(e.upgrade_url_year),children:`Annual, save €${e.price_eur.month*12-e.price_eur.year}`}):null]})]}):e.portal_url?(0,p.jsxs)(`div`,{children:[(0,p.jsx)(E,{variant:`outline`,color:`secondary`,disabled:r,onClick:s,children:`Manage billing`}),a&&(0,p.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:a}),(0,p.jsx)(`p`,{className:`mt-1 text-xs text-tertiary`,children:`Billing opens in your browser. Cancel anytime.`})]}):null,e.live_checks&&(0,p.jsxs)(`details`,{className:`rounded-xl border border-default bg-surface p-4`,"data-testid":`live-connections`,children:[(0,p.jsxs)(`summary`,{className:`flex cursor-pointer items-center justify-between gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm font-medium`,children:`See what is included in live config checks`}),(0,p.jsx)(ae,{color:e.live_checks.included?`success`:`secondary`,variant:`soft`,children:e.live_checks.included?`In your plan`:`Trial and Pro`})]}),(0,p.jsx)(`p`,{className:`my-2 text-sm text-secondary`,children:`Your own Claude reads the real settings of your services, read-only, through connectors you already have. Connect these:`}),(0,p.jsx)(`ul`,{className:`space-y-2 text-sm`,children:e.live_checks.connections.map(e=>(0,p.jsxs)(`li`,{children:[(0,p.jsx)(`b`,{className:`text-default`,children:e.label}),` `,(0,p.jsxs)(`span`,{className:`text-tertiary`,children:[`via `,e.connectors.join(` or `)]}),(0,p.jsx)(`div`,{className:`text-secondary`,children:e.access})]},e.service))}),(0,p.jsx)(`p`,{className:`mt-2 text-xs text-tertiary`,children:`Never paste a token into chat, and never let Claude run a call that can change something.`})]}),c&&(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-4`,children:[(0,p.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`README badge`}),(0,p.jsx)(`pre`,{className:`overflow-x-auto rounded-lg bg-surface-secondary p-2 text-xs`,children:(0,p.jsx)(`code`,{children:c})}),(0,p.jsx)(E,{className:`mt-2`,size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>navigator.clipboard?.writeText(c),children:`Copy markdown`})]}),(0,p.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>u_(e.export_url),children:`Export my data`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`danger`,onClick:()=>u_(e.delete_url),children:`Delete my account`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>u_(e.privacy_url),children:`Privacy`})]}),(0,p.jsx)(`p`,{className:`text-xs text-tertiary`,children:`Secrets and dependency alerts stay free on every plan, with no account. Vibe Fortress never stores your source code.`})]})}var A_={gitleaks:`Secret search`,opengrep:`Code rules`,"vibefort-config":`Configuration checks`};function j_({lt:e}){if(!e)return null;if(!e.used||!e.facts)return(0,p.jsxs)(`div`,{className:`mt-3 rounded-lg border border-subtle bg-surface-secondary p-2 text-xs`,role:`note`,"data-testid":`local-tools`,children:[(0,p.jsx)(`span`,{className:`font-semibold text-warning`,children:`Without local tools, lower confidence.`}),` The file list, the package list and the search for secrets rest on what the agent reported. Run the scan where the project is checked out to use the local tools.`]});let t=e.facts;return(0,p.jsxs)(`div`,{className:`mt-3 rounded-lg border border-subtle p-2 text-xs`,role:`note`,"data-testid":`local-tools`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`span`,{className:`font-semibold`,children:`Local tools ran on your machine`}),` `,(0,p.jsxs)(`span`,{className:`text-secondary`,children:[`at commit `,t.commit.slice(0,7)]})]}),(0,p.jsxs)(`ul`,{className:`mt-1 flex flex-col gap-0.5 text-secondary`,children:[(0,p.jsxs)(`li`,{children:[`File list from git: `,t.files.toLocaleString(`en-US`),` files, `,t.review.toLocaleString(`en-US`),` need review`,t.github===`agrees`?`; agrees with GitHub`:(t.github,``)]}),t.github===`differs`&&(0,p.jsxs)(`li`,{className:`text-warning`,children:[`The file list differs from GitHub's for this commit in `,t.github_diff,` file(s).`]}),(0,p.jsxs)(`li`,{children:[`Packages from the lockfile: `,t.packages.toLocaleString(`en-US`)]}),t.tools.map(e=>(0,p.jsxs)(`li`,{className:e.status===`ok`?``:`text-warning`,children:[A_[e.tool]??e.tool,`: `,e.status===`ok`?`ran${e.version?` (${e.tool===`vibefort-config`?`rules`:e.tool} ${e.version})`:``}`:`NOT run${e.reason?`: ${e.reason}`:``}`]},e.tool)),e.tool_findings>0&&(0,p.jsxs)(`li`,{children:[e.tool_findings,` finding`,e.tool_findings===1?``:`s`,` came from these tools`]}),t.dirty_files>0&&(0,p.jsxs)(`li`,{className:`text-warning`,children:[t.dirty_files,` tracked file(s) differed from the commit when the tools ran.`]}),e.proof_line&&(0,p.jsx)(`li`,{"data-testid":`proof-line`,className:e.proof?.state===`checked`&&!(e.proof.counts.no_match+e.proof.counts.no_line+e.proof.counts.no_file)?``:`text-warning`,children:e.proof_line}),(e.outside_review??0)>0&&(0,p.jsxs)(`li`,{"data-testid":`outside-review`,children:[e.outside_review,` tool result`,e.outside_review===1?` is`:`s are`,` in test, fixture or vendored code: shown at low, not triaged`]}),e.stable_line&&(0,p.jsx)(`li`,{"data-testid":`stable-line`,children:e.stable_line})]})]})}function M_({s:e,c:t,v:n,nt:r,lt:i}){if(!e)return null;let a=e.mode===`check-again`?`reviewable changed files`:`reviewable files`,o=e.percent!==null&&e.percent<50;return(0,p.jsxs)(`div`,{className:`mt-4 rounded-xl border border-subtle p-3`,"aria-label":`Scan coverage`,children:[(0,p.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2 text-sm`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Coverage`}),(0,p.jsx)(`span`,{className:o?`font-semibold text-warning`:`font-semibold`,children:e.recorded?e.percent===null?`n/a`:`${e.percent}%`:`not recorded`})]}),e.recorded?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`div`,{className:`mt-1 text-sm`,children:[`Reviewed `,(0,p.jsx)(`span`,{className:`font-semibold`,children:e.reviewed.toLocaleString(`en-US`)}),` of `,(0,p.jsx)(`span`,{className:`font-semibold`,children:e.reviewable.toLocaleString(`en-US`)}),` `,a]}),e.percent!==null&&(0,p.jsx)(`div`,{className:`mt-2 h-1.5 overflow-hidden rounded-full bg-surface-tertiary`,role:`img`,"aria-label":`${e.percent}% of ${a} reviewed`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full ${o?`bg-warning-solid`:`bg-primary-solid`}`,style:{width:`${Math.max(1,e.percent)}%`}})}),(0,p.jsx)(`p`,{className:`mt-2 text-xs ${e.not_covered?`text-warning`:`text-secondary`}`,children:e.mode===`check-again`?`${e.not_covered} changed file(s) not reviewed; ${e.unchanged} unchanged files were not re-read by design.`:`${e.not_covered.toLocaleString(`en-US`)} not covered: no review step read them.`}),e.mode===`full`&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-secondary`,children:[e.excluded.toLocaleString(`en-US`),` of `,e.listed.toLocaleString(`en-US`),` listed files excluded as not reviewable`,Object.keys(e.excluded_by_reason).length?` (${Object.entries(e.excluded_by_reason).map(([e,t])=>`${t} ${e}`).join(`, `)})`:``,`.`]}),!!e.tests&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-secondary`,children:[e.tests.toLocaleString(`en-US`),` test and fixture files are counted separately: searched for secrets, not reviewed line by line.`]}),!!e.shipped&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-secondary`,children:[e.shipped.toLocaleString(`en-US`),` committed build files were not reviewed and not verified against the source.`]}),!!e.partly_read&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-warning`,children:[e.partly_read.toLocaleString(`en-US`),` files were only partly read and are not counted as reviewed.`]}),r&&r.dropped_steps.length>0&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-warning`,children:[r.dropped_steps.length,` review step(s) did not run (no file in the branch): `,r.dropped_steps.slice(0,3).map(e=>e.title).join(`; `),`.`]}),r&&r.budget_left_out.length>0&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-warning`,children:[`High-risk files not reached: `,r.budget_left_out.map(e=>`${e.label} ${e.files}`).join(`, `),`.`]}),r&&r.map_warnings.length>0&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-secondary`,children:[r.map_warnings.length,` app map path(s) were not files in the branch.`]}),(e.unlisted>0||e.tree_truncated)&&(0,p.jsxs)(`p`,{className:`mt-1 text-xs text-warning`,children:[`Covers the `,e.listed.toLocaleString(`en-US`),` listed files only`,e.unlisted?`: ${e.unlisted.toLocaleString(`en-US`)} more files in the branch are not in the list`:`: GitHub truncated the file tree`,`.`]})]}):(0,p.jsx)(`p`,{className:`mt-1 text-xs text-secondary`,children:`This scan did not list the files in the branch, so no share can be given.`}),(0,p.jsx)(j_,{lt:i}),n&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsx)(`summary`,{className:`cursor-pointer`,children:`What is verified and what is reported`}),(0,p.jsxs)(`p`,{className:`mt-1`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Verified by Vibe Fortress:`}),` `,n.verified.join(`; `),`.`]}),!!n.collected?.length&&(0,p.jsxs)(`p`,{className:`mt-1`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Collected on your machine (taken as sent, not checked again by the server):`}),` `,n.collected.join(`; `),`.`]}),(0,p.jsxs)(`p`,{className:`mt-1`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Reported by the agent, not verified:`}),` `,n.reported.join(`; `),`.`]})]}),n&&(0,p.jsx)(`p`,{className:`mt-2 text-xs text-secondary`,children:n.grade_basis}),t?.recorded&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Plan diagnostic: `,t.reviewed,` of the `,t.planned,` planned files reported as read`]}),(0,p.jsxs)(`p`,{className:`mt-1 text-tertiary`,children:[`Counts only. The plan is chosen during the scan, so it says nothing about the rest of the branch. `,t.steps.reported,`/`,t.steps.total,` steps reported.`]}),t.empty_steps.length>0&&(0,p.jsxs)(`p`,{className:`mt-1 text-warning`,children:[`Reviewed nothing: `,t.empty_steps.join(`; `)]}),t.not_reviewed.length>0&&(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:t.not_reviewed.map(e=>(0,p.jsxs)(`li`,{className:`break-all font-mono`,children:[e.file,e.reason?(0,p.jsxs)(`span`,{className:`font-sans text-tertiary`,children:[` — `,e.reason]}):null]},e.file))})]})]})}function N_({inv:e,spot:t,commit:n}){if(!e)return(0,p.jsx)(`p`,{className:`mt-3 text-xs text-tertiary`,children:`File inventory not recorded for this scan.`});let r=e.mode===`check-again`?e.changed?.not_reviewed.length??0:e.not_covered,i=[[`reviewed`,e.reviewed],[`excluded`,e.excluded],[e.mode===`check-again`?`unchanged`:`not covered`,e.mode===`check-again`?e.unchanged:e.not_covered]];return(0,p.jsxs)(`div`,{className:`mt-4 rounded-xl border border-subtle p-3`,"aria-label":`File inventory`,children:[(0,p.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,p.jsx)(`span`,{className:`font-medium`,children:`Files in the branch`}),(0,p.jsxs)(`span`,{className:`font-semibold`,children:[e.total,e.cut?` (list covers ${e.listed})`:``]})]}),(0,p.jsx)(`div`,{className:`mt-2 grid grid-cols-3 gap-2 text-center text-xs`,children:i.map(([e,t])=>(0,p.jsxs)(`div`,{className:`rounded-lg border border-subtle p-2 ${e===`not covered`&&t>0?`text-warning`:``}`,children:[(0,p.jsx)(`div`,{className:`text-base font-semibold`,children:t}),(0,p.jsx)(`div`,{className:`text-tertiary`,children:e})]},e))}),e.mode===`check-again`&&e.changed&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-secondary`,children:[`Check-again: `,e.changed.total,` changed, `,e.changed.reviewable,` reviewable, `,e.changed.reviewed,` reviewed.`]}),Object.keys(e.excluded_by_reason).length>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-secondary`,children:[`Excluded: `,Object.entries(e.excluded_by_reason).map(([e,t])=>`${t} ${e}`).join(`, `)]}),r>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,open:!0,children:[(0,p.jsxs)(`summary`,{className:`cursor-pointer font-medium text-warning`,children:[r,` `,e.mode===`check-again`?`changed files not reviewed`:`not covered, highest risk first (by path and name)`]}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:(e.mode===`check-again`?(e.changed?.not_reviewed??[]).map(e=>({file:e,note:void 0})):e.not_covered_files).map(e=>(0,p.jsxs)(`li`,{className:`break-all font-mono`,children:[e.file,`risk`in e&&e.risk===`high`?(0,p.jsx)(`span`,{className:`font-sans font-medium text-warning`,children:` high risk`}):null,e.note?(0,p.jsxs)(`span`,{className:`font-sans text-tertiary`,children:[` — `,e.note]}):null]},e.file))}),e.not_covered_more>0&&(0,p.jsxs)(`p`,{className:`mt-1 text-tertiary`,children:[`…and `,e.not_covered_more,` more. The dashboard lists every file, with search; the data export has them too.`]})]}),e.reviewed_by_step.length>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsx)(`summary`,{className:`cursor-pointer`,children:`Why files were reviewed`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:e.reviewed_by_step.map(e=>(0,p.jsxs)(`li`,{children:[e.step,` `,(0,p.jsxs)(`span`,{className:`text-tertiary`,children:[`(`,e.files,`)`]})]},e.step))})]}),(e.risk_areas?.length??0)>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsx)(`summary`,{className:`cursor-pointer`,children:`High-risk areas (by path and name)`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-0.5`,children:e.risk_areas.map(e=>(0,p.jsxs)(`li`,{children:[e.label,`: `,(0,p.jsxs)(`span`,{className:e.reviewed<e.files?`text-warning`:``,children:[e.reviewed,` of `,e.files,` reviewed`]}),`, `,e.steps,` step`,e.steps===1?``:`s`]},e.area))})]}),e.unknown_refs.length>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-warning`,children:[e.unknown_refs.length,` file(s) named in the app map are not in the branch and were ignored.`]}),t&&t.answers.length>0&&(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-secondary`,children:[(0,p.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Spot checks (`,t.answers.length,`, seed `,t.seed,`)`]}),(0,p.jsxs)(`p`,{className:`mt-1 text-tertiary`,children:[`Vibe Fortress cannot verify the quoted text. Open each file at `,n??`the scanned commit`,` and compare the lines yourself.`]}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-1`,children:t.answers.map(e=>(0,p.jsxs)(`li`,{children:[(0,p.jsxs)(`span`,{className:`break-all font-mono`,children:[e.file,`:`,e.start_line,`-`,e.end_line]}),e.why===`finding`?` (finding ${e.ref??``})`:e.why===`risk`?` (high-risk area)`:``,` `,(0,p.jsxs)(`span`,{className:e.sha_matches?`text-tertiary`:`font-semibold text-warning`,children:[`sha `,e.blob_sha,e.sha_matches?` matches`:` DIFFERS`]}),(0,p.jsx)(`pre`,{className:`mt-0.5 overflow-x-auto rounded bg-surface-tertiary p-1.5 font-mono`,children:e.text})]},e.file+e.start_line))})]})]})}var P_={view:`local`,project:`acme/shop`,scanned_at:new Date().toISOString(),deep_reviewed:0,grade:`D`,score:55,kind:`quick`,engines:[],remaining:1,counts:{critical:1,high:1,medium:1,low:0},findings:[{ref:`VF-L-1`,severity:`critical`,title:`Live Stripe key in code`,file:`src/config.js`,line:2,reason:`Anyone who can read the repository can charge or refund customers with this key.`,owasp:`A02:2021`,cwe:`CWE-798`,status:`open`},{ref:`VF-L-2`,severity:`high`,title:`SQL built from user input`,file:`src/db.js`,line:2,reason:`An attacker can read or change every row by crafting the name.`,owasp:`A03:2021`,cwe:`CWE-89`,status:`open`,review:{verdict:`confirmed`,reason:`The name comes straight from the request.`}}]};function F_({a:e}){let t=e.state??(e.pending?`pending`:e.linked?`linked`:`none`),n=e.next_steps??[];return(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress account`,"data-testid":`link-status`,"data-state":t,children:[t===`pending`&&(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Approve this code in your browser`}),e.code&&(0,p.jsx)(`div`,{className:`mt-1 font-mono text-3xl font-semibold tracking-widest`,"aria-label":`Link code ${e.code}`,children:e.code}),(0,p.jsx)(`p`,{className:`mt-1 text-xs text-secondary`,children:`Check that the same code shows on the page, then approve. You never copy a token.`}),e.url&&(0,p.jsxs)(`p`,{className:`mt-2 break-all text-xs text-tertiary`,children:[`Address: `,(0,p.jsx)(`span`,{className:`select-all font-mono`,children:e.url})]}),(0,p.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[e.url&&(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>u_(e.url),children:`Open Vibe Fortress in the browser`}),(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>l_(`I approved the Vibe Fortress link. Please confirm it.`),children:`I approved it`})]})]}),t===`linked`&&(0,p.jsxs)(`div`,{children:[(0,p.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Account linked`}),(0,p.jsx)(ae,{color:e.plan===`pro`?`success`:`secondary`,variant:`soft`,children:e.source===`trial`?`Pro trial`:e.plan===`pro`?`Pro`:e.plan===`free`?`Free`:`Linked`})]}),e.workspace&&(0,p.jsxs)(`p`,{className:`mt-1 text-sm text-secondary`,children:[`Workspace: `,e.workspace]}),e.source===`trial`&&typeof e.trial_days_left==`number`&&(0,p.jsxs)(`p`,{className:`mt-1 text-sm text-secondary`,children:[`Free trial: `,e.trial_days_left,` day`,e.trial_days_left===1?``:`s`,` left. No card needed.`]}),e.source===`subscription`&&(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Your subscription is active.`}),e.reachable===!1&&(0,p.jsx)(`p`,{className:`mt-1 text-xs text-warning`,children:`The server could not be reached, so the plan shown may be out of date.`}),(0,p.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[e.web_url&&(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>u_(e.web_url),children:`Open Vibe Fortress`}),e.plan!==`pro`&&e.upgrade_url&&(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>u_(e.upgrade_url),children:e.source===`trial`?`Keep Pro after the trial`:`See plans`})]}),e.plan!==`pro`&&e.upgrade_url&&(0,p.jsxs)(`p`,{className:`mt-2 break-all text-xs text-tertiary`,children:[`Plans: `,(0,p.jsx)(`span`,{className:`select-all font-mono`,children:e.upgrade_url})]})]}),t===`none`&&(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`No account linked`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Vibe Fortress works without one: secrets, dependency alerts and quick code checks stay free. A free 30-day trial adds deep review, live checks and a web dashboard. Your code never leaves your computer.`}),(0,p.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Link my Vibe Fortress account.`),children:`Link my account`})})]}),n.length>0&&(0,p.jsxs)(`div`,{className:`mt-4 border-t border-subtle pt-3`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Suggested next steps`}),(0,p.jsx)(`ul`,{className:`mt-1 list-disc space-y-1 pl-5 text-sm text-secondary`,children:n.map(e=>(0,p.jsx)(`li`,{children:e},e))})]})]})}var I_={none:{view:`local-account`,state:`none`,linked:!1},pending:{view:`local-account`,state:`pending`,pending:!0,code:`K7M2-QX9P`,url:`http://localhost:8793/app/link?code=K7M2-QX9P`},trial:{view:`local-account`,state:`linked`,linked:!0,workspace:`Ada's workspace`,plan:`pro`,source:`trial`,trial_days_left:27,web_url:`http://localhost:8793/app/`,upgrade_url:`http://localhost:8793/app/plan`,next_steps:[`Run a deep review of your open findings.`]},pro:{view:`local-account`,state:`linked`,linked:!0,workspace:`Ada's workspace`,plan:`pro`,source:`subscription`,web_url:`http://localhost:8793/app/`}};function L_({o:e}){return e.state===`scanned`?(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress check`,"data-testid":`offer`,"data-state":`scanned`,children:[(0,p.jsxs)(`div`,{className:`text-sm font-medium`,children:[e.project,` is already checked`]}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Nothing more to start here.`}),(0,p.jsx)(`div`,{className:`mt-3`,children:(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Show my Vibe Fortress security results.`),children:`Show the results`})})]}):e.state===`snoozed`?(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress check`,"data-testid":`offer`,"data-state":`snoozed`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`Okay, I will remind you later`}),(0,p.jsxs)(`p`,{className:`mt-1 text-sm text-secondary`,children:[`Vibe Fortress stays quiet about `,e.project,` until `,e.quiet_until?.slice(0,10),`. `,e.type_hint]}),(0,p.jsx)(`div`,{className:`mt-3`,children:(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>l_(`Yes, run the Vibe Fortress quick check on this project (${e.project}).`),children:`Start the check now`})})]}):(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Vibe Fortress check`,"data-testid":`offer`,"data-state":`offer`,children:[(0,p.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-wide text-tertiary`,children:`Quick security check`}),(0,p.jsxs)(`h2`,{className:`mt-1 break-words text-lg font-semibold`,children:[`Check `,e.project,` for security problems?`]}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Vibe Fortress looks for leaked passwords, risky packages and common mistakes in apps built with AI.`}),(0,p.jsx)(`h3`,{className:`mt-4 text-sm font-medium`,children:`What I will do now`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-1.5 text-sm text-secondary`,children:e.checklist.map(e=>(0,p.jsxs)(`li`,{className:`flex gap-2`,children:[(0,p.jsx)(`span`,{"aria-hidden":!0,className:`text-success`,children:`✓`}),(0,p.jsx)(`span`,{className:`min-w-0 break-words`,children:e})]},e))}),(0,p.jsxs)(`div`,{className:`mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2`,children:[(0,p.jsxs)(`div`,{className:`rounded-xl border border-subtle p-3`,children:[(0,p.jsx)(`h3`,{className:`text-sm font-medium`,children:`Free, no account`}),(0,p.jsx)(`ul`,{className:`mt-1 list-disc space-y-0.5 pl-4 text-xs text-secondary`,children:e.free.map(e=>(0,p.jsx)(`li`,{children:e},e))})]}),(0,p.jsxs)(`div`,{className:`rounded-xl border border-subtle p-3`,children:[(0,p.jsx)(`h3`,{className:`text-sm font-medium`,children:`An account adds`}),(0,p.jsx)(`ul`,{className:`mt-1 list-disc space-y-0.5 pl-4 text-xs text-secondary`,children:e.account.map(e=>(0,p.jsx)(`li`,{children:e},e))})]})]}),(0,p.jsx)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:e.buttons.map(e=>(0,p.jsx)(E,{size:`sm`,color:e.id===`yes`?`primary`:`secondary`,variant:e.id===`yes`?`solid`:e.id===`no`?`outline`:`ghost`,onClick:()=>l_(e.message),children:e.label},e.id))}),(0,p.jsx)(`p`,{className:`mt-3 text-xs text-secondary`,children:e.type_hint}),(0,p.jsxs)(`details`,{className:`mt-2 text-xs text-tertiary`,children:[(0,p.jsx)(`summary`,{className:`cursor-pointer`,children:`What each button tells Claude`}),(0,p.jsx)(`ul`,{className:`mt-1 space-y-1`,children:e.buttons.map(e=>(0,p.jsxs)(`li`,{children:[(0,p.jsxs)(`span`,{className:`font-medium text-secondary`,children:[e.label,`:`]}),` `,(0,p.jsx)(`span`,{className:`select-all`,children:e.message})]},e.id))})]})]})}function R_({r:e,go:t}){let[n,r]=(0,m.useState)(e.reason),[i,a]=(0,m.useState)(null),o=async()=>{a(null);try{t(await c_(`account`))}catch(e){a(e.message)}},s=e.reasons.find(e=>e.id===n);return e.state===`none`?(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Billing`,"data-testid":`retention`,"data-state":`none`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`You have no subscription`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`There is nothing to cancel.`}),(0,p.jsx)(`div`,{className:`mt-3`,children:(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:o,children:`Back to my plan`})}),i&&(0,p.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:i})]}):(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,"aria-label":`Before you go to billing`,"data-testid":`retention`,"data-state":`subscriber`,children:[(0,p.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Before you go to billing`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`What is wrong? Pick one if you like. You do not have to.`}),(0,p.jsx)(`div`,{role:`group`,"aria-label":`What is wrong`,className:`mt-3 flex flex-wrap gap-2`,children:e.reasons.map(e=>(0,p.jsx)(E,{size:`sm`,variant:n===e.id?`solid`:`outline`,color:n===e.id?`primary`:`secondary`,"aria-pressed":n===e.id,onClick:()=>r(n===e.id?null:e.id),children:e.label},e.id))}),s&&(0,p.jsx)(`ul`,{className:`mt-3 space-y-2`,"aria-label":`What could help`,children:s.options.map(e=>(0,p.jsxs)(`li`,{className:`rounded-xl border border-subtle p-3`,children:[(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm font-medium`,children:e.label}),!e.real&&(0,p.jsx)(ae,{color:`secondary`,variant:`outline`,size:`sm`,children:`Placeholder, not available yet`})]}),(0,p.jsx)(`p`,{className:`mt-0.5 break-words text-xs text-secondary`,children:e.detail}),(0,p.jsx)(`div`,{className:`mt-2`,children:(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>e.kind===`link`?u_(e.url):l_(e.message),children:e.kind===`link`?`Open in billing`:`Ask Claude`})}),(0,p.jsx)(`p`,{className:`mt-1 break-words text-xs text-tertiary`,children:e.kind===`link`?(0,p.jsxs)(p.Fragment,{children:[`Opens: `,(0,p.jsx)(`span`,{className:`select-all font-mono break-all`,children:e.url})]}):(0,p.jsxs)(p.Fragment,{children:[`Sends: `,(0,p.jsx)(`span`,{className:`select-all`,children:e.message})]})})]},e.id))}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2 border-t border-subtle pt-3`,children:[e.portal_url?(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>u_(e.portal_url),children:`Continue to billing`}):(0,p.jsx)(`span`,{className:`text-sm text-secondary`,children:`Billing is not available on this server.`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:o,children:`Back to my plan`})]}),e.portal_url&&(0,p.jsxs)(`p`,{className:`mt-2 break-all text-xs text-tertiary`,children:[`Billing address: `,(0,p.jsx)(`span`,{className:`select-all font-mono`,children:e.portal_url})]}),e.fake&&(0,p.jsx)(`p`,{className:`mt-1 text-xs text-tertiary`,children:`Test billing: no real money.`}),i&&(0,p.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:i})]})}function z_(){return(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4 text-center`,"data-testid":`fallback`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium`,children:`The answer is in the text above`}),(0,p.jsx)(`p`,{className:`mt-1 text-sm text-secondary`,children:`Tell Claude “check my app” to scan, or “what is my plan” to see your account.`})]})}function B_({d:e}){let t=e.findings.map(e=>e.ref).join(`, `);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,p.jsx)(x_,{grade:e.grade,score:e.score}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,p.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.project}),(0,p.jsx)(`div`,{className:`mt-1 text-xl font-semibold`,children:g_[e.grade]}),(0,p.jsxs)(`div`,{className:`mt-0.5 text-xs text-tertiary`,children:[e.base?`Branch check against ${e.base}`:`Quick check`,` · `,y_(e.scanned_at),` · your code stayed on this computer`]})]})]}),(0,p.jsx)(`div`,{className:`mt-4 grid grid-cols-4 gap-2`,children:f_.map(t=>(0,p.jsxs)(`div`,{"aria-label":`${e.counts[t]} ${t} findings`,className:`rounded-lg border border-default p-2`,children:[(0,p.jsx)(`div`,{className:`text-xl font-semibold leading-none`,children:e.counts[t]}),(0,p.jsx)(`div`,{className:`mt-1 text-[11px] capitalize text-tertiary`,children:t}),(0,p.jsx)(`div`,{className:`mt-1.5 h-1 rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full ${m_[t]}`,style:{width:`${Math.min(100,e.counts[t]*25)}%`}})})]},t))}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[e.findings.length>0&&(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Yes, fix these Vibe Fortress findings on a new branch (${t}). Do not open a pull request until I say so.`),children:`Fix these on a branch`}),e.findings.length>0&&(0,p.jsx)(E,{size:`sm`,variant:`outline`,color:`secondary`,onClick:()=>l_(`Yes, run a Vibe Fortress deep review of these findings.`),children:`Deep review`}),(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>l_(`What does a Vibe Fortress account give me? Show my plan.`),children:`Get protection`})]})]}),e.findings.length===0?(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-6 text-center`,children:[(0,p.jsx)(`div`,{className:`text-2xl`,"aria-hidden":!0,children:`🛡️`}),(0,p.jsx)(`div`,{className:`mt-1 font-medium`,children:`Nothing urgent found`}),(0,p.jsx)(`div`,{className:`text-sm text-secondary`,children:`This quick check matches known patterns; a deep review reads the code for the rest.`})]}):(0,p.jsx)(`ul`,{className:`space-y-2`,"aria-label":`Findings, worst first`,children:e.findings.map(e=>(0,p.jsx)(`li`,{className:`rounded-xl border border-default bg-surface p-3`,children:(0,p.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,p.jsx)(ae,{color:p_[e.severity],variant:`soft`,size:`sm`,className:`mt-0.5 shrink-0 uppercase`,children:e.severity}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,p.jsxs)(`div`,{className:`break-words text-sm font-medium`,children:[e.title,e.branchNew?` · new on this branch`:``]}),(0,p.jsxs)(`div`,{className:`mt-0.5 break-all text-xs text-tertiary`,children:[(0,p.jsx)(`span`,{className:`font-medium text-secondary`,children:e.ref}),` · `,e.file,e.line?`:${e.line}`:``]}),(0,p.jsx)(`p`,{className:`mt-1.5 break-words text-sm text-secondary`,children:e.reason}),e.review&&e.review.verdict!==`false_positive`&&(0,p.jsxs)(`p`,{className:`mt-1.5 break-words text-xs text-secondary`,children:[(0,p.jsxs)(`span`,{className:`font-medium`,children:[`Deep review: `,e.review.verdict===`confirmed`?`confirmed`:`unsure`,`.`]}),` `,e.review.reason]})]})]})},e.ref))}),e.remaining>0&&(0,p.jsxs)(`p`,{className:`text-center text-xs text-tertiary`,children:[e.remaining,` more: ask Claude “show the rest”.`]})]})}function V_({data:e,setError:t}){let[n,r]=(0,m.useState)(`all`),[i,a]=(0,m.useState)(!1),o=async()=>{try{await d_(e.repo.full_name)}catch(e){t(String(e))}},s=(0,m.useMemo)(()=>e.findings.filter(e=>(i||!v_.includes(e.status))&&(n===`all`||e.severity===n)),[e,n,i]),c=e.findings.filter(e=>v_.includes(e.status)).length;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`section`,{className:`rounded-2xl border border-default bg-surface p-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,p.jsx)(x_,{grade:e.grade.grade,score:e.grade.score}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[e.repos.length>1?(0,p.jsx)(`select`,{"aria-label":`Repository`,className:`w-full rounded-md border border-default bg-surface px-2 py-1 text-sm font-medium text-default`,value:e.repo.full_name,onChange:e=>d_(e.target.value).catch(e=>t(String(e))),children:e.repos.map(e=>(0,p.jsxs)(`option`,{value:e.full_name,children:[e.full_name,e.grade?` · ${e.grade}`:``]},e.full_name))}):(0,p.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.repo.full_name}),(0,p.jsx)(`div`,{className:`mt-1 text-xl font-semibold`,children:g_[e.grade.grade]}),(0,p.jsxs)(`div`,{className:`mt-0.5 text-xs text-tertiary`,children:[`Last scan `,y_(e.repo.last_scan_at),e.repo.last_scanned_commit?` · ${e.repo.last_scanned_commit.slice(0,7)}`:``]})]})]}),e.progress&&(0,p.jsxs)(`div`,{className:`mt-3`,role:`status`,children:[(0,p.jsxs)(`div`,{className:`mb-1 flex justify-between text-xs text-secondary`,children:[(0,p.jsx)(`span`,{children:`Scan in progress…`}),(0,p.jsxs)(`span`,{children:[e.progress.done,`/`,e.progress.total,` steps`]})]}),(0,p.jsx)(`div`,{className:`h-1.5 overflow-hidden rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full bg-primary-solid transition-all`,style:{width:`${e.progress.done/Math.max(1,e.progress.total)*100}%`}})})]}),(0,p.jsx)(`div`,{className:`mt-4 grid grid-cols-4 gap-2`,children:f_.map(t=>(0,p.jsxs)(`button`,{"aria-pressed":n===t,"aria-label":`${e.grade.counts[t]} ${t} findings`,onClick:()=>r(n===t?`all`:t),className:`rounded-lg border p-2 text-left transition ${n===t?`border-strong bg-surface-secondary`:`border-subtle hover:bg-surface-secondary`}`,children:[(0,p.jsx)(`div`,{className:`text-xl font-semibold leading-none`,children:e.grade.counts[t]}),(0,p.jsx)(`div`,{className:`mt-1 text-[11px] capitalize text-tertiary`,children:t}),(0,p.jsx)(`div`,{className:`mt-1.5 h-1 rounded-full bg-surface-tertiary`,children:(0,p.jsx)(`div`,{className:`h-full rounded-full ${m_[t]}`,style:{width:`${Math.min(100,e.grade.counts[t]*25)}%`}})})]},t))}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[(0,p.jsx)(E,{size:`sm`,color:`primary`,onClick:()=>l_(`Check again: call start_scan with kind "diff" for ${e.repo.full_name} and review only what changed since the last scan.`),children:`Check again`}),c>0&&(0,p.jsxs)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>a(!i),children:[i?`Hide`:`Show`,` `,c,` closed`]}),n!==`all`&&(0,p.jsx)(E,{size:`sm`,variant:`ghost`,color:`secondary`,onClick:()=>r(`all`),children:`Clear filter`})]}),(0,p.jsx)(M_,{s:e.coverage_summary??null,c:e.scan_coverage??null,v:e.verification??null,nt:e.notices??null,lt:e.local_tools??null}),e.triage&&e.triage.triaged>0&&(0,p.jsxs)(`div`,{className:`mt-3 rounded-xl border border-subtle p-3 text-xs`,"aria-label":`Triage`,children:[e.triage.notice&&(0,p.jsxs)(`p`,{className:`mb-1 font-semibold text-warning`,role:`note`,children:[`Triage kept all `,e.triage.triaged,` findings and was not independent. Treat the verdicts as unchecked.`]}),(0,p.jsx)(`p`,{className:`text-secondary`,children:e.triage.line}),e.dependencies&&(0,p.jsx)(`p`,{className:`mt-1 text-secondary`,children:e.dependencies.line})]}),(e.unconfirmed?.length??0)>0&&(0,p.jsxs)(`p`,{className:`mt-3 text-xs text-warning`,children:[`Not confirmed either way (still open): `,e.unconfirmed.map(e=>`${e.ref} (${e.file}:${e.line})`).join(`, `)]}),(0,p.jsx)(N_,{inv:e.scan_inventory??null,spot:e.spot_checks??null,commit:e.scan?.head_commit}),e.coverage&&(0,p.jsx)(`p`,{className:`mt-3 text-xs text-tertiary`,children:e.coverage}),(0,p.jsx)(`p`,{className:`mt-3 text-xs text-secondary`,children:`Next: the dashboard shows every finding and every file that was not covered. “Check again” re-reads what changed. A fix is opened as a pull request when you ask for one on a finding.`})]}),s.length===0?(0,p.jsxs)(`div`,{className:`rounded-xl border border-default bg-surface p-6 text-center`,children:[(0,p.jsx)(`div`,{className:`text-2xl`,"aria-hidden":!0,children:`🛡️`}),(0,p.jsx)(`div`,{className:`mt-1 font-medium`,children:`Nothing to fix here`}),(0,p.jsx)(`div`,{className:`text-sm text-secondary`,children:n===`all`?`No open findings. Say “check again” after your next changes.`:`No open ${n} findings.`})]}):(0,p.jsx)(`ul`,{className:`space-y-2`,"aria-label":`Findings, worst first`,children:s.map(t=>(0,p.jsx)(S_,{f:t,repo:e.repo.full_name,onChange:o},t.id))}),(e.findings_more??0)>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-xs text-secondary`,children:[`…and `,e.findings_more,` more findings, less severe than these. The dashboard lists all of them.`]})]})}function H_(){let e=new URLSearchParams(location.search),[t,n]=(0,m.useState)(e.has(`local`)?P_:I_[e.get(`link`)??``]??null),[r,i]=(0,m.useState)(null),[a,o]=(0,m.useState)(null),[s,c]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{if(!window.matchMedia)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>{(r_||!document.documentElement.getAttribute(`data-theme`))&&document.documentElement.setAttribute(`data-theme`,e.matches?`dark`:`light`)};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,m.useEffect)(()=>{let r=a_(e=>n(e)),a=e.get(`view`),s={account:`account`,retention:`billing_options`,results:`get_results`};o_().then(async()=>{r_&&!t&&(a&&s[a]?n(await c_(s[a])):await d_()),c(!0)}).catch(e=>{o(String(e)),c(!0)});let l=e=>{i(e.detail),setTimeout(()=>i(null),4e3)};return window.addEventListener(`vf-toast`,l),()=>{r(),window.removeEventListener(`vf-toast`,l)}},[]),a)return(0,p.jsxs)(`div`,{role:`alert`,className:`p-4 text-sm text-danger`,children:[`Something went wrong: `,a]});if(!s)return(0,p.jsx)(`div`,{className:`p-6 text-sm text-tertiary`,role:`status`,children:`Loading Vibe Fortress…`});let l=e=>n(e),u=t?.view;return(0,p.jsxs)(`main`,{className:`mx-auto max-w-2xl space-y-4 p-4 text-default`,"data-view":u??`none`,children:[(0,p.jsxs)(`header`,{className:`flex items-center gap-2 text-primary`,children:[(0,p.jsx)(b_,{}),(0,p.jsx)(`span`,{className:`text-lg font-semibold tracking-tight text-default`,children:`Vibe Fortress`})]}),u===`results`?(0,p.jsx)(V_,{data:t,setError:o}):u===`account`?(0,p.jsx)(k_,{a:t,go:l}):u===`retention`?(0,p.jsx)(R_,{r:t,go:l},JSON.stringify(t.reason)):u===`offer`?(0,p.jsx)(L_,{o:t}):u===`local`?(0,p.jsx)(B_,{d:t}):u===`local-account`?(0,p.jsx)(F_,{a:t}):(0,p.jsx)(z_,{}),r&&(0,p.jsx)(`div`,{role:`status`,className:`fixed inset-x-4 bottom-4 mx-auto max-w-md rounded-xl bg-surface-elevated p-3 text-sm shadow-lg ring-1 ring-[var(--color-border-default)]`,children:r})]})}(0,te.createRoot)(document.getElementById(`root`)).render((0,p.jsx)(m.StrictMode,{children:(0,p.jsx)(g,{linkComponent:`a`,children:(0,p.jsx)(H_,{})})}));</script>
116
116
  <style rel="stylesheet" crossorigin>/*! tailwindcss v4.3.4 | MIT License | https://tailwindcss.com */
117
117
  @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, -apple-system, system-ui, "Segoe UI", "Noto Sans", "Helvetica", "Arial", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "SF Mono", "Menlo", "Monaco", "Consolas", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace;--spacing:.25rem;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:1024px;--breakpoint-xl:1280px;--breakpoint-2xl:1536px;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--breakpoint-xs:380px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-2xs:.125rem;--radius-xs:.25rem;--radius-sm:.375rem;--radius-md:.5rem;--radius-lg:.625rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.25rem;--radius-4xl:1.5rem;--radius-full:9999px;--text-lg:var(--font-text-lg-size);--text-lg--line-height:var(--font-text-lg-line-height);--text-lg--font-weight:var(--font-text-lg-weight);--text-lg--letter-spacing:var(--font-text-lg-tracking);--text-base:var(--font-text-md-size);--text-base--line-height:var(--font-text-md-line-height);--text-base--font-weight:var(--font-text-md-weight);--text-base--letter-spacing:var(--font-text-md-tracking);--text-sm:var(--font-text-sm-size);--text-sm--line-height:var(--font-text-sm-line-height);--text-sm--font-weight:var(--font-text-sm-weight);--text-sm--letter-spacing:var(--font-text-sm-tracking);--text-xs:var(--font-text-xs-size);--text-xs--line-height:var(--font-text-xs-line-height);--text-xs--font-weight:var(--font-text-xs-weight);--text-xs--letter-spacing:var(--font-text-xs-tracking);--text-xl:var(--font-heading-md-size);--text-xl--line-height:var(--font-heading-md-line-height);--text-xl--font-weight:var(--font-text-lg-weight);--text-xl--letter-spacing:var(--font-heading-md-tracking);--text-2xl:var(--font-heading-lg-size);--text-2xl--line-height:var(--font-heading-lg-line-height);--text-2xl--font-weight:var(--font-text-lg-weight);--text-2xl--letter-spacing:var(--font-heading-lg-tracking);--text-3xl:var(--font-heading-xl-size);--text-3xl--line-height:var(--font-heading-xl-line-height);--text-3xl--font-weight:var(--font-text-lg-weight);--text-3xl--letter-spacing:var(--font-heading-xl-tracking);--text-4xl:var(--font-heading-2xl-size);--text-4xl--line-height:var(--font-heading-2xl-line-height);--text-4xl--font-weight:var(--font-text-lg-weight);--text-4xl--letter-spacing:var(--font-heading-2xl-tracking);--tracking-wide:var(--font-tracking-wide);--tracking-normal:var(--font-tracking-normal);--tracking-tight:var(--font-tracking-tight);--shadow-hairline:var(--shadow-hairline)}:root,:where([data-theme]){--gray-500:#5d5d5d;--alpha-0:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-0:color-mix(in oklab, var(--alpha-base) 0%, transparent)}}:root,:where([data-theme]){--alpha-02:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-02:color-mix(in oklab, var(--alpha-base) 2%, transparent)}}:root,:where([data-theme]){--alpha-04:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-04:color-mix(in oklab, var(--alpha-base) 4%, transparent)}}:root,:where([data-theme]){--alpha-05:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-05:color-mix(in oklab, var(--alpha-base) 5%, transparent)}}:root,:where([data-theme]){--alpha-06:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-06:color-mix(in oklab, var(--alpha-base) 6%, transparent)}}:root,:where([data-theme]){--alpha-08:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-08:color-mix(in oklab, var(--alpha-base) 8%, transparent)}}:root,:where([data-theme]){--alpha-10:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-10:color-mix(in oklab, var(--alpha-base) 10%, transparent)}}:root,:where([data-theme]){--alpha-12:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-12:color-mix(in oklab, var(--alpha-base) 12%, transparent)}}:root,:where([data-theme]){--alpha-15:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-15:color-mix(in oklab, var(--alpha-base) 15%, transparent)}}:root,:where([data-theme]){--alpha-16:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-16:color-mix(in oklab, var(--alpha-base) 16%, transparent)}}:root,:where([data-theme]){--alpha-20:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-20:color-mix(in oklab, var(--alpha-base) 20%, transparent)}}:root,:where([data-theme]){--alpha-25:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-25:color-mix(in oklab, var(--alpha-base) 25%, transparent)}}:root,:where([data-theme]){--alpha-30:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-30:color-mix(in oklab, var(--alpha-base) 30%, transparent)}}:root,:where([data-theme]){--alpha-35:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-35:color-mix(in oklab, var(--alpha-base) 35%, transparent)}}:root,:where([data-theme]){--alpha-40:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-40:color-mix(in oklab, var(--alpha-base) 40%, transparent)}}:root,:where([data-theme]){--alpha-50:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-50:color-mix(in oklab, var(--alpha-base) 50%, transparent)}}:root,:where([data-theme]){--alpha-60:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-60:color-mix(in oklab, var(--alpha-base) 60%, transparent)}}:root,:where([data-theme]){--alpha-70:var(--alpha-base)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--alpha-70:color-mix(in oklab, var(--alpha-base) 70%, transparent)}}:root,:where([data-theme]){--white:#fff;--black:#000;--green-25:#edfaf2;--green-50:#d9f4e4;--green-75:#b8ebcc;--green-100:#8cdfad;--green-200:#66d492;--green-300:#40c977;--green-400:#04b84c;--green-500:#00a240;--green-600:#008635;--green-700:#00692a;--green-800:#004f1f;--green-900:#003716;--green-950:#011c0b;--green-1000:#001207;--green-a25:var(--green-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--green-a25:color-mix(in oklab, var(--green-400) 8%, transparent)}}:root,:where([data-theme]){--green-a50:var(--green-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--green-a50:color-mix(in oklab, var(--green-400) 15%, transparent)}}:root,:where([data-theme]){--green-a75:var(--green-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--green-a75:color-mix(in oklab, var(--green-400) 29%, transparent)}}:root,:where([data-theme]){--green-a100:var(--green-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--green-a100:color-mix(in oklab, var(--green-400) 45%, transparent)}}:root,:where([data-theme]){--green-a200:var(--green-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--green-a200:color-mix(in oklab, var(--green-400) 60%, transparent)}}:root,:where([data-theme]){--green-a300:var(--green-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--green-a300:color-mix(in oklab, var(--green-400) 75%, transparent)}}:root,:where([data-theme]){--red-25:#fff0f0;--red-50:#ffd9d9;--red-75:#ffc6c5;--red-100:#ffa4a2;--red-200:#ff8583;--red-300:#ff6764;--red-400:#fa423e;--red-500:#e02e2a;--red-600:#ba2623;--red-700:#911e1b;--red-800:#6e1615;--red-900:#4d100e;--red-950:#280b0a;--red-1000:#1f0909;--red-a25:var(--red-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--red-a25:color-mix(in oklab, var(--red-400) 8%, transparent)}}:root,:where([data-theme]){--red-a50:var(--red-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--red-a50:color-mix(in oklab, var(--red-400) 16%, transparent)}}:root,:where([data-theme]){--red-a75:var(--red-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--red-a75:color-mix(in oklab, var(--red-400) 30%, transparent)}}:root,:where([data-theme]){--red-a100:var(--red-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--red-a100:color-mix(in oklab, var(--red-400) 48%, transparent)}}:root,:where([data-theme]){--red-a200:var(--red-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--red-a200:color-mix(in oklab, var(--red-400) 64%, transparent)}}:root,:where([data-theme]){--red-a300:var(--red-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--red-a300:color-mix(in oklab, var(--red-400) 79%, transparent)}}:root,:where([data-theme]){--pink-25:#fff4f9;--pink-50:#ffe8f3;--pink-75:#ffd4e8;--pink-100:#ffbada;--pink-200:#ffa3ce;--pink-300:#ff8cc1;--pink-400:#ff66ad;--pink-500:#e04c91;--pink-600:#ba437a;--pink-700:#963c67;--pink-800:#6e2c4a;--pink-900:#4d1f34;--pink-950:#29101c;--pink-1000:#1a0a11;--pink-a25:var(--pink-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--pink-a25:color-mix(in oklab, var(--pink-400) 8%, transparent)}}:root,:where([data-theme]){--pink-a50:var(--pink-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--pink-a50:color-mix(in oklab, var(--pink-400) 16%, transparent)}}:root,:where([data-theme]){--pink-a75:var(--pink-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--pink-a75:color-mix(in oklab, var(--pink-400) 28%, transparent)}}:root,:where([data-theme]){--pink-a100:var(--pink-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--pink-a100:color-mix(in oklab, var(--pink-400) 45%, transparent)}}:root,:where([data-theme]){--pink-a200:var(--pink-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--pink-a200:color-mix(in oklab, var(--pink-400) 60%, transparent)}}:root,:where([data-theme]){--pink-a300:var(--pink-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--pink-a300:color-mix(in oklab, var(--pink-400) 76%, transparent)}}:root,:where([data-theme]){--orange-25:#fff5f0;--orange-50:#ffe7d9;--orange-75:#ffcfb4;--orange-100:#ffb790;--orange-200:#ff9e6c;--orange-300:#ff8549;--orange-400:#fb6a22;--orange-500:#e25507;--orange-600:#b9480d;--orange-700:#923b0f;--orange-800:#6d2e0f;--orange-900:#4a2206;--orange-950:#281105;--orange-1000:#211107;--orange-a25:var(--orange-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--orange-a25:color-mix(in oklab, var(--orange-400) 7%, transparent)}}:root,:where([data-theme]){--orange-a50:var(--orange-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--orange-a50:color-mix(in oklab, var(--orange-400) 16%, transparent)}}:root,:where([data-theme]){--orange-a75:var(--orange-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--orange-a75:color-mix(in oklab, var(--orange-400) 33%, transparent)}}:root,:where([data-theme]){--orange-a100:var(--orange-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--orange-a100:color-mix(in oklab, var(--orange-400) 48%, transparent)}}:root,:where([data-theme]){--orange-a200:var(--orange-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--orange-a200:color-mix(in oklab, var(--orange-400) 65%, transparent)}}:root,:where([data-theme]){--orange-a300:var(--orange-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--orange-a300:color-mix(in oklab, var(--orange-400) 81%, transparent)}}:root,:where([data-theme]){--yellow-25:#fffbed;--yellow-50:#fff6d9;--yellow-75:#ffeeb8;--yellow-100:#ffe48c;--yellow-200:#ffdb66;--yellow-300:#ffd240;--yellow-400:#ffc300;--yellow-500:#e0ac00;--yellow-600:#ba8e00;--yellow-700:#916f00;--yellow-800:#6e5400;--yellow-900:#4d3b00;--yellow-950:#261d00;--yellow-1000:#1a1400;--yellow-a25:var(--yellow-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--yellow-a25:color-mix(in oklab, var(--yellow-400) 8%, transparent)}}:root,:where([data-theme]){--yellow-a50:var(--yellow-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--yellow-a50:color-mix(in oklab, var(--yellow-400) 15%, transparent)}}:root,:where([data-theme]){--yellow-a75:var(--yellow-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--yellow-a75:color-mix(in oklab, var(--yellow-400) 27%, transparent)}}:root,:where([data-theme]){--yellow-a100:var(--yellow-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--yellow-a100:color-mix(in oklab, var(--yellow-400) 45%, transparent)}}:root,:where([data-theme]){--yellow-a200:var(--yellow-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--yellow-a200:color-mix(in oklab, var(--yellow-400) 59%, transparent)}}:root,:where([data-theme]){--yellow-a300:var(--yellow-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--yellow-a300:color-mix(in oklab, var(--yellow-400) 74%, transparent)}}:root,:where([data-theme]){--purple-25:#f9f5fe;--purple-50:#efe5fe;--purple-75:#e0cefd;--purple-100:#ceb0fb;--purple-200:#be95fa;--purple-300:#ad7bf9;--purple-400:#924ff7;--purple-500:#8046d9;--purple-600:#6b3ab4;--purple-700:#532d8d;--purple-800:#3f226a;--purple-900:#2c184a;--purple-950:#160c25;--purple-1000:#100a19;--purple-a25:var(--purple-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--purple-a25:color-mix(in oklab, var(--purple-400) 6%, transparent)}}:root,:where([data-theme]){--purple-a50:var(--purple-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--purple-a50:color-mix(in oklab, var(--purple-400) 15%, transparent)}}:root,:where([data-theme]){--purple-a75:var(--purple-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--purple-a75:color-mix(in oklab, var(--purple-400) 28%, transparent)}}:root,:where([data-theme]){--purple-a100:var(--purple-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--purple-a100:color-mix(in oklab, var(--purple-400) 45%, transparent)}}:root,:where([data-theme]){--purple-a200:var(--purple-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--purple-a200:color-mix(in oklab, var(--purple-400) 60%, transparent)}}:root,:where([data-theme]){--purple-a300:var(--purple-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--purple-a300:color-mix(in oklab, var(--purple-400) 75%, transparent)}}:root,:where([data-theme]){--blue-25:#f5faff;--blue-50:#e5f3ff;--blue-75:#cce6ff;--blue-100:#99ceff;--blue-200:#66b5ff;--blue-300:#339cff;--blue-400:#0285ff;--blue-500:#0169cc;--blue-600:#004f99;--blue-700:#003f7a;--blue-800:#013566;--blue-900:#00284d;--blue-950:#000e1a;--blue-1000:#000d19;--blue-a25:var(--blue-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--blue-a25:color-mix(in oklab, var(--blue-400) 4%, transparent)}}:root,:where([data-theme]){--blue-a50:var(--blue-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--blue-a50:color-mix(in oklab, var(--blue-400) 13%, transparent)}}:root,:where([data-theme]){--blue-a75:var(--blue-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--blue-a75:color-mix(in oklab, var(--blue-400) 25%, transparent)}}:root,:where([data-theme]){--blue-a100:var(--blue-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--blue-a100:color-mix(in oklab, var(--blue-400) 40%, transparent)}}:root,:where([data-theme]){--blue-a200:var(--blue-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--blue-a200:color-mix(in oklab, var(--blue-400) 60%, transparent)}}:root,:where([data-theme]){--blue-a300:var(--blue-400)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--blue-a300:color-mix(in oklab, var(--blue-400) 80%, transparent)}}:root,:where([data-theme]){--hairline:1px}:where(:root),:where([data-theme=light]){--gray-0:#fff;--gray-25:#fcfcfc;--gray-50:#f9f9f9;--gray-75:#f3f3f3;--gray-100:#ededed;--gray-150:#dfdfdf;--gray-200:#cdcdcd;--gray-250:#b9b9b9;--gray-300:#afafaf;--gray-350:#9f9f9f;--gray-400:#8f8f8f;--gray-450:#767676;--gray-550:#4f4f4f;--gray-600:#414141;--gray-650:#393939;--gray-700:#303030;--gray-750:#282828;--gray-800:#212121;--gray-850:#1c1c1c;--gray-900:#181818;--gray-925:#161616;--gray-950:#131313;--gray-975:#101010;--gray-1000:#0d0d0d;--alpha-base:#0d0d0d}:where([data-theme=dark]){--gray-0:#0d0d0d;--gray-25:#101010;--gray-50:#131313;--gray-75:#161616;--gray-100:#181818;--gray-150:#1c1c1c;--gray-200:#212121;--gray-250:#282828;--gray-300:#303030;--gray-350:#393939;--gray-400:#414141;--gray-450:#4f4f4f;--gray-550:#767676;--gray-600:#8f8f8f;--gray-650:#9f9f9f;--gray-700:#afafaf;--gray-750:#b9b9b9;--gray-800:#cdcdcd;--gray-850:#dcdcdc;--gray-900:#ededed;--gray-925:#f3f3f3;--gray-950:#f3f3f3;--gray-975:#f9f9f9;--gray-1000:#fff;--alpha-base:#fff}@media (resolution>=150dpi),(resolution>=1.5x){:root,:where([data-theme]){--hairline:.5px}}:root,:where([data-theme]){--shadow-color:0 0 0;--elevation-100-geo:0 1px 2px -1px;--elevation-200-geo:0 2px 4px -1px;--elevation-300-geo:0 4px 8px -2px;--elevation-400-geo:0 8px 16px -4px}:where(:root),:where([data-theme=light]){--shadow-alpha-100:.08;--shadow-alpha-200:.08;--shadow-alpha-300:.1;--shadow-alpha-400:.12;--shadow-hairline-width:1px;--shadow-hairline-color:#00000014}@media (resolution>=150dpi),(resolution>=1.5x){:where(:root),:where([data-theme=light]){--shadow-hairline-width:.5px;--shadow-hairline-color:#0000001a}}:where([data-theme=dark]){--shadow-alpha-100:.2;--shadow-alpha-200:.2;--shadow-alpha-300:.36;--shadow-alpha-400:.3;--shadow-hairline-width:1px;--shadow-hairline-color:#ffffff1a}@media (resolution>=150dpi),(resolution>=1.5x){:where([data-theme=dark]){--shadow-hairline-width:.5px;--shadow-hairline-color:#ffffff1f}}:where([data-theme=dark]) [data-surface=elevated]{--shadow-hairline:0 0 #0000}:root,:where([data-theme]){--color-text:var(--gray-1000);--color-text-inverse:var(--gray-0);--color-text-primary:var(--color-text);--color-text-primary-soft:var(--color-text);--color-background-primary-soft-alt:var(--alpha-02);--color-border-primary-soft-alt:var(--alpha-06);--color-text-primary-soft-alt:var(--color-text);--color-text-primary-surface:var(--color-text);--color-text-primary-solid:var(--color-text-inverse);--color-text-primary-outline:var(--color-text);--color-text-primary-outline-hover:var(--color-text);--color-text-primary-ghost:var(--color-text);--color-text-primary-ghost-hover:var(--color-text);--color-ring-primary:var(--color-ring);--color-ring-primary-soft:var(--color-ring-primary);--color-ring-primary-solid:var(--color-ring-primary);--color-ring-primary-outline:var(--color-ring-primary);--color-ring-primary-ghost:var(--color-ring-primary);--color-text-secondary-soft:var(--color-text);--color-background-secondary-soft-alt:var(--alpha-02);--color-border-secondary-soft-alt:var(--alpha-06);--color-text-secondary-soft-alt:var(--color-text);--color-text-secondary-solid:var(--white);--color-text-secondary-outline:var(--color-text-secondary);--color-text-secondary-outline-hover:var(--color-text);--color-text-secondary-ghost:var(--color-text-secondary);--color-text-secondary-ghost-hover:var(--color-text);--color-ring-secondary:var(--color-ring);--color-ring-secondary-soft:var(--color-ring-secondary);--color-ring-secondary-solid:var(--color-ring-secondary);--color-ring-secondary-outline:var(--color-ring-secondary);--color-ring-secondary-ghost:var(--color-ring-secondary);--color-background-info-soft:var(--blue-50);--color-background-info-soft-hover:var(--blue-75);--color-background-info-soft-active:var(--blue-75);--color-background-info-soft-alpha:var(--blue-a50);--color-background-info-soft-alpha-hover:var(--blue-a75);--color-background-info-soft-alpha-active:var(--blue-a75);--color-background-info-solid:var(--blue-400);--color-background-info-solid-hover:var(--blue-500);--color-background-info-solid-active:var(--blue-500);--color-text-info-solid:var(--white);--color-background-info-outline-hover:var(--blue-a25);--color-background-info-outline-active:var(--blue-a25);--color-border-info-outline:var(--blue-500);--color-border-info-outline-hover:var(--blue-500);--color-text-info-outline:var(--blue-500);--color-text-info-outline-hover:var(--blue-500);--color-background-info-ghost-hover:var(--blue-a50);--color-background-info-ghost-active:var(--blue-a50);--color-ring-info:var(--color-ring);--color-ring-info-soft:var(--color-ring-info);--color-ring-info-solid:var(--color-ring-info);--color-ring-info-outline:var(--color-ring-info);--color-ring-info-ghost:var(--color-ring-info);--color-background-warning-soft:var(--orange-50);--color-background-warning-soft-hover:var(--orange-75);--color-background-warning-soft-active:var(--orange-75);--color-background-warning-soft-alpha:var(--orange-a50);--color-background-warning-soft-alpha-hover:var(--orange-a75);--color-background-warning-soft-alpha-active:var(--orange-a75);--color-background-warning-solid:var(--orange-500);--color-background-warning-solid-hover:var(--orange-600);--color-background-warning-solid-active:var(--orange-600);--color-text-warning-solid:var(--white);--color-background-warning-outline-hover:var(--orange-a25);--color-background-warning-outline-active:var(--orange-a25);--color-border-warning-outline:var(--orange-500);--color-border-warning-outline-hover:var(--orange-500);--color-text-warning-outline:var(--orange-500);--color-text-warning-outline-hover:var(--orange-500);--color-background-warning-ghost-hover:var(--orange-a50);--color-background-warning-ghost-active:var(--orange-a50);--color-text-warning-ghost:var(--orange-500);--color-text-warning-ghost-hover:var(--orange-500);--color-ring-warning:var(--color-ring);--color-ring-warning-soft:var(--color-ring-warning);--color-ring-warning-solid:var(--color-ring-warning);--color-ring-warning-outline:var(--color-ring-warning);--color-ring-warning-ghost:var(--color-ring-warning);--color-text-caution-hover:var(--yellow-800);--color-background-caution-soft:var(--yellow-50);--color-background-caution-soft-hover:var(--yellow-75);--color-background-caution-soft-active:var(--yellow-75);--color-background-caution-soft-alpha:var(--yellow-a50);--color-background-caution-soft-alpha-hover:var(--yellow-a75);--color-background-caution-soft-alpha-active:var(--yellow-a75);--color-background-caution-solid:var(--yellow-600);--color-background-caution-solid-hover:var(--yellow-700);--color-background-caution-solid-active:var(--yellow-700);--color-text-caution-solid:var(--white);--color-background-caution-outline-hover:var(--yellow-a25);--color-background-caution-outline-active:var(--yellow-a25);--color-border-caution-outline:var(--yellow-700);--color-border-caution-outline-hover:var(--yellow-700);--color-text-caution-outline:var(--yellow-700);--color-text-caution-outline-hover:var(--yellow-700);--color-background-caution-ghost-hover:var(--yellow-a50);--color-background-caution-ghost-active:var(--yellow-a50);--color-text-caution-ghost:var(--yellow-700);--color-text-caution-ghost-hover:var(--yellow-700);--color-ring-caution:var(--color-ring);--color-ring-caution-soft:var(--color-ring-caution);--color-ring-caution-solid:var(--color-ring-caution);--color-ring-caution-outline:var(--color-ring-caution);--color-ring-caution-ghost:var(--color-ring-caution);--color-background-danger-soft:var(--red-50);--color-background-danger-soft-hover:var(--red-75);--color-background-danger-soft-active:var(--red-75);--color-background-danger-soft-alpha:var(--red-a50);--color-background-danger-soft-alpha-hover:var(--red-a75);--color-background-danger-soft-alpha-active:var(--red-a75);--color-background-danger-solid:var(--red-500);--color-background-danger-solid-hover:var(--red-600);--color-background-danger-solid-active:var(--red-600);--color-text-danger-solid:var(--white);--color-background-danger-outline-hover:var(--red-a25);--color-background-danger-outline-active:var(--red-a25);--color-border-danger-outline:var(--red-500);--color-border-danger-outline-hover:var(--red-500);--color-text-danger-outline:var(--red-500);--color-text-danger-outline-hover:var(--red-500);--color-background-danger-ghost-hover:var(--red-a50);--color-background-danger-ghost-active:var(--red-a50);--color-text-danger-ghost:var(--red-500);--color-text-danger-ghost-hover:var(--red-500);--color-ring-danger:var(--red-200);--color-ring-danger-soft:var(--color-ring-danger);--color-ring-danger-solid:var(--color-ring-danger);--color-ring-danger-outline:var(--color-ring-danger);--color-ring-danger-ghost:var(--color-ring-danger);--color-background-success-soft:var(--green-50);--color-background-success-soft-hover:var(--green-75);--color-background-success-soft-active:var(--green-75);--color-background-success-soft-alpha:var(--green-a50);--color-background-success-soft-alpha-hover:var(--green-a75);--color-background-success-soft-alpha-active:var(--green-a75);--color-text-success-solid:var(--white);--color-background-success-outline-hover:var(--green-a25);--color-background-success-outline-active:var(--green-a25);--color-text-success-outline:var(--green-500);--color-text-success-outline-hover:var(--green-500);--color-background-success-ghost-hover:var(--green-a50);--color-background-success-ghost-active:var(--green-a50);--color-text-success-ghost:var(--green-500);--color-text-success-ghost-hover:var(--green-500);--color-ring-success:var(--color-ring);--color-ring-success-soft:var(--color-ring-info);--color-ring-success-solid:var(--color-ring-info);--color-ring-success-outline:var(--color-ring-info);--color-ring-success-ghost:var(--color-ring-info);--color-background-discovery-soft:var(--purple-50);--color-background-discovery-soft-hover:var(--purple-75);--color-background-discovery-soft-active:var(--purple-75);--color-background-discovery-soft-alpha:var(--purple-a50);--color-background-discovery-soft-alpha-hover:var(--purple-a75);--color-background-discovery-soft-alpha-active:var(--purple-a75);--color-background-discovery-solid:var(--purple-400);--color-background-discovery-solid-hover:var(--purple-500);--color-background-discovery-solid-active:var(--purple-500);--color-text-discovery-solid:var(--white);--color-background-discovery-outline-hover:var(--purple-a25);--color-background-discovery-outline-active:var(--purple-a25);--color-border-discovery-outline:var(--purple-500);--color-border-discovery-outline-hover:var(--purple-500);--color-background-discovery-ghost-hover:var(--purple-a50);--color-background-discovery-ghost-active:var(--purple-a50);--color-text-discovery-ghost:var(--purple-500);--color-text-discovery-ghost-hover:var(--purple-500);--color-ring-discovery:var(--color-ring);--color-ring-discovery-soft:var(--color-ring);--color-ring-discovery-solid:var(--color-ring);--color-ring-discovery-outline:var(--color-ring);--color-ring-discovery-ghost:var(--color-ring);--color-background-disabled:var(--alpha-05);--color-border-disabled:var(--alpha-06);--font-tracking-wide:0em;--font-tracking-normal:0em;--font-tracking-tight:0em;--font-heading-5xl-size:4.5rem;--font-heading-5xl-line-height:4.5rem;--font-heading-5xl-weight:var(--font-weight-semibold);--font-heading-5xl-tracking:var(--tracking-tight);--font-heading-4xl-size:3.75rem;--font-heading-4xl-line-height:3.75rem;--font-heading-4xl-weight:var(--font-weight-semibold);--font-heading-4xl-tracking:var(--tracking-tight);--font-heading-3xl-size:3rem;--font-heading-3xl-line-height:3rem;--font-heading-3xl-weight:var(--font-weight-semibold);--font-heading-3xl-tracking:var(--tracking-tight);--font-heading-2xl-size:2.25rem;--font-heading-2xl-line-height:2.625rem;--font-heading-2xl-weight:var(--font-weight-semibold);--font-heading-2xl-tracking:var(--tracking-tight);--font-heading-xl-size:2rem;--font-heading-xl-line-height:2.375rem;--font-heading-xl-weight:var(--font-weight-semibold);--font-heading-xl-tracking:var(--tracking-tight);--font-heading-lg-size:1.5rem;--font-heading-lg-line-height:1.75rem;--font-heading-lg-weight:var(--font-weight-semibold);--font-heading-lg-tracking:var(--tracking-normal);--font-heading-md-size:1.25rem;--font-heading-md-line-height:1.625rem;--font-heading-md-weight:var(--font-weight-semibold);--font-heading-md-tracking:var(--tracking-normal);--font-heading-sm-size:1.125rem;--font-heading-sm-line-height:1.625rem;--font-heading-sm-weight:var(--font-weight-semibold);--font-heading-sm-tracking:var(--tracking-normal);--font-heading-xs-size:1rem;--font-heading-xs-line-height:1.5rem;--font-heading-xs-weight:var(--font-weight-semibold);--font-heading-xs-tracking:var(--tracking-normal);--font-text-lg-size:1.125rem;--font-text-lg-line-height:1.8125rem;--font-text-lg-weight:var(--font-weight-normal);--font-text-lg-tracking:var(--tracking-normal);--font-text-md-size:1rem;--font-text-md-line-height:1.5rem;--font-text-md-weight:var(--font-weight-normal);--font-text-md-tracking:var(--tracking-normal);--font-text-sm-size:.875rem;--font-text-sm-line-height:1.25rem;--font-text-sm-weight:var(--font-weight-normal);--font-text-sm-tracking:var(--tracking-normal);--font-text-xs-size:.75rem;--font-text-xs-line-height:1.125rem;--font-text-xs-weight:var(--font-weight-normal);--font-text-xs-tracking:var(--tracking-wide);--font-text-2xs-size:.625rem;--font-text-2xs-line-height:.875rem;--font-text-2xs-weight:var(--font-weight-normal);--font-text-2xs-tracking:var(--tracking-wide);--font-text-3xs-size:.5rem;--font-text-3xs-line-height:.75rem;--font-text-3xs-weight:var(--font-weight-normal);--font-text-3xs-tracking:var(--tracking-wide);--control-size-3xs:1.375rem;--control-size-2xs:1.5rem;--control-size-xs:1.625rem;--control-size-sm:1.75rem;--control-size-md:2rem;--control-size-lg:2.25rem;--control-size-xl:2.5rem;--control-size-2xl:2.75rem;--control-size-3xl:3rem;--control-gutter-2xs:.375rem;--control-gutter-xs:.5rem;--control-gutter-sm:.625rem;--control-gutter-md:.75rem;--control-gutter-lg:.875rem;--control-gutter-xl:1rem;--control-gutter-pill-scaling:1.33;--control-radius-sm:var(--radius-sm);--control-radius-md:var(--radius-md);--control-radius-lg:var(--radius-lg);--control-radius-xl:var(--radius-xl);--control-font-size-sm:var(--font-text-xs-size);--control-font-size-md:var(--font-text-sm-size);--control-font-size-lg:var(--font-text-md-size);--control-icon-size-xs:.875rem;--control-icon-size-sm:1rem;--control-icon-size-md:1.125rem;--control-icon-size-lg:1.25rem;--control-icon-size-xl:1.375rem;--control-icon-size-2xl:1.5rem;--cubic-enter:cubic-bezier(.19, 1, .22, 1);--cubic-exit:cubic-bezier(.8, 0, .4, 1);--cubic-exit-snappy:cubic-bezier(.65, 0, .4, 1);--cubic-move:cubic-bezier(.65, 0, .35, 1);--transition-duration-basic:.15s;--transition-ease-basic:ease;--scrollbar-color:var(--alpha-30);--shadow-hairline:0 0 0 var(--shadow-hairline-width) var(--shadow-hairline-color);--shadow-100:var(--elevation-100-geo) rgb(var(--shadow-color) / var(--shadow-alpha-100));--shadow-100-strong:var(--elevation-100-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-100) * 1.25));--shadow-100-stronger:var(--elevation-100-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-100) * 1.6));--shadow-200:var(--elevation-200-geo) rgb(var(--shadow-color) / var(--shadow-alpha-200));--shadow-200-strong:var(--elevation-200-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-200) * 1.25));--shadow-200-stronger:var(--elevation-200-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-200) * 1.6));--shadow-300:var(--elevation-300-geo) rgb(var(--shadow-color) / var(--shadow-alpha-300));--shadow-300-strong:var(--elevation-300-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-300) * 1.25));--shadow-300-stronger:var(--elevation-300-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-300) * 1.6));--shadow-400:var(--elevation-400-geo) rgb(var(--shadow-color) / var(--shadow-alpha-400));--shadow-400-strong:var(--elevation-400-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-400) * 1.25));--shadow-400-stronger:var(--elevation-400-geo) rgb(var(--shadow-color) / calc(var(--shadow-alpha-400) * 1.6))}:where(:root),:where([data-theme=light]){--color-text-secondary:var(--gray-500);--color-text-tertiary:var(--gray-400);--color-ring:var(--blue-500);--color-background-primary-soft:var(--gray-100);--color-background-primary-soft-hover:var(--gray-150);--color-background-primary-soft-active:var(--gray-200);--color-background-primary-soft-alpha:var(--alpha-08);--color-background-primary-soft-alpha-hover:var(--alpha-12);--color-background-primary-soft-alpha-active:var(--alpha-16);--color-background-primary-surface:var(--alpha-05);--color-border-primary-surface:var(--alpha-05);--color-background-primary-solid:var(--gray-900);--color-background-primary-solid-hover:var(--gray-700);--color-background-primary-solid-active:var(--gray-600);--color-background-primary-outline-hover:var(--alpha-02);--color-background-primary-outline-active:var(--alpha-04);--color-border-primary-outline:var(--alpha-16);--color-border-primary-outline-hover:var(--alpha-20);--color-background-primary-ghost-hover:var(--alpha-08);--color-background-primary-ghost-active:var(--alpha-12);--color-background-secondary-soft:var(--gray-100);--color-background-secondary-soft-hover:var(--gray-150);--color-background-secondary-soft-active:var(--gray-200);--color-background-secondary-soft-alpha:var(--alpha-08);--color-background-secondary-soft-alpha-hover:var(--alpha-12);--color-background-secondary-soft-alpha-active:var(--alpha-16);--color-background-secondary-solid:var(--gray-500);--color-background-secondary-solid-hover:var(--gray-600);--color-background-secondary-solid-active:var(--gray-700);--color-background-secondary-outline-hover:var(--alpha-02);--color-background-secondary-outline-active:var(--alpha-04);--color-border-secondary-outline:var(--alpha-16);--color-border-secondary-outline-hover:var(--alpha-20);--color-background-secondary-ghost-hover:var(--alpha-08);--color-background-secondary-ghost-active:var(--alpha-12);--color-text-info:var(--blue-500);--color-text-info-soft:var(--blue-600);--color-background-info-surface:var(--blue-a25);--color-border-info-surface:var(--blue-a25);--color-text-info-surface:var(--blue-600);--color-text-info-ghost:var(--blue-500);--color-text-info-ghost-hover:var(--blue-500);--color-text-warning:var(--orange-700);--color-text-warning-soft:var(--orange-700);--color-background-warning-surface:var(--orange-a25);--color-border-warning-surface:var(--orange-a25);--color-text-warning-surface:var(--orange-700);--color-text-caution:var(--yellow-700);--color-text-caution-soft:var(--yellow-800);--color-background-caution-surface:var(--yellow-a25);--color-border-caution-surface:var(--yellow-a25);--color-text-caution-surface:var(--yellow-800);--color-text-danger:var(--red-700);--color-text-danger-soft:var(--red-600);--color-background-danger-surface:var(--red-a25);--color-border-danger-surface:var(--red-a25);--color-text-danger-surface:var(--red-600);--color-text-success:var(--green-700);--color-text-success-soft:var(--green-600);--color-background-success-surface:var(--green-a25);--color-border-success-surface:var(--green-a25);--color-text-success-surface:var(--green-600);--color-background-success-solid:var(--green-500);--color-background-success-solid-hover:var(--green-500);--color-background-success-solid-active:var(--green-500);--color-border-success-outline:var(--green-500);--color-border-success-outline-hover:var(--green-500);--color-text-discovery:var(--purple-700);--color-text-discovery-soft:var(--purple-600);--color-background-discovery-surface:var(--purple-a25);--color-border-discovery-surface:var(--purple-a25);--color-text-discovery-surface:var(--purple-600);--color-text-discovery-outline:var(--purple-500);--color-text-discovery-outline-hover:var(--purple-500);--color-text-disabled:var(--gray-400);--color-border-subtle:var(--alpha-05);--color-border:var(--alpha-10);--color-border-strong:var(--alpha-15);--shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--color-surface:var(--gray-0);--color-surface-secondary:var(--gray-50);--color-surface-tertiary:var(--gray-75);--color-surface-elevated:var(--gray-0);--color-surface-elevated-secondary:var(--gray-50)}:where([data-theme=dark]){--color-text-secondary:var(--gray-700);--color-text-tertiary:var(--gray-600);--color-ring:var(--blue-400);--color-background-primary-soft:var(--gray-300);--color-background-primary-soft-hover:var(--gray-350);--color-background-primary-soft-active:var(--gray-400);--color-background-primary-soft-alpha:var(--alpha-12);--color-background-primary-soft-alpha-hover:var(--alpha-16);--color-background-primary-soft-alpha-active:var(--alpha-20);--color-background-primary-surface:var(--alpha-08);--color-border-primary-surface:var(--alpha-08);--color-background-primary-solid:var(--gray-950);--color-background-primary-solid-hover:var(--gray-900);--color-background-primary-solid-active:var(--gray-850);--color-background-primary-outline-hover:var(--alpha-04);--color-background-primary-outline-active:var(--alpha-06);--color-border-primary-outline:var(--alpha-25);--color-border-primary-outline-hover:var(--alpha-30);--color-background-primary-ghost-hover:var(--alpha-12);--color-background-primary-ghost-active:var(--alpha-16);--color-background-secondary-soft:var(--gray-300);--color-background-secondary-soft-hover:var(--gray-350);--color-background-secondary-soft-active:var(--gray-400);--color-background-secondary-soft-alpha:var(--alpha-12);--color-background-secondary-soft-alpha-hover:var(--alpha-16);--color-background-secondary-soft-alpha-active:var(--alpha-20);--color-background-secondary-solid:var(--gray-400);--color-background-secondary-solid-hover:var(--gray-450);--color-background-secondary-solid-active:var(--gray-500);--color-background-secondary-outline-hover:var(--alpha-04);--color-background-secondary-outline-active:var(--alpha-06);--color-border-secondary-outline:var(--alpha-25);--color-border-secondary-outline-hover:var(--alpha-30);--color-background-secondary-ghost-hover:var(--alpha-12);--color-background-secondary-ghost-active:var(--alpha-16);--color-text-info:var(--blue-200);--color-text-info-soft:var(--blue-300);--color-background-info-surface:var(--blue-a50);--color-border-info-surface:var(--blue-a50);--color-text-info-surface:var(--blue-300);--color-text-info-ghost:var(--blue-200);--color-text-info-ghost-hover:var(--blue-200);--color-text-warning:var(--orange-500);--color-text-warning-soft:var(--orange-400);--color-background-warning-surface:var(--orange-a50);--color-border-warning-surface:var(--orange-a50);--color-text-warning-surface:var(--orange-400);--color-text-caution:var(--yellow-500);--color-text-caution-soft:var(--yellow-400);--color-background-caution-surface:var(--yellow-a50);--color-border-caution-surface:var(--yellow-a50);--color-text-caution-surface:var(--yellow-400);--color-text-danger:var(--red-500);--color-text-danger-soft:var(--red-400);--color-background-danger-surface:var(--red-a50);--color-border-danger-surface:var(--red-a50);--color-text-danger-surface:var(--red-400);--color-text-success:var(--green-400);--color-text-success-soft:var(--green-400);--color-background-success-surface:var(--green-a50);--color-border-success-surface:var(--green-a50);--color-text-success-surface:var(--green-400);--color-background-success-solid:var(--green-600);--color-background-success-solid-hover:var(--green-600);--color-background-success-solid-active:var(--green-600);--color-border-success-outline:var(--green-600);--color-border-success-outline-hover:var(--green-600);--color-text-discovery:var(--purple-500);--color-text-discovery-soft:var(--purple-200);--color-background-discovery-surface:var(--purple-a50);--color-border-discovery-surface:var(--purple-a50);--color-text-discovery-surface:var(--purple-200);--color-text-discovery-outline:var(--purple-400);--color-text-discovery-outline-hover:var(--purple-400);--color-text-disabled:var(--gray-500);--color-border-subtle:var(--alpha-06);--color-border:var(--alpha-12);--color-border-strong:var(--alpha-20);--shadow:0 10px 15px -3px #0003, 0 4px 6px -4px #0003;--color-surface:var(--gray-200);--color-surface-secondary:var(--gray-100);--color-surface-tertiary:var(--gray-50);--color-surface-elevated:var(--gray-300);--color-surface-elevated-secondary:var(--gray-400)}:root,:where([data-theme]){--alert-border-radius:var(--radius-xl);--alert-gap:calc(var(--spacing) * 3);--alert-gutter:calc(var(--spacing) * 4);--alert-font-size:var(--font-text-sm-size);--alert-line-height:var(--font-text-sm-line-height);--alert-title-font-weight:var(--font-weight-semibold);--avatar-radius:var(--radius-full);--avatar-size:28px;--avatar-font-size-scaling:.5;--avatar-overflow-font-size-scaling-one:.45;--avatar-overflow-font-size-scaling-two:.37;--avatar-overflow-font-size-scaling-three:.3;--avatar-group-cutout-width:3px;--avatar-group-cutout-color:var(--color-surface);--avatar-group-spacing:-8px;--badge-gutter-sm:calc(var(--control-gutter-2xs) - 1px);--badge-gutter-md:var(--control-gutter-2xs);--badge-gutter-lg:var(--control-gutter-xs);--badge-size-sm:calc(var(--control-size-3xs) - 2px);--badge-size-md:var(--control-size-3xs);--badge-size-lg:var(--control-size-2xs);--badge-radius-sm:var(--radius-xs);--badge-radius-md:var(--radius-xs);--badge-radius-lg:var(--radius-sm);--badge-font-size-sm:var(--font-text-xs-size);--badge-font-size-md:var(--font-text-sm-size);--badge-font-size-lg:var(--font-text-sm-size);--badge-tracking-sm:var(--tracking-wide);--badge-tracking-md:var(--tracking-normal);--badge-tracking-lg:var(--tracking-normal);--badge-font-weight-sm:var(--font-weight-semibold);--badge-font-weight-md:var(--font-weight-semibold);--badge-font-weight-lg:var(--font-weight-semibold);--badge-icon-font-size-sm:var(--font-text-xs-size);--badge-icon-font-size-md:var(--font-text-md-size);--badge-icon-font-size-lg:var(--font-text-md-size);--badge-indicator-size-sm:var(--font-text-xs-size);--badge-indicator-size-md:var(--font-text-xs-size);--badge-indicator-size-lg:var(--font-text-sm-size);--button-gap-sm:3px;--button-gap-md:4px;--button-gap-lg:6px;--button-font-weight:var(--font-weight-medium);--input-gap-xs:4px;--input-gap-sm:6px;--input-gap-md:8px;--input-gap-lg:10px;--input-text-color:var(--color-text);--input-placeholder-text-color:var(--color-text-tertiary);--input-outline-border-color:var(--color-border-primary-outline);--input-outline-border-color-focus:var(--alpha-50);--input-soft-background-color:var(--color-background-primary-soft-alpha);--input-soft-border-color-focus:var(--alpha-20);--link-font-weight:inherit;--link-gap:calc(var(--spacing) * .5);--link-radius:var(--radius-sm);--link-underline-decoration-offset:.1em;--chat-max-width:800px;--chat-gutter:calc(var(--spacing) * 5);--chat-background-color:var(--color-surface);--thread-gutter:calc(var(--spacing) * 4);--composer-gutter:calc(var(--spacing) * 3);--composer-compact-gutter:calc(var(--spacing) * 2);--composer-radius:var(--radius-4xl);--composer-background-color:var(--color-surface-elevated);--smoothing-background-color:var(--color-surface);--user-message-text-color:var(--color-text);--source-list-gutter:var(--thread-gutter);--codeblock-background-color:var(--gray-25);--codeblock-syntax-4:var(--pink-500);--dialog-min-width:250px;--dialog-max-width:450px;--dialog-container-inner-padding:calc(var(--spacing) * 5);--dialog-backdrop-fade-background:var(--color-surface-elevated)}@supports (color:color-mix(in lab, red, red)){:root,:where([data-theme]){--dialog-backdrop-fade-background:color-mix(in oklab, var(--color-surface-elevated) 60%, transparent)}}:root,:where([data-theme]){--menu-gutter:calc(var(--spacing) * 1.5);--menu-radius:var(--radius-xl);--menu-font-size:var(--font-text-sm-size);--menu-line-height:var(--font-text-sm-line-height);--menu-item-padding:calc(var(--spacing) * 1.5) calc(var(--spacing) * 2);--menu-item-gap:calc(var(--spacing) * 1.5);--menu-separator-gutter:var(--menu-gutter) calc(-1 * var(--menu-gutter));--menu-separator-background-color:var(--color-border);--menu-radio-indicator-size:var(--font-text-lg-size);--menu-radio-indicator-hole-size:var(--font-text-3xs-size);--menu-checkbox-indicator-size:var(--font-text-lg-size);--modal-container-inner-padding:calc(var(--spacing) * 5);--popover-radius:var(--radius-xl);--radio-group-col-gap:calc(var(--spacing) * 2.5);--radio-group-row-gap:calc(var(--spacing) * 5);--radio-group-item-gap:calc(var(--spacing) * 1.5);--radio-group-item-font-size:var(--font-text-sm-size);--radio-group-item-line-height:var(--font-text-sm-line-height);--radio-group-indicator-size:var(--font-text-md-size);--radio-group-indicator-border-color:var(--color-border-primary-outline);--radio-group-indicator-border-color-hover:var(--alpha-25);--radio-group-indicator-background-color:var(--color-background-primary-solid);--radio-group-indicator-hole-size:.375rem;--radio-group-indicator-hole-background-color:var(--color-text-primary-solid);--segmented-control-gap:2px;--segmented-control-gutter:2px;--segmented-control-font-weight:var(--font-weight-semibold);--segmented-control-thumb-shadow:0 1px 4px -1px #0003;--segmented-control-option-highlight-gutter:1px;--select-control-font-weight:var(--font-weight-medium);--switch-track-width:32px;--switch-track-height:19px;--switch-thumb-offset:3px;--switch-thumb-size:calc(var(--switch-track-height) - 2 * var(--switch-thumb-offset));--switch-thumb-shadow:0 1px 2px #0003;--switch-label-gap:calc(var(--spacing) * 2)}:where(:root),:where([data-theme=light]){--avatar-image-border-color:var(--alpha-04);--input-outline-border-color-hover:var(--alpha-25);--input-border-color-invalid:var(--red-500);--link-primary-text-color:var(--blue-500);--link-primary-text-color-hover:var(--blue-800);--user-message-background-color:var(--alpha-05);--codeblock-syntax-1:#c0660d;--codeblock-syntax-2:var(--blue-500);--codeblock-syntax-3:var(--green-600);--codeblock-syntax-5:var(--purple-500);--dialog-backdrop-dim-background:#0000004d;--menu-item-background-color:var(--alpha-08);--modal-backdrop-background:#0000004d;--segmented-control-background:var(--gray-100);--segmented-control-thumb-background:var(--gray-0);--segmented-control-option-highlight-background-color:var(--gray-200);--slider-track-color:var(--gray-150);--slider-range-color:var(--gray-450);--switch-track-color:var(--gray-150);--switch-track-color-hover:var(--gray-200);--switch-track-color-checked:var(--gray-900);--switch-track-color-checked-disabled:var(--gray-300);--switch-track-color-disabled:var(--gray-100);--switch-thumb-color:var(--gray-0);--switch-thumb-color-disabled:var(--gray-0)}:where([data-theme=dark]){--avatar-image-border-color:var(--alpha-15);--input-outline-border-color-hover:var(--alpha-30);--input-border-color-invalid:var(--red-600);--link-primary-text-color:var(--blue-300);--link-primary-text-color-hover:var(--blue-400);--user-message-background-color:var(--alpha-08);--codeblock-syntax-1:var(--yellow-100);--codeblock-syntax-2:var(--blue-200);--codeblock-syntax-3:var(--green-300);--codeblock-syntax-5:var(--purple-300);--dialog-backdrop-dim-background:#00000080;--menu-item-background-color:var(--alpha-10);--modal-backdrop-background:#00000080;--segmented-control-background:var(--gray-0);--segmented-control-thumb-background:var(--gray-300);--segmented-control-option-highlight-background-color:var(--gray-300);--slider-track-color:var(--gray-400);--slider-range-color:var(--gray-600);--switch-track-color:var(--gray-400);--switch-track-color-hover:var(--gray-450);--switch-track-color-checked:var(--blue-400);--switch-track-color-checked-disabled:var(--blue-700);--switch-track-color-disabled:var(--gray-300);--switch-thumb-color:var(--gray-1000);--switch-thumb-color-disabled:var(--gray-800)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html,:host{font-synthesis-weight:none}textarea{resize:none}img,svg{flex-grow:0;flex-shrink:0}input,textarea,select,optgroup{appearance:none;box-shadow:none;filter:none;outline-offset:0;outline-width:2px}a,button,input,label,select,textarea,:where([aria-role=button]){touch-action:manipulation}button{text-transform:none;vertical-align:middle}button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}pre{white-space:pre-wrap}table{border-spacing:0}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}html,:host{color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:var(--tracking-normal)}[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{scrollbar-color:var(--scrollbar-color) transparent;scrollbar-width:thin}[data-exiting]{pointer-events:none}::placeholder{color:var(--color-text-tertiary)}b,strong{font-weight:var(--font-weight-semibold)}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_AMS-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Caligraphic-Bold.woff2)format("woff2")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Caligraphic-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Fraktur-Bold.woff2)format("woff2")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Fraktur-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Main-Bold.woff2)format("woff2")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Main-BoldItalic.woff2)format("woff2")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Main-Italic.woff2)format("woff2")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Main-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Math-BoldItalic.woff2)format("woff2")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Math-Italic.woff2)format("woff2")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_SansSerif-Bold.woff2)format("woff2")}@font-face{font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_SansSerif-Italic.woff2)format("woff2")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_SansSerif-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Script-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Size1-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Size2-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Size3-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Size4-Regular.woff2)format("woff2")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(https://cdn.openai.com/common/fonts/katex/KaTeX_Typewriter-Regular.woff2)format("woff2")}.katex{text-indent:0;text-rendering:auto;font:1.21em/1.2 KaTeX_Main,Times New Roman,serif}.katex *{border-color:currentColor;-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.16.0"}.katex .katex-mathml{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{white-space:nowrap;width:min-content;position:relative}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;table-layout:fixed;display:inline-table}.katex .vlist-r{display:table-row}.katex .vlist{vertical-align:bottom;display:table-cell;position:relative}.katex .vlist>span{height:0;display:block;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{width:0;overflow:hidden}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{vertical-align:bottom;width:2px;min-width:2px;font-size:1px;display:table-cell}.katex .vbox{flex-direction:column;align-items:baseline;display:inline-flex}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{flex-direction:row;display:inline-flex}.katex .thinbox{width:0;max-width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .hdashline{border-bottom-style:dashed;width:100%;display:inline-block}.katex .sqrt>.root{margin-left:.277778em;margin-right:-.555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.833333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.714286em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.857143em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14286em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71429em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96286em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55429em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.416667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.583333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.833333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.347222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.416667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.486111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.694444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.833333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44028em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.289352em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.347222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.405093em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.520833em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.578704em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.694444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.833333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.289296em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.385728em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.433944em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.578592em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.694311em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.833173em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.200965em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.241158em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.281351em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.321543em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.361736em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.401929em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.482315em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.694534em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.833601em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{width:.12em;display:inline-block}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{min-width:1px;display:inline-block}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{width:100%;height:inherit;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;display:block;position:absolute}.katex svg path{stroke:none}.katex img{border-style:none;min-width:0;max-width:none;min-height:0;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{width:50.2%;position:absolute;left:0;overflow:hidden}.katex .halfarrow-right{width:50.2%;position:absolute;right:0;overflow:hidden}.katex .brace-left{width:25.1%;position:absolute;left:0;overflow:hidden}.katex .brace-center{width:50%;position:absolute;left:25%;overflow:hidden}.katex .brace-right{width:25.1%;position:absolute;right:0;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{box-sizing:border-box;border-top:.049em solid;border-right:.049em solid;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{text-align:left;display:inline-block;position:absolute;right:calc(50% + .3em)}.katex .cd-label-right{text-align:right;display:inline-block;position:absolute;left:calc(50% + .3em)}.katex-display{text-align:center;margin:1em 0;display:block}.katex-display>.katex{text-align:center;white-space:nowrap;display:block}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left;padding-left:2em}body{counter-reset:katexEqnNo mmlEqnNo}}@layer components{._Badge_1viyg_1{--indicator-size:var(--badge-indicator-size);align-items:center;gap:calc(var(--spacing) * 1);height:var(--badge-size);padding:0 var(--badge-gutter);border-radius:var(--badge-radius);font-size:var(--badge-font-size);font-weight:var(--badge-font-weight);letter-spacing:var(--badge-tracking);white-space:nowrap;display:inline-flex}._Badge_1viyg_1 svg{font-size:var(--badge-icon-font-size)}:where(._Badge_1viyg_1 svg:first-child:not(:only-child)){margin-left:var(--badge-icon-offset,-1px)}:where(._Badge_1viyg_1 svg:last-child:not(:only-child)){margin-right:var(--badge-icon-offset,-1px)}._Badge_1viyg_1[data-variant=soft]{background-color:var(--badge-background-color);color:var(--badge-text-color)}._Badge_1viyg_1[data-variant=soft]:where([data-color=secondary]){--badge-background-color:var(--color-background-secondary-soft-alpha);--badge-text-color:var(--color-text-secondary-soft)}._Badge_1viyg_1[data-variant=soft]:where([data-color=success]){--badge-background-color:var(--color-background-success-soft-alpha);--badge-text-color:var(--color-text-success-soft)}._Badge_1viyg_1[data-variant=soft]:where([data-color=warning]){--badge-background-color:var(--color-background-warning-soft-alpha);--badge-text-color:var(--color-text-warning-soft)}._Badge_1viyg_1[data-variant=soft]:where([data-color=danger]){--badge-background-color:var(--color-background-danger-soft-alpha);--badge-text-color:var(--color-text-danger-soft)}._Badge_1viyg_1[data-variant=soft]:where([data-color=info]){--badge-background-color:var(--color-background-info-soft-alpha);--badge-text-color:var(--color-text-info-soft)}._Badge_1viyg_1[data-variant=soft]:where([data-color=discovery]){--badge-background-color:var(--color-background-discovery-soft-alpha);--badge-text-color:var(--color-text-discovery-soft)}._Badge_1viyg_1[data-variant=solid]{background-color:var(--badge-background-color);color:var(--badge-text-color)}._Badge_1viyg_1[data-variant=solid]:where([data-color=secondary]){--badge-background-color:var(--color-background-secondary-solid);--badge-text-color:var(--color-text-secondary-solid)}._Badge_1viyg_1[data-variant=solid]:where([data-color=success]){--badge-background-color:var(--color-background-success-solid);--badge-text-color:var(--color-text-success-solid)}._Badge_1viyg_1[data-variant=solid]:where([data-color=warning]){--badge-background-color:var(--color-background-warning-solid);--badge-text-color:var(--color-text-warning-solid)}._Badge_1viyg_1[data-variant=solid]:where([data-color=danger]){--badge-background-color:var(--color-background-danger-solid);--badge-text-color:var(--color-text-danger-solid)}._Badge_1viyg_1[data-variant=solid]:where([data-color=info]){--badge-background-color:var(--color-background-info-solid);--badge-text-color:var(--color-text-info-solid)}._Badge_1viyg_1[data-variant=solid]:where([data-color=discovery]){--badge-background-color:var(--color-background-discovery-solid);--badge-text-color:var(--color-text-discovery-solid)}._Badge_1viyg_1[data-variant=outline]{box-shadow:0 0 0 1px var(--badge-border-color) inset;color:var(--badge-text-color)}._Badge_1viyg_1[data-variant=outline]:where([data-color=secondary]){--badge-border-color:var(--color-border-secondary-outline);--badge-text-color:var(--color-text-secondary-outline)}._Badge_1viyg_1[data-variant=outline]:where([data-color=success]){--badge-border-color:var(--color-border-success-outline);--badge-text-color:var(--color-text-success-outline)}._Badge_1viyg_1[data-variant=outline]:where([data-color=warning]){--badge-border-color:var(--color-border-warning-outline);--badge-text-color:var(--color-text-warning-outline)}._Badge_1viyg_1[data-variant=outline]:where([data-color=danger]){--badge-border-color:var(--color-border-danger-outline);--badge-text-color:var(--color-text-danger-outline)}._Badge_1viyg_1[data-variant=outline]:where([data-color=info]){--badge-border-color:var(--color-border-info-outline);--badge-text-color:var(--color-text-info-outline)}._Badge_1viyg_1[data-variant=outline]:where([data-color=discovery]){--badge-border-color:var(--color-border-discovery-outline);--badge-text-color:var(--color-text-discovery-outline)}._Badge_1viyg_1:where([data-size=sm]){--badge-size:var(--badge-size-sm);--badge-gutter:var(--badge-gutter-sm);--badge-font-size:var(--badge-font-size-sm);--badge-font-weight:var(--badge-font-weight-sm);--badge-tracking:var(--badge-tracking-sm);--badge-radius:var(--badge-radius-sm);--badge-icon-font-size:var(--badge-icon-font-size-sm);--badge-indicator-size:var(--badge-indicator-size-sm)}._Badge_1viyg_1:where([data-size=md]){--badge-size:var(--badge-size-md);--badge-gutter:var(--badge-gutter-md);--badge-font-size:var(--badge-font-size-md);--badge-font-weight:var(--badge-font-weight-md);--badge-tracking:var(--badge-tracking-md);--badge-radius:var(--badge-radius-md);--badge-icon-font-size:var(--badge-icon-font-size-md);--badge-indicator-size:var(--badge-indicator-size-md)}._Badge_1viyg_1:where([data-size=lg]){--badge-size:var(--badge-size-lg);--badge-gutter:var(--badge-gutter-lg);--badge-font-size:var(--badge-font-size-lg);--badge-font-weight:var(--badge-font-weight-lg);--badge-tracking:var(--badge-tracking-lg);--badge-radius:var(--badge-radius-lg);--badge-icon-font-size:var(--badge-icon-font-size-lg);--badge-indicator-size:var(--badge-indicator-size-lg)}._Badge_1viyg_1:where([data-pill]){--badge-radius:var(--radius-full);padding:0 calc(var(--badge-gutter) * var(--control-gutter-pill-scaling))}._LoadingIndicator_7yl6f_1{width:var(--indicator-size,1em);height:var(--indicator-size,1em);animation:_rotate_7yl6f_1 var(--indicator-rotate-duration,.8s) linear infinite;transition:opacity .15s;position:relative}._LoadingIndicator_7yl6f_1:before{border:var(--indicator-stroke,2px) solid var(--indicator-color,currentcolor);content:"";border-radius:50%;display:block;position:absolute;inset:0;-webkit-mask-image:conic-gradient(#0000,#000);mask-image:conic-gradient(#0000,#000)}._LoadingIndicator_7yl6f_1:after{width:var(--indicator-stroke,2px);height:var(--indicator-stroke,2px);margin-left:calc(var(--indicator-stroke,2px) * -1 / 2);background-color:var(--indicator-color,currentcolor);content:"";border-radius:100%;display:block;position:absolute;top:0;left:50%}@keyframes _rotate_7yl6f_1{0%{transform:rotate(0)}to{transform:rotate(1turn)}}._TransitionGroupChild_1hv1z_1{display:block}._Button_1864l_1{gap:var(--button-gap);height:var(--button-size);padding:0 var(--button-gutter);border-radius:var(--button-radius);cursor:pointer;font-size:var(--button-font-size);font-weight:var(--button-font-weight);transition-duration:var(--transition-duration-basic);transition-property:opacity,color;transition-timing-function:var(--transition-ease-basic);-webkit-user-select:none;user-select:none;white-space:nowrap;flex-shrink:0;line-height:1;display:inline-block;position:relative}._Button_1864l_1:before{border-radius:inherit;content:"";transition-duration:var(--transition-duration-basic);transition-property:opacity,background-color,transform,box-shadow,border-color;transition-timing-function:var(--transition-ease-basic);will-change:transform;display:block;position:absolute;inset:0}._Button_1864l_1:after{border-radius:inherit;content:"";pointer-events:none;transition-duration:var(--transition-duration-basic);transition-property:transform;transition-timing-function:var(--transition-ease-basic);will-change:transform;display:block;position:absolute;inset:0}._Button_1864l_1:focus{outline:none}._Button_1864l_1:focus-visible:after{outline:2px solid var(--button-ring-color,var(--color-ring));outline-offset:var(--button-ring-offset,2px)}._Button_1864l_1 svg:where(:not([data-no-autosize])){width:var(--button-icon-size);height:var(--button-icon-size)}:where(._Button_1864l_1 svg:where(:not([data-no-autosize])):first-child:not(:only-child)){margin-left:var(--button-icon-offset,-1px)}:where(._Button_1864l_1 svg:where(:not([data-no-autosize])):last-child:not(:only-child)){margin-right:var(--button-icon-offset,-1px)}._Button_1864l_1:where([data-optically-align=start]){margin-inline-start:calc(var(--button-gutter) * -1)}._Button_1864l_1:where([data-optically-align=end]){margin-inline-end:calc(var(--button-gutter) * -1)}._Button_1864l_1:where([data-optically-align=start][data-uniform]){margin-inline-start:calc(((var(--button-size) - var(--button-icon-size)) / 2) * -1)}._Button_1864l_1:where([data-optically-align=end][data-uniform]){margin-inline-end:calc(((var(--button-size) - var(--button-icon-size)) / 2) * -1)}._Button_1864l_1:where([data-size="3xs"]){--button-size:var(--control-size-3xs);--button-gutter:var(--control-gutter-2xs);--button-font-size:var(--control-font-size-sm);--button-icon-size:var(--control-icon-size-xs);--button-gap:var(--button-gap-sm);--button-radius:var(--control-radius-sm);--button-icon-offset:-1px;--indicator-size:11px;--circular-progress-size:11px}._Button_1864l_1:where([data-size="2xs"]){--button-size:var(--control-size-2xs);--button-gutter:var(--control-gutter-xs);--button-font-size:var(--control-font-size-sm);--button-icon-size:var(--control-icon-size-sm);--button-gap:var(--button-gap-md);--button-radius:var(--control-radius-sm);--button-icon-offset:-1px;--indicator-size:12px;--circular-progress-size:12px}._Button_1864l_1:where([data-size=xs]){--button-size:var(--control-size-xs);--button-gutter:var(--control-gutter-xs);--button-font-size:var(--control-font-size-md);--button-icon-size:var(--control-icon-size-sm);--button-gap:var(--button-gap-md);--button-radius:var(--control-radius-sm);--button-icon-offset:-1px;--indicator-size:13px;--circular-progress-size:14px}._Button_1864l_1:where([data-size=sm]){--button-size:var(--control-size-sm);--button-gutter:var(--control-gutter-sm);--button-font-size:var(--control-font-size-md);--button-icon-size:var(--control-icon-size-md);--button-gap:var(--button-gap-md);--button-radius:var(--control-radius-sm);--button-icon-offset:-1px;--indicator-size:15px;--circular-progress-size:15px}._Button_1864l_1:where([data-size=md]){--button-size:var(--control-size-md);--button-gutter:var(--control-gutter-md);--button-font-size:var(--control-font-size-md);--button-icon-size:var(--control-icon-size-md);--button-gap:var(--button-gap-lg);--button-radius:var(--control-radius-md);--button-icon-offset:-1px;--indicator-size:16px;--circular-progress-size:16px}._Button_1864l_1:where([data-size=lg]){--button-size:var(--control-size-lg);--button-gutter:var(--control-gutter-md);--button-font-size:var(--control-font-size-md);--button-icon-size:var(--control-icon-size-md);--button-gap:var(--button-gap-lg);--button-radius:var(--control-radius-md);--button-icon-offset:-1px;--indicator-size:16px;--circular-progress-size:16px}._Button_1864l_1:where([data-size=xl]){--button-size:var(--control-size-xl);--button-gutter:var(--control-gutter-lg);--button-font-size:var(--control-font-size-md);--button-icon-size:var(--control-icon-size-md);--button-gap:var(--button-gap-lg);--button-radius:var(--control-radius-lg);--button-icon-offset:-1px;--indicator-size:18px;--circular-progress-size:18px}._Button_1864l_1:where([data-size="2xl"]){--button-size:var(--control-size-2xl);--button-gutter:var(--control-gutter-lg);--button-font-size:var(--control-font-size-lg);--button-icon-size:var(--control-icon-size-lg);--button-gap:var(--button-gap-lg);--button-radius:var(--control-radius-xl);--button-icon-offset:-2px;--indicator-size:18px;--circular-progress-size:18px}._Button_1864l_1:where([data-size="3xl"]){--button-size:var(--control-size-3xl);--button-gutter:var(--control-gutter-xl);--button-font-size:var(--control-font-size-lg);--button-icon-size:var(--control-icon-size-lg);--button-gap:var(--button-gap-lg);--button-radius:var(--control-radius-xl);--button-icon-offset:-2px;--indicator-size:20px;--circular-progress-size:20px}._Button_1864l_1:where([data-gutter-size="2xs"]){--button-gutter:var(--control-gutter-2xs)}._Button_1864l_1:where([data-gutter-size=xs]){--button-gutter:var(--control-gutter-xs)}._Button_1864l_1:where([data-gutter-size=sm]){--button-gutter:var(--control-gutter-sm)}._Button_1864l_1:where([data-gutter-size=md]){--button-gutter:var(--control-gutter-md)}._Button_1864l_1:where([data-gutter-size=lg]){--button-gutter:var(--control-gutter-lg)}._Button_1864l_1:where([data-gutter-size=xl]){--button-gutter:var(--control-gutter-xl)}._Button_1864l_1:where([data-icon-size=sm]){--button-icon-size:var(--control-icon-size-sm)}._Button_1864l_1:where([data-icon-size=md]){--button-icon-size:var(--control-icon-size-md)}._Button_1864l_1:where([data-icon-size=lg]){--button-icon-size:var(--control-icon-size-lg)}._Button_1864l_1:where([data-icon-size=xl]){--button-icon-size:var(--control-icon-size-xl)}._Button_1864l_1:where([data-icon-size="2xl"]){--button-icon-size:var(--control-icon-size-2xl)}._Button_1864l_1:where([data-pill]){--button-radius:var(--radius-full);padding:0 calc(var(--button-gutter) * var(--control-gutter-pill-scaling))}._Button_1864l_1:where([data-block]){width:100%}._Button_1864l_1[data-uniform]{--button-gutter:0;width:var(--button-size)}._Button_1864l_1[data-variant=ghost]{--button-ring-offset:-1px;color:var(--button-text-color)}._Button_1864l_1[data-variant=ghost]:before{background-color:var(--button-background-color);opacity:0;transform:scale(var(--scale))}._Button_1864l_1[data-variant=ghost][aria-expanded=true],._Button_1864l_1[data-variant=ghost][data-state=open]{color:var(--button-text-color-hover)}._Button_1864l_1[data-variant=ghost][aria-expanded=true]:before,._Button_1864l_1[data-variant=ghost][data-state=open]:before{opacity:.6;transform:scale(1)}._Button_1864l_1[data-variant=ghost][data-selected]{color:var(--button-text-color-hover)}._Button_1864l_1[data-variant=ghost][data-selected]:before{opacity:1;transform:scale(1)}@media (hover:hover) and (pointer:fine){._Button_1864l_1[data-variant=ghost]:where(:not([data-disabled])):hover{color:var(--button-text-color-hover)}._Button_1864l_1[data-variant=ghost]:where(:not([data-disabled])):hover:before{opacity:1;transform:scale(1)}}._Button_1864l_1[data-variant=ghost]:where(:not([data-disabled])):active:before{background-color:var(--button-background-color-active);opacity:1;transform:scale(var(--scale))}._Button_1864l_1[data-variant=ghost]:where(:not([data-disabled])):active:after{transform:scale(var(--scale))}._Button_1864l_1[data-variant=ghost]:where([data-color=primary]){--button-background-color:var(--color-background-primary-ghost-hover);--button-background-color-active:var(--color-background-primary-ghost-active);--button-text-color:var(--color-text-primary-ghost);--button-text-color-hover:var(--color-text-primary-ghost-hover);--button-ring-color:var(--color-ring-primary-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=secondary]){--button-background-color:var(--color-background-secondary-ghost-hover);--button-background-color-active:var(--color-background-secondary-ghost-active);--button-text-color:var(--color-text-secondary-ghost);--button-text-color-hover:var(--color-text-secondary-ghost-hover);--button-ring-color:var(--color-ring-secondary-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=danger]){--button-background-color:var(--color-background-danger-ghost-hover);--button-background-color-active:var(--color-background-danger-ghost-active);--button-text-color:var(--color-text-danger-ghost);--button-text-color-hover:var(--color-text-danger-ghost-hover);--button-ring-color:var(--color-ring-danger-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=success]){--button-background-color:var(--color-background-success-ghost-hover);--button-background-color-active:var(--color-background-success-ghost-active);--button-text-color:var(--color-text-success-ghost);--button-text-color-hover:var(--color-text-success-ghost-hover);--button-ring-color:var(--color-ring-success-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=warning]){--button-background-color:var(--color-background-warning-ghost-hover);--button-background-color-active:var(--color-background-warning-ghost-active);--button-text-color:var(--color-text-warning-ghost);--button-text-color-hover:var(--color-text-warning-ghost-hover);--button-ring-color:var(--color-ring-warning-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=caution]){--button-background-color:var(--color-background-caution-ghost-hover);--button-background-color-active:var(--color-background-caution-ghost-active);--button-text-color:var(--color-text-caution-ghost);--button-text-color-hover:var(--color-text-caution-ghost-hover);--button-ring-color:var(--color-ring-caution-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=info]){--button-background-color:var(--color-background-info-ghost-hover);--button-background-color-active:var(--color-background-info-ghost-active);--button-text-color:var(--color-text-info-ghost);--button-text-color-hover:var(--color-text-info-ghost-hover);--button-ring-color:var(--color-ring-info-ghost)}._Button_1864l_1[data-variant=ghost]:where([data-color=discovery]){--button-background-color:var(--color-background-discovery-ghost-hover);--button-background-color-active:var(--color-background-discovery-ghost-active);--button-text-color:var(--color-text-discovery-ghost);--button-text-color-hover:var(--color-text-discovery-ghost-hover);--button-ring-color:var(--color-ring-discovery-ghost)}._Button_1864l_1[data-variant=solid]{color:var(--button-text-color)}._Button_1864l_1[data-variant=solid]:before{background-color:var(--button-background-color)}._Button_1864l_1[data-variant=solid][aria-expanded=true]:before,._Button_1864l_1[data-variant=solid][data-state=open]:before,._Button_1864l_1[data-variant=solid][data-selected]:before{background-color:var(--button-background-color-hover)}@media (hover:hover) and (pointer:fine){._Button_1864l_1[data-variant=solid]:where(:not([data-disabled])):hover:before{background-color:var(--button-background-color-hover)}}._Button_1864l_1[data-variant=solid]:where(:not([data-disabled])):active:before{background-color:var(--button-background-color-active)}._Button_1864l_1[data-variant=solid]:where(:not([data-disabled])):active:before,._Button_1864l_1[data-variant=solid]:where(:not([data-disabled])):active:after{transform:scale(var(--scale))}._Button_1864l_1[data-variant=solid]:where([data-color=primary]){--button-background-color:var(--color-background-primary-solid);--button-background-color-hover:var(--color-background-primary-solid-hover);--button-background-color-active:var(--color-background-primary-solid-active);--button-text-color:var(--color-text-primary-solid);--button-ring-color:var(--color-ring-primary-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=secondary]){--button-background-color:var(--color-background-secondary-solid);--button-background-color-hover:var(--color-background-secondary-solid-hover);--button-background-color-active:var(--color-background-secondary-solid-active);--button-text-color:var(--color-text-secondary-solid);--button-ring-color:var(--color-ring-secondary-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=success]){--button-background-color:var(--color-background-success-solid);--button-background-color-hover:var(--color-background-success-solid-hover);--button-background-color-active:var(--color-background-success-solid-active);--button-text-color:var(--color-text-success-solid);--button-ring-color:var(--color-ring-success-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=danger]){--button-background-color:var(--color-background-danger-solid);--button-background-color-hover:var(--color-background-danger-solid-hover);--button-background-color-active:var(--color-background-danger-solid-active);--button-text-color:var(--color-text-danger-solid);--button-ring-color:var(--color-ring-danger-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=warning]){--button-background-color:var(--color-background-warning-solid);--button-background-color-hover:var(--color-background-warning-solid-hover);--button-background-color-active:var(--color-background-warning-solid-active);--button-text-color:var(--color-text-warning-solid);--button-ring-color:var(--color-ring-warning-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=caution]){--button-background-color:var(--color-background-caution-solid);--button-background-color-hover:var(--color-background-caution-solid-hover);--button-background-color-active:var(--color-background-caution-solid-active);--button-text-color:var(--color-text-caution-solid);--button-ring-color:var(--color-ring-caution-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=info]){--button-background-color:var(--color-background-info-solid);--button-background-color-hover:var(--color-background-info-solid-hover);--button-background-color-active:var(--color-background-info-solid-active);--button-text-color:var(--color-text-info-solid);--button-ring-color:var(--color-ring-info-solid)}._Button_1864l_1[data-variant=solid]:where([data-color=discovery]){--button-background-color:var(--color-background-discovery-solid);--button-background-color-hover:var(--color-background-discovery-solid-hover);--button-background-color-active:var(--color-background-discovery-solid-active);--button-text-color:var(--color-text-discovery-solid);--button-ring-color:var(--color-ring-discovery-solid)}._Button_1864l_1[data-variant=soft]{color:var(--button-text-color)}._Button_1864l_1[data-variant=soft]:before{background-color:var(--button-background-color)}._Button_1864l_1[data-variant=soft][aria-expanded=true]:before,._Button_1864l_1[data-variant=soft][data-state=open]:before,._Button_1864l_1[data-variant=soft][data-selected]:before{background-color:var(--button-background-color-hover)}@media (hover:hover) and (pointer:fine){._Button_1864l_1[data-variant=soft]:where(:not([data-disabled])):hover:before{background-color:var(--button-background-color-hover)}}._Button_1864l_1[data-variant=soft]:where(:not([data-disabled])):active:before{background-color:var(--button-background-color-active)}._Button_1864l_1[data-variant=soft]:where(:not([data-disabled])):active:before,._Button_1864l_1[data-variant=soft]:where(:not([data-disabled])):active:after{transform:scale(var(--scale))}._Button_1864l_1[data-variant=soft]:where([data-color=primary]){--button-background-color:var(--color-background-primary-soft-alpha);--button-background-color-hover:var(--color-background-primary-soft-alpha-hover);--button-background-color-active:var(--color-background-primary-soft-alpha-active);--button-text-color:var(--color-text-primary-soft);--button-ring-color:var(--color-ring-primary-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=secondary]){--button-background-color:var(--color-background-secondary-soft-alpha);--button-background-color-hover:var(--color-background-secondary-soft-alpha-hover);--button-background-color-active:var(--color-background-secondary-soft-alpha-active);--button-text-color:var(--color-text-secondary-soft);--button-ring-color:var(--color-ring-secondary-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=success]){--button-background-color:var(--color-background-success-soft-alpha);--button-background-color-hover:var(--color-background-success-soft-alpha-hover);--button-background-color-active:var(--color-background-success-soft-alpha-active);--button-text-color:var(--color-text-success-soft);--button-ring-color:var(--color-ring-success-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=danger]){--button-background-color:var(--color-background-danger-soft-alpha);--button-background-color-hover:var(--color-background-danger-soft-alpha-hover);--button-background-color-active:var(--color-background-danger-soft-alpha-active);--button-text-color:var(--color-text-danger-soft);--button-ring-color:var(--color-ring-danger-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=warning]){--button-background-color:var(--color-background-warning-soft-alpha);--button-background-color-hover:var(--color-background-warning-soft-alpha-hover);--button-background-color-active:var(--color-background-warning-soft-alpha-active);--button-text-color:var(--color-text-warning-soft);--button-ring-color:var(--color-ring-warning-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=caution]){--button-background-color:var(--color-background-caution-soft-alpha);--button-background-color-hover:var(--color-background-caution-soft-alpha-hover);--button-background-color-active:var(--color-background-caution-soft-alpha-active);--button-text-color:var(--color-text-caution-soft);--button-ring-color:var(--color-ring-caution-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=info]){--button-background-color:var(--color-background-info-soft-alpha);--button-background-color-hover:var(--color-background-info-soft-alpha-hover);--button-background-color-active:var(--color-background-info-soft-alpha-active);--button-text-color:var(--color-text-info-soft);--button-ring-color:var(--color-ring-info-soft)}._Button_1864l_1[data-variant=soft]:where([data-color=discovery]){--button-background-color:var(--color-background-discovery-soft-alpha);--button-background-color-hover:var(--color-background-discovery-soft-alpha-hover);--button-background-color-active:var(--color-background-discovery-soft-alpha-active);--button-text-color:var(--color-text-discovery-soft);--button-ring-color:var(--color-ring-discovery-soft)}._Button_1864l_1[data-variant=outline]{--button-ring-offset:-1px;color:var(--button-text-color)}._Button_1864l_1[data-variant=outline]:before{box-shadow:0 0 0 1px var(--button-border-color) inset, var(--button-shadow-custom,0 0 #0000);background-color:#0000}._Button_1864l_1[data-variant=outline][aria-expanded=true],._Button_1864l_1[data-variant=outline][data-state=open],._Button_1864l_1[data-variant=outline][data-selected]{color:var(--button-text-color-hover)}._Button_1864l_1[data-variant=outline][aria-expanded=true]:before,._Button_1864l_1[data-variant=outline][data-state=open]:before,._Button_1864l_1[data-variant=outline][data-selected]:before{background-color:var(--button-background-color-hover);box-shadow:0 0 0 1px var(--button-border-color-hover) inset, var(--button-shadow-custom,0 0 #0000)}@media (hover:hover) and (pointer:fine){._Button_1864l_1[data-variant=outline]:where(:not([data-disabled])):hover{color:var(--button-text-color-hover)}._Button_1864l_1[data-variant=outline]:where(:not([data-disabled])):hover:before{background-color:var(--button-background-color-hover);box-shadow:0 0 0 1px var(--button-border-color-hover) inset, var(--button-shadow-custom,0 0 #0000)}}._Button_1864l_1[data-variant=outline]:where(:not([data-disabled])):active:before{background-color:var(--button-background-color-active);transform:scale(var(--scale))}._Button_1864l_1[data-variant=outline]:where(:not([data-disabled])):active:after{transform:scale(var(--scale))}._Button_1864l_1[data-variant=outline]:where([data-color=primary]){--button-background-color-hover:var(--color-background-primary-outline-hover);--button-background-color-active:var(--color-background-primary-outline-active);--button-border-color:var(--color-border-primary-outline);--button-border-color-hover:var(--color-border-primary-outline-hover);--button-text-color:var(--color-text-primary-outline);--button-text-color-hover:var(--color-text-primary-outline-hover);--button-ring-color:var(--color-ring-primary-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=secondary]){--button-background-color-hover:var(--color-background-secondary-outline-hover);--button-background-color-active:var(--color-background-secondary-outline-active);--button-border-color:var(--color-border-secondary-outline);--button-border-color-hover:var(--color-border-secondary-outline-hover);--button-text-color:var(--color-text-secondary-outline);--button-text-color-hover:var(--color-text-secondary-outline-hover);--button-ring-color:var(--color-ring-secondary-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=danger]){--button-background-color-hover:var(--color-background-danger-outline-hover);--button-background-color-active:var(--color-background-danger-outline-active);--button-border-color:var(--color-border-danger-outline);--button-border-color-hover:var(--color-border-danger-outline-hover);--button-text-color:var(--color-text-danger-outline);--button-text-color-hover:var(--color-text-danger-outline-hover);--button-ring-color:var(--color-ring-danger-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=success]){--button-background-color-hover:var(--color-background-success-outline-hover);--button-background-color-active:var(--color-background-success-outline-active);--button-border-color:var(--color-border-success-outline);--button-border-color-hover:var(--color-border-success-outline-hover);--button-text-color:var(--color-text-success-outline);--button-text-color-hover:var(--color-text-success-outline-hover);--button-ring-color:var(--color-ring-success-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=warning]){--button-background-color-hover:var(--color-background-warning-outline-hover);--button-background-color-active:var(--color-background-warning-outline-active);--button-border-color:var(--color-border-warning-outline);--button-border-color-hover:var(--color-border-warning-outline-hover);--button-text-color:var(--color-text-warning-outline);--button-text-color-hover:var(--color-text-warning-outline-hover);--button-ring-color:var(--color-ring-warning-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=caution]){--button-background-color-hover:var(--color-background-caution-outline-hover);--button-background-color-active:var(--color-background-caution-outline-active);--button-border-color:var(--color-border-caution-outline);--button-border-color-hover:var(--color-border-caution-outline-hover);--button-text-color:var(--color-text-caution-outline);--button-text-color-hover:var(--color-text-caution-outline-hover);--button-ring-color:var(--color-ring-caution-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=info]){--button-background-color-hover:var(--color-background-info-outline-hover);--button-background-color-active:var(--color-background-info-outline-active);--button-border-color:var(--color-border-info-outline);--button-border-color-hover:var(--color-border-info-outline-hover);--button-text-color:var(--color-text-info-outline);--button-text-color-hover:var(--color-text-info-outline-hover);--button-ring-color:var(--color-ring-info-outline)}._Button_1864l_1[data-variant=outline]:where([data-color=discovery]){--button-background-color-hover:var(--color-background-discovery-outline-hover);--button-background-color-active:var(--color-background-discovery-outline-active);--button-border-color:var(--color-border-discovery-outline);--button-border-color-hover:var(--color-border-discovery-outline-hover);--button-text-color:var(--color-text-discovery-outline);--button-text-color-hover:var(--color-text-discovery-outline-hover);--button-ring-color:var(--color-ring-discovery-outline)}._Button_1864l_1[disabled]{pointer-events:none}._Button_1864l_1[data-disabled][data-variant]{--button-background-color:var(--color-background-disabled);--button-border-color:var(--color-border-disabled);--button-text-color:var(--color-text-disabled);cursor:not-allowed;pointer-events:auto}._Button_1864l_1[data-disabled][data-variant]:active:before{transform:scale(1)}._Button_1864l_1[data-disabled][data-variant][data-disabled-tone=relaxed]{cursor:default}._ButtonInner_1864l_4{flex-direction:inherit;justify-content:center;align-items:center;gap:inherit;width:100%;height:100%;transition:opacity .15s .1s;display:flex;position:relative}[data-loading] ._ButtonInner_1864l_4{opacity:0;transition:opacity .3s}._ButtonLoader_1864l_749{z-index:3;pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._ButtonLoader_1864l_749[data-entering]{opacity:0}._ButtonLoader_1864l_749[data-exiting]{opacity:1}._ButtonLoader_1864l_749[data-entering-active],._ButtonLoader_1864l_749[data-entering][data-interrupted]{opacity:1;transition:opacity .15s .1s}._ButtonLoader_1864l_749[data-exiting-active],._ButtonLoader_1864l_749[data-exiting][data-interrupted]{opacity:0;transition:opacity .15s}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-x-4{inset-inline:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.container{width:100%}@media (width>=380px){.container{max-width:380px}}@media (width>=576px){.container{max-width:576px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.mx-auto{margin-inline:auto}.mx-px{margin-inline:1px}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-\[104px\]{width:104px;height:104px}.size-full{width:100%;height:100%}.h-0{height:0}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-\[var\(--button-icon-size\)\]{height:var(--button-icon-size)}.h-full{height:100%}.w-\[44\%\]{width:44%}.w-\[var\(--button-icon-size\)\]{width:var(--button-icon-size)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-rotate-90{rotate:-90deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, )}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-default{border-color:var(--color-border)}.border-primary-surface{border-color:var(--color-border-primary-surface)}.border-strong{border-color:var(--color-border-strong)}.border-subtle{border-color:var(--color-border-subtle)}.bg-danger-solid{background-color:var(--color-background-danger-solid)}.bg-info-solid{background-color:var(--color-background-info-solid)}.bg-primary-solid{background-color:var(--color-background-primary-solid)}.bg-primary-surface{background-color:var(--color-background-primary-surface)}.bg-secondary-solid{background-color:var(--color-background-secondary-solid)}.bg-surface{background-color:var(--color-surface)}.bg-surface-elevated{background-color:var(--color-surface-elevated)}.bg-surface-secondary{background-color:var(--color-surface-secondary)}.bg-surface-tertiary{background-color:var(--color-surface-tertiary)}.bg-warning-solid{background-color:var(--color-background-warning-solid)}.fill-secondary{fill:var(--color-text-secondary)}.stroke-\[var\(--color-border-subtle\)\]{stroke:var(--color-border-subtle)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.py-1{padding-block:var(--spacing)}.pt-1{padding-top:var(--spacing)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.heading-lg{font-size:var(--font-heading-lg-size);font-weight:var(--font-heading-lg-weight);letter-spacing:var(--font-heading-lg-tracking);line-height:var(--font-heading-lg-line-height)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));letter-spacing:var(--tw-tracking,var(--text-2xl--letter-spacing));font-weight:var(--tw-font-weight,var(--text-2xl--font-weight))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));letter-spacing:var(--tw-tracking,var(--text-3xl--letter-spacing));font-weight:var(--tw-font-weight,var(--text-3xl--font-weight))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));letter-spacing:var(--tw-tracking,var(--text-4xl--letter-spacing));font-weight:var(--tw-font-weight,var(--text-4xl--font-weight))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));letter-spacing:var(--tw-tracking,var(--text-base--letter-spacing));font-weight:var(--tw-font-weight,var(--text-base--font-weight))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));letter-spacing:var(--tw-tracking,var(--text-lg--letter-spacing));font-weight:var(--tw-font-weight,var(--text-lg--font-weight))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));letter-spacing:var(--tw-tracking,var(--text-sm--letter-spacing));font-weight:var(--tw-font-weight,var(--text-sm--font-weight))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));letter-spacing:var(--tw-tracking,var(--text-xl--letter-spacing));font-weight:var(--tw-font-weight,var(--text-xl--font-weight))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));letter-spacing:var(--tw-tracking,var(--text-xs--letter-spacing));font-weight:var(--tw-font-weight,var(--text-xs--font-weight))}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.text-danger{color:var(--color-text-danger)}.text-default{color:var(--color-text)}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-success{color:var(--color-text-success)}.text-tertiary{color:var(--color-text-tertiary)}.text-warning{color:var(--color-text-warning)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, )}.underline{text-decoration-line:underline}.opacity-60{opacity:.6}.shadow-lg{--tw-shadow:var(--shadow-300);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[var\(--color-border-default\)\]{--tw-ring-color:var(--color-border-default)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.filter{filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-all{-webkit-user-select:all;user-select:all}@media (hover:hover) and (pointer:fine){.hover\:bg-surface-secondary:hover{background-color:var(--color-surface-secondary)}}@media (width>=576px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}body{background:0 0;margin:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
118
118
  /*$vite$:1*/</style>