wizards 0.3.5 → 0.3.6
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/apps/runtime/dist/docs/user/test-and-share.md +21 -11
- package/apps/runtime/dist/routes/studio.js +15 -2
- package/apps/runtime/dist/services/wizards.js +25 -0
- package/apps/web/dist/assets/{AboutDialog-D1N4-3FE.js → AboutDialog-Dz_tYBSU.js} +1 -1
- package/apps/web/dist/assets/{ChangelogDialog-VEBTlC3f.js → ChangelogDialog-m2M7gZiB.js} +1 -1
- package/apps/web/dist/assets/{ChatView-DSRUEpb6.js → ChatView-D21o-lq8.js} +2 -2
- package/apps/web/dist/assets/EditorPage-D6j3dQpu.js +3 -0
- package/apps/web/dist/assets/{FlowPreview-86xWWfdk.js → FlowPreview-BdRy7FO7.js} +1 -1
- package/apps/web/dist/assets/{Harness-CF6H2TYJ.js → Harness-DmJkTwOO.js} +1 -1
- package/apps/web/dist/assets/{Marketplace-C-Vz3yEk.js → Marketplace-B-gy2onK.js} +2 -2
- package/apps/web/dist/assets/{NewWizardChannels-Cc7gDitg.js → NewWizardChannels-B3FEpsJ-.js} +1 -1
- package/apps/web/dist/assets/{NewWizardPage-sY5q-l99.js → NewWizardPage-CT1lThNM.js} +1 -1
- package/apps/web/dist/assets/{ProjectPage-iSdpJAZS.js → ProjectPage-BIanCF0m.js} +2 -2
- package/apps/web/dist/assets/{PublicRunner-BgRXMUxS.js → PublicRunner-H1fXa9BK.js} +1 -1
- package/apps/web/dist/assets/{ReadOnly-mhKW496R.js → ReadOnly-CaGzgOPe.js} +1 -1
- package/apps/web/dist/assets/{RunDrawer-B0gJzdxH.js → RunDrawer-8sjkAbm5.js} +1 -1
- package/apps/web/dist/assets/{RunnerView-CTRFgyu5.js → RunnerView-CJ4cLA_0.js} +1 -1
- package/apps/web/dist/assets/{SettingsPage-CBF8i6j6.js → SettingsPage-BsdwE1OA.js} +1 -1
- package/apps/web/dist/assets/{SetupPage-Fpz9aSLN.js → SetupPage-sqrv7Auf.js} +1 -1
- package/apps/web/dist/assets/{SharePage-Dv3Csh4A.js → SharePage-B6ets1ot.js} +1 -1
- package/apps/web/dist/assets/{brand-BamUjXVr.js → brand-BRw18WJF.js} +1 -1
- package/apps/web/dist/assets/changelog-BOFdRjx2.js +1 -0
- package/apps/web/dist/assets/{circle-alert-CYs622_r.js → circle-alert-CpuMIhbH.js} +1 -1
- package/apps/web/dist/assets/{esm-B52LIMhP.js → esm-DRaZAcXQ.js} +1 -1
- package/apps/web/dist/assets/{index-CDdJDojq.css → index-DY9CslcT.css} +1 -1
- package/apps/web/dist/assets/{index-Bdx1Qity.js → index-DkDBEMwz.js} +4 -4
- package/apps/web/dist/assets/{lock-BvSWZOin.js → lock-BGotwAyN.js} +1 -1
- package/apps/web/dist/assets/{phone-CI2Flerg.js → phone-CA2A8W7I.js} +1 -1
- package/apps/web/dist/assets/{session-BEHF6g4Y.js → session-DBOQL_bg.js} +1 -1
- package/apps/web/dist/assets/{settings-menu-BOOPxcJH.js → settings-menu-DxswVOqQ.js} +1 -1
- package/apps/web/dist/assets/{ui-CMdSOoUZ.js → ui-DAHMnAVc.js} +1 -1
- package/apps/web/dist/assets/{upload-Cz9HgBT9.js → upload-DLbJVvfd.js} +1 -1
- package/apps/web/dist/assets/{volume-2-CyQuz1nn.js → volume-2-KaKQ4zMJ.js} +1 -1
- package/apps/web/dist/index.html +7 -7
- package/apps/web/dist/mcp/flow.html +2 -2
- package/node_modules/@engenty-wizards/shared/dist/changes.d.ts +22 -0
- package/node_modules/@engenty-wizards/shared/dist/changes.js +61 -0
- package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +8 -8
- package/node_modules/@engenty-wizards/shared/dist/marketplace.d.ts +1 -1
- package/node_modules/@engenty-wizards/shared/dist/wizard-package.d.ts +1 -1
- package/package.json +1 -1
- package/apps/web/dist/assets/EditorPage-UkaHDklX.js +0 -3
- package/apps/web/dist/assets/changelog-ViHoNW7e.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/qr-scanner.min-C_UI0gH-.js","assets/preload-helper-CNEI7N0N.js","assets/pdfmake-Cx9scTbD.js","assets/rolldown-runtime-hePW80VL.js","assets/vfs_fonts-DllDSYt1.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{n,t as r}from"./jsx-runtime-BNakU3Ej.js";import{t as i}from"./preload-helper-CNEI7N0N.js";var a=t(n(),1),o=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,s=/^[\\/]{2}/;function c(e,t){return t+e.replace(/\\/g,`/`)}var l=`popstate`;function u(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function d(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return g(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:_(t)}return y(t,n,null,e)}function f(e,t){if(e===!1||e==null)throw Error(t)}function p(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function m(){return Math.random().toString(36).substring(2,10)}function h(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function g(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?v(t):t,state:n,key:t&&t.key||r||m(),mask:i}}function _({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function v(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function y(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,d=f();d??(d=0,o.replaceState({...o.state,idx:d},``));function f(){return(o.state||{idx:null}).idx}function p(){s=`POP`;let e=f(),t=e==null?null:e-d;d=e,c&&c({action:s,location:y.location,delta:t})}function m(e,t){s=`PUSH`;let r=u(e)?e:g(y.location,e,t);n&&n(r,e),d=f()+1;let l=h(r,d),p=y.createHref(r.mask||r);try{o.pushState(l,``,p)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(p)}a&&c&&c({action:s,location:y.location,delta:1})}function _(e,t){s=`REPLACE`;let r=u(e)?e:g(y.location,e,t);n&&n(r,e),d=f();let i=h(r,d),l=y.createHref(r.mask||r);o.replaceState(i,``,l),a&&c&&c({action:s,location:y.location,delta:0})}function v(e){return b(i,e)}let y={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener(l,p),c=e,()=>{i.removeEventListener(l,p),c=null}},createHref(e){return t(i,e)},createURL:v,encodeLocation(e){let t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:m,replace:_,go(e){return o.go(e)}};return y}function b(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),f(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:_(t);return i=i.replace(/ $/,`%20`),!n&&s.test(i)&&(i=r+i),new URL(i,r)}function x(e,t,n=`/`){return S(e,t,n,!1)}function S(e,t,n,r,i){let a=pe((typeof t==`string`?v(t):t).pathname||`/`,n);if(a==null)return null;let o=i??C(e),s=null,c=D(a);for(let e=0;s==null&&e<o.length;++e)s=le(o[e],c,r);return s}function C(e){let t=w(e);return ee(t),t}function w(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;f(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=xe([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(f(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),w(e.children,t,u,l,o)),(e.path!=null||e.index)&&t.push({path:l,score:se(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=fe(e.relativePath,e.caseSensitive,t===u.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of T(e.path))a(e,t,!0,n)}),t}function T(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=T(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function ee(e){e.sort((e,t)=>e.score===t.score?ce(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var te=/^:[\w-]+$/,ne=3,E=2,re=1,ie=10,ae=-2,oe=e=>e===`*`;function se(e,t){let n=e.split(`/`),r=n.length;return n.some(oe)&&(r+=ae),t&&(r+=E),n.filter(e=>!oe(e)).reduce((e,t)=>e+(te.test(t)?ne:t===``?re:ie),r)}function ce(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function le(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u={path:s.relativePath,caseSensitive:s.caseSensitive,end:c},d=s.matcher&&s.compiledParams?de(u,l,s.matcher,s.compiledParams):ue(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=ue({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:xe([a,d.pathname]),pathnameBase:Se(xe([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=xe([a,d.pathnameBase]))}return o}function ue(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=fe(e.path,e.caseSensitive,e.end);return de(e,t,n,r)}function de(e,t,n,r){let i=t.match(n);if(!i)return null;let a=i[0],o=O(a,1),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=O(a.slice(0,a.length-e.length),1)}let i=s[r];return e[t]=n&&!i?void 0:(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function fe(e,t=!1,n=!0){p(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function D(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return p(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function pe(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function me(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?v(e):e,a;return n?(n=be(n),a=n.startsWith(`/`)||n.startsWith(`\\`)?he(n.substring(1),`/`):he(n,t)):a=t,{pathname:a,search:k(r),hash:Ce(i)}}function he(e,t){let n=O(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function ge(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function _e(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function ve(e){let t=_e(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function ye(e,t,n,r=!1){let i;typeof e==`string`?i=v(e):(i={...e},f(!i.pathname||!i.pathname.includes(`?`),ge(`?`,`pathname`,`search`,i)),f(!i.pathname||!i.pathname.includes(`#`),ge(`#`,`pathname`,`hash`,i)),f(!i.search||!i.search.includes(`#`),ge(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=me(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var be=e=>e.replace(/[\\/]{2,}/g,`/`),xe=e=>be(e.join(`/`));function O(e,t=0){let n=e.length;for(;n>t&&e.charCodeAt(n-1)===47;)n--;return n===e.length?e:e.slice(0,n)}var Se=e=>O(e).replace(/^\/*/,`/`),k=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,Ce=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,we=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Te(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function Ee(e){return xe(e.map(e=>e.route.path).filter(Boolean))||`/`}var De=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Oe(e,t){let n=e;if(typeof n!=`string`||!o.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(De)try{let e=new URL(window.location.href),r=s.test(n)?new URL(c(n,e.protocol)):new URL(n),a=pe(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{p(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var ke=new URL(`http://localhost`);function Ae(e){if(e.createURL)return e.createURL(`/`);try{return new URL(e.createHref(`/`),ke)}catch{return ke}}function je(e,t){return e.origin===t.origin&&(e.origin!==`null`||e.protocol===t.protocol&&e.host===t.host)}function Me(e,t){if(e.startsWith(`//`))return!0;let n=t.protocol.toLowerCase();return e.toLowerCase().startsWith(n)?t.host===``||e.slice(n.length).startsWith(`//`):!1}function Ne(e,t,n,r){let i=null;try{i=e==null?null:new URL(e,n)}catch{}let a=new URL(t,n),o=i!=null&&!je(i,n),s=!je(a,n);if(r===`reject`){if(o||s)throw Error(`External navigation is not allowed`)}else if(s&&(i==null||!Me(e,i)||!je(i,a)))throw Error(`External navigation is not allowed`)}var Pe=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(Pe);var Fe=[`GET`,...Pe];new Set(Fe);var Ie=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function Le(e){try{return Ie.includes(new URL(e).protocol)}catch{return!1}}var Re=a.createContext(null);Re.displayName=`DataRouter`;var ze=a.createContext(null);ze.displayName=`DataRouterState`;var Be=a.createContext(!1);function Ve(){return a.useContext(Be)}var He=a.createContext({isTransitioning:!1});He.displayName=`ViewTransition`;var Ue=a.createContext(new Map);Ue.displayName=`Fetchers`;var We=a.createContext(null);We.displayName=`Await`;var Ge=a.createContext(null);Ge.displayName=`Navigation`;var Ke=a.createContext(null);Ke.displayName=`Location`;var qe=a.createContext({outlet:null,matches:[],isDataRoute:!1});qe.displayName=`Route`;var Je=a.createContext(null);Je.displayName=`RouteError`;var Ye=`REACT_ROUTER_ERROR`,Xe=`REDIRECT`,Ze=`ROUTE_ERROR_RESPONSE`;function Qe(e){if(e.startsWith(`${Ye}:${Xe}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function $e(e){if(e.startsWith(`${Ye}:${Ze}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new we(t.status,t.statusText,t.data)}catch{}}function et(e,{relative:t}={}){f(tt(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=a.useContext(Ge),{hash:i,pathname:o,search:s}=ct(e,{relative:t}),c=o;return n!==`/`&&(c=o===`/`?n:xe([n,o])),r.createHref({pathname:c,search:s,hash:i})}function tt(){return a.useContext(Ke)!=null}function nt(){return f(tt(),`useLocation() may be used only in the context of a <Router> component.`),a.useContext(Ke).location}var rt=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function it(e){a.useContext(Ge).static||a.useLayoutEffect(e)}function at(){let{isDataRoute:e}=a.useContext(qe);return e?wt():ot()}function ot(){f(tt(),`useNavigate() may be used only in the context of a <Router> component.`);let e=a.useContext(Re),{basename:t,navigator:n}=a.useContext(Ge),{matches:r}=a.useContext(qe),{pathname:i}=nt(),o=JSON.stringify(ve(r)),s=a.useRef(!1);return it(()=>{s.current=!0}),a.useCallback((r,a={})=>{if(p(s.current,rt),!s.current)return;if(typeof r==`number`){n.go(r);return}let c=ye(r,JSON.parse(o),i,a.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:xe([t,c.pathname])),Ne(typeof r==`string`?r:_(r),n.createHref(c),Ae(n),`reject`),(a.replace?n.replace:n.push)(c,a.state,a)},[t,n,o,i,e])}a.createContext(null);function st(){let{matches:e}=a.useContext(qe);return e[e.length-1]?.params??{}}function ct(e,{relative:t}={}){let{matches:n}=a.useContext(qe),{pathname:r}=nt(),i=JSON.stringify(ve(n));return a.useMemo(()=>ye(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function lt(e,t){return ut(e,t)}function ut(e,t,n){f(tt(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=a.useContext(Ge),{matches:i}=a.useContext(qe),o=i[i.length-1],s=o?o.params:{},c=o?o.pathname:`/`,l=o?o.pathnameBase:`/`,u=o&&o.route;{let e=u&&u.path||``;Et(c,!u||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${c}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
|
|
3
3
|
|
|
4
|
-
Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let d=nt(),m;if(t){let e=typeof t==`string`?v(t):t;f(l===`/`||e.pathname?.startsWith(l),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${l}" but pathname "${e.pathname}" was given in the \`location\` prop.`),m=e}else m=d;let h=m.pathname||`/`,g=h;if(l!==`/`){let e=l.replace(/^\//,``).split(`/`);g=`/`+h.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let _=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):x(e,{pathname:g});p(u||_!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),p(_==null||_[_.length-1].route.element!==void 0||_[_.length-1].route.Component!==void 0||_[_.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let y=gt(_&&_.map(e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:xe([l,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?l:xe([l,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&y?a.createElement(Ke.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...m},navigationType:`POP`}},y):y}function dt(){let e=Ct(),t=Te(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},o={padding:`2px 4px`,backgroundColor:r},s=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),s=a.createElement(a.Fragment,null,a.createElement(`p`,null,`💿 Hey developer 👋`),a.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,a.createElement(`code`,{style:o},`ErrorBoundary`),` or`,` `,a.createElement(`code`,{style:o},`errorElement`),` prop on your route.`)),a.createElement(a.Fragment,null,a.createElement(`h2`,null,`Unexpected Application Error!`),a.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?a.createElement(`pre`,{style:i},n):null,s)}var ft=a.createElement(dt,null),pt=class extends a.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=$e(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:a.createElement(qe.Provider,{value:this.props.routeContext},a.createElement(Je.Provider,{value:e,children:this.props.component}));return this.context?a.createElement(mt,{error:e},t):t}};pt.contextType=Be;var A=new WeakMap;function mt({children:e,error:t}){let{basename:n,navigator:r}=a.useContext(Ge);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Qe(t.digest);if(e){let i=A.get(t);if(i)throw i;let o=Oe(e.location,n),s=o.absoluteURL||o.to;if(Ne(e.location,s,Ae(r),`allow-explicit`),Le(s))throw Error(`Invalid redirect location`);if(De&&!A.get(t)){if(o.isExternal||e.reloadDocument)window.location.href=s;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(o.to,{replace:e.replace}));throw A.set(t,n),n}}return a.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${s}`})}}return e}function ht({routeContext:e,match:t,children:n}){let r=a.useContext(Re);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),a.createElement(qe.Provider,{value:e},n)}function gt(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,o=r?.errors;if(o!=null){let e=i.findIndex(e=>e.route.id&&o?.[e.route.id]!==void 0);f(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let s=!1,c=-1;if(n&&r){s=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:a}=r,o=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||o){n.isStatic&&(s=!0),i=c>=0?i.slice(0,c+1):[i[0]];break}}}}let l=n?.onError,u=r&&l?(e,t)=>{l(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:Ee(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,l)=>{let d,f=!1,p=null,m=null;r&&(d=o&&n.route.id?o[n.route.id]:void 0,p=n.route.errorElement||ft,s&&(c<0&&l===0?(Et(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),f=!0,m=null):c===l&&(f=!0,m=n.route.hydrateFallbackElement||null)));let h=t.concat(i.slice(0,l+1)),g=()=>{let t;return t=d?p:f?m:n.route.Component?a.createElement(n.route.Component,null):n.route.element?n.route.element:e,a.createElement(ht,{match:n,routeContext:{outlet:e,matches:h,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||l===0)?a.createElement(pt,{location:r.location,revalidation:r.revalidation,component:p,error:d,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:u}):g()},null)}function _t(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function vt(e){let t=a.useContext(Re);return f(t,_t(e)),t}function yt(e){let t=a.useContext(ze);return f(t,_t(e)),t}function bt(e){let t=a.useContext(qe);return f(t,_t(e)),t}function xt(e){let t=bt(e),n=t.matches[t.matches.length-1];return f(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function St(){return xt(`useRouteId`)}function Ct(){let e=a.useContext(Je),t=yt(`useRouteError`),n=xt(`useRouteError`);return e===void 0?t.errors?.[n]:e}function wt(){let{router:e}=vt(`useNavigate`),t=xt(`useNavigate`),n=a.useRef(!1);return it(()=>{n.current=!0}),a.useCallback(async(r,i={})=>{p(n.current,rt),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Tt={};function Et(e,t,n){!t&&!Tt[e]&&(Tt[e]=!0,p(!1,n))}a.memo(Dt);function Dt({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return ut(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Ot({to:e,replace:t,state:n,relative:r}){f(tt(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i,navigator:o}=a.useContext(Ge);p(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:s}=a.useContext(qe),{pathname:c}=nt(),l=at(),u=ye(e,ve(s),c,r===`path`);Ne(typeof e==`string`?e:_(e),o.createHref(u),Ae(o),`reject`);let d=JSON.stringify(u);return a.useEffect(()=>{l(JSON.parse(d),{replace:t,state:n,relative:r})},[l,d,r,t,n]),null}function kt(e){f(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function At({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:o=!1,useTransitions:s}){f(!tt(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let c=e.replace(/^\/*/,`/`),l=a.useMemo(()=>({basename:c,navigator:i,static:o,useTransitions:s,future:{}}),[c,i,o,s]);typeof n==`string`&&(n=v(n));let{pathname:u=`/`,search:d=``,hash:m=``,state:h=null,key:g=`default`,mask:_}=n,y=a.useMemo(()=>{let e=pe(u,c);return e==null?null:{location:{pathname:e,search:d,hash:m,state:h,key:g,mask:_},navigationType:r}},[c,u,d,m,h,g,r,_]);return p(y!=null,`<Router basename="${c}"> is not able to match the URL "${u}${d}${m}" because it does not start with the basename, so the <Router> won't render anything.`),y==null?null:a.createElement(Ge.Provider,{value:l},a.createElement(Ke.Provider,{children:t,value:y}))}function jt({children:e,location:t}){return lt(Mt(e),t)}a.Component;function Mt(e,t=[]){let n=[];return a.Children.forEach(e,(e,r)=>{if(!a.isValidElement(e))return;let i=[...t,r];if(e.type===a.Fragment){n.push.apply(n,Mt(e.props.children,i));return}f(e.type===kt,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),f(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let o={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(o.children=Mt(e.props.children,i)),n.push(o)}),n}var Nt=`get`,Pt=`application/x-www-form-urlencoded`;function Ft(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function It(e){return Ft(e)&&e.tagName.toLowerCase()===`button`}function Lt(e){return Ft(e)&&e.tagName.toLowerCase()===`form`}function Rt(e){return Ft(e)&&e.tagName.toLowerCase()===`input`}function zt(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Bt(e,t){return e.button===0&&(!t||t===`_self`)&&!zt(e)}function Vt(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function Ht(e,t){let n=Vt(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var Ut=null;function Wt(){if(Ut===null)try{new FormData(document.createElement(`form`),0),Ut=!1}catch{Ut=!0}return Ut}var Gt=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Kt(e){return e!=null&&!Gt.has(e)?(p(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Pt}"`),null):e}function qt(e,t){let n,r,i,a,o;if(Lt(e)){let o=e.getAttribute(`action`);r=o?pe(o,t):null,n=e.getAttribute(`method`)||Nt,i=Kt(e.getAttribute(`enctype`))||Pt,a=new FormData(e)}else if(It(e)||Rt(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?pe(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||Nt,i=Kt(e.getAttribute(`formenctype`))||Kt(o.getAttribute(`enctype`))||Pt,a=new FormData(o,e),!Wt()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(Ft(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=Nt,r=null,i=Pt,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function Jt(e,t){if(e===!1||e==null)throw Error(t)}function Yt(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return i.pathname=n?i.pathname.endsWith(`/`)?`${i.pathname}_.${r}`:`${i.pathname}.${r}`:i.pathname===`/`?`_root.${r}`:t&&pe(i.pathname,t)===`/`?`${O(t)}/_root.${r}`:`${O(i.pathname)}.${r}`,i}async function Xt(e,t){if(e.id in t)return t[e.id];try{let n=await i(()=>import(e.module),[]);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function Zt(e){return e!=null&&typeof e.page==`string`}function Qt(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function $t(e,t,n){return an((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Xt(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Qt).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function en(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function tn(e,t,{includeHydrateFallback:n}={}){return nn(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function nn(e){return[...new Set(e)]}function rn(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function an(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Zt(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(rn(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function on(){let e=a.useContext(Re);return Jt(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function sn(){let e=a.useContext(ze);return Jt(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var cn=a.createContext(void 0);cn.displayName=`FrameworkContext`;function ln(){let e=a.useContext(cn);return Jt(e,`You must render this element inside a <HydratedRouter> element`),e}function un(e,t){let n=a.useContext(cn),[r,i]=a.useState(!1),[o,s]=a.useState(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:f}=t,p=a.useRef(null);a.useEffect(()=>{if(e===`render`&&s(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{s(e.isIntersecting)})},{threshold:.5});return p.current&&e.observe(p.current),()=>{e.disconnect()}}},[e]),a.useEffect(()=>{if(r){let e=setTimeout(()=>{s(!0)},100);return()=>{clearTimeout(e)}}},[r]);let m=()=>{i(!0)},h=()=>{i(!1),s(!1)};return n?e===`intent`?[o,p,{onFocus:dn(c,m),onBlur:dn(l,h),onMouseEnter:dn(u,m),onMouseLeave:dn(d,h),onTouchStart:dn(f,m)}]:[o,p,{}]:[!1,p,{}]}function dn(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function fn({page:e,...t}){let n=Ve(),{nonce:r}=ln(),{router:i}=on(),o=a.useMemo(()=>x(i.routes,e,i.basename),[i.routes,e,i.basename]);return o?(t.nonce==null&&r&&(t={...t,nonce:r}),n?a.createElement(mn,{page:e,matches:o,...t}):a.createElement(hn,{page:e,matches:o,...t})):null}function pn(e){let{manifest:t,routeModules:n}=ln(),[r,i]=a.useState([]);return a.useEffect(()=>{let r=!1;return $t(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function mn({page:e,matches:t,...n}){let r=nt(),{future:i}=ln(),{basename:o}=on(),s=a.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Yt(e,o,i.v8_trailingSlashAwareDataRequests,`rsc`),a=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?a=!0:s.push(e.route.id);return a&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[o,i.v8_trailingSlashAwareDataRequests,e,r,t]);return a.createElement(a.Fragment,null,s.map(e=>a.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function hn({page:e,matches:t,...n}){let r=nt(),{future:i,manifest:o,routeModules:s}=ln(),{basename:c}=on(),{loaderData:l,matches:u}=sn(),d=a.useMemo(()=>en(e,t,u,o,r,`data`),[e,t,u,o,r]),f=a.useMemo(()=>en(e,t,u,o,r,`assets`),[e,t,u,o,r]),p=a.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,a=!1;if(t.forEach(e=>{let t=o.routes[e.route.id];t&&t.hasLoader&&(!d.some(t=>t.route.id===e.route.id)&&e.route.id in l&&s[e.route.id]?.shouldRevalidate||t.hasClientLoader?a=!0:n.add(e.route.id))}),n.size===0)return[];let u=Yt(e,c,i.v8_trailingSlashAwareDataRequests,`data`);return a&&n.size>0&&u.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[u.pathname+u.search]},[c,i.v8_trailingSlashAwareDataRequests,l,r,o,d,t,e,s]),m=a.useMemo(()=>tn(f,o),[f,o]),h=pn(f);return a.createElement(a.Fragment,null,p.map(e=>a.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>a.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>a.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function gn(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}a.Component;var _n=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{_n&&(window.__reactRouterVersion=`7.18.4`)}catch{}function vn({basename:e,children:t,useTransitions:n,window:r}){let i=a.useRef();i.current??=d({window:r,v5Compat:!0});let o=i.current,[s,c]=a.useState({action:o.action,location:o.location}),l=a.useCallback(e=>{n===!1?c(e):a.startTransition(()=>c(e))},[n]);return a.useLayoutEffect(()=>o.listen(l),[o,l]),a.createElement(At,{basename:e,children:t,location:s.location,navigationType:s.action,navigator:o,useTransitions:n})}var yn=a.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:s,mask:c,state:l,target:u,to:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g){let{basename:_,navigator:v,useTransitions:y}=a.useContext(Ge),b=typeof d==`string`&&o.test(d),x=Oe(d,_);d=x.to;let S=et(d,{relative:r}),C=nt(),w=null;if(c){let e=ye(c,[],C.mask?C.mask.pathname:`/`,!0);_!==`/`&&(e.pathname=e.pathname===`/`?_:xe([_,e.pathname])),w=v.createHref(e)}let[T,ee,te]=un(n,h),ne=wn(d,{replace:s,mask:c,state:l,target:u,preventScrollReset:f,relative:r,viewTransition:p,defaultShouldRevalidate:m,useTransitions:y});function E(t){e&&e(t),t.defaultPrevented||ne(t)}let re=!(x.isExternal||i),ie=a.createElement(`a`,{...h,...te,href:(re?w:void 0)||x.absoluteURL||S,onClick:re?E:e,ref:gn(g,ee),target:u,"data-discover":!b&&t===`render`?`true`:void 0});return T&&!b?a.createElement(a.Fragment,null,ie,a.createElement(fn,{page:S})):ie});yn.displayName=`Link`;var bn=a.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:o,viewTransition:s,children:c,...l},u){let d=ct(o,{relative:l.relative}),f=nt(),p=a.useContext(ze),{navigator:m,basename:h}=a.useContext(Ge),g=p!=null&&An(d)&&s===!0,_=m.encodeLocation?m.encodeLocation(d).pathname:d.pathname,v=f.pathname,y=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;t||(v=v.toLowerCase(),y=y?y.toLowerCase():null,_=_.toLowerCase()),y&&h&&(y=pe(y,h)||y);let b=_!==`/`&&_.endsWith(`/`)?_.length-1:_.length,x=v===_||!r&&v.startsWith(_)&&v.charAt(b)===`/`,S=y!=null&&(y===_||!r&&y.startsWith(_)&&y.charAt(_.length)===`/`),C={isActive:x,isPending:S,isTransitioning:g},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,g?`transitioning`:null].filter(Boolean).join(` `);let ee=typeof i==`function`?i(C):i;return a.createElement(yn,{...l,"aria-current":w,className:T,ref:u,style:ee,to:o,viewTransition:s},typeof c==`function`?c(C):c)});bn.displayName=`NavLink`;var xn=a.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:s,method:c=Nt,action:l,onSubmit:u,relative:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g)=>{let{useTransitions:_}=a.useContext(Ge),v=On(),y=kn(l,{relative:d}),b=c.toLowerCase()===`get`?`get`:`post`,x=typeof l==`string`&&o.test(l);return a.createElement(`form`,{ref:g,method:b,action:y,onSubmit:r?u:e=>{if(u&&u(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,o=r?.getAttribute(`formmethod`)||c,l=()=>v(r||e.currentTarget,{fetcherKey:t,method:o,navigate:n,replace:i,state:s,relative:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m});_&&n!==!1?a.startTransition(()=>l()):l()},...h,"data-discover":!x&&e===`render`?`true`:void 0})});xn.displayName=`Form`;function Sn(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Cn(e){let t=a.useContext(Re);return f(t,Sn(e)),t}function wn(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l,useTransitions:u}={}){let d=at(),f=nt(),p=ct(e,{relative:s});return a.useCallback(m=>{if(Bt(m,t)){m.preventDefault();let t=n===void 0?_(f)===_(p):n,h=()=>d(e,{replace:t,mask:r,state:i,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l});u?a.startTransition(()=>h()):h()}},[f,d,p,n,r,i,t,e,o,s,c,l,u])}function Tn(e){p(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=a.useRef(Vt(e)),n=a.useRef(!1),r=nt(),i=a.useMemo(()=>Ht(r.search,n.current?null:t.current),[r.search]),o=at();return[i,a.useCallback((e,t)=>{let r=Vt(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,o(`?`+r,t)},[o,i])]}var En=0,Dn=()=>`__${String(++En)}__`;function On(){let{router:e}=Cn(`useSubmit`),{basename:t}=a.useContext(Ge),n=St(),r=e.fetch,i=e.navigate;return a.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=qt(e,t);if(a.navigate===!1){let e=a.fetcherKey||Dn();await r(e,n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync})}else await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function kn(e,{relative:t}={}){let{basename:n}=a.useContext(Ge),r=a.useContext(qe);f(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),o={...ct(e||`.`,{relative:t})},s=nt();if(e==null){o.search=s.search;let e=new URLSearchParams(o.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();o.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(o.search=o.search?o.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(o.pathname=o.pathname===`/`?n:xe([n,o.pathname])),_(o)}function An(e,{relative:t}={}){let n=a.useContext(He);f(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=Cn(`useViewTransitionState`),i=ct(e,{relative:t});if(!n.isTransitioning)return!1;let o=pe(n.currentLocation.pathname,r)||n.currentLocation.pathname,s=pe(n.nextLocation.pathname,r)||n.nextLocation.pathname;return ue(i.pathname,s)!=null||ue(i.pathname,o)!=null}var jn=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function Mn(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:jn(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var Nn=e=>{let t=``,n=!1;for(let r of e){if(r===`-`||r===`_`||r<=` `){n=t.length>0;continue}t.length===0?t+=r.toLowerCase():t+=n?r.toUpperCase():r,n=!1}return t},Pn=e=>{let t=Nn(e);return t.charAt(0).toUpperCase()+t.slice(1)},Fn=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),In={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Ln(e){return e!=null}function Rn(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??In.width,a=e.size??e.height??In.height,o=e.aliases?.filter(e=>typeof e==`string`&&e.trim()!==``).map(e=>`lucide-${e}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...o],c=t.className?.split(` `).filter(Boolean)??[],l=t.includeDefaultClasses===!1?Fn(...c):Fn(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??In[`stroke-width`])*Number(e.size??e.width??In.width)/Number(t.size??t.width??In.width):t.strokeWidth??In[`stroke-width`];return[`svg`,{...Object.entries(In).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&Ln(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&Ln(t.width)&&{[r(`width`)]:t.width},...`height`in t&&Ln(t.height)&&{[r(`height`)]:t.height},[r(`stroke-width`)]:u,...l&&{[r(`class`)]:l},[r(`viewBox`)]:`0 0 ${i} ${a}`,...t.hasA11yProp===!1?{[r(`aria-hidden`)]:`true`}:{},...`attributes`in t&&t.attributes},e.node.map(e=>{let[n,i,a]=e,o=t.nonScalingStroke?{[r(`vector-effect`)]:`non-scaling-stroke`,...i}:i;return a?[n,o,a]:[n,o]})]}function zn(e,t={}){return Rn(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var Bn=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Vn=(0,a.createContext)({}),Hn=()=>(0,a.useContext)(Vn),Un=(0,a.forwardRef)(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:s,className:c=``,children:l,iconNode:u=[],icon:d={node:u,aliases:[],size:24},...f},p)=>{let{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,nonScalingStroke:_=!1,color:v=`currentColor`,className:y=``}=Hn()??{},b=!!l||Bn(f),[x,S,C=[]]=zn(d,{color:e??v,width:n??t??m,height:r??t??m,strokeWidth:i??h,absoluteStrokeWidth:o??g,nonScalingStroke:s??_,className:Fn(y,c),hasA11yProp:b,attributes:f});return(0,a.createElement)(x,{ref:p,...S},[...C.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(l)?l:[l]])});function j(e,t=[],n=[]){let r=typeof e==`string`?Mn(e,t,n):e,i=(0,a.forwardRef)(({className:e,...t},n)=>(0,a.createElement)(Un,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=Pn(r.name)),i}var Wn={name:`arrow-down`,size:24,node:[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]};Wn.node;var Gn=j(Wn),Kn={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};Kn.node;var qn=j(Kn),Jn={name:`arrow-right`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]};Jn.node;var Yn=j(Jn),Xn={name:`arrow-up`,size:24,node:[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]};Xn.node;var Zn=j(Xn),Qn={name:`audio-lines`,size:24,node:[[`path`,{d:`M2 10v3`,key:`1fnikh`}],[`path`,{d:`M6 6v11`,key:`11sgs0`}],[`path`,{d:`M10 3v18`,key:`yhl04a`}],[`path`,{d:`M14 8v7`,key:`3a1oy3`}],[`path`,{d:`M18 5v13`,key:`123xd1`}],[`path`,{d:`M22 10v3`,key:`154ddg`}]]};Qn.node;var $n=j(Qn),er={name:`bell-ring`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]]};er.node;var tr=j(er),nr={name:`bell`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]};nr.node;var rr=j(nr),ir={name:`calendar-days`,size:24,node:[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 13h.01`,key:`1sbv64`}],[`path`,{d:`M12 13h.01`,key:`y0uutt`}],[`path`,{d:`M16 13h.01`,key:`wip0gl`}],[`path`,{d:`M8 17h.01`,key:`p3bg7i`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}],[`path`,{d:`M16 17h.01`,key:`ql8jdd`}]]};ir.node;var ar=j(ir),or={name:`camera`,size:24,node:[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]};or.node;var sr=j(or),cr={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};cr.node;var lr=j(cr),ur={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};ur.node;var dr=j(ur),fr={name:`chevron-left`,size:24,node:[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]};fr.node;var pr=j(fr),mr={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};mr.node;var hr=j(mr),gr={name:`clock`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]};gr.node;var _r=j(gr),vr={name:`copy`,size:24,node:[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]};vr.node;var yr=j(vr),br={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]};br.node;var xr=j(br),Sr={name:`database`,size:24,node:[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]};Sr.node;var Cr=j(Sr),wr={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};wr.node;var Tr=j(wr),Er={name:`eraser`,size:24,node:[[`path`,{d:`M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21`,key:`g5wo59`}],[`path`,{d:`m5.082 11.09 8.828 8.828`,key:`1wx5vj`}]]};Er.node;var Dr=j(Er),Or={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};Or.node;var kr=j(Or),Ar={name:`file-headphone`,size:24,node:[[`path`,{d:`M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343`,key:`1vfytu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0`,key:`1etmh7`}]],aliases:[`file-audio`,`file-audio-2`]};Ar.node;var jr=j(Ar),Mr={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};Mr.node;var Nr=j(Mr),Pr={name:`film`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M3 7.5h4`,key:`zfgn84`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 16.5h4`,key:`1230mu`}],[`path`,{d:`M17 3v18`,key:`in4fa5`}],[`path`,{d:`M17 7.5h4`,key:`myr1c1`}],[`path`,{d:`M17 16.5h4`,key:`go4c1d`}]]};Pr.node;var Fr=j(Pr),Ir={name:`flashlight-off`,size:24,node:[[`path`,{d:`M11.652 6H18`,key:`voqkpr`}],[`path`,{d:`M12 13v1`,key:`176q98`}],[`path`,{d:`M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-8a4 4 0 0 0-.8-2.4l-.6-.8A3 3 0 0 1 6 7V6`,key:`dzyf92`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M7.649 2H17a1 1 0 0 1 1 1v4a3 3 0 0 1-.6 1.8l-.6.8a4 4 0 0 0-.55 1.007`,key:`1hvcfn`}]]};Ir.node;var Lr=j(Ir),Rr={name:`flashlight`,size:24,node:[[`path`,{d:`M12 13v1`,key:`176q98`}],[`path`,{d:`M17 2a1 1 0 0 1 1 1v4a3 3 0 0 1-.6 1.8l-.6.8A4 4 0 0 0 16 12v8a2 2 0 0 1-2 2H10a2 2 0 0 1-2-2v-8a4 4 0 0 0-.8-2.4l-.6-.8A3 3 0 0 1 6 7V3a1 1 0 0 1 1-1z`,key:`17vh7j`}],[`path`,{d:`M6 6h12`,key:`n6hhss`}]]};Rr.node;var zr=j(Rr),Br={name:`grip-vertical`,size:24,node:[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]};Br.node;var Vr=j(Br),Hr={name:`image-plus`,size:24,node:[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]};Hr.node;var Ur=j(Hr),Wr={name:`image-up`,size:24,node:[[`path`,{d:`M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21`,key:`9csbqa`}],[`path`,{d:`m14 19.5 3-3 3 3`,key:`9vmjn0`}],[`path`,{d:`M17 22v-5.5`,key:`1aa6fl`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]};Wr.node;var Gr=j(Wr),Kr={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};Kr.node;var qr=j(Kr),Jr={name:`locate-fixed`,size:24,node:[[`line`,{x1:`2`,x2:`5`,y1:`12`,y2:`12`,key:`bvdh0s`}],[`line`,{x1:`19`,x2:`22`,y1:`12`,y2:`12`,key:`1tbv5k`}],[`line`,{x1:`12`,x2:`12`,y1:`2`,y2:`5`,key:`11lu5j`}],[`line`,{x1:`12`,x2:`12`,y1:`19`,y2:`22`,key:`x3vr5v`}],[`circle`,{cx:`12`,cy:`12`,r:`7`,key:`fim9np`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};Jr.node;var Yr=j(Jr),Xr={name:`lock-keyhole`,size:24,node:[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]};Xr.node;var Zr=j(Xr),Qr={name:`map-pin`,size:24,node:[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]};Qr.node;var $r=j(Qr),ei={name:`maximize-2`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]};ei.node;var ti=j(ei),ni={name:`mic`,size:24,node:[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]};ni.node;var ri=j(ni),ii={name:`mouse-pointer-click`,size:24,node:[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]};ii.node;var ai=j(ii),oi={name:`paperclip`,size:24,node:[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]};oi.node;var si=j(oi),ci={name:`pen-line`,size:24,node:[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]],aliases:[`edit-3`]};ci.node;var li=j(ci),ui={name:`pencil-line`,size:24,node:[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]]};ui.node;var di=j(ui),fi={name:`pencil`,size:24,node:[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]};fi.node;var pi=j(fi),mi={name:`plus`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]};mi.node;var hi=j(mi),gi={name:`printer`,size:24,node:[[`path`,{d:`M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2`,key:`143wyd`}],[`path`,{d:`M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6`,key:`1itne7`}],[`rect`,{x:`6`,y:`14`,width:`12`,height:`8`,rx:`1`,key:`1ue0tg`}]]};gi.node;var _i=j(gi),vi={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};vi.node;var yi=j(vi),bi={name:`rotate-ccw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]};bi.node;var xi=j(bi),Si={name:`scan-line`,size:24,node:[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}]]};Si.node;var Ci=j(Si),wi={name:`share`,size:24,node:[[`path`,{d:`M12 2v13`,key:`1km8f5`}],[`path`,{d:`m16 6-4-4-4 4`,key:`13yo43`}],[`path`,{d:`M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8`,key:`1b2hhj`}]]};wi.node;var Ti=j(wi),Ei={name:`shield-check`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]};Ei.node;var Di=j(Ei),Oi={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]};Oi.node;var ki=j(Oi),Ai={name:`square`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]};Ai.node;var ji=j(Ai),Mi={name:`switch-camera`,size:24,node:[[`path`,{d:`M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5`,key:`mtk2lu`}],[`path`,{d:`M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5`,key:`120jsl`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`m18 22-3-3 3-3`,key:`kgdoj7`}],[`path`,{d:`m6 2 3 3-3 3`,key:`1fnbkv`}]]};Mi.node;var Ni=j(Mi),Pi={name:`trash`,size:24,node:[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]],aliases:[`trash-2`]};Pi.node;var Fi=j(Pi),Ii={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};Ii.node;var Li=j(Ii),Ri={name:`unplug`,size:24,node:[[`path`,{d:`m19 5 3-3`,key:`yk6iyv`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z`,key:`1snsnr`}]]};Ri.node;var zi=j(Ri),Bi={name:`video`,size:24,node:[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]};Bi.node;var Vi=j(Bi),Hi={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};Hi.node;var Ui=j(Hi),Wi={entry:{de:`Eintrag {n} von {total}`,en:`Entry {n} of {total}`},deciding:{de:`Entscheidet, wie es weitergeht …`,en:`Deciding how to go on …`},choosingFields:{de:`Wählt die passenden Fragen …`,en:`Choosing the right questions …`},batchDone:{de:`{done} von {total} fertig`,en:`{done} of {total} done`},editing:{de:`Bearbeitet {n} von {total}`,en:`Editing {n} of {total}`},filming:{de:`Dreht {n} von {total}`,en:`Filming {n} of {total}`},clipsRendering:{de:`{count} Clips werden gerendert – das dauert einige Minuten.`,en:`Rendering {count} clips – this takes a few minutes.`},videoRendering:{de:`Das Video wird gerendert – das dauert meist 1–3 Minuten.`,en:`Rendering the video – this usually takes 1–3 minutes.`},photo:{de:`Sieht sich Foto {n} von {total} an`,en:`Looking at photo {n} of {total}`},listen:{de:`Hört „{label}“ an …`,en:`Listening to “{label}” …`},listenFailed:{de:`„{label}“ konnte nicht verschriftlicht werden.`,en:`“{label}” could not be written down.`},filmCutting:{de:`Der Film wird geschnitten – das dauert etwa eine Minute.`,en:`Cutting the film – this takes about a minute.`},filmProgress:{de:`{pct} % geschnitten`,en:`{pct} % cut`},filmError:{de:`Der Film meldet: {detail}`,en:`The film reports: {detail}`},widgetError:{de:`Das Widget meldet einen Fehler: {detail}`,en:`The widget reports an error: {detail}`},mcpConnected:{de:`Verbunden mit {names}`,en:`Connected to {names}`},mcpUnreachable:{de:`MCP-Server nicht erreichbar: {detail}`,en:`MCP server unreachable: {detail}`},reads:{de:`Liest {name}`,en:`Reading {name}`},readsMany:{de:`Liest {count} Dokumente`,en:`Reading {count} documents`},opens:{de:`Öffnet {name}`,en:`Opening {name}`},clicks:{de:`Klickt im Browser`,en:`Clicking in the browser`},clicksOn:{de:`Klickt auf „{name}“`,en:`Clicking “{name}”`},types:{de:`Tippt im Browser`,en:`Typing in the browser`},typesText:{de:`Tippt „{text}“`,en:`Typing “{text}”`},selects:{de:`Wählt „{option}“`,en:`Choosing “{option}”`},scrolls:{de:`Scrollt`,en:`Scrolling`},presses:{de:`Drückt {key}`,en:`Pressing {key}`},goesBack:{de:`Geht eine Seite zurück`,en:`Going back a page`},waitsForPage:{de:`Wartet auf die Seite`,en:`Waiting for the page`},fastLoop:{de:`Erledigt im Browser: {goal}`,en:`Doing in the browser: {goal}`},personDrives:{de:`Du steuerst den Browser – der Wizard wartet`,en:`You are driving the browser – the wizard waits`},agentDrives:{de:`Der Wizard macht im Browser weiter`,en:`The wizard carries on in the browser`},looksAtPage:{de:`Sieht sich die Seite an`,en:`Looking at the page`},waitsForSignIn:{de:`Wartet auf deine Anmeldung bei {name}`,en:`Waiting for you to sign in at {name}`},downloads:{de:`Lädt {name} herunter`,en:`Downloading {name}`},runs:{de:`Führt aus: {command}`,en:`Running: {command}`},python:{de:`Führt Python aus`,en:`Running Python`},drawing:{de:`Zeichnet ein Bild`,en:`Drawing an image`},writesPage:{de:`Schreibt die Seite „{title}“`,en:`Writing the page “{title}”`},searchesDocuments:{de:`Sucht in den Dokumenten: {query}`,en:`Searching the documents: {query}`},searchesKnowledge:{de:`Sucht in Wissen: {query} – {relevant} von {candidates} passen`,en:`Searching the knowledge: {query} – {relevant} of {candidates} fit`},listsKnowledge:{de:`Listet Wissen`,en:`Listing the knowledge`},searchesMail:{de:`Durchsucht {label}`,en:`Searching {label}`},savesReceipts:{de:`Speichert {count} Belege aus {label}`,en:`Saving {count} receipts from {label}`},remembers:{de:`Merkt sich {title}`,en:`Remembering {title}`},files:{de:`Legt {count} Dateien ab`,en:`Filing {count} files`},filmSetup:{de:`Richtet den Arbeitsordner für den Film ein`,en:`Setting up the folder for the film`},filmClient:{de:`{client} arbeitet am Film – das dauert meist 10–40 Minuten.`,en:`{client} is working on the film – this usually takes 10–40 minutes.`},filmTask:{de:`Am Film: {task}`,en:`On the film: {task}`},filmLooks:{de:`Sieht sich Bilder des Films an`,en:`Looking at frames of the film`},filmFix:{de:`Der Film ließ sich nicht rendern – Claude Code bessert nach`,en:`The film did not render – Claude Code is fixing it`},filmResume:{de:`Macht dort weiter, wo der Film stehen geblieben ist`,en:`Picking the film up where it stopped`},wizardUnavailable:{de:`Dieser Wizard ist gerade nicht verfügbar.`,en:`This wizard is not available right now.`},wizardLimit:{de:`Für heute ist das Limit dieses Wizards erreicht. Bitte morgen wieder versuchen.`,en:`This wizard has reached its limit for today. Try again tomorrow.`},confirmHuman:{de:`Bitte bestätige kurz, dass du ein Mensch bist.`,en:`Please confirm that you are a person.`},tooManyRuns:{de:`Du hast gerade viele Durchläufe gestartet. Bitte versuche es in einer Stunde wieder.`,en:`You started many runs just now. Try again in an hour.`},runOver:{de:`Der Durchlauf ist beendet.`,en:`The run is over.`},runBusy:{de:`Der Wizard arbeitet gerade.`,en:`The wizard is working right now.`},pageOutdated:{de:`Diese Seite ist nicht mehr aktuell.`,en:`This page is out of date.`},noStepBefore:{de:`Kein vorheriger Schritt.`,en:`There is no step before this one.`},checkFields:{de:`Bitte die markierten Felder prüfen.`,en:`Please check the marked fields.`},talkOff:{de:`Live-Gespräche sind für diesen Wizard nicht eingeschaltet.`,en:`Live conversations are not switched on for this wizard.`},talkKeyRefused:{de:`Das Gespräch ließ sich nicht starten: Der OpenAI API Key wurde abgelehnt.`,en:`The conversation could not be started: the OpenAI API key was refused.`},talkFailed:{de:`Das Gespräch ließ sich nicht starten ({status}).`,en:`The conversation could not be started ({status}).`},talkNoSecret:{de:`Das Gespräch ließ sich nicht starten: Es kam kein Zugang zurück.`,en:`The conversation could not be started: no secret came back.`},tryLater:{de:`Bitte später noch einmal.`,en:`Try again later.`},recordingTooLarge:{de:`Bitte eine Aufnahme bis 10 MB.`,en:`A recording of up to 10 MB, please.`},fileTooLarge:{de:`Bitte eine Datei bis {mb} MB wählen.`,en:`Choose a file of up to {mb} MB, please.`},askClosed:{de:`Diese Frage ist nicht mehr offen.`,en:`This question is no longer open.`},noBrowser:{de:`Der Wizard hat gerade keinen Browser offen.`,en:`The wizard has no browser open right now.`},notWaiting:{de:`Der Wizard wartet gerade nicht auf dich.`,en:`The wizard is not waiting for you right now.`},pageActFailed:{de:`Das hat auf der Seite nicht geklappt.`,en:`That did not work on the page.`},linkGone:{de:`Dieser Link ist abgelaufen oder wurde zurückgezogen.`,en:`This link has expired or was withdrawn.`},connected:{de:`Verbunden. Du kannst dieses Fenster schließen.`,en:`Connected. You can close this window.`},connectFailed:{de:`Verbinden hat nicht geklappt. Bitte noch einmal versuchen.`,en:`Connecting did not work. Try again.`},connectCancelled:{de:`Verbinden wurde abgebrochen.`,en:`Connecting was cancelled.`},appleOff:{de:`Apple Intelligence ist auf diesem Mac ausgeschaltet. Einschalten unter Systemeinstellungen → Apple Intelligence & Siri.`,en:`Apple Intelligence is switched off on this Mac. Switch it on in System Settings → Apple Intelligence & Siri.`},appleLoading:{de:`Apple lädt das Modell für Apple Intelligence noch auf diesen Mac. Gleich noch einmal versuchen.`,en:`Apple is still loading the model for Apple Intelligence onto this Mac. Try again in a moment.`},appleMissing:{de:`Der Helfer für Apple Intelligence (wizards-apple) fehlt in dieser Installation.`,en:`The helper for Apple Intelligence (wizards-apple) is missing from this installation.`},appleOs:{de:`Apple Intelligence braucht macOS 26 oder neuer.`,en:`Apple Intelligence needs macOS 26 or later.`},appleDevice:{de:`Apple Intelligence gibt es nur auf einem Mac mit Apple Silicon.`,en:`Apple Intelligence is only there on a Mac with Apple silicon.`},appleBusy:{de:`Apple Intelligence nimmt gerade keine weiteren Anfragen an. Gleich noch einmal versuchen.`,en:`Apple Intelligence takes no more requests right now. Try again in a moment.`},appleTooLong:{de:`Apple Intelligence: Der Text ist zu lang für das Modell auf diesem Mac (4.096 Tokens für Frage und Antwort). Diese Klasse in den Einstellungen unter „Modelle“ auf ein anderes Modell legen.`,en:`Apple Intelligence: the text is too long for the model on this Mac (4,096 tokens for question and answer). Put this class on another model under “Models” in the settings.`},appleRefused:{de:`Apple Intelligence hat die Anfrage abgelehnt: Apples Inhaltsregeln lassen sie nicht zu.`,en:`Apple Intelligence turned the request down: Apple's content rules do not allow it.`},appleLanguage:{de:`Apple Intelligence versteht die Sprache dieser Anfrage nicht.`,en:`Apple Intelligence does not understand the language of this request.`},appleFormat:{de:`Apple Intelligence kann dieses Antwortformat nicht liefern: {detail}`,en:`Apple Intelligence cannot answer in this format: {detail}`},appleFailed:{de:`Apple Intelligence: {detail}`,en:`Apple Intelligence: {detail}`},appleNoFfmpeg:{de:`Apple Intelligence liest {type} nicht; ohne ffmpeg bleibt die Aufnahme so. ffmpeg installieren oder im Browser als MP4 aufnehmen.`,en:`Apple Intelligence cannot read {type}, and without ffmpeg the recording stays as it is. Install ffmpeg or record as MP4 in the browser.`},appleNotConverted:{de:`Apple Intelligence: die Aufnahme ließ sich nicht wandeln: {detail}`,en:`Apple Intelligence: the recording could not be converted: {detail}`}};function Gi(e,t){let n=Wi[e.code];return n?n[t].replace(/\{(\w+)\}/g,(t,n)=>e.params?.[n]===void 0?t:String(e.params[n])):``}var Ki={"share.copied":`Kopiert`,"run.closed":`Hier gerade nicht verfügbar, dafür fehlt: {list}`,"slot.later":`Spätere Termine zeigen`,"slot.none":`Gerade sind keine Termine frei.`,"cards.open":`Details`,"cards.picked":`Ausgewählt ✓`,"cards.pick":`Auswählen`,"run.cls.text":`Text`,"run.cls.image":`Bilder`,"run.cls.video":`Videos`,"run.cls.speech":`Sprachausgabe`,"run.cls.audio":`Sprachnotizen`,"run.cls.account":`ein engenty-Konto`,"run.next":`Weiter`,"run.back":`Zurück`,"run.accept":`Passt so`,"run.edit":`Bearbeiten`,"run.pickItem":`Nr. {n}`,"run.pickedItem":`Nr. {n} neu`,"run.regeneratePicked":`Neu erstellt wird nur Nr. {n}.`,"run.regenerateAll":`Alle werden neu erstellt. Tippe oben auf eine Nummer, um nur einzelne zu erneuern.`,"check.progress":`{done} von {total} geprüft`,"check.onlyOpen":`Nur offene`,"check.noFile":`Zu dieser Zeile gibt es keine Datei.`,"check.noPreview":`Für diese Datei gibt es keine Vorschau – öffne sie mit dem Link oben.`,"check.reopen":`Wieder offen`,"run.feedbackPlaceholder":`Passt etwas nicht? Schreib, was anders sein soll …`,"run.feedbackTarget":`Was soll sich ändern?`,"run.feedbackPick":`Wähle oben, was sich ändern soll.`,"ai.generated":`KI-generiert`,"ai.modified":`Mit KI verändert`,"ai.publish":`Mit KI erstellt: Wer das veröffentlicht, muss es als KI-generiert kennzeichnen (EU AI Act, Art. 50). Die Datei trägt die Kennzeichnung bereits in ihren Metadaten.`,"run.regenerateGo":`Neu erstellen`,"run.retry":`Erneut versuchen`,"run.again":`Nochmal`,"run.copy":`Text kopieren`,"run.failed":`Da hat etwas nicht geklappt.`,"run.notFound":`Diesen Wizard gibt es nicht (mehr).`,"run.working":`Einen Moment …`,"run.elapsed":`{s} s`,"run.cancelled":`Abgebrochen.`,"run.addRow":`Zeile hinzufügen`,"run.upload":`Datei wählen oder hierher ziehen`,"run.uploading":`Lädt hoch …`,"run.net":`Netto`,"run.vat":`USt. {r} %`,"run.total":`Gesamt`,"run.uploadMore":`Weitere Datei`,"run.camera":`Kamera`,"camera.title":`Mit der Kamera aufnehmen`,"camera.hint":`Gerade und gut beleuchtet ins Bild halten.`,"camera.taken":`{n} aufgenommen`,"camera.shoot":`Aufnehmen`,"camera.done":`Fertig`,"camera.denied":`Die Kamera ist für diese Seite nicht freigegeben. Erlaube sie in den Website-Einstellungen deines Browsers (Schloss-Symbol in der Adresszeile) – oder nimm das Foto mit der Kamera-App auf.`,"connect.go":`Verbinden`,"connect.connected":`Verbunden über {name}`,"connect.disconnect":`Trennen`,"connect.none":`Auf diesem Server ist noch kein Anbieter zum Verbinden eingerichtet.`,"connect.openLink":`Hier klicken, um die Anmeldung in einem neuen Tab zu öffnen`,"list.empty":`Noch keine Einträge.`,"list.delete":`Zeile löschen`,"ask.typeInto":`Text in die Seite tippen …`,"ask.hide":`verdeckt`,"ask.up":`Nach oben`,"ask.down":`Nach unten`,"ask.pictureHint":`Das ist die Seite, die der Wizard geöffnet hat, live. Du kannst auch direkt hineinklicken und tippen.`,"ask.remember":`Anmeldung für nächstes Mal merken`,"ask.private":`Was du eingibst, geht direkt in die Seite. Die KI bekommt es nicht zu sehen. Gemerkte Anmeldungen werden verschlüsselt gespeichert.`,"ask.skip":`Überspringen`,"ask.done":`Ich bin angemeldet`,"ask.signIn":`Anmelden`,"ask.wants":`Der Wizard möchte in {service} Folgendes ausführen:`,"ask.allowRest":`Für den Rest dieses Durchlaufs erlauben`,"ask.allow":`Erlauben`,"ask.deny":`Nicht erlauben`,"store.open":`Was dieser Wizard sich merkt`,"store.title":`Gespeichert für dich`,"store.explain":`Dieser Wizard merkt sich Listen, Dateien und verbundene Konten für deinen nächsten Durchlauf. Nur du siehst sie.`,"store.empty":`Noch nichts gespeichert.`,"store.rows":`{n} Einträge`,"store.signIns":`Gemerkte Anmeldungen im Browser`,"store.files":`{n} Dateien · {size}`,"store.delete":`Alles löschen`,"store.confirmDelete":`Wirklich alles löschen`,"common.close":`Schließen`,"run.uploadTouch":`Datei wählen`,"run.maxFiles":`Hier gehen höchstens {n} – die übrigen habe ich weggelassen.`,"run.filesMin":`{n} von mindestens {min}`,"run.filesOf":`{n} von höchstens {max}`,"run.moveFile":`Nr. {n} verschieben`,"run.moveFileHint":`Ziehen, um die Reihenfolge zu ändern`,"run.removeFile":`Entfernen`,"run.awake":`Der Bildschirm bleibt an, solange der Wizard arbeitet.`,"run.openFull":`Groß öffnen`,"run.yes":`Ja`,"run.no":`Nein`,"run.share":`Teilen`,"run.shareNow":`Jetzt teilen`,"run.shareFile":`Als Datei teilen oder in einer App öffnen`,"run.print":`Drucken`,"camera.asking":`Dein Browser fragt gleich nach der Kamera. Das Bild bleibt in diesem Wizard.`,"camera.native":`Kamera-App öffnen`,"camera.pick":`Foto auswählen`,"camera.torch":`Licht`,"camera.flip":`Kamera wechseln`,"camera.photo":`Foto`,"camera.video":`Video`,"camera.record":`Aufnahme starten`,"camera.stop":`Aufnahme beenden`,"camera.recording":`Nimmt auf – tippe zum Beenden.`,"camera.clipHint":`Ein kurzer Clip, höchstens {s} Sekunden.`,"camera.hintMany":`Seite für Seite aufnehmen, dann „Fertig“.`,"scan.button":`Scannen`,"scan.title":`Code scannen`,"scan.asking":`Dein Browser fragt gleich nach der Kamera – sie liest nur den Code.`,"scan.hint":`Halte den QR- oder Strichcode in den Rahmen.`,"scan.hintQr":`Halte den QR-Code in den Rahmen. Strichcodes liest dieses Gerät hier nicht.`,"scan.miss":`Auf dem Foto war kein Code zu erkennen. Versuch es näher und schärfer.`,"scan.fromPhoto":`Foto mit dem Code wählen`,"scan.typeInstead":`Lieber eintippen`,"location.use":`Meinen Standort übernehmen`,"location.locating":`Standort wird bestimmt …`,"location.refining":`wird noch genauer …`,"location.accuracy":`auf etwa {m} m genau`,"location.map":`Karte`,"location.remove":`Standort entfernen`,"location.why":`Dein Browser fragt nach deinem Standort. Er wird nur für diesen Wizard verwendet. Du kannst auch einfach die Adresse eintippen.`,"location.denied":`Der Standort ist für diese Seite nicht freigegeben. Erlaube ihn in den Website-Einstellungen deines Browsers (Schloss-Symbol in der Adresszeile) – oder tippe die Adresse unten ein.`,"location.manual":`Adresse oder Ort eintippen`,"location.label":`Adresse oder Beschreibung des Orts`,"voice.start":`Sprachnotiz aufnehmen`,"voice.stop":`Stopp`,"voice.recording":`Aufnahme läuft …`,"voice.left":`noch {s} s`,"voice.again":`Neu aufnehmen`,"voice.remove":`Löschen`,"voice.pick":`Audiodatei wählen`,"voice.why":`Dein Browser fragt nach dem Mikrofon. Die Aufnahme wird danach in Text umgewandelt.`,"voice.denied":`Das Mikrofon ist für diese Seite nicht freigegeben. Erlaube es in den Website-Einstellungen deines Browsers – oder nimm die Notiz mit der Diktier-App auf und wähle die Datei.`,"voice.noRecorder":`Dieser Browser kann hier nicht aufnehmen. Nimm die Notiz mit der Diktier-App auf und wähle die Datei.`,"sign.open":`Hier unterschreiben`,"sign.hint":`Mit dem Finger unterschreiben`,"sign.pad":`Unterschriftsfeld`,"sign.clear":`Löschen`,"sign.accept":`Übernehmen`,"sign.again":`Neu unterschreiben`,"sign.remove":`Unterschrift entfernen`,"notify.ask":`Bescheid geben, wenn es fertig ist`,"notify.on":`Du bekommst Bescheid`,"notify.why":`Mit Ton, Vibration oder einer Mitteilung. Dein Browser fragt dafür einmal um Erlaubnis.`,"notify.onHint":`Du kannst die App wechseln – eine Mitteilung holt dich zurück.`,"notify.quiet":`Mit Ton und Vibration, solange diese Seite offen ist.`,"notify.blocked":`Mitteilungen sind für diese Seite blockiert – es gibt Ton und Vibration, solange sie offen ist. Erlauben kannst du sie in den Website-Einstellungen deines Browsers.`,"notify.done":`Dein Ergebnis ist fertig.`,"notify.next":`Es geht weiter – wirf einen Blick darauf.`,"notify.needsYou":`Der Wizard braucht dich kurz.`,"common.offline":`Keine Verbindung. Prüfe dein Netz und versuch es noch einmal.`,"common.retry":`Erneut versuchen`,"common.cancel":`Abbrechen`,"run.start":`Los geht's`,"run.unavailable":`Dieser Wizard ist gerade nicht verfügbar.`,"run.resume":`Letzten Durchlauf fortsetzen`},qi={"share.copied":`Copied`,"run.closed":`Not available here right now, it needs: {list}`,"slot.later":`Show later times`,"slot.none":`No times are free right now.`,"cards.open":`Details`,"cards.picked":`Chosen ✓`,"cards.pick":`Choose`,"run.cls.text":`text`,"run.cls.image":`images`,"run.cls.video":`video`,"run.cls.speech":`speech output`,"run.cls.audio":`voice notes`,"run.cls.account":`an engenty account`,"run.next":`Continue`,"run.back":`Back`,"run.accept":`Looks good`,"run.edit":`Edit`,"run.pickItem":`No. {n}`,"run.pickedItem":`No. {n} again`,"run.regeneratePicked":`Only no. {n} will be made again.`,"run.regenerateAll":`Applies to all. Tap a number to change single ones only.`,"check.progress":`{done} of {total} checked`,"check.onlyOpen":`Open only`,"check.noFile":`There is no file for this row.`,"check.noPreview":`This file has no preview – open it with the link above.`,"check.reopen":`Open again`,"run.feedbackPlaceholder":`Something not right? Write what should be different …`,"run.feedbackTarget":`What should change?`,"run.feedbackPick":`Pick above what should change.`,"ai.generated":`AI generated`,"ai.modified":`AI modified`,"ai.publish":`Made with AI: whoever publishes this has to label it as AI-generated (EU AI Act, Art. 50). The file already carries the marking in its metadata.`,"run.regenerateGo":`Recreate`,"run.retry":`Try again`,"run.again":`Start over`,"run.copy":`Copy text`,"run.failed":`Something went wrong.`,"run.notFound":`This wizard does not exist (anymore).`,"run.working":`One moment …`,"run.elapsed":`{s} s`,"run.cancelled":`Cancelled.`,"run.addRow":`Add row`,"run.upload":`Choose a file or drop it here`,"run.uploading":`Uploading …`,"run.net":`Net`,"run.vat":`VAT {r} %`,"run.total":`Total`,"run.uploadMore":`Another file`,"run.camera":`Camera`,"camera.title":`Take a picture`,"camera.hint":`Hold it flat and well lit.`,"camera.taken":`{n} taken`,"camera.shoot":`Capture`,"camera.done":`Done`,"camera.denied":`The camera is not allowed for this page. Allow it in your browser's site settings (the lock icon in the address bar) — or take the photo with your camera app.`,"connect.go":`Connect`,"connect.connected":`Connected through {name}`,"connect.disconnect":`Disconnect`,"connect.none":`No provider is set up for connecting on this server yet.`,"connect.openLink":`Click here to open the sign-in in a new tab`,"list.empty":`No entries yet.`,"list.delete":`Delete row`,"ask.typeInto":`Type into the page …`,"ask.hide":`hidden`,"ask.up":`Scroll up`,"ask.down":`Scroll down`,"ask.pictureHint":`This is the page the wizard has open, live. You can also click and type right in it.`,"ask.remember":`Remember this sign-in for next time`,"ask.private":`What you enter goes straight into the page. The AI never sees it. Remembered sign-ins are stored encrypted.`,"ask.skip":`Skip`,"ask.done":`I am signed in`,"ask.signIn":`Sign in`,"ask.wants":`The wizard wants to run this in {service}:`,"ask.allowRest":`Allow for the rest of this run`,"ask.allow":`Allow`,"ask.deny":`Don't allow`,"store.open":`What this wizard remembers`,"store.title":`Kept for you`,"store.explain":`This wizard keeps lists, files and connected accounts for your next run. Only you see them.`,"store.empty":`Nothing kept yet.`,"store.rows":`{n} entries`,"store.signIns":`Remembered sign-ins in the browser`,"store.files":`{n} files · {size}`,"store.delete":`Delete everything`,"store.confirmDelete":`Really delete everything`,"common.close":`Close`,"run.uploadTouch":`Choose a file`,"run.maxFiles":`At most {n} fit here – I left out the rest.`,"run.filesMin":`{n} of at least {min}`,"run.filesOf":`{n} of at most {max}`,"run.moveFile":`Move no. {n}`,"run.moveFileHint":`Drag to change the order`,"run.removeFile":`Remove`,"run.awake":`The screen stays on while the wizard works.`,"run.openFull":`Open full size`,"run.yes":`Yes`,"run.no":`No`,"run.share":`Share`,"run.shareNow":`Share now`,"run.shareFile":`Share as a file or open in an app`,"run.print":`Print`,"camera.asking":`Your browser is about to ask for the camera. The picture stays in this wizard.`,"camera.native":`Open the camera app`,"camera.pick":`Choose a photo`,"camera.torch":`Light`,"camera.flip":`Switch camera`,"camera.photo":`Photo`,"camera.video":`Video`,"camera.record":`Start recording`,"camera.stop":`Stop recording`,"camera.recording":`Recording — tap to stop.`,"camera.clipHint":`A short clip, {s} seconds at most.`,"camera.hintMany":`Capture page after page, then “Done”.`,"scan.button":`Scan`,"scan.title":`Scan a code`,"scan.asking":`Your browser is about to ask for the camera — it only reads the code.`,"scan.hint":`Hold the QR code or barcode inside the frame.`,"scan.hintQr":`Hold the QR code inside the frame. This device does not read barcodes here.`,"scan.miss":`No code was found in the photo. Try closer and sharper.`,"scan.fromPhoto":`Choose a photo of the code`,"scan.typeInstead":`Type it instead`,"location.use":`Use my location`,"location.locating":`Finding your location …`,"location.refining":`getting more exact …`,"location.accuracy":`exact to about {m} m`,"location.map":`Map`,"location.remove":`Remove location`,"location.why":`Your browser asks for your location. It is only used for this wizard. You can also just type the address.`,"location.denied":`Location is not allowed for this page. Allow it in your browser's site settings (the lock icon in the address bar) — or type the address below.`,"location.manual":`Type an address or place`,"location.label":`Address or description of the place`,"voice.start":`Record a voice note`,"voice.stop":`Stop`,"voice.recording":`Recording …`,"voice.left":`{s} s left`,"voice.again":`Record again`,"voice.remove":`Delete`,"voice.pick":`Choose an audio file`,"voice.why":`Your browser asks for the microphone. The recording is turned into text afterwards.`,"voice.denied":`The microphone is not allowed for this page. Allow it in your browser's site settings — or record the note with your voice memo app and choose the file.`,"voice.noRecorder":`This browser cannot record here. Record the note with your voice memo app and choose the file.`,"sign.open":`Sign here`,"sign.hint":`Sign with your finger`,"sign.pad":`Signature pad`,"sign.clear":`Clear`,"sign.accept":`Use it`,"sign.again":`Sign again`,"sign.remove":`Remove signature`,"notify.ask":`Tell me when it is done`,"notify.on":`You will be told`,"notify.why":`With a sound, a buzz or a notification. Your browser asks once for permission.`,"notify.onHint":`You can switch apps — a notification brings you back.`,"notify.quiet":`With a sound and a buzz while this page is open.`,"notify.blocked":`Notifications are blocked for this page — you get a sound and a buzz while it is open. You can allow them in your browser's site settings.`,"notify.done":`Your result is ready.`,"notify.next":`It goes on — have a look.`,"notify.needsYou":`The wizard needs you for a moment.`,"common.offline":`No connection. Check your network and try again.`,"common.retry":`Try again`,"common.cancel":`Cancel`,"run.start":`Let's go`,"run.unavailable":`This wizard is not available right now.`,"run.resume":`Continue your last run`},Ji={de:Ki,en:qi},Yi=`de`,Xi=Ki,Zi=new Set;function Qi(e){if(e!==Yi){Yi=e,Xi=e===`de`?Ki:qi;for(let e of Zi)e()}}function $i(e){return e.note&&Gi(e.note,Yi)||e.message}function M(e,t){let n=Xi[e]??Ki[e]??e;for(let[e,r]of Object.entries(t??{}))n=n.replace(`{${e}}`,String(r));return n}var ea={...Ji.de,"brand.tagline":`Wünsch dir was. Wir bauen deinen Wizard.`,"brand.sub":`Er führt dich Schritt für Schritt zum Ergebnis. Die KI erledigt die Arbeit.`,"auth.dev":`Dev-Login (lokal)`,"auth.legal":`Kein Passwort, keine Registrierung – du meldest dich mit einem bestehenden Konto an.`,"auth.signIn":`Anmelden oder Konto erstellen`,"auth.failed":`Die Anmeldung hat nicht geklappt. Bitte noch einmal versuchen.`,"auth.localTitle":`Dieser Browser ist nicht angemeldet`,"auth.localWhy":`Das Studio läuft auf deinem Computer und lässt nur einen Browser herein, der seinen Link geöffnet hat. Hier fehlt diese Anmeldung – etwa weil die Cookies gelöscht wurden oder ein anderes Studio auf diesem Computer (eine andere Adresse auf localhost) sie ersetzt hat.`,"auth.localLink":`Führe das in einem Terminal aus – es öffnet das Studio und meldet diesen Browser an:`,"auth.localStartLink":`Oder öffne den Link, den die App beim Start ausgegeben hat („Open the studio: …/api/local/enter?k=…“). Er gilt einmal pro Start.`,"auth.wrongHost":`Das Studio läuft unter einer anderen Adresse`,"auth.wrongHostWhy":`Die App auf diesem Computer antwortet nur unter ihrer eigenen Adresse – das schützt sie vor fremden Webseiten. Öffne das Studio dort:`,"auth.unreachable":`Die App antwortet gerade nicht`,"auth.unreachableWhy":`Unter {address} läuft das Studio, aber die App dahinter gibt keine Antwort – sie startet vielleicht gerade neu oder ist beendet. Die Seite versucht es weiter.`,"nav.account":`Konto & Guthaben`,"setup.keysInAccount":`API-Schlüssel für Skripte gehören zu deinem Konto. Du legst sie dort an und ziehst sie dort zurück.`,"setup.openAccount":`Konto öffnen`,"class.label":`Modell-Klasse`,"class.classifier":`Classifier`,"class.standard":`Standard`,"class.high":`High`,"class.highest":`Highest`,"class.image":`Bild`,"class.video":`Video`,"class.audio":`Audio`,"class.speech":`Sprachausgabe`,"class.classifier.hint":`Zuordnen, Ja/Nein, wenige Werte aus Text ziehen. Am günstigsten.`,"class.standard.hint":`Kurze Texte, eine API aufrufen, umformatieren.`,"class.high.hint":`Recherche mit Werkzeugen, lange Dokumente, Abwägen vieler Quellen.`,"class.highest.hint":`Schweres Abwägen oder Code. Mehrfach so teuer wie High.`,"class.effort":`Denkaufwand`,"class.effortAuto":`Automatisch`,"class.effort.low":`Niedrig`,"class.effort.medium":`Mittel`,"class.effort.high":`Hoch`,"estimate.step":`≈ {n} Credits, selten mehr als {high}`,"estimate.measured":`gemessen aus den letzten Läufen`,"estimate.formula":`geschätzt, wird nach fünf Läufen genauer`,"estimate.share":`Ein Lauf kostet etwa {run} Credits. Beim Tageslimit sind es höchstens {day} Credits am Tag.`,"local.title":`Modelle`,"local.accountWaiting":`Warte auf die Anmeldung im Browser …`,"local.accountFailed":`Der Konto-Dienst ist gerade nicht erreichbar.`,"local.accountExpired":`Die Anmeldung ist abgelaufen. Bitte neu anmelden.`,"local.sourceNeedsAccount":`Dafür brauchst du ein Konto.`,"local.toAccount":`Zu Einstellungen → Konto`,"local.sourceOwn":`Eigene Schlüssel`,"local.keys":`Schlüssel`,"local.keysHint":`Ein Schlüssel reicht. Schlüssel liegen im Schlüsselbund dieses Geräts, nie in der Datenbank.`,"local.keySet":`hinterlegt`,"local.keyEmpty":`nicht hinterlegt`,"local.keyRemove":`Entfernen`,"local.classes":`Modell je Klasse`,"local.classesHint":`Ein Schritt nennt nur die Klasse. Hier steht, welches Modell sie bedient, z. B. anthropic/claude-haiku-4.5, openai:gpt-5.4-mini oder ollama:qwen3.`,"local.save":`Speichern`,"local.saved":`Gespeichert`,"local.chat":`Der Chat im Studio antwortet über`,"local.chatModels":`Modell-Klasse Highest`,"local.chatClaude":`Claude-Abo (Claude Code)`,"local.subscription":`Mit dem Abo baut das auf diesem Gerät installierte Claude Code den Wizard – mit deiner Anmeldung dort. Läufe nutzen weiter Schlüssel oder Guthaben.`,"harness.hint":`Texte denkt das auf diesem Gerät installierte {name} – mit deinem {sub} und deiner Anmeldung dort. Kein Schlüssel nötig. Bilder, Videos und Audio brauchen weiter einen Schlüssel.`,"harness.hintImages":`Texte und Bilder macht das auf diesem Gerät installierte {name} – mit deinem {sub} und deiner Anmeldung dort. Kein Schlüssel nötig. Videos und Audio brauchen weiter einen Schlüssel.`,"harness.found":`{name} {version} gefunden`,"harness.missing":`{name} ist auf diesem Gerät nicht installiert.`,"harness.install":`Oder in deinem eigenen Terminal:`,"harness.installButton":`{name} installieren`,"harness.installing":`{name} wird im Terminal unten installiert – das dauert etwa eine Minute. Danach meldest du es an.`,"harness.installEnded":`Die Installation ist zu Ende, aber {name} ist nicht da. Was oben steht, sagt warum.`,"harness.appHere":`Die {app}-App ist auf diesem Computer: {name} meldet sich mit demselben {sub} an.`,"harness.notInstalled":`nicht installiert`,"harness.authSubscription":`Angemeldet mit deinem {sub}.`,"harness.authKey":`Angemeldet mit einem API-Schlüssel aus deiner Shell – nicht mit dem Abo. Melde dich hier an, damit es über dein {sub} läuft.`,"harness.authNone":`Noch nicht angemeldet.`,"harness.signIn":`Hier anmelden`,"harness.signingIn":`Die Anmeldung läuft im Terminal unten – dein Browser öffnet sich dafür. Das Terminal schließt sich, sobald die Anmeldung da ist.`,"harness.signInInteractive":`Unten startet {name}. Wähle dort die Anmeldung mit deinem {sub} und melde dich im Browser an. Das Terminal schließt sich, sobald die Anmeldung da ist.`,"harness.loginEnded":`Die Anmeldung wurde beendet, ohne dass {name} angemeldet ist.`,"harness.sub.claude":`Claude-Abo`,"harness.sub.codex":`ChatGPT-Abo`,"harness.sub.gemini":`Google-Konto`,"harness.sub.cursor":`Cursor-Abo`,"harness.desc.claude":`Mit deinem Claude-Abo – kein Schlüssel nötig.`,"harness.desc.codex":`Mit deinem ChatGPT-Abo – kein Schlüssel nötig.`,"harness.desc.gemini":`Mit deinem Google-Konto – kein Schlüssel nötig.`,"harness.desc.cursor":`Mit deinem Cursor-Abo – kein Schlüssel nötig.`,"harness.ready":`angemeldet`,"local.recheck":`Erneut prüfen`,"local.test":`Testen`,"local.testHint":`Ein kurzer Aufruf zeigt, ob der Weg zum Modell offen ist.`,"local.testOk":`Antwort in {s} s über {ref}: „{reply}“`,"local.testFailed":`Der Test hat nicht geklappt: {error}`,"models.groupCaps":`Fähigkeiten`,"models.groupAccess":`Zugänge`,"models.groupMore":`Weitere Anbieter`,"models.cap.text":`Text & Denken`,"models.cap.text.hint":`Schreibt, fasst zusammen, recherchiert und entscheidet – in fast jedem Schritt.`,"models.cap.image":`Bilder`,"models.cap.image.hint":`Erzeugt Bilder: Logos, Produktfotos, Illustrationen.`,"models.cap.video":`Videos`,"models.cap.video.hint":`Erzeugt kurze Clips aus Text oder aus einem Bild.`,"models.cap.speech":`Sprachausgabe`,"models.cap.speech.hint":`Liest Texte vor: Voice-over, Hörfassungen, Ansagen.`,"models.cap.listening":`Sprachnotizen`,"models.cap.listening.hint":`Versteht Gesprochenes und macht aus Sprachnotizen Text.`,"models.way.local":`Lokales Modell`,"models.way.credits":`Guthaben`,"models.way.creditsTeam":`Guthaben des Teams`,"models.way.none":`nicht eingerichtet`,"models.who":`Wer macht das?`,"models.optSubscription":`Dein Abo`,"models.optKey":`Eigener API Key`,"models.optLocal":`Lokales Modell`,"models.optLocalNote":`Ollama auf diesem Computer`,"models.optApple":`Apple Intelligence`,"models.optAppleNote":`auf diesem Mac, ohne Internet`,"models.appleOff":`ausgeschaltet – Systemeinstellungen → Apple Intelligence & Siri`,"models.appleLoading":`Apple lädt das Modell noch`,"models.appleDevice":`nicht auf diesem Mac`,"models.appleHint":`Kurze Texte und Entscheidungen (Classifier, Standard) denkt das Modell von Apple Intelligence auf diesem Mac – nichts verlässt ihn. Recherche, lange Dokumente und Code (High, Highest): {way}.`,"models.appleListenHint":`Sprachnotizen schreibt dieser Mac selbst auf – nichts verlässt ihn. Beim ersten Mal lädt Apple die Sprache nach.`,"models.noteIncluded":`im Abo enthalten`,"models.noteSignedOut":`nicht angemeldet`,"models.noteMissing":`nicht installiert`,"models.noteKey":`API Key hinterlegt`,"models.noteKeyShort":`Key`,"models.noteSignedIn":`angemeldet`,"models.noteShellKey":`API Key aus der Shell`,"models.optOther":`Sonst`,"models.optCreditsGroup":`engenty`,"models.noteNoKey":`API Key fehlt`,"models.noteNeedsAccount":`Konto nötig`,"models.notePerImage":`≈ {n} Credits je Bild`,"models.notePerSecond":`≈ {n} Credits je Sekunde`,"models.notePer1k":`≈ {n} Credits je 1000 Zeichen`,"models.notePerMinute":`≈ {n} Credits je Minute`,"models.creditsAuto":`engenty wählt: {model}`,"models.creditsAutoNone":`engenty wählt das Modell`,"models.creditsPickHint":`Abgerechnet in Credits – ohne eigenen API Key.`,"models.viaCredits":`{name} über engenty Guthaben`,"models.viaCreditsHint":`Ohne eigenen API Key, abgerechnet in Credits.`,"models.viaCreditsNeedsAccount":`Mit einem engenty-Konto, abgerechnet in Credits.`,"models.noteUsage":`Credits nach Verbrauch`,"models.model":`Modell`,"models.modelCustom":`Eigenes Modell …`,"models.textSimple":`Einfache Schritte`,"models.textDemanding":`Anspruchsvolle Schritte`,"models.perClass":`Je Klasse anpassen`,"models.manageKey":`API Key von {name}`,"models.key":`API Key`,"models.keyFor":`API Key von {name}`,"models.keyGet":`Key bei {name} holen`,"models.keySave":`Prüfen und speichern`,"models.keyStored":`API Key hinterlegt`,"models.keyNone":`Kein API Key`,"models.keyCheck":`Prüfen`,"models.keyReplace":`Ersetzen`,"models.keyRemove":`Entfernen`,"models.keyOk":`Der Key gilt.`,"models.keyBad":`Der Key wurde nicht angenommen.`,"models.keyWhereLocal":`Der Key bleibt auf diesem Gerät, nie in der Datenbank.`,"models.keyWhereCloud":`Der Key liegt verschlüsselt beim Team. Niemand sieht ihn wieder.`,"models.keyFallback":`Bis der Key da ist, springt das Guthaben ein.`,"models.uses":`Wofür`,"models.useFor":`Nutzen`,"models.inUse":`wird genutzt`,"models.try":`Ausprobieren`,"models.try.text":`Testen`,"models.try.image":`Probebild erzeugen`,"models.try.video":`Probeclip erzeugen`,"models.try.speech":`Probe anhören`,"models.try.listening":`Zuhören testen`,"models.tryCost":`Kostet wie ein echter Aufruf.`,"models.tryCostVideo":`Ein Clip von 4 Sekunden – kostet wie ein echter.`,"models.tryWait":`Wird erzeugt …`,"models.tryWaitVideo":`Ein Clip dauert ein bis zwei Minuten …`,"models.tryOk":`In {s} s mit {model}`,"models.tryHeard":`Gehört: „{text}“`,"models.tryHeardNothing":`Nichts gehört – der Weg ist offen.`,"models.tryFailed":`Hat nicht geklappt: {error}`,"models.creditsName":`engenty Guthaben`,"models.creditsTeam":`Guthaben des Teams`,"models.creditsLocalLead":`Springt ein, wo kein Abo und kein eigener API Key eingerichtet ist.`,"models.creditsCloudHint":`Alles ohne eigenen API Key läuft über das Guthaben. Eigene Keys gehen vor und kosten keine Credits.`,"models.creditsConnectTitle":`Mit einem Konto`,"models.creditsLocalHint":`Mit einem engenty-Konto springt das Guthaben ein, wo nichts Eigenes eingerichtet ist – etwa für Videos ohne eigenen API Key.`,"models.creditsConnect":`Konto verbinden`,"models.creditsFallback":`Guthaben springt ein`,"models.creditsFallbackOn":`Was kein Abo und keinen eigenen API Key hat, läuft über das Guthaben.`,"models.creditsFallbackOff":`Aus: Was kein Abo und keinen eigenen API Key hat, läuft nicht.`,"models.creditsOn":`Läuft über das Guthaben`,"models.creditsNone":`Gerade läuft nichts über das Guthaben.`,"models.creditsTopUp":`Aufladen`,"models.creditsPicks":`engenty wählt das Modell und rechnet in Credits ab.`,"models.creditsModel":`Gerade: {model}.`,"models.clientSignIn":`Anmeldung`,"models.clientImages":`{name} erzeugt Bilder mit deinem {sub} – ohne eigenen API Key.`,"models.clientNotChosen":`Text läuft gerade nicht über {name}.`,"models.ollamaHint":`Adresse von Ollama und das Modell, das dort läuft.`,"models.readOnly":`Nur Admins des Teams ändern die Modelle.`,"models.viewAs":`Vorschau als`,"models.view.auto":`wie es ist`,"models.view.local":`lokal`,"models.view.linked":`lokal + Konto`,"models.view.cloud":`Cloud-Studio`,"setup.title":`Setup`,"setup.sub":`engenty kann deine vorhandenen Konten auf deinem Computer nutzen.`,"setup.source":`Womit soll engenty denken?`,"setup.local":`Läuft lokal auf diesem Gerät.`,"setup.stage.connect":`Verbinden`,"setup.stage.test":`Testen`,"setup.stage.done":`Fertig`,"setup.h.install":`Installiere {name}`,"setup.h.signIn":`Melde {name} an`,"setup.h.keys":`Trage einen Schlüssel ein`,"setup.h.test":`Ein kurzer Test`,"setup.h.done":`Verbunden.`,"setup.ready":`Alles bereit.`,"setup.noHarness":`Noch kein KI-Client installiert. Wähle einen – er wird hier installiert – oder trage eigene Schlüssel ein.`,"setup.ownDesc":`AI Gateway, OpenAI, Anthropic oder Ollama.`,"setup.appleDesc":`Das Modell auf diesem Mac – ohne Konto, ohne Internet.`,"setup.appleHint":`Apple Intelligence denkt kurze Texte und Entscheidungen auf diesem Mac; nichts verlässt ihn. Für Recherche, lange Dokumente und Code legst du später unter Einstellungen → Modelle einen weiteren Weg an.`,"setup.appleHintKeeps":`Apple Intelligence denkt kurze Texte und Entscheidungen auf diesem Mac; nichts verlässt ihn. Recherche, lange Dokumente und Code (High, Highest) bleiben, wie sie waren: {way}.`,"setup.recommended":`Empfohlen`,"setup.done":`Zum Studio`,"setup.untilWorks":`Das Studio öffnet sich, sobald der Test klappt.`,"cloud.onPublish":`Sobald du den Wizard veröffentlichst, geht die Version auch in die Cloud deines Kontos und läuft dort hinter einem eigenen Link.`,"cloud.notSent":`Diese Version ist noch nicht in der Cloud.`,"cloud.send":`Jetzt senden`,"cloud.resend":`Erneut senden`,"cloud.again":`Um {when} wird es noch einmal versucht.`,"cloud.sent":`Version {v} · gesendet am {when}`,"cloud.notRunnable":`Version {v} läuft in der Cloud nicht.`,"cloud.keepsRunning":`Dort läuft weiter Version {v}.`,"cloud.nothingRuns":`Dort läuft deshalb noch nichts.`,"cloud.notes":`Was in der Cloud anders läuft:`,"cloud.check":`Was dem jetzigen Stand in der Cloud fehlen würde:`,"cloud.checkBlocking":`So, wie der Wizard jetzt ist, würde er in der Cloud nicht laufen:`,"cloud.documents":`Die Dokumente des Space bleiben auf diesem Gerät. In der Cloud arbeiten die Schritte ohne sie.`,"cloud.stepName":`„{title}“`,"cloud.problem.sandbox":`Der Server hat keine Maschine für Code. Dort läuft das ohne sie.`,"cloud.problem.mcp":`Die MCP-Server des Space gibt es auf dem Server nicht: {detail}.`,"cloud.problem.model":`Dafür gibt es in der Cloud kein Modell.`,"cloud.problem.connector":`Dem Space fehlt in der Cloud ein Connector.`,"cloud.problem.invalid":`So nimmt der Server den Wizard nicht an.`,"cloud.spaceLimit":`In der Cloud deines Kontos liegt schon der Space einer anderen Installation:`,"cloud.replace":`Bisherigen Space ersetzen`,"cloud.replaceConfirm":`Den bisherigen Space aus der Cloud entfernen? Seine Wizards und ihre Links verschwinden dort. Danach wird gesendet, was hier veröffentlicht ist.`,"cloud.noticeError":`Hier veröffentlicht. In der Cloud ist diese Version nicht angekommen – mehr dazu unten.`,"cloud.noticeNotRunnable":`Hier veröffentlicht. In der Cloud läuft diese Version nicht – mehr dazu unten.`,"readonly.wizard":`Dieser Wizard kommt aus deiner lokalen Installation und wird dort geändert. Hier läuft, was du dort veröffentlichst.`,"readonly.project":`Dieser Space kommt aus deiner lokalen Installation und wird dort geändert.`,"readonly.server":`Auf diesem Server wird nichts gebaut. Hier laufen die Wizards, die deine lokale Installation veröffentlicht.`,"nav.wizards":`Wizards`,"nav.settings":`Einstellungen`,"nav.project":`Space`,"nav.switchSpace":`Space wechseln`,"nav.addSpace":`Space hinzufügen`,"nav.wizardCount":`{n} Wizards`,"appbar.position":`Position`,"appbar.left":`Links`,"appbar.top":`Oben`,"appbar.right":`Rechts`,"appbar.bottom":`Unten`,"appbar.theme":`Farbschema`,"appbar.light":`Hell`,"appbar.dark":`Dunkel`,"appbar.system":`Wie das System`,"account.title":`Konto`,"account.hint":`Wie dich die App nennt und wie man dich erreicht.`,"account.initials":`Dein Kürzel im Menü oben rechts: die Anfangsbuchstaben deines Namens.`,"account.name":`Name`,"account.nameHint":`Anfangs steht hier der Benutzername dieses Geräts.`,"account.fromAccount":`Name und E-Mail kommen aus deinem Konto.`,"account.about":`Über dich`,"account.aboutHint":`Wer du bist und was du machst.`,"account.email":`E-Mail`,"account.phone":`Telefon`,"account.connection":`engenty.ai`,"account.connectionHint":`Anmeldung, Guthaben und die Cloud, in der deine Wizards für alle laufen.`,"account.profile":`Profil`,"account.local":`Lokale Installation`,"account.localText":`Diese App läuft auf deinem Gerät und ist mit keinem Konto verbunden. Wizards, Space und Dateien bleiben hier.`,"account.linked":`Verbunden`,"account.with":`Mit einem Konto`,"account.withCredits":`Guthaben für die Modelle, wo kein KI-Client installiert ist. Kein API Key nötig.`,"account.withCloud":`Was du veröffentlichst, läuft auch auf engenty.ai – hinter einem öffentlichen Link, auch wenn dieses Gerät aus ist.`,"account.signIn":`Anmelden`,"account.signInAgain":`Neu anmelden`,"account.new":`Noch kein Konto?`,"account.newHint":`Ein neues Konto braucht einen Einladungscode. Trag ihn hier ein, dann steht er bei der Registrierung schon im Formular.`,"account.code":`Einladungscode`,"account.create":`Konto erstellen`,"account.credits":`Guthaben`,"account.topUp":`Aufladen`,"account.expires":`{n} Credits gültig bis {date}`,"account.kind.start":`Startguthaben`,"account.kind.monthly":`Monatsguthaben`,"account.kind.gift":`Geschenkt`,"account.cloud":`Was du hier veröffentlichst, läuft auch auf {host}.`,"account.look":`Darstellung`,"account.lookHint":`Sprache und Design der App in diesem Browser.`,"nav.logout":`Abmelden`,"nav.connected":`Verbunden mit {host}`,"nav.expired":`Anmeldung abgelaufen`,"nav.onlyHere":`Nur auf diesem Computer`,"nav.local":`lokal`,"nav.language":`Sprache`,"nav.theme":`Design`,"nav.credits":`{n} Credits`,"footer.billing":`Guthaben`,"footer.usage":`Verbrauch`,"footer.invoices":`Rechnungen`,"footer.account":`Konto`,"about.version":`Version {v}`,"about.title":`Über engenty wizards`,"about.kind.script":`Lokale Installation`,"about.kind.checkout":`Entwicklungs-Checkout`,"about.kind.npm":`Mit npm installiert`,"about.kind.cloud":`In der Cloud`,"about.update.check":`Nach Updates suchen`,"about.update.checking":`Sucht nach Updates …`,"about.update.upToDate":`Du bist auf dem neuesten Stand.`,"about.update.checkedAt":`zuletzt geprüft {when}`,"about.update.unknown":`Konnte nicht prüfen – keine Verbindung zu GitHub?`,"about.update.off":`Die Suche nach Updates ist abgeschaltet.`,"about.update.manual":`Diese Installation aktualisiert sich nicht selbst: Hol dir die neue Version dort, wo du sie installiert hast.`,"about.tab.new":`Was ist neu`,"about.tab.earlier":`Versionen`,"about.changes":`{n} Änderungen`,"about.change":`1 Änderung`,"about.update.available":`Version {v} von engenty wizards ist da.`,"about.update.install":`Aktualisieren`,"about.update.installing":`Version {v} wird installiert …`,"about.update.restarting":`Startet neu mit Version {v} …`,"about.update.done":`Installiert. Starte engenty wizards neu, um {v} zu nutzen.`,"about.update.failed":`Das Update ist fehlgeschlagen. Logs: logs/update.log`,"about.update.notes":`Was ist neu`,"about.changelog":`Changelog`,"about.changelogHint":`Was sich von Version zu Version geändert hat.`,"about.changelogEmpty":`Noch keine Einträge.`,"about.unreleased":`Noch nicht veröffentlicht`,"about.breaking":`breaking`,"about.credits":`Credits`,"about.creditsHint":`engenty wizards und die Open-Source-Software, auf der es aufbaut.`,"about.creditsProduct":`engenty`,"about.creditsBuiltWith":`Gebaut mit`,"about.creditsDeps":`Direkte Abhängigkeiten`,"about.creditsDepsHint":`Was die Teile dieser App selbst einbinden, mit Version und Lizenz – ohne deren eigene Abhängigkeiten.`,"about.creditsShared":`Von mehreren Teilen genutzt`,"about.search":`Suchen …`,"about.noMatches":`Keine Treffer.`,"theme.dark":`Dunkles Design`,"theme.light":`Helles Design`,"home.title":`Deine Wizards`,"home.search":`Suche nach deinen Wizards`,"home.noMatch":`Keiner deiner Wizards heißt so.`,"home.newFromSearch":`Neuen Wizard bauen: „{q}“`,"home.new":`Neuer Wizard`,"home.import":`Importieren`,"import.failed":`Import hat nicht geklappt`,"home.empty":`Noch keine Wizards in diesem Space.`,"home.live":`Live`,"home.draft":`Entwurf`,"where.here":`Lokal`,"where.hereVersion":`Lokal · Version {v}`,"where.hereHint":`Läuft nur auf diesem Computer, solange die App läuft.`,"where.liveHint":`Läuft auf {host} – für alle mit dem Link.`,"where.liveAt":`Live auf {host} · Version {v}`,"where.note":`1 Hinweis`,"where.notes":`{n} Hinweise`,"where.sending":`Wird gesendet`,"where.missing":`Nicht in der Cloud`,"home.steps":`{n} Schritte`,"home.all":`Alle`,"home.newProject":`Neuer Space`,"home.projectName":`Name des Space`,"home.projectLimit":`Höchstens {n} Spaces`,"team.title":`Team`,"team.hint":`Wer im Team ist und auf welchem Paket es läuft. Eingeladen und verwaltet wird im Konto.`,"team.plan":`Paket`,"team.planFree":`Free`,"team.seats":`{taken} von {limit} Plätzen`,"team.seatsUnlimited":`Plätze ohne Limit`,"team.members":`Mitglieder`,"team.invited":`eingeladen`,"team.you":`du`,"team.manage":`Mitglieder verwalten`,"team.changePlan":`Paket ansehen`,"team.roles":`Inhaber und Admins legen Wizards und Spaces an und löschen sie; Mitglieder bearbeiten die Wizards, die es gibt.`,"team.memberNote":`Du bist Mitglied: Du bearbeitest Wizards, Admins legen neue an und löschen.`,"team.failed":`Das Team ließ sich nicht laden.`,"team.role.owner":`Inhaber`,"team.role.admin":`Admin`,"team.role.member":`Mitglied`,"models.ownKeysPlan":`Eigene API Keys gibt es ab dem Pro-Paket. Hier zahlen die Credits des Teams.`,"home.fromLocal":`Aus deiner lokalen Installation – geändert wird dort.`,"home.syncedAt":`Zuletzt angekommen: {when}.`,"home.local.title":`Hier laufen die Wizards aus deiner lokalen Installation`,"home.local.text":`Du baust auf deinem eigenen Computer. Was du dort veröffentlichst, läuft hier – für alle, hinter einem Link.`,"home.local.install":`Installiere engenty wizards auf deinem Computer:`,"home.local.signIn":`Melde dich dort unter Einstellungen → Konto mit diesem Konto an.`,"home.local.publish":`Veröffentliche einen Wizard. Er erscheint dann hier.`,"new.title":`Was soll dein Wizard können?`,"new.placeholder":`z. B. Kunden geben ihr Produkt und ihre Zielgruppe ein, der Wizard recherchiert Wettbewerber und erstellt daraus ein Positionierungs-Briefing als PDF.`,"new.build":`Wizard bauen`,"new.orStarter":`Oder beginne mit einer Vorlage`,"new.import":`Wizard-Paket importieren`,"new.hint":`Du kannst alles danach im Gespräch ändern.`,"new.runsAs":`Läuft als`,"new.where":`Wo soll er laufen?`,"new.web":`Im Browser`,"new.phone":`Am Telefon`,"new.messages":`Per Nachricht`,"new.off":`aus`,"new.ch.steps":`Wizard in Schritten`,"new.ch.chat":`Chat`,"new.ch.talk":`Live Voice`,"new.ch.video":`Video Call`,"new.ch.call":`Anruf`,"new.ch.sms":`SMS`,"new.ch.whatsapp":`WhatsApp`,"new.callHandoff":`Was am Telefon nicht geht, kommt per SMS.`,"new.similar":`Gibt es schon ähnlich`,"new.yours":`Deiner`,"new.template":`Vorlage`,"new.open":`Öffnen`,"new.take":`Nehmen`,"new.more":`{n} weitere …`,"new.dropHint":`Zum Anhängen loslassen`,"editor.resize":`Breite ändern – Doppelklick setzt zurück`,"editor.resizeSheet":`Höhe ändern – Tippen klappt ein und aus`,"editor.export":`Als Paket exportieren (.wizard)`,"addStep.title":`Was soll hier passieren?`,"addStep.placeholder":`Zum Beispiel: eine Karte mit allen gefundenen Objekten, der Preis als Farbe`,"addStep.kind":`Art des Schritts`,"addStep.auto":`KI wählt`,"addStep.empty":`Beschreibe zuerst, was der Schritt tun soll.`,"addStep.busy":`Der Assistent arbeitet noch an der letzten Nachricht. Versuch es gleich noch einmal.`,"addStep.emptyStep":`Leer einfügen`,"addStep.cancel":`Abbrechen`,"addStep.create":`Erstellen`,"addStep.building":`Neuer Schritt wird gebaut …`,"addStep.showChat":`Im Gespräch ansehen`,"addStep.add":`Schritt hinzufügen`,"surface.preview":`Vorschau`,"surface.code":`Code`,"surface.sampleNote":`Mit Beispieldaten – ein Lauf zeigt seine eigenen.`,"surface.sampleText":`Beispieltext`,"surface.sampleBrand":`Deine Firma`,"addStep.when":`Wann?`,"addStep.always":`Immer`,"addStep.onlyIf":`Nur wenn …`,"addStep.aiDecides":`KI entscheidet …`,"addStep.ifPlaceholder":`Zum Beispiel: Umsatz unter 100`,"addStep.askPlaceholder":`Zum Beispiel: die Person will ihr Geld zurück`,"addStep.whenEmpty":`Sag, wann der Schritt kommen soll.`,"addStep.messageIf":`Nur wenn: {text} – sonst geht es nach „{from}“ weiter wie bisher.`,"addStep.messageAsk":`KI entscheidet: {text} – sonst geht es nach „{from}“ weiter wie bisher.`,"addStep.here":`Hier einen Schritt einfügen`,"addStep.between":`Zwischen „{before}“ und „{after}“`,"addStep.after":`Nach „{title}“`,"addStep.first":`Als erster Schritt, vor „{title}“`,"addStep.message":`Neuer Schritt · {place}`,"addStep.messageAs":`Neuer Schritt ({kind}) · {place}`,"widget.missing":`Das Widget ist noch nicht gebaut.`,"widget.what":`Was soll das Widget zeigen? (optional)`,"widget.build":`Vom Assistenten bauen lassen`,"widget.upload":`Eigene HTML hochladen`,"widget.buildMessage":`Bitte baue das Widget „{title}“. {what}`,"editor.chat":`Gespräch`,"editor.dropToAttach":`Loslassen, um es der Nachricht anzuhängen`,"editor.memory":`Gedächtnis`,"memory.explain":`Was der Wizard über alle Läufe hinweg weiß: Notizen, die KI-Schritte mit dem Werkzeug „Seiten“ lesen und fortschreiben, und die Tabellen seiner geteilten Listen. Dieselben Daten stehen im Bereich unter Daten.`,"memory.unused":`Noch nutzt kein Schritt das Gedächtnis. Bitte den Assistenten, dass sich ein KI-Schritt etwas merken soll.`,"memory.none":`Noch nichts gemerkt.`,"memory.add":`Notiz`,"memory.newNote":`Notiz`,"memory.back":`Gedächtnis`,"memory.testCopy":`Testläufe lesen das Gedächtnis, schreiben aber in eine eigene Kopie, die mit dem Lauf verschwindet.`,"editor.step":`Schritte`,"editor.runs":`Durchläufe`,"editor.reviewEditable":`bearbeitbar`,"editor.reviewRedo":`neu erstellbar`,"editor.otherwise":`sonst`,"editor.next.title":`Nächster Schritt`,"editor.next.ways":`Nächster Schritt · {count} Wege`,"editor.next.open":`Schritt öffnen`,"editor.next.then":`Danach`,"editor.next.fold":`Zuklappen`,"editor.next.unfold":`Kurz zeigen`,"editor.branch.ai":`KI`,"editor.branch.addWhen":`Bedingung`,"editor.branch.when":`Weiter, wenn`,"editor.branch.pick":`Wählen …`,"editor.branch.and":`und`,"editor.branch.statement":`Aussage`,"editor.branch.none":`Keine trifft klar zu`,"editor.branch.how":`Entschieden von einem Entscheidungsmodell (Jev), wo es einen Weg dorthin gibt, sonst vom Sprachmodell der Klasse Klassifizieren. Liegen die zwei wahrscheinlichsten Antworten weniger als 10 Punkte auseinander, gilt „keine“.`,"editor.branch.lastRun":`Im letzten Testlauf entschieden von {source}.`,"editor.branch.bySystemOne":`einem Entscheidungsmodell`,"editor.branch.byLlm":`dem Sprachmodell`,"editor.branch.notYet":`Ein Testlauf zeigt hier, wie die KI entschieden hat.`,"editor.branch.end":`Ende`,"editor.branch.max":`Höchstens so oft (sonst 10)`,"editor.branch.remove":`Verzweigung entfernen`,"editor.branch.addAsk":`KI entscheidet`,"editor.branch.newAsk":`Die Person möchte …`,"editor.whenFilled":`{field} ausgefüllt`,"editor.whenEmpty":`{field} leer`,"editor.whenContains":`{field} enthält {value}`,"editor.whenAsk":`entscheidet: {text}`,"editor.surfaceJson":`Ansicht (JSON)`,"editor.fieldAsk":`Oder: zeigen, wenn die KI das für zutreffend hält …`,"editor.atMost":`höchstens {count}×`,"editor.shownWhen":`Nur zeigen, wenn`,"editor.shownAlways":`Immer zeigen`,"editor.conditionValue":`Wert`,"editor.optionsFrom":`Auswahl aus früheren Daten`,"editor.optionsFixed":`Feste Auswahl`,"editor.op.equals":`ist`,"editor.op.notEquals":`ist nicht`,"editor.op.in":`ist eine von`,"editor.op.notEmpty":`ist ausgefüllt`,"editor.op.empty":`ist leer`,"editor.op.gt":`größer als`,"editor.op.lt":`kleiner als`,"editor.op.contains":`enthält`,"editor.conditionsMore":`und {count} weitere Bedingungen`,"tool.web_search":`Websuche`,"tool.web_fetch":`Webseiten lesen`,"tool.browser":`Browser`,"tool.sandbox":`Code & Shell`,"tool.image":`Bilder`,"tool.http":`API`,"tool.pages":`Seiten`,"editor.test":`Testen`,"editor.share":`Teilen`,"editor.publish":`Veröffentlichen`,"editor.published":`Live · Version {v}`,"editor.unpublishedChanges":`Änderungen nicht veröffentlicht`,"editor.notPublished":`Noch nicht veröffentlicht`,"editor.composer":`Beschreibe, was sich ändern soll …`,"editor.attach":`Dateien anhängen`,"editor.detach":`Entfernen`,"editor.attached":`Angehängt`,"editor.thread":`Verlauf`,"editor.voice":`Diktieren`,"editor.voiceStop":`Diktat beenden`,"editor.listening":`Ich höre zu …`,"editor.transcribing":`Wird verschriftlicht …`,"editor.micDenied":`Das Mikrofon ist für diese Seite nicht freigegeben.`,"editor.building":`Baue den Ablauf …`,"editor.files":`Dateien`,"files.explain":`Was dein Wizard bei jedem Durchlauf braucht: Widget-Code, Bibliotheken, Kartenumrisse, Preislisten. Der Assistent legt sie im Gespräch an – du kannst auch eigene hochladen.`,"files.upload":`Hochladen`,"files.drop":`Zum Hochladen loslassen`,"files.count":`{n} Dateien · {size}`,"files.empty":`Noch keine Dateien. Zieh Dateien hierher oder bitte den Assistenten, ein Widget zu bauen.`,"files.download":`Herunterladen`,"files.delete":`Löschen`,"files.confirmDelete":`„{path}“ löschen?`,"files.none":`Dieser Wizard hat keine Dateien.`,"editor.thinking":`Denkt nach …`,"editor.chatBroken":`Die Verbindung ist abgebrochen. Was schon gebaut war, ist gespeichert – schick die Nachricht bitte noch einmal.`,"editor.issues":`Bevor du testest oder teilst, braucht der Wizard noch Korrekturen:`,"editor.fixWithChat":`Vom Assistenten beheben lassen`,"editor.models.blocking":`So kann der Wizard nicht starten. Es fehlen Modelle:`,"editor.models.optional":`Diese Schritte laufen so nicht. Wähle beim Testen einen Weg ohne sie oder richte die Modelle ein:`,"editor.models.settings":`Modelle einrichten`,"editor.prevStep":`Vorheriger Schritt`,"editor.nextStep":`Nächster Schritt`,"editor.deleteStep":`Schritt löschen`,"editor.holdToDelete":`Zum Löschen halten`,"editor.deleting":`Löschen`,"editor.moveUp":`Nach oben`,"editor.moveDown":`Nach unten`,"editor.noRuns":`Noch keine Durchläufe.`,"editor.restart":`Neu starten`,"editor.close":`Schließen`,"runDrawer.expand":`Ganzes Fenster`,"runDrawer.shrink":`Zurück an den Rand`,"editor.chatHello":`Beschreibe mir, was dein Wizard tun soll. Ich baue den Ablauf und du siehst ihn links als Diagramm.`,"shareRun.button":`Teilen`,"shareRun.title":`Ergebnis teilen`,"shareRun.email":`E-Mail`,"shareRun.more":`Mehr …`,"shareRun.until":`Der Link ist bis {date} gültig.`,"shareRun.kept":`Der Link bleibt gültig, bis du ihn zurückziehst.`,"shareRun.withdraw":`Link zurückziehen`,"sharePage.gone":`Dieser Link ist abgelaufen oder wurde zurückgezogen.`,"sharePage.own":`Selbst ausprobieren`,"sharePage.until":`Geteilt · verfügbar bis {date}`,"sharePage.shared":`Geteilt am {date}`,"share.titleOf":`„{title}“ teilen`,"share.access":`Zugriff`,"share.anyone":`Jeder mit dem Link`,"share.anyoneMenu":`kann ihn öffnen und ausfüllen`,"share.anyoneHint":`kann ihn öffnen und ausfüllen · bis zu {n} Durchläufe am Tag`,"share.onlyYou":`Nur du`,"share.onlyYouHint":`Der Link ist aus. Du testest ihn im Studio.`,"share.thisComputer":`Nur auf diesem Computer`,"share.thisComputerHint":`Andere erreichen ihn erst über die Cloud.`,"share.ways":`So erreichen ihn andere`,"share.change":`Ändern`,"share.copyLink":`Link`,"share.copyNumber":`Nummer`,"share.copyLinkFor":`Link für {name} kopieren`,"share.copyNumberFor":`Nummer für {name} kopieren`,"share.keywordTo":`„{keyword}“ an {number}`,"share.unset":`Noch nicht eingerichtet`,"share.setUp":`Einrichten`,"share.offNote":`Solange nur du Zugriff hast, sehen alle anderen nur einen Hinweis.`,"share.opensSteps":`in Schritten`,"share.opensAs":`als {name}`,"share.linkNote":`„Link kopieren“ öffnet ihn {how} und bietet die anderen Wege gleich mit an.`,"share.copyMain":`Link kopieren`,"share.notPublished":`Noch nicht veröffentlicht`,"share.notPublishedHint":`Andere kommen hinein, sobald du ihn veröffentlichst.`,"share.changes":`Andere sehen Version {v}. Deine Änderungen sind noch nicht veröffentlicht.`,"share.localHint":`Hier läuft er nur auf diesem Computer. Mit einem Konto läuft er auch in der Cloud – dort öffnen ihn alle.`,"share.back":`Zurück`,"share.close":`Schließen`,"share.done":`Fertig`,"share.qrOpens":`Öffnet`,"share.qrMessage":`Mit der Handykamera scannen: {name} öffnet sich, das Stichwort steht schon da.`,"share.print":`Drucken`,"share.download":`Herunterladen`,"share.onWebsite":`Auf deiner Website`,"share.webShows":`Was zeigt die Website?`,"share.webWhere":`Wo auf der Seite?`,"share.webCode":`Code für deine Seite`,"share.copyCode":`Code kopieren`,"share.webNeedsLink":`Der Code für deine Seite braucht einen Link, den alle erreichen: veröffentlicht, für jeden mit dem Link.`,"share.wpLine":`WordPress? Mit unserem Plugin geht es ohne Code.`,"share.wpPackageLink":`Ohne Konto: als Paket`,"share.place.inline":`In der Seite`,"share.place.inlineHint":`Er steht mitten auf deiner Seite, wo du den Code einfügst.`,"share.place.button":`Hinter einem Knopf`,"share.place.buttonHint":`Ein Knopf auf deiner Seite öffnet ihn in einem Fenster.`,"share.place.bubble":`Als Blase`,"share.place.bubbleHint":`Unten rechts auf jeder Seite – ein Klick öffnet ihn. Den Code am besten in die Fußzeile.`,"share.place.popout":`Als Chat-Knopf`,"share.place.popoutHint":`Unten rechts auf jeder Seite – ein Klick öffnet den Chat. Den Code am besten in die Fußzeile.`,"share.runs":`Durchläufe`,"share.newLink":`Neuer Link`,"share.rotated":`Neuer Link erzeugt`,"share.link":`Link`,"share.copy":`Kopieren`,"share.limit":`Höchstens am Tag`,"share.rotate":`Neuen Link erzeugen`,"share.rotateHint":`Der alte Link und der QR-Code gehen danach nicht mehr.`,"share.website":`Website`,"share.openHere":`Auf diesem Computer testen`,"share.settings":`Einstellungen`,"share.rotateCloud":`Der alte Link und der QR-Code gehen danach nicht mehr – auch in der Cloud.`,"share.others":`Mit anderen teilen`,"share.details":`Details`,"teaser.link":`Dieser Link geht nur auf diesem Computer, solange die App läuft. Mit einem Konto läuft der Wizard auch auf engenty.ai – mit einem Link für alle.`,"teaser.models":`Ohne eigenen API Key: mit einem Konto laufen Text, Bilder und Videos über Guthaben.`,"teaser.connect":`Konto verbinden`,"teaser.modelsLinked":`Oder über das Guthaben deines Kontos: unter Modelle „Guthaben des Kontos“ wählen.`,"share.open":`Öffnen`,"share.qr":`QR-Code`,"share.qrHint":`Mit der Kamera des Handys scannen: der Wizard öffnet sich, in der App engenty wizards, wenn sie installiert ist.`,"share.code":`ID für die App:`,"share.readOnly":`Ob der Link aktiv ist und wie viele Durchläufe er am Tag zulässt, stellst du in deiner lokalen Installation ein.`,"share.fit.no":`Nicht möglich: {steps}`,"run.orAs":`Oder: {label}`,"chat.view":`Ansicht`,"chat.steps":`Schritte`,"chat.chat":`Chat`,"chat.send":`Senden`,"chat.dictate":`Diktieren (⌘⇧M)`,"chat.dictateStop":`Diktat beenden`,"chat.listening":`Ich höre zu …`,"chat.transcribing":`Wird verschriftlicht …`,"chat.micDenied":`Das Mikrofon ist für diese Seite nicht freigegeben.`,"chat.readAloud":`Vorlesen`,"chat.readAloudOff":`Vorlesen beenden`,"talk.start":`Gespräch beginnen`,"talk.stop":`Gespräch beenden`,"talk.connecting":`Verbinde …`,"talk.live":`Im Gespräch`,"talk.speaking":`Spricht`,"talk.listening":`Hört zu`,"talk.failed":`Das Gespräch konnte nicht beginnen`,"talk.hint":`Sprich mit dem Wizard – der Bildschirm zeigt mit.`,"talk.camera":`Kamera einschalten`,"talk.cameraOff":`Kamera ausschalten`,"talk.cameraDenied":`Die Kamera ist für diese Seite nicht freigegeben.`,"video.join":`Beitreten`,"video.rejoin":`Wieder beitreten`,"video.leave":`Verlassen`,"video.hint":`Mikrofon und Kamera werden beim Beitreten gefragt. Der Chat daneben zeigt mit und nimmt, was eine Stimme nicht kann.`,"video.you":`Du`,"video.cameraOff":`Kamera aus`,"video.mute":`Stummschalten`,"video.unmute":`Stummschaltung aufheben`,"video.flip":`Kamera wechseln`,"video.ended":`Anruf beendet`,"video.chat":`Chat`,"talk.joinHint":`Das Mikrofon wird beim Start gefragt, die Kamera erst, wenn du sie einschaltest. Der Chat daneben zeigt mit und nimmt, was eine Stimme nicht kann.`,"chat.skip":`Überspringen`,"chat.skipped":`Übersprungen`,"chat.change":`Ändern`,"chat.placeholder":`Deine Antwort …`,"chat.above":`Antworte oben im Chat`,"chat.required":`Dafür brauche ich eine Antwort.`,"chat.badEmail":`Das sieht nicht nach einer E-Mail-Adresse aus.`,"chat.badUrl":`Das ist keine gültige Adresse.`,"chat.badNumber":`Bitte eine Zahl.`,"chat.file":`1 Datei`,"chat.files":`{n} Dateien`,"chat.voice":`Sprachnotiz`,"chat.rows":`{n} Zeilen`,"chat.connected":`Verbunden`,"chat.checked":`Geprüft`,"type.page":`Seite`,"type.agent":`KI-Schritt`,"type.generate":`Erzeugen`,"type.surface":`Ansicht`,"type.widget":`Widget`,"type.film":`Film`,"type.review":`Prüfen`,"type.result":`Ergebnis`,"run.regenerate":`Neue Variante`,"run.regenerateNote":`Was soll anders werden?`,"market.search":`Vorlage suchen …`,"market.hits":`Aus dem Marktplatz`,"market.all":`Alle`,"market.industry":`Branche`,"market.format":`Ergebnis`,"market.capability":`Fähigkeit`,"market.unavailable":`nicht eingerichtet`,"market.without":`Geht auch ohne: {list}`,"market.optional":`nicht eingerichtet, geht auch ohne`,"market.optionalHint":`Läuft hier ohne {list}: Antworten, die das bräuchten, sind im Wizard gesperrt. Einrichten unter Modelle.`,"market.missing":`Hier nicht eingerichtet: {list}`,"market.plan":`Paket`,"market.pro":`Pro`,"market.proHint":`Braucht Plugins, die mit Pro auf engenty.ai dabei sind`,"market.needsPro":`Mit Pro: braucht {list}`,"market.needsProHint":`Diese Vorlage braucht {list}. Die Plugins sind mit Pro und Team auf engenty.ai dabei.`,"market.missingHint":`Dafür fehlt hier ein Modell: {list}. Richte es unter Modelle ein.`,"market.none":`Keine Vorlage passt zu dieser Auswahl.`,"market.notFound":`Diese Vorlage gibt es nicht (mehr).`,"market.star":`Merken`,"market.starred":`Gemerkt`,"market.starHint":`Gemerkte Vorlagen liegen auf diesem Rechner auch ohne Verbindung bereit.`,"market.fromPlugin":`Kommt mit dem Plugin „{name}“`,"market.noneStarred":`Du hast noch keine Vorlage gemerkt.`,"market.offline":`Keine Verbindung zum Marktplatz: du siehst die Vorlagen, die hier bereitliegen.`,"market.more":`Mehr anzeigen`,"market.reset":`Auswahl zurücksetzen`,"market.count":`{n} Vorlagen`,"market.countOf":`{n} von {all} Vorlagen`,"market.countOfShort":`{n} von {all}`,"market.resetShort":`Zurücksetzen`,"market.minutes":`~ {n} Min.`,"market.credits":`~ {n} Credits pro Lauf`,"market.needsUpdate":`Braucht eine neuere App`,"market.needsUpdateHint":`Diese Vorlage nutzt Funktionen, die deine App noch nicht kennt. Aktualisiere die App, dann kannst du sie verwenden.`,"market.use":`Mit dieser Vorlage starten`,"market.steps":`So läuft der Wizard ab`,"market.duration":`Dauer`,"market.durationHint":`vom Start bis zum Ergebnis, mit {n} Angaben von dir`,"market.result":`Ergebnis`,"market.creditsRange":`~ {n} Credits`,"market.creditsHint":`pro Lauf geschätzt, selten mehr als das Doppelte`,"market.needs":`Braucht`,"market.cost":`Kosten`,"new.forWebsite":`Kleine Helfer für deine Website`,"run.download":`Herunterladen`,"run.madeWith":`Erstellt mit engenty wizards`,"run.required":`Pflichtfeld`,"settings.title":`Einstellungen`,"settings.name":`Name`,"settings.mcp":`Verbundene Systeme`,"settings.mcpHint":`KI-Schritte können in diese Systeme schreiben oder daraus lesen – nur, wenn du sie im Schritt freigibst.`,"settings.addServer":`System verbinden`,"settings.serverName":`Name`,"settings.serverUrl":`MCP-URL`,"settings.serverHeader":`Authorization-Header (optional)`,"settings.save":`Speichern`,"settings.saved":`Gespeichert`,"settings.delete":`Space löschen`,"settings.noProject":`Hier erscheint dein Space, sobald deine lokale Installation den ersten Wizard veröffentlicht hat.`,"settings.copy":`Kopieren`,"settings.copied":`Kopiert`,"settings.lastUsed":`zuletzt {when}`,"settings.neverUsed":`noch nie benutzt`,"settings.revoke":`Schlüssel löschen`,"mcp.appsDisconnect":`Austragen`,"plugins.title":`Plugins`,"plugins.hint":`Plugins erweitern diese App um Seiten, Einstellungen und Werkzeuge für Schritte. Sie laufen mit allen Rechten der App: installiere nur, was du kennst.`,"plugins.hintManaged":`Diese Plugins sind für dein Konto freigeschaltet.`,"plugins.reload":`Neu laden`,"plugins.rescan":`Neu suchen`,"plugins.tools":`Werkzeuge für Schritte`,"plugins.serverFailed":`Der Server-Teil hat nicht geladen: {error}`,"plugins.studioFailed":`Der Studio-Teil hat nicht geladen: {error}`,"plugins.problems":`Kein Plugin`,"plugins.crashed":`Dieser Teil eines Plugins ist abgestürzt.`,"plugins.none":`Keine eigenen Plugins installiert.`,"pro.title":`Pro-Module`,"pro.hint":`Module, die dein Paket (Pro, Team) enthält, hier auf deinem Rechner. Sie kommen von deinem engenty-Konto, sind von engenty signiert und bleiben an, solange dein Paket sie enthält – ohne Internet bis zu einer Woche.`,"pro.check":`Paket prüfen`,"pro.notLinked":`Verbinde dein engenty-Konto (Einstellungen → Konto), um die Module deines Pakets hier zu nutzen.`,"pro.plan":`Paket: {plan}`,"pro.confirmedUntil":`bestätigt bis {date}`,"pro.plans":`Pakete`,"pro.on":`Aktiv`,"pro.notInPlan":`Nicht in deinem Paket`,"pro.install":`Installieren`,"pro.update":`Aktualisieren`,"pro.remove":`Entfernen`,"pro.none":`Für diese Version ({runtime}) gibt es noch keine Pro-Module.`,"pro.held.plan":`Nicht in deinem Paket`,"pro.held.release":`Wird für diese Version neu geladen`,"pro.held.unconfirmed":`Paket nicht bestätigt – online prüfen`,"integrate.nav":`Einbinden`,"integrate.title":`Deine Wizards in deinen KI-Apps`,"integrate.intro":`Starte Wizards direkt im Chat von Claude, ChatGPT, Cursor und Co. – beantworte die Seiten dort und bekomm das Ergebnis. Gedacht wird mit dem Abo, das du schon hast.`,"integrate.introManaged":`Starte deine Wizards direkt im Chat von claude.ai, ChatGPT, Claude Desktop und Co. – beantworte die Seiten dort und bekomm das Ergebnis.`,"integrate.groupHere":`Auf diesem Computer`,"integrate.groupCloud":`Über engenty.ai`,"integrate.groupBrowser":`Im Browser`,"integrate.groupDesktop":`Auf deinem Computer`,"integrate.groupMore":`Weitere Apps`,"integrate.groupShare":`Teilen`,"integrate.shareLink":`Per Link teilen`,"integrate.shareSite":`Auf einer Website`,"integrate.wpIntro":`Das Plugin „engenty wizards“ bringt deine veröffentlichten Wizards auf eine WordPress-Seite: als Block, Shortcode, Elementor-Widget oder Blase unten rechts. Ergebnisse, Kontakte und Termine stehen dann auch im WordPress-Admin.`,"integrate.wpInstall":`1 · Plugin installieren`,"integrate.wpInstallHint":`In WordPress unter Plugins → Installieren → Plugin hochladen die ZIP-Datei wählen und aktivieren.`,"integrate.wpDownload":`engenty-wizards.zip laden`,"integrate.wpConnect":`2 · Verbinden`,"integrate.wpConnectHint":`Im WordPress-Admin unter „engenty“ auf „Eigene KI erstellen“ (neues Konto) oder „Anmelden“. Die Website liest sich dann selbst ein: Name, Logo, Farben, Kontaktdaten und ihre Seiten als Wissen.`,"integrate.wpConnectLocal":`Das Plugin verbindet sich mit einem Konto auf engenty.ai, nicht mit dieser Installation. Verknüpfe hier dein Konto und veröffentliche deine Wizards dorthin; dann wählst du sie in WordPress.`,"integrate.wpPlace":`3 · Auf die Seite bringen`,"integrate.wpPlaceHint":`Block „engenty Wizard“, das gleichnamige Elementor-Widget, die Blase aus den Einstellungen des Plugins oder dieser Shortcode mit der ID des Wizards:`,"integrate.wpSampleLabel":`Anfrage starten`,"share.wpPlugin":`Plugin laden`,"share.wpLocal":`Ohne Konto, auf der Website selbst`,"share.wpLocalHint":`Als Paket in ein WordPress 7 importiert, denkt der Wizard mit dem KI-Anbieter der Website und braucht kein Konto. Was er braucht, wie die Galerie es sagt:`,"share.wpPackage":`Paket herunterladen`,"share.wpPackageDraft":`Entwurf als Paket`,"share.wpKnowledge":`Wissen mitnehmen`,"share.wpKnowledgeHint":`Die Seiten dieses Projekts kommen als Dateien ins Paket (bis 2 MB) – was der Wizard sonst im Space nachliest.`,"share.wpFull":`Läuft dort ganz`,"share.wpLess":`Läuft mit weniger`,"share.wpNo":`Braucht ein Konto`,"share.wpNeedsAccount":`Mit Konto: braucht {list}`,"share.wpHelp":`Im Plugin: engenty → Wizards → Importieren. Ohne Konto bleiben die Ergebnisse in WordPress; Kontakte, Termine und Dateien gibt es nur über das Konto.`,"need.full":`läuft`,"need.missing":`nicht eingerichtet`,"need.optional":`geht auch ohne`,"need.lists":`Listen, die der Wizard zwischen Durchläufen behält`,"need.memory":`Das Gedächtnis des Wizards`,"need.each":`Ein Durchlauf je Eintrag (hier nacheinander)`,"need.field:slot":`Terminwahl aus freien Zeiten`,"need.asset:document":`Dokumente erzeugen (PDF, Word)`,"need.asset:dashboard":`Dashboards erzeugen`,"need.tool:pages":`Die Seiten des Space lesen`,"need.format":`Ergebnis als {format}`,"integrate.wpLocal":`Ohne Konto`,"integrate.wpLocalHint":`Ein WordPress 7 mit eigenem KI-Anbieter (Einstellungen → Connectors) lässt Wizards auch ohne Konto laufen: mitgelieferte Vorlagen, oder ein Paket aus dem Teilen-Dialog eines Wizards. Der Teilen-Dialog sagt je Wizard, ob er dort ganz, mit weniger oder nur mit Konto läuft.`,"integrate.wpPro":`Mit Pro`,"integrate.wpProHint":`Kontakte und Termine aus deinen Wizards im WordPress-Admin, Wizards aus Vorlagen direkt in WordPress anlegen.`,"integrate.soon":`bald`,"integrate.found":`Auf diesem Computer gefunden`,"integrate.stateWorks":`Funktioniert`,"integrate.stateAdded":`Eingetragen, noch nicht getestet`,"integrate.stateNone":`Noch nicht eingerichtet`,"integrate.outRun":`Wizards im Chat starten`,"integrate.outWidget":`Wizard erscheint im Chat`,"integrate.outText":`Wizards als Text im Chat`,"integrate.outSignIn":`Ohne API Key – du meldest dich an`,"integrate.view":`Ansehen`,"integrate.testIt":`Testen`,"integrate.connectShort":`Verbinden`,"integrate.cloudTitle":`claude.ai und ChatGPT`,"integrate.cloudText":`Laufen im Browser und erreichen deinen Computer nicht. Mit deinem engenty-Konto kommen deine Wizards trotzdem dorthin.`,"integrate.cloudButton":`Über engenty.ai verbinden`,"integrate.steps":`So geht’s`,"integrate.connect":`In {app} eintragen`,"integrate.connectHint":`Trägt engenty wizards in die Einstellungen von {app} ein.`,"integrate.connected":`In {app} eingetragen`,"integrate.notInstalled":`{app} ist auf diesem Computer nicht zu finden. Eintragen geht trotzdem – es wirkt, sobald {app} da ist.`,"integrate.details":`Details`,"integrate.restart":`{app} neu starten`,"integrate.restartHint":`Ganz beenden und wieder öffnen. Wir merken es von selbst – du musst hier nichts klicken.`,"integrate.reload":`Lade die Server in {app} neu oder starte {app} neu. Wir merken es von selbst.`,"integrate.waiting":`Wartet auf {app}`,"integrate.try":`Im Chat ausprobieren`,"integrate.tryHint":`Schreib in einem neuen Chat:`,"integrate.askTool":`Welche Wizards habe ich in engenty?`,"integrate.elsewhere":`{app} auf einem anderen Rechner?`,"integrate.byAddress":`Mit Adresse und API Key verbinden`,"integrate.backHere":`Doch auf diesem Computer verbinden`,"integrate.keyCreate":`API Key für {app} erstellen`,"integrate.keyHint":`Damit meldet sich {app} an. Er wird nur einmal angezeigt und steht dann gleich im Befehl.`,"integrate.keyReady":`API Key erstellt – er steht schon im Befehl.`,"integrate.add":`Server eintragen`,"integrate.addressLocal":`Nur auf diesem Rechner erreichbar, und nur solange engenty wizards läuft.`,"integrate.works":`Funktioniert`,"integrate.next":`Probier als Nächstes`,"integrate.nextHint":`Kopier einen Satz in einen neuen Chat in {app}.`,"integrate.labelAsk":`Fragen`,"integrate.labelRun":`Ausführen`,"integrate.labelBuild":`Bauen`,"integrate.labelExplain":`Erklären`,"integrate.askRun":`Starte meinen Wizard „{title}“`,"integrate.askBuild":`Bau mir einen Wizard für Newsletter-Entwürfe`,"integrate.askExplain":`Was macht der Wizard „{title}“?`,"integrate.textOnly":`{app} zeigt Wizards als Text: Seiten und Fragen kommen als Nachrichten. Den Wizard selbst als Fenster im Chat zeigen Claude Desktop, Cursor und VS Code.`,"integrate.addedIn":`Eingetragen in {app}`,"integrate.remoteWhy":`{app} läuft auf den Servern seines Herstellers und erreicht deinen Computer nicht. Deine Wizards auf engenty.ai erreicht es schon.`,"integrate.viaAccount":`Über dein engenty-Konto verbinden`,"integrate.tileHere":`Dieser Computer`,"integrate.tileHereText":`Hier baust du weiter wie bisher.`,"integrate.tileCloudText":`Bekommt deine veröffentlichten Wizards, zum Ausführen.`,"integrate.tileAppText":`Verbindet sich mit engenty.ai und startet sie im Chat.`,"integrate.linkAccount":`Mit engenty.ai verbinden`,"integrate.linkHint":`Danach zeigen wir dir die Schritte in {app}.`,"integrate.noAccount":`Lieber ohne Konto?`,"integrate.useDesktop":`Claude Desktop geht direkt hier – ein Klick`,"integrate.linked":`Über dein Konto {email}: {app} sieht die Wizards, die du hier veröffentlichst.`,"integrate.openConnectors":`Konnektoren in claude.ai öffnen`,"integrate.open":`{app} öffnen`,"integrate.claudeAiWhere":`Dort: Eigenen Konnektor hinzufügen`,"integrate.desktopWhere":`In Claude Desktop: Einstellungen → Konnektoren → Eigenen Konnektor hinzufügen`,"integrate.chatgptWhere":`In ChatGPT: Einstellungen → Apps & Connectors → Erweitert → Entwicklermodus, dann „Erstellen“`,"integrate.nameAddress":`Name und Adresse eintragen`,"integrate.name":`Name`,"integrate.address":`Adresse`,"integrate.allow":`Auf „Verbinden“ klicken, anmelden, erlauben`,"integrate.allowHint":`Ein Fenster von engenty öffnet sich. Du meldest dich an und klickst „Erlauben“. So sieht es aus:`,"integrate.allowFirst":`Beim ersten Aufruf anmelden und erlauben`,"integrate.allowFirstHint":`{app} öffnet ein Fenster von engenty. Du meldest dich an und klickst „Erlauben“.`,"integrate.consentPreview":`{app} möchte auf deine Wizards zugreifen`,"integrate.checkSeen":`Verbunden`,"integrate.checkTool":`Werkzeug benutzt`,"integrate.checkWidget":`Wizard im Chat gezeigt`,"integrate.revoke":`Trennen geht jederzeit in deinem Konto – der Zugriff endet sofort.`,"integrate.revokeLink":`Verbundene Programme`,"integrate.needsPublic":`{app} verbindet sich von den Servern seines Herstellers aus. Das geht nur, wenn dieser Server öffentlich über HTTPS erreichbar ist.`,"integrate.file":`In {file} eintragen:`,"integrate.vscode":`In VS Code: „MCP: Open User Configuration“, dann eintragen:`,"integrate.chatgpt":`In ChatGPT: Einstellungen → Apps & Connectors → Erweitert → Entwicklermodus, dann „Erstellen“ mit dieser Adresse:`,"integrate.generic":`In den MCP-Einstellungen der App einen Server mit dieser Adresse anlegen (Streamable HTTP):`,"mcp.terminal":`Im Terminal ausführen:`,"mcp.ccPlugin":`Optional das Plugin – es bringt den Befehl /wizard mit:`,"mcp.codexKey":`Im Terminal ausführen – Codex liest den API Key aus einer Umgebungsvariable:`,"mcp.claudeAi":`In claude.ai: Einstellungen → Konnektoren → Eigenen Konnektor hinzufügen, diese Adresse eintragen:`,"mcp.oauth":`Kein API Key nötig: Beim ersten Aufruf meldet sich deine App im Browser an.`,"mcp.keys":`API Keys`,"mcp.keysHint":`Jeder API Key meldet eine App an und hat alle Rechte – behandle ihn wie ein Passwort. Löschst du ihn, ist die App abgemeldet.`,"editor.viaClient":`Über {client}`,"editor.changedVia":`Geändert über {client}`,"editor.merged":`Mit Änderungen von außen zusammengeführt`,"browser.takeOver":`Übernehmen`,"browser.handBack":`Zurückgeben`,"browser.driving":`Du steuerst den Browser – klick und tipp in die Seite. Der Wizard wartet.`,"composer.send":`Senden`,"dictation.settings":`Mikrofon und Aufnahme`,"dictation.microphone":`Mikrofon`,"dictation.default":`Standard des Systems`,"dictation.mic":`Mikrofon {n}`,"dictation.showMics":`Namen der Mikrofone zeigen …`,"dictation.hold":`Halten zum Aufnehmen`,"dictation.holdToTalk":`Zum Sprechen gedrückt halten`,"date.pick":`Datum wählen`,"time.pick":`Uhrzeit wählen`,"time.hour":`Stunde`,"time.minute":`Minute`,"date.pickRange":`Tag oder Zeitraum wählen`,"date.pickStart":`Ersten Tag wählen`,"date.pickEnd":`Letzten Tag wählen – oder denselben für einen Tag`,"date.today":`Heute`,"date.clear":`Leeren`,"date.prev":`Voriger Monat`,"date.next":`Nächster Monat`,"connectors.title":`Connectors`,"connectors.hint":`Dienste, in denen ein Wizard für die Person arbeiten kann – sie verbindet beim Durchlauf ihr eigenes Konto. Die wichtigsten sind eingebaut; jeden weiteren findest du im Verzeichnis integrations.sh und importierst ihn aus seiner OpenAPI-Beschreibung oder seinem MCP-Server.`,"connectors.imported":`Aus dem Verzeichnis`,"connectors.noneImported":`Hier ist kein Connector aus dem Verzeichnis importiert.`,"connectors.notSetUp":`nicht eingerichtet`,"connectors.setup":`Auf dem Server fehlen:`,"connectors.search":`Dienst suchen, z. B. Notion, Stripe, GitHub`,"connectors.find":`Suchen`,"connectors.none":`Nichts gefunden.`,"connectors.import":`Importieren`,"connectors.exists":`Schon importiert.`,"connectors.ownClient":`Eigener OAuth-Client`,"connectors.refresh":`Aktionen neu laden`,"connectors.remove":`Entfernen`,"connectors.actions":`{n} Aktionen, {r} lesend`,"connectors.pending":`Aktionen erscheinen, sobald ein Konto verbunden ist`,"connectors.needsClient":`Dieser Dienst braucht einen OAuth-Client (ID und Secret). Entfernen und mit „Eigener OAuth-Client“ neu importieren.`,"connectors.authNone":`ohne Anmeldung`,"connectors.authOauth":`Anmeldung per OAuth`,"connectors.authKey":`API-Schlüssel`,"connectors.group.read":`liest`,"connectors.group.write":`ändert`,"connectors.group.destructive":`löscht`,"camera.missing":`An diesem Gerät wurde keine Kamera gefunden. Lade stattdessen ein Foto hoch.`,"camera.busy":`Die Kamera wird gerade von einer anderen App verwendet. Schließe sie und versuche es noch einmal.`,"location.unavailable":`Dein Gerät konnte den Standort gerade nicht bestimmen. Versuch es im Freien noch einmal oder tippe die Adresse ein.`,"location.timeout":`Das hat zu lange gedauert. Versuch es noch einmal oder tippe die Adresse ein.`,"install.add":`Zum Startbildschirm hinzufügen`,"install.ios":`Tippe unten auf „Teilen“ und dann auf „Zum Home-Bildschirm“.`,"install.bookmark":`Als Lesezeichen speichern`,"install.bookmark.mac":`Drücke ⌘ D, dann liegt dieser Wizard in deinen Lesezeichen.`,"install.bookmark.pc":`Drücke Strg + D, dann liegt dieser Wizard in deinen Lesezeichen.`,"install.app":`In der App öffnen`,"install.app.offer":`Installiere das Studio als App: eigenes Fenster, eigenes Symbol im Dock oder in der Taskleiste.`,"install.app.browser":`In Chrome oder Edge lässt sich das Studio als App installieren: eigenes Fenster, eigenes Symbol.`,"install.app.action":`Als App installieren`,"install.app.close":`Schließen`,"install.app.how.ios":`Tippe in Safari auf Teilen und dann auf „Zum Home-Bildschirm“. Das Studio liegt dann wie eine App auf deinem Home-Bildschirm.`,"install.app.how.mac":`Wähle in Safari „Ablage“ → „Zum Dock hinzufügen“. Das Studio bekommt ein eigenes Fenster und ein Symbol im Dock.`,"install.app.how.android":`Tippe in Chrome auf das Menü ⋮ und dann auf „App installieren“ oder „Zum Startbildschirm hinzufügen“.`,"install.app.how.chromium":`Klicke in der Adressleiste auf das Installieren-Symbol oder wähle im Menü „App installieren“. Das Studio bekommt ein eigenes Fenster und ein Symbol.`,"common.loading":`Lädt …`,"common.error":`Fehler`,"data.hint":`Tabellen und Seiten, die der Space und seine Wizards behalten.`,"data.all":`Alle Daten`,"data.own":`Allgemein`,"data.table":`Tabelle`,"data.page":`Seite`,"data.newTable":`Neue Tabelle`,"data.newPage":`Neue Seite`,"data.title":`Titel`,"data.owner":`Gehört zu`,"data.create":`Anlegen`,"data.empty":`Noch keine Tabellen und Seiten. Leg eine an – bald schreiben auch deine Wizards hier.`,"data.rows":`{n} Zeilen`,"data.addRow":`Zeile`,"data.noRows":`Noch keine Zeilen.`,"data.deleteRow":`Zeile löschen`,"data.deleteTable":`Tabelle löschen`,"data.deletePage":`Seite löschen`,"data.confirmDelete":`„{title}“ löschen?`,"data.newColumn":`Neue Spalte`,"data.columnName":`Name`,"data.columnType":`Typ`,"data.required":`Muss ausgefüllt werden`,"data.deleteColumn":`Spalte löschen`,"data.removeOption":`Entfernen`,"data.fromList":`Eine Liste des Wizards: jeder Durchlauf schreibt hier hinein. Die Spalten kommen aus dem Wizard.`,"data.badCell":`Dieser Wert passt nicht in „{column}“ und ist nicht gespeichert.`,"data.type.text":`Text`,"data.type.number":`Zahl`,"data.type.date":`Datum`,"data.type.duration":`Dauer`,"data.type.select":`Auswahl`,"data.type.boolean":`Ja / Nein`,"data.text.single":`Eine Zeile`,"data.text.multiline":`Mehrere Zeilen`,"data.number.integer":`Ganze Zahl`,"data.number.decimal":`Dezimalzahl`,"data.number.percent":`Prozent`,"data.number.currency":`Betrag`,"data.currency":`Währung (z. B. EUR)`,"data.date.date":`Datum`,"data.date.datetime":`Datum und Uhrzeit`,"data.date.time":`Uhrzeit`,"data.unit":`Eingabe in`,"data.unit.milliseconds":`ms`,"data.unit.seconds":`Sekunden`,"data.unit.minutes":`Minuten`,"data.unit.hours":`Stunden`,"data.unit.days":`Tage`,"data.options":`Auswahlmöglichkeiten, eine je Zeile`,"data.multiple":`Mehrere wählbar`,"data.write":`Schreiben`,"data.preview":`Vorschau`,"data.pageEmpty":`Diese Seite ist noch leer.`,"data.markdownHint":`Markdown: # Überschrift, **fett**, - Liste`,"space.holds.intro":`Ein Space bündelt, was zusammengehört – eine Firma, eine Marke oder ein Projekt. Jeder Wizard gehört zu genau einem Space.`,"space.holds.wizards":`Seine eigene Liste – die Startseite und die Suche zeigen nur sie.`,"space.holds.info":`Name, Logos, Farben und Fakten, die seine Wizards kennen.`,"space.holds.knowledge":`Dokumente, Tabellen und Seiten, die sich seine Wizards teilen.`,"space.holds.connectors":`Die Verbindungen, die seine Wizards nutzen.`,"space.holds.results":`Die Läufe seiner Wizards.`,"space.holds.shared":`Konto, Modelle und Plugins gelten für alle Spaces.`,"space.info":`Info & Marke`,"space.knowledge":`Wissen`,"space.data":`Daten`,"space.results":`Ergebnisse`,"space.resultsAll":`Alle Ergebnisse`,"space.resultsHint":`Läufe deiner Wizards, die ihr Ergebnis erreicht haben, die neuesten zuerst.`,"space.resultsEmpty":`Noch keine Ergebnisse. Ein Lauf steht hier, sobald er fertig ist.`,"space.resultCredits":`{n} Credits`,"space.resultsSearch":`Suchen: Wizard, Eingaben, Ergebnis …`,"space.resultsModeAll":`Live & Test`,"space.resultsAnyTime":`Jederzeit`,"space.resultsDay":`Letzte 24 Stunden`,"space.resultsDays":`Letzte {n} Tage`,"space.resultsNone":`Keine Ergebnisse zu dieser Suche.`,"space.resultFiles":`{n} Dateien`,"project.rename":`Space umbenennen`,"project.saving":`Speichert …`,"project.base":`Basis`,"project.baseHint":`Wer hinter den Wizards steht. Jeder KI-Schritt kennt das.`,"project.title":`Titel`,"project.titleHint":`Firma, Marke oder Vorhaben – so sehen es auch Endnutzer.`,"project.about":`Über`,"project.aboutHint":`Was ihr macht, für wen, und in welchem Ton ihr schreibt.`,"project.logos":`Logos`,"project.logosHint":`Das erste Logo sehen Endnutzer. Eine Beschreibung sagt, wofür eine Variante gedacht ist.`,"project.logoAdd":`Logo`,"project.logoMain":`Hauptlogo`,"project.logoMakeMain":`Als Hauptlogo`,"project.colors":`Farben`,"project.colorsHint":`Die erste Farbe ist der Akzent in Dokumenten, Dashboards und auf öffentlichen Seiten.`,"project.colorAdd":`Farbe`,"project.colorName":`z. B. Primär – Buttons und Überschriften`,"project.colorUse":`Beschreibe, wie engenty diese Farbe einsetzen soll.`,"project.colorAddTitle":`Farbe hinzufügen`,"project.colorValue":`Farbwert`,"project.colorUseLabel":`Verwendung`,"project.add":`Hinzufügen`,"project.colorAccent":`Akzent`,"project.colorFirst":`Als Akzent`,"project.assets":`Assets`,"project.assetsHint":`Bilder, Grafiken, Videos. KI-Schritte setzen sie in Dokumente und wählen nach der Beschreibung.`,"project.assetAdd":`Dateien`,"project.assetSearch":`Assets filtern …`,"know.all":`Alles`,"know.title":`Wissen`,"know.hint":`Was die Schritte deiner Wizards nachschlagen. Dokumente werden beim Hochladen zu Seiten und Tabellen; Kategorien halten die Einträge auseinander.`,"know.empty":`Noch nichts da. Lade Dokumente hoch, leg eine Seite an oder gib dem Assistenten eine Website.`,"know.drop":`Dokumente hierher ziehen oder`,"know.pick":`auswählen`,"know.page":`Seite`,"know.table":`Tabelle`,"know.faq":`FAQ`,"know.file":`Datei`,"know.category":`Kategorie`,"know.categories":`Kategorien`,"know.newPage":`Neue Seite`,"know.newTable":`Neue Tabelle`,"know.asFaq":`Als FAQ: Frage und Antwort je Zeile`,"know.newCategory":`Neue Kategorie`,"know.search":`Suche testen …`,"know.searchNone":`Nichts Relevantes gefunden.`,"know.searchStats":`{candidates} Kandidaten geprüft, {hits} relevant`,"know.searchUnchecked":`{hits} Treffer, ungeprüft`,"know.unchecked":`Ohne Classifier bleiben Treffer ungeprüft. Er braucht einen AI-Gateway- oder TypeSafe-Key oder ein Konto.`,"know.keywordsOnly":`Ohne Embedding-Modell findet die Suche nach Wörtern, nicht nach Bedeutung.`,"know.clear":`Zurücksetzen`,"know.sub":`{n} Unterseiten`,"know.rows":`{n} Zeilen`,"know.review":`Prüfen`,"know.reviewed":`Geprüft`,"know.from":`Aus {label}`,"know.kept":`Von Hand geändert: {label} schreibt sie nicht mehr.`,"know.original":`Original`,"know.reading":`Wird gelesen …`,"know.subPages":`Unterseiten`,"know.addSub":`Unterseite`,"know.type.choice":`Auswahl`,"know.type.date":`Datum`,"know.type.number":`Zahl`,"know.type.text":`Text`,"know.type.boolean":`Ja / Nein`,"know.name":`Name`,"know.type":`Typ`,"know.unit":`Einheit`,"know.unitHint":`z. B. h, €, kg`,"know.multiple":`Mehrere Werte je Eintrag`,"know.ordered":`Die Werte sind gestuft (niedrig → hoch)`,"know.values":`Werte`,"know.valuesHint":`Einer je Zeile. Weitere kommen mit den Einträgen dazu.`,"know.hintField":`Woher die Werte kommen`,"know.hintFieldHint":`Kurz, z. B. Kopfzeile, Dateiname, Filter der Website.`,"know.create":`Anlegen`,"know.proposed":`Vorgeschlagen`,"know.proposedHint":`Erst übernommen wird sie gefüllt.`,"know.accept":`Übernehmen`,"know.dismiss":`Verwerfen`,"know.alike":`„{a}“ und „{b}“ sehen nach einem Wert aus.`,"know.merge":`Zusammenführen`,"know.items":`{n} Einträge`,"know.item":`1 Eintrag`,"know.row":`1 Zeile`,"know.oneSub":`1 Unterseite`,"know.addValue":`Wert hinzufügen`,"know.range":`{min} bis {max}`,"know.summary":`Übersicht`,"know.summaryHint":`Ein Modell fasst die Einträge dieses Werts zusammen. Die Suche findet die Übersicht wie eine Seite.`,"know.summaryWrite":`Übersicht schreiben`,"know.summaryAgain":`Neu schreiben`,"know.summaryEmpty":`Noch keine Übersicht.`,"know.toc":`Inhaltsverzeichnis`,"know.tocRows":`{n} Zeilen in {table}`,"know.deleteCategory":`Kategorie löschen`,"know.confirmCategory":`„{name}“ löschen? Die Einträge bleiben, nur die Kategorie geht.`,"know.deleteValue":`Wert löschen`,"know.yes":`Ja`,"know.no":`Nein`,"know.minimum":`ab`,"know.maximum":`bis`,"know.contains":`enthält`,"know.by.person":`von Hand gesetzt`,"know.by.origin":`aus der Quelle`,"know.by.model":`von einem Modell gelesen`,"know.remove":`Entfernen`,"know.unset":`Nicht gesetzt`,"know.deleteFile":`Datei löschen`,"project.documents":`Dokumente`,"project.documentsHint":`PDFs, Listen, Excel, Word, Text. Sie werden gelesen und kommen in einen Index, den jeder KI-Schritt durchsucht.`,"project.documentAdd":`Dokumente`,"project.drop":`Hierher ziehen oder`,"project.staysLocal":`Bleibt in deiner lokalen Installation und wird nicht hierher gesendet.`,"project.description":`Beschreibung hinzufügen …`,"project.describing":`Wird angesehen …`,"project.reading":`Wird gelesen …`,"project.indexed":`Im Index`,"project.indexedKeywords":`Im Index (Stichwörter)`,"project.notIndexed":`Kein Text gefunden`,"project.reindex":`Neu einlesen`,"project.pages":`{n} Seiten`,"project.keywordsOnly":`Der Index sucht gerade nach Stichwörtern. Mit einem AI-Gateway- oder OpenAI-Schlüssel kommt die Suche nach Bedeutung dazu.`,"project.preview":`Vorschau`,"project.viewList":`Als Liste zeigen`,"project.viewCards":`Als Karten zeigen`,"project.original":`Original`,"project.readText":`Gelesener Text`,"project.openOriginal":`Original öffnen`,"project.noText":`Noch kein Text: das Dokument wird gerade gelesen oder ließ sich nicht lesen.`,"project.textCut":`Die Vorschau zeigt den Anfang ({shown} von {total} Zeichen).`,"project.searchTest":`Im Index suchen …`,"project.searchNone":`Nichts gefunden.`,"project.remove":`Entfernen`,"project.removeConfirm":`„{name}“ entfernen?`,"project.facts":`Fakten`,"project.factsHint":`Was Wizards wissen sollen: Adresse, UID, Öffnungszeiten – alles, was passt.`,"project.factLabel":`Bezeichnung`,"project.factValue":`Wert`,"project.factAdd":`Eintrag`,"project.factType":`Typ`,"project.factAuto":`Automatisch`,"project.type.text":`Text`,"project.type.longtext":`Langer Text`,"project.type.number":`Zahl`,"project.type.date":`Datum`,"project.type.url":`Link`,"project.type.email":`E-Mail`,"project.type.phone":`Telefon`,"project.type.boolean":`Ja / Nein`,"project.yes":`Ja`,"project.no":`Nein`,"assistant.name":`Assistent`,"assistant.ask":`Frag den Assistenten`,"assistant.open":`Assistent öffnen`,"assistant.sees":`Sieht: {page}`,"assistant.menu":`Chat-Menü`,"assistant.newChat":`Neuer Chat`,"assistant.earlier":`Frühere Chats`,"assistant.noEarlier":`Noch keine früheren Chats.`,"assistant.untitled":`Ohne Titel`,"assistant.summarising":`Fasst den Chat zusammen …`,"assistant.readOnly":`Ein früherer Chat, nur zum Lesen. Der Assistent kennt seine Zusammenfassung.`,"assistant.back":`Zurück`,"assistant.layoutBottom":`Unten andocken`,"assistant.layoutSidebar":`Als Seitenleiste`,"assistant.minimize":`Klein machen`,"assistant.close":`Zuklappen`,"assistant.helloTitle":`Wie kann ich helfen?`,"assistant.hello":`Ich kenne engenty wizards und sehe, was du gerade siehst. Frag mich, wie etwas geht – ich zeige es dir auch.`,"assistant.composer":`Frag etwas oder sag, was du brauchst …`,"assistant.filesNeedSpace":`Dateien kommen in einen Space – hier lässt sich keiner ändern.`,"assistant.talk":`Sprechen`,"assistant.live":`Live-Chat`,"assistant.liveListening":`Hört zu`,"assistant.liveThinking":`Denkt nach`,"assistant.liveSpeaking":`Spricht`,"assistant.liveMuted":`Stumm`,"assistant.mute":`Mikrofon aus`,"assistant.unmute":`Mikrofon an`,"assistant.end":`Beenden`,"assistant.naturalVoice":`Natürliche Stimme (Sprachmodell)`,"assistant.gotIt":`Verstanden`,"assistant.tool.navigate":`Geöffnet: {where}`,"assistant.tool.highlight":`Markiert: {what}`,"assistant.tool.look":`Seite angesehen`,"assistant.tool.read":`Gelesen: {what}`,"assistant.tool.fill":`Eingetragen: {what}`,"assistant.tool.docs":`In der Anleitung gelesen`,"assistant.tool.gallery":`In der Galerie gesucht`,"assistant.tool.account":`Konto nachgesehen`,"assistant.tool.chats":`Frühere Chats durchsucht`,"assistant.tool.space":`Wizards und Läufe nachgesehen`,"assistant.tool.models":`Modelle nachgesehen`,"assistant.suggest.what":`Was kann ich mit engenty wizards machen?`,"assistant.suggest.models":`Zeig mir, wo ich die Modelle einstelle`,"assistant.suggest.credits":`Wie viele Credits habe ich noch?`,"assistant.suggest.modelsNow":`Was denkt hier gerade, und was fehlt?`,"assistant.suggest.modelsMissing":`Warum kann hier kein Video entstehen?`,"assistant.suggest.modelsCost":`Was kostet mich welcher Weg?`,"assistant.suggest.accountWhy":`Wozu brauche ich ein Konto?`,"assistant.suggest.plans":`Welche Pläne gibt es, und was kosten sie?`,"assistant.suggest.integrateWhat":`Was kann ich aus Claude oder Cursor heraus machen?`,"assistant.suggest.integrateClaude":`Wie binde ich Claude Desktop ein?`,"assistant.suggest.connectorsWhat":`Wofür sind Connectors gut?`,"assistant.suggest.connectorsAdd":`Verbinde diesen Dienst: `,"assistant.suggest.readSite":`Lies unsere Website `,"assistant.suggest.missing":`Was fehlt dem Space noch?`,"assistant.suggest.facts":`Wofür brauchen die Wizards die Fakten?`,"assistant.suggest.knowledgeHow":`Wie kommt Wissen in den Space?`,"assistant.suggest.knowledgeSite":`Lies diese Website ins Wissen: `,"assistant.suggest.knowledgeCategories":`Wofür sind Kategorien gut?`,"assistant.suggest.dataWhat":`Was steht in diesen Daten?`,"assistant.suggest.dataWho":`Welcher Wizard füllt welche Tabelle?`,"assistant.suggest.dataEdit":`Wie ändere ich eine Spalte?`,"assistant.suggest.resultsFailed":`Welche Läufe sind zuletzt fehlgeschlagen?`,"assistant.suggest.resultsCost":`Was hat diesen Monat am meisten Credits gekostet?`,"assistant.suggest.resultsShare":`Wie teile ich ein Ergebnis?`,"project.assistantTitle":`Erzähl mir von euch`,"project.assistantHello":`Nenn mir eure Website oder gib mir Dateien. Ich trage ein, was ich finde: Titel, Beschreibung, Logo, Farben und Fakten.`,"project.assistantComposer":`z. B. „Lies unsere Website example.at“ …`,"project.assistantTitleKnowledge":`Was sollen deine Wizards wissen?`,"project.assistantHelloKnowledge":`Gib mir Dokumente oder sag mir, wo das Wissen steht. Ich lese es ein – auf dieser Seite siehst du, was hineinkommt.`,"project.assistantComposerKnowledge":`Dokumente anhängen oder sagen, wo das Wissen steht …`,"project.assistantChanged":`Space aktualisiert`,"flowApp.loading":`Der Wizard kommt …`,"flowApp.broken":`Das lässt sich hier nicht zeigen.`,"flowApp.draft":`Entwurf`,"flowApp.published":`Veröffentlicht`,"flowApp.issues":`{n} Fehler im Entwurf`,"flowApp.flow":`Ablauf`,"flowApp.notPublished":`Veröffentliche ihn im Studio, dann läuft er hier.`,"flowApp.runPage":`Im Browser weiter`,"flowApp.inBrowser":`Nur im Browser: {fields}`,"flowApp.done":`Fertig`,"flowApp.credits":`{n} Credits`,"flowApp.ask":`Der Wizard fragt`,"flowApp.allow":`Erlauben`,"flowApp.skip":`Überspringen`,"flowApp.signIn":`Eine Anmeldung bei {site} – das geht nur im Browser.`,"flowApp.fullscreen":`Größer`,"flowApp.inline":`Kleiner`,"flowApp.failed":`Das hat nicht geklappt: {error}`},ta={...Ji.en,"brand.tagline":`Build AI wizards, no code.`,"brand.sub":`Describe a flow in your own words. engenty turns it into a wizard you share with a link.`,"auth.dev":`Dev login (local)`,"auth.legal":`No password, no sign-up form — you sign in with an account you already have.`,"auth.signIn":`Sign in or create an account`,"auth.failed":`Sign-in did not work. Please try again.`,"auth.localTitle":`This browser is not signed in`,"auth.localWhy":`The studio runs on your computer and lets in only a browser that opened its link. That sign-in is missing here – maybe the cookies were cleared, or another studio on this computer (another address on localhost) replaced it.`,"auth.localLink":`Run this in a terminal — it opens the studio and signs this browser in:`,"auth.localStartLink":`Or open the link the app printed at its start (“Open the studio: …/api/local/enter?k=…”). It works once per start.`,"auth.wrongHost":`The studio runs at another address`,"auth.wrongHostWhy":`The app on this computer answers only at its own address – that keeps other web pages out. Open the studio there:`,"auth.unreachable":`The app is not answering`,"auth.unreachableWhy":`The studio is at {address}, but the app behind it gives no answer – it may be restarting or stopped. This page keeps trying.`,"nav.account":`Account & credits`,"setup.keysInAccount":`API keys for scripts belong to your account. You create and revoke them there.`,"setup.openAccount":`Open account`,"class.label":`Model class`,"class.classifier":`Classifier`,"class.standard":`Standard`,"class.high":`High`,"class.highest":`Highest`,"class.image":`Image`,"class.video":`Video`,"class.audio":`Audio`,"class.speech":`Speech`,"class.classifier.hint":`Routing, yes/no, pulling a few values out of text. Cheapest.`,"class.standard.hint":`Short copy, calling an API, reformatting.`,"class.high.hint":`Research with tools, long documents, weighing many sources.`,"class.highest.hint":`Hard reasoning or code. Several times the cost of High.`,"class.effort":`Thinking effort`,"class.effortAuto":`Automatic`,"class.effort.low":`Low`,"class.effort.medium":`Medium`,"class.effort.high":`High`,"estimate.step":`≈ {n} credits, rarely more than {high}`,"estimate.measured":`measured from the latest runs`,"estimate.formula":`estimated, gets exact after five runs`,"estimate.share":`A run costs about {run} credits. At the daily limit that is at most {day} credits a day.`,"local.title":`Models`,"local.accountWaiting":`Waiting for the sign-in in your browser …`,"local.accountFailed":`The account service cannot be reached right now.`,"local.accountExpired":`The sign-in has expired. Please sign in again.`,"local.sourceNeedsAccount":`This needs an account.`,"local.toAccount":`Go to Settings → Account`,"local.sourceOwn":`Own keys`,"local.keys":`Keys`,"local.keysHint":`One key is enough. Keys live in this device's keychain, never in the database.`,"local.keySet":`stored`,"local.keyEmpty":`not stored`,"local.keyRemove":`Remove`,"local.classes":`Model per class`,"local.classesHint":`A step names only the class. Here is which model serves it, e.g. anthropic/claude-haiku-4.5, openai:gpt-5.4-mini or ollama:qwen3.`,"local.save":`Save`,"local.saved":`Saved`,"local.chat":`The studio chat answers on`,"local.chatModels":`Model class Highest`,"local.chatClaude":`Claude subscription (Claude Code)`,"local.subscription":`With the subscription, the Claude Code installed on this device builds the wizard — on your sign-in there. Runs keep using keys or credits.`,"harness.hint":`Text thinks on the {name} installed on this device — on your {sub} and your sign-in there. No key needed. Images, video and audio still need a key.`,"harness.hintImages":`Text and images come from the {name} installed on this device — on your {sub} and your sign-in there. No key needed. Video and audio still need a key.`,"harness.found":`{name} {version} found`,"harness.missing":`{name} is not installed on this device.`,"harness.install":`Or in your own terminal:`,"harness.installButton":`Install {name}`,"harness.installing":`{name} installs in the terminal below — it takes about a minute. Then you sign it in.`,"harness.installEnded":`The install ended, but {name} is not there. What it printed above says why.`,"harness.appHere":`The {app} app is on this computer: {name} signs in with the same {sub}.`,"harness.notInstalled":`not installed`,"harness.authSubscription":`Signed in with your {sub}.`,"harness.authKey":`Signed in with an API key from your shell — not the subscription. Sign in here so it runs on your {sub}.`,"harness.authNone":`Not signed in yet.`,"harness.signIn":`Sign in here`,"harness.signingIn":`The sign-in runs in the terminal below — your browser opens for it. The terminal closes once the sign-in is there.`,"harness.signInInteractive":`{name} starts below. Pick the sign-in with your {sub} there and sign in in the browser. The terminal closes once the sign-in is there.`,"harness.loginEnded":`The sign-in ended without {name} being signed in.`,"harness.sub.claude":`Claude subscription`,"harness.sub.codex":`ChatGPT subscription`,"harness.sub.gemini":`Google account`,"harness.sub.cursor":`Cursor subscription`,"harness.desc.claude":`On your Claude subscription — no key needed.`,"harness.desc.codex":`On your ChatGPT subscription — no key needed.`,"harness.desc.gemini":`On your Google account — no key needed.`,"harness.desc.cursor":`On your Cursor subscription — no key needed.`,"harness.ready":`signed in`,"local.recheck":`Check again`,"local.test":`Test`,"local.testHint":`One short call shows whether the way to the model is open.`,"local.testOk":`Answered in {s} s on {ref}: “{reply}”`,"local.testFailed":`The test did not work: {error}`,"models.groupCaps":`Capabilities`,"models.groupAccess":`Access`,"models.groupMore":`More providers`,"models.cap.text":`Text & reasoning`,"models.cap.text.hint":`Writes, summarizes, researches and decides – in almost every step.`,"models.cap.image":`Images`,"models.cap.image.hint":`Makes images: logos, product shots, illustrations.`,"models.cap.video":`Videos`,"models.cap.video.hint":`Makes short clips from text or from an image.`,"models.cap.speech":`Voice`,"models.cap.speech.hint":`Reads text aloud: voice-overs, audio versions, announcements.`,"models.cap.listening":`Voice notes`,"models.cap.listening.hint":`Understands speech and turns voice notes into text.`,"models.way.local":`Local model`,"models.way.credits":`Credits`,"models.way.creditsTeam":`Team credits`,"models.way.none":`not set up`,"models.who":`Who does it?`,"models.optSubscription":`Your subscription`,"models.optKey":`Own API key`,"models.optLocal":`Local model`,"models.optLocalNote":`Ollama on this computer`,"models.optApple":`Apple Intelligence`,"models.optAppleNote":`on this Mac, offline`,"models.appleOff":`switched off – System Settings → Apple Intelligence & Siri`,"models.appleLoading":`Apple is still loading the model`,"models.appleDevice":`not on this Mac`,"models.appleHint":`Short texts and decisions (Classifier, Standard) think on Apple Intelligence's model on this Mac; nothing leaves it. Research, long documents and code (High, Highest): {way}.`,"models.appleListenHint":`This Mac writes voice notes down itself; nothing leaves it. The first time, Apple fetches the language.`,"models.noteIncluded":`included in the plan`,"models.noteSignedOut":`not signed in`,"models.noteMissing":`not installed`,"models.noteKey":`API key stored`,"models.noteKeyShort":`key`,"models.noteSignedIn":`signed in`,"models.noteShellKey":`API key from the shell`,"models.optOther":`Other`,"models.optCreditsGroup":`engenty`,"models.noteNoKey":`API key missing`,"models.noteNeedsAccount":`needs an account`,"models.notePerImage":`≈ {n} credits per image`,"models.notePerSecond":`≈ {n} credits per second`,"models.notePer1k":`≈ {n} credits per 1000 characters`,"models.notePerMinute":`≈ {n} credits per minute`,"models.creditsAuto":`engenty picks: {model}`,"models.creditsAutoNone":`engenty picks the model`,"models.creditsPickHint":`Billed in credits – no API key of your own.`,"models.viaCredits":`{name} on engenty credits`,"models.viaCreditsHint":`No API key of your own, billed in credits.`,"models.viaCreditsNeedsAccount":`With an engenty account, billed in credits.`,"models.noteUsage":`credits by usage`,"models.model":`Model`,"models.modelCustom":`Another model …`,"models.textSimple":`Simple steps`,"models.textDemanding":`Demanding steps`,"models.perClass":`Adjust per class`,"models.manageKey":`{name} API key`,"models.key":`API key`,"models.keyFor":`{name} API key`,"models.keyGet":`Get a key from {name}`,"models.keySave":`Check and save`,"models.keyStored":`API key stored`,"models.keyNone":`No API key`,"models.keyCheck":`Check`,"models.keyReplace":`Replace`,"models.keyRemove":`Remove`,"models.keyOk":`The key works.`,"models.keyBad":`The key was not accepted.`,"models.keyWhereLocal":`The key stays on this device, never in the database.`,"models.keyWhereCloud":`The key is kept encrypted for the team. Nobody sees it again.`,"models.keyFallback":`Until the key is there, credits step in.`,"models.uses":`Used for`,"models.useFor":`Use`,"models.inUse":`in use`,"models.try":`Try it`,"models.try.text":`Test`,"models.try.image":`Make a test image`,"models.try.video":`Make a test clip`,"models.try.speech":`Hear a sample`,"models.try.listening":`Test listening`,"models.tryCost":`Costs like a real call.`,"models.tryCostVideo":`A 4-second clip – costs like a real one.`,"models.tryWait":`Generating …`,"models.tryWaitVideo":`A clip takes a minute or two …`,"models.tryOk":`In {s} s with {model}`,"models.tryHeard":`Heard: “{text}”`,"models.tryHeardNothing":`Nothing heard – the way is open.`,"models.tryFailed":`That did not work: {error}`,"models.creditsName":`engenty credits`,"models.creditsTeam":`Team credits`,"models.creditsLocalLead":`Step in where no subscription and no own API key is set up.`,"models.creditsCloudHint":`Everything without an own API key runs on the credits. Own keys come first and cost no credits.`,"models.creditsConnectTitle":`With an account`,"models.creditsLocalHint":`With an engenty account, credits step in where nothing of your own is set up – for videos without an own API key, say.`,"models.creditsConnect":`Connect an account`,"models.creditsFallback":`Credits step in`,"models.creditsFallbackOn":`What has no subscription and no own API key runs on the credits.`,"models.creditsFallbackOff":`Off: what has no subscription and no own API key does not run.`,"models.creditsOn":`Runs on credits`,"models.creditsNone":`Nothing runs on credits right now.`,"models.creditsTopUp":`Top up`,"models.creditsPicks":`engenty picks the model and bills in credits.`,"models.creditsModel":`Right now: {model}.`,"models.clientSignIn":`Sign-in`,"models.clientImages":`{name} makes images with your {sub} – no API key of your own.`,"models.clientNotChosen":`Text does not run on {name} right now.`,"models.ollamaHint":`Where Ollama runs and the model it serves.`,"models.readOnly":`Only the team's admins change its models.`,"models.viewAs":`Preview as`,"models.view.auto":`as it is`,"models.view.local":`local`,"models.view.linked":`local + account`,"models.view.cloud":`cloud studio`,"setup.title":`Setup`,"setup.sub":`engenty can use your existing accounts on your computer.`,"setup.source":`Choose your Engine`,"setup.local":`Runs locally on this device.`,"setup.stage.connect":`Connect`,"setup.stage.test":`Test`,"setup.stage.done":`Done`,"setup.h.install":`Install {name}`,"setup.h.signIn":`Sign in to {name}`,"setup.h.keys":`Enter a key`,"setup.h.test":`One short test`,"setup.h.done":`Connected.`,"setup.ready":`All set.`,"setup.noHarness":`No AI client installed yet. Pick one — it installs right here — or enter your own keys.`,"setup.ownDesc":`AI Gateway, OpenAI, Anthropic or Ollama.`,"setup.appleDesc":`The model on this Mac – no account, no internet.`,"setup.appleHint":`Apple Intelligence thinks short texts and decisions on this Mac; nothing leaves it. For research, long documents and code, add another way later under Settings → Models.`,"setup.appleHintKeeps":`Apple Intelligence thinks short texts and decisions on this Mac; nothing leaves it. Research, long documents and code (High, Highest) stay as they were: {way}.`,"setup.recommended":`Recommended`,"setup.done":`Open the studio`,"setup.untilWorks":`The studio opens once the test works.`,"cloud.onPublish":`When you publish the wizard, the version also goes to your account's cloud and runs there behind a link of its own.`,"cloud.notSent":`This version is not in the cloud yet.`,"cloud.send":`Send now`,"cloud.resend":`Send again`,"cloud.again":`It is tried again at {when}.`,"cloud.sent":`Version {v} · sent {when}`,"cloud.notRunnable":`Version {v} does not run in the cloud.`,"cloud.keepsRunning":`Version {v} keeps running there.`,"cloud.nothingRuns":`So nothing runs there yet.`,"cloud.notes":`What runs differently in the cloud:`,"cloud.check":`What the cloud would lack for the wizard as it is now:`,"cloud.checkBlocking":`As it is now, the wizard would not run in the cloud:`,"cloud.documents":`The space's documents stay on this device. In the cloud the steps work without them.`,"cloud.stepName":`“{title}”`,"cloud.problem.sandbox":`The server has no machine for code. There it works without one.`,"cloud.problem.mcp":`The space's MCP servers are not on the server: {detail}.`,"cloud.problem.model":`The cloud has no model for this.`,"cloud.problem.connector":`The space lacks a connector in the cloud.`,"cloud.problem.invalid":`The server does not take the wizard like this.`,"cloud.spaceLimit":`Your account's cloud already holds the space of another install:`,"cloud.replace":`Replace that space`,"cloud.replaceConfirm":`Remove that space from the cloud? Its wizards and their links go from there. Then everything published here is sent.`,"cloud.noticeError":`Published here. This version did not arrive in the cloud — see below.`,"cloud.noticeNotRunnable":`Published here. This version does not run in the cloud — see below.`,"readonly.wizard":`This wizard comes from your local install and is changed there. What you publish there runs here.`,"readonly.project":`This space comes from your local install and is changed there.`,"readonly.server":`Nothing is built on this server. The wizards your local install publishes run here.`,"nav.wizards":`Wizards`,"nav.settings":`Settings`,"nav.project":`Space`,"nav.switchSpace":`Switch space`,"nav.addSpace":`Add space`,"nav.wizardCount":`{n} wizards`,"appbar.position":`Position`,"appbar.left":`Left`,"appbar.top":`Top`,"appbar.right":`Right`,"appbar.bottom":`Bottom`,"appbar.theme":`Colour scheme`,"appbar.light":`Light`,"appbar.dark":`Dark`,"appbar.system":`Like the system`,"account.title":`Account`,"account.hint":`What the app calls you and how to reach you.`,"account.initials":`Your initials in the menu at the top right: the first letters of your name.`,"account.name":`Name`,"account.nameHint":`It starts as this device's user name.`,"account.fromAccount":`Name and e-mail come from your account.`,"account.about":`About you`,"account.aboutHint":`Who you are and what you do.`,"account.email":`E-mail`,"account.phone":`Phone`,"account.connection":`engenty.ai`,"account.connectionHint":`Sign-in, credits and the cloud that runs your wizards for everyone.`,"account.profile":`Profile`,"account.local":`Local install`,"account.localText":`This app runs on your device and is not connected to an account. Wizards, the space and files stay here.`,"account.linked":`Connected`,"account.with":`With an account`,"account.withCredits":`Credits for the models where no AI client is installed. No API key needed.`,"account.withCloud":`What you publish also runs on engenty.ai, behind a public link, even when this device is off.`,"account.signIn":`Sign in`,"account.signInAgain":`Sign in again`,"account.new":`No account yet?`,"account.newHint":`A new account needs an invitation code. Enter it here and the sign-up page has it filled in.`,"account.code":`Invitation code`,"account.create":`Create account`,"account.credits":`Credits`,"account.topUp":`Top up`,"account.expires":`{n} credits valid until {date}`,"account.kind.start":`Starting credits`,"account.kind.monthly":`Monthly credits`,"account.kind.gift":`Gift`,"account.cloud":`What you publish here also runs on {host}.`,"account.look":`Appearance`,"account.lookHint":`Language and theme of the app in this browser.`,"nav.logout":`Sign out`,"nav.connected":`Connected to {host}`,"nav.expired":`Sign-in expired`,"nav.onlyHere":`Only on this computer`,"nav.local":`local`,"nav.language":`Language`,"nav.theme":`Theme`,"nav.credits":`{n} credits`,"footer.billing":`Credits`,"footer.usage":`Usage`,"footer.invoices":`Invoices`,"footer.account":`Account`,"about.version":`Version {v}`,"about.title":`About engenty wizards`,"about.kind.script":`Local install`,"about.kind.checkout":`Development checkout`,"about.kind.npm":`Installed with npm`,"about.kind.cloud":`In the cloud`,"about.update.check":`Check for updates`,"about.update.checking":`Checking for updates …`,"about.update.upToDate":`You are up to date.`,"about.update.checkedAt":`last checked {when}`,"about.update.unknown":`Could not check – no connection to GitHub?`,"about.update.off":`Checking for updates is switched off.`,"about.update.manual":`This install does not update itself: get the new version where you installed it.`,"about.tab.new":`What's new`,"about.tab.earlier":`Versions`,"about.changes":`{n} changes`,"about.change":`1 change`,"about.update.available":`Version {v} of engenty wizards is out.`,"about.update.install":`Update`,"about.update.installing":`Installing version {v} …`,"about.update.restarting":`Restarting with version {v} …`,"about.update.done":`Installed. Restart engenty wizards to use {v}.`,"about.update.failed":`The update failed. Logs: logs/update.log`,"about.update.notes":`What's new`,"about.changelog":`Changelog`,"about.changelogHint":`What changed from release to release.`,"about.changelogEmpty":`Nothing here yet.`,"about.unreleased":`Unreleased`,"about.breaking":`breaking`,"about.credits":`Credits`,"about.creditsHint":`engenty wizards and the open-source software it builds on.`,"about.creditsProduct":`engenty`,"about.creditsBuiltWith":`Built with`,"about.creditsDeps":`Direct dependencies`,"about.creditsDepsHint":`What the parts of this app include themselves, with version and license — without their own dependencies.`,"about.creditsShared":`Used by more than one part`,"about.search":`Search …`,"about.noMatches":`No matches.`,"theme.dark":`Dark theme`,"theme.light":`Light theme`,"home.title":`Your wizards`,"home.search":`Search your wizards`,"home.noMatch":`None of your wizards goes by that.`,"home.newFromSearch":`Build a new wizard: “{q}”`,"home.new":`New wizard`,"home.import":`Import`,"import.failed":`The import did not work`,"home.empty":`No wizards in this space yet.`,"home.live":`Live`,"home.draft":`Draft`,"where.here":`Local`,"where.hereVersion":`Local · version {v}`,"where.hereHint":`Runs only on this computer, while the app is running.`,"where.liveHint":`Runs on {host}, for everyone with the link.`,"where.liveAt":`Live on {host} · version {v}`,"where.note":`1 note`,"where.notes":`{n} notes`,"where.sending":`Being sent`,"where.missing":`Not in the cloud`,"home.steps":`{n} steps`,"home.all":`All`,"home.newProject":`New space`,"home.projectName":`Space name`,"home.projectLimit":`At most {n} spaces`,"team.title":`Team`,"team.hint":`Who is in the team and which plan it is on. Inviting and managing happens in the account.`,"team.plan":`Plan`,"team.planFree":`Free`,"team.seats":`{taken} of {limit} seats`,"team.seatsUnlimited":`Unlimited seats`,"team.members":`Members`,"team.invited":`invited`,"team.you":`you`,"team.manage":`Manage members`,"team.changePlan":`See plans`,"team.roles":`Owners and admins create and delete wizards and spaces; members edit the wizards there are.`,"team.memberNote":`You are a member: you edit wizards, admins create new ones and delete.`,"team.failed":`The team could not be loaded.`,"team.role.owner":`Owner`,"team.role.admin":`Admin`,"team.role.member":`Member`,"models.ownKeysPlan":`Your own API keys come with the Pro plan. Here the team's credits pay.`,"home.fromLocal":`From your local install — changed there.`,"home.syncedAt":`Last arrived: {when}.`,"home.local.title":`The wizards from your local install run here`,"home.local.text":`You build on your own computer. What you publish there runs here — for everyone, behind a link.`,"home.local.install":`Install engenty wizards on your computer:`,"home.local.signIn":`Sign in there with this account, under Settings → Account.`,"home.local.publish":`Publish a wizard. It then shows up here.`,"new.title":`What should your wizard do?`,"new.placeholder":`e.g. Customers enter their product and audience, the wizard researches competitors and writes a positioning briefing as a PDF.`,"new.build":`Build wizard`,"new.orStarter":`Or start from a template`,"new.import":`Import a wizard package`,"new.hint":`You can change everything afterwards in the conversation.`,"new.runsAs":`Runs as`,"new.where":`Where should it run?`,"new.web":`In the browser`,"new.phone":`On the phone`,"new.messages":`By message`,"new.off":`off`,"new.ch.steps":`Step-by-step wizard`,"new.ch.chat":`Chat`,"new.ch.talk":`Live voice`,"new.ch.video":`Video call`,"new.ch.call":`Call`,"new.ch.sms":`SMS`,"new.ch.whatsapp":`WhatsApp`,"new.callHandoff":`What a call cannot do goes out by SMS.`,"new.similar":`Already there, or close`,"new.yours":`Yours`,"new.template":`Template`,"new.open":`Open`,"new.take":`Use`,"new.more":`{n} more …`,"new.dropHint":`Drop to attach`,"editor.resize":`Resize — double-click resets`,"editor.resizeSheet":`Resize — tap folds and unfolds`,"editor.export":`Export as a package (.wizard)`,"addStep.title":`What should happen here?`,"addStep.placeholder":`For example: a map of all the objects found, with the price as colour`,"addStep.kind":`Kind of step`,"addStep.auto":`AI picks`,"addStep.empty":`Describe what the step should do first.`,"addStep.busy":`The assistant is still working on the last message. Try again in a moment.`,"addStep.emptyStep":`Insert empty`,"addStep.cancel":`Cancel`,"addStep.create":`Create`,"addStep.building":`Building the new step …`,"addStep.showChat":`See it in the conversation`,"addStep.add":`Add step`,"surface.preview":`Preview`,"surface.code":`Code`,"surface.sampleNote":`With sample data – a run shows its own.`,"surface.sampleText":`Sample text`,"surface.sampleBrand":`Your company`,"addStep.when":`When?`,"addStep.always":`Always`,"addStep.onlyIf":`Only if …`,"addStep.aiDecides":`AI decides …`,"addStep.ifPlaceholder":`For example: revenue below 100`,"addStep.askPlaceholder":`For example: the person wants a refund`,"addStep.whenEmpty":`Say when the step should come.`,"addStep.messageIf":`Only if: {text} – otherwise the run goes on after “{from}” as before.`,"addStep.messageAsk":`AI decides: {text} – otherwise the run goes on after “{from}” as before.`,"addStep.here":`Add a step here`,"addStep.between":`Between “{before}” and “{after}”`,"addStep.after":`After “{title}”`,"addStep.first":`As the first step, before “{title}”`,"addStep.message":`New step · {place}`,"addStep.messageAs":`New step ({kind}) · {place}`,"widget.missing":`The widget isn't built yet.`,"widget.what":`What should the widget show? (optional)`,"widget.build":`Let the assistant build it`,"widget.upload":`Upload your own HTML`,"widget.buildMessage":`Please build the widget “{title}”. {what}`,"editor.chat":`Conversation`,"editor.dropToAttach":`Drop to attach to your message`,"editor.memory":`Memory`,"memory.explain":`What the wizard knows across all its runs: notes that AI steps with the “pages” tool read and add to, and the tables of its shared lists. The same data is under Data in your space.`,"memory.unused":`No step uses the memory yet. Ask the assistant to have an AI step remember something.`,"memory.none":`Nothing remembered yet.`,"memory.add":`Note`,"memory.newNote":`Note`,"memory.back":`Memory`,"memory.testCopy":`Test runs read the memory but write into a copy of their own, which goes with the run.`,"editor.step":`Steps`,"editor.runs":`Runs`,"editor.reviewEditable":`editable`,"editor.reviewRedo":`can be redone`,"editor.otherwise":`otherwise`,"editor.next.title":`Next step`,"editor.next.ways":`Next step · {count} ways`,"editor.next.open":`Open step`,"editor.next.then":`Then`,"editor.next.fold":`Fold`,"editor.next.unfold":`Show in brief`,"editor.branch.ai":`AI`,"editor.branch.addWhen":`Condition`,"editor.branch.when":`Go on when`,"editor.branch.pick":`Pick …`,"editor.branch.and":`and`,"editor.branch.statement":`Statement`,"editor.branch.none":`None clearly holds`,"editor.branch.how":`Decided by a decision model (Jev) where there is a way to one, otherwise by the classifier class's language model. If the two most probable answers are less than 10 points apart, "none" holds.`,"editor.branch.lastRun":`In the last test run decided by {source}.`,"editor.branch.bySystemOne":`a decision model`,"editor.branch.byLlm":`the language model`,"editor.branch.notYet":`A test run shows here how the AI decided.`,"editor.branch.end":`End`,"editor.branch.max":`At most this often (otherwise 10)`,"editor.branch.remove":`Remove branch`,"editor.branch.addAsk":`AI decides`,"editor.branch.newAsk":`The person wants …`,"editor.whenFilled":`{field} filled in`,"editor.whenEmpty":`{field} empty`,"editor.whenContains":`{field} contains {value}`,"editor.whenAsk":`decides: {text}`,"editor.surfaceJson":`View (JSON)`,"editor.fieldAsk":`Or: show when the AI finds this true …`,"editor.atMost":`at most {count}×`,"editor.shownWhen":`Show only when`,"editor.shownAlways":`Always show`,"editor.conditionValue":`Value`,"editor.optionsFrom":`Choices from earlier data`,"editor.optionsFixed":`Fixed choices`,"editor.op.equals":`is`,"editor.op.notEquals":`is not`,"editor.op.in":`is one of`,"editor.op.notEmpty":`is filled in`,"editor.op.empty":`is empty`,"editor.op.gt":`greater than`,"editor.op.lt":`less than`,"editor.op.contains":`contains`,"editor.conditionsMore":`and {count} more conditions`,"tool.web_search":`Web search`,"tool.web_fetch":`Read web pages`,"tool.browser":`Browser`,"tool.sandbox":`Code & shell`,"tool.image":`Images`,"tool.http":`API`,"tool.pages":`Pages`,"editor.test":`Test`,"editor.share":`Share`,"editor.publish":`Publish`,"editor.published":`Live · version {v}`,"editor.unpublishedChanges":`Unpublished changes`,"editor.notPublished":`Not published yet`,"editor.composer":`Describe what should change …`,"editor.attach":`Attach files`,"editor.detach":`Remove`,"editor.attached":`Attached`,"editor.thread":`Thread`,"editor.voice":`Dictate`,"editor.voiceStop":`Stop dictating`,"editor.listening":`Listening …`,"editor.transcribing":`Writing it down …`,"editor.micDenied":`The microphone is not allowed for this page.`,"editor.building":`Building the flow …`,"editor.files":`Files`,"files.explain":`What your wizard needs on every run: widget code, libraries, map outlines, price lists. The assistant creates them in the chat – you can upload your own too.`,"files.upload":`Upload`,"files.drop":`Drop to upload`,"files.count":`{n} files · {size}`,"files.empty":`No files yet. Drop files here or ask the assistant to build a widget.`,"files.download":`Download`,"files.delete":`Delete`,"files.confirmDelete":`Delete “{path}”?`,"files.none":`This wizard has no files.`,"editor.thinking":`Thinking …`,"editor.chatBroken":`The connection dropped. What was already built is saved – please send your message again.`,"editor.issues":`Before you test or share, the wizard needs a few fixes:`,"editor.fixWithChat":`Let the assistant fix it`,"editor.models.blocking":`The wizard can't start like this. Models are missing:`,"editor.models.optional":`These steps won't run like this. Choose a path without them when testing, or set up the models:`,"editor.models.settings":`Set up models`,"editor.prevStep":`Previous step`,"editor.nextStep":`Next step`,"editor.deleteStep":`Delete step`,"editor.holdToDelete":`Hold to delete`,"editor.deleting":`Delete`,"editor.moveUp":`Move up`,"editor.moveDown":`Move down`,"editor.noRuns":`No runs yet.`,"editor.restart":`Restart`,"editor.close":`Close`,"runDrawer.expand":`Fill the window`,"runDrawer.shrink":`Back to the side`,"editor.chatHello":`Tell me what your wizard should do. I'll build the flow and you'll see it as a diagram on the left.`,"shareRun.button":`Share`,"shareRun.title":`Share result`,"shareRun.email":`Email`,"shareRun.more":`More …`,"shareRun.until":`The link works until {date}.`,"shareRun.kept":`The link works until you withdraw it.`,"shareRun.withdraw":`Withdraw link`,"sharePage.gone":`This link has expired or was withdrawn.`,"sharePage.own":`Try it yourself`,"sharePage.until":`Shared · available until {date}`,"sharePage.shared":`Shared on {date}`,"share.titleOf":`Share “{title}”`,"share.access":`Access`,"share.anyone":`Anyone with the link`,"share.anyoneMenu":`can open and fill it in`,"share.anyoneHint":`can open and fill it in · up to {n} runs a day`,"share.onlyYou":`Only you`,"share.onlyYouHint":`The link is off. You test it in the studio.`,"share.thisComputer":`Only on this computer`,"share.thisComputerHint":`Others reach it only through the cloud.`,"share.ways":`How others reach it`,"share.change":`Change`,"share.copyLink":`Link`,"share.copyNumber":`Number`,"share.copyLinkFor":`Copy the link for {name}`,"share.copyNumberFor":`Copy the number for {name}`,"share.keywordTo":`“{keyword}” to {number}`,"share.unset":`Not set up yet`,"share.setUp":`Set up`,"share.offNote":`While only you have access, everyone else sees a notice.`,"share.opensSteps":`step by step`,"share.opensAs":`as {name}`,"share.linkNote":`“Copy link” opens it {how} and offers the other ways right away.`,"share.copyMain":`Copy link`,"share.notPublished":`Not published yet`,"share.notPublishedHint":`Others get in as soon as you publish it.`,"share.changes":`Others see version {v}. Your changes are not published yet.`,"share.localHint":`Here it runs on this computer only. With an account it runs in the cloud too, and everyone opens it there.`,"share.back":`Back`,"share.close":`Close`,"share.done":`Done`,"share.qrOpens":`Opens`,"share.qrMessage":`Scan with the phone's camera: {name} opens with the keyword written.`,"share.print":`Print`,"share.download":`Download`,"share.onWebsite":`On your website`,"share.webShows":`What does the website show?`,"share.webWhere":`Where on the page?`,"share.webCode":`Code for your page`,"share.copyCode":`Copy code`,"share.webNeedsLink":`The code for your page needs a link everyone reaches: published, for anyone with the link.`,"share.wpLine":`WordPress? Our plugin does it without code.`,"share.wpPackageLink":`Without an account: as a package`,"share.place.inline":`In the page`,"share.place.inlineHint":`It sits in your page, where you paste the code.`,"share.place.button":`Behind a button`,"share.place.buttonHint":`A button on your page opens it in a window.`,"share.place.bubble":`As a bubble`,"share.place.bubbleHint":`Bottom right on every page, one click opens it. Best put the code in the footer.`,"share.place.popout":`As a chat button`,"share.place.popoutHint":`Bottom right on every page, one click opens the chat. Best put the code in the footer.`,"share.runs":`runs`,"share.newLink":`New link`,"share.rotated":`New link created`,"share.link":`Link`,"share.copy":`Copy`,"share.limit":`At most a day`,"share.rotate":`Create a new link`,"share.rotateHint":`The old link and the QR code stop working.`,"share.open":`Open`,"share.website":`Website`,"share.openHere":`Test on this computer`,"share.settings":`Settings`,"share.rotateCloud":`The old link and the QR code stop working, in the cloud too.`,"share.others":`Share with others`,"share.details":`Details`,"teaser.link":`This link only works on this computer, while the app is running. With an account the wizard also runs on engenty.ai, with a link for everyone.`,"teaser.models":`No API key of your own: with an account, text, images and videos run on credits.`,"teaser.connect":`Connect an account`,"teaser.modelsLinked":`Or on your account's credits: under Models, choose "The account's credits".`,"share.qr":`QR code`,"share.qrHint":`Scan it with a phone's camera: the wizard opens, in the engenty wizards app when it is installed.`,"share.code":`ID for the app:`,"share.readOnly":`Whether the link is active and how many runs a day it allows is set in your local install.`,"share.fit.no":`Not possible: {steps}`,"run.orAs":`Or: {label}`,"chat.view":`View`,"chat.steps":`Steps`,"chat.chat":`Chat`,"chat.send":`Send`,"chat.dictate":`Dictate (⌘⇧M)`,"chat.dictateStop":`Stop dictating`,"chat.listening":`Listening …`,"chat.transcribing":`Writing it down …`,"chat.micDenied":`The microphone is not allowed for this page.`,"chat.readAloud":`Read aloud`,"chat.readAloudOff":`Stop reading aloud`,"talk.start":`Start talking`,"talk.stop":`End the conversation`,"talk.connecting":`Connecting …`,"talk.live":`In conversation`,"talk.speaking":`Speaking`,"talk.listening":`Listening`,"talk.failed":`The conversation could not start`,"talk.hint":`Talk to the wizard – the screen follows along.`,"talk.camera":`Switch the camera on`,"talk.cameraOff":`Switch the camera off`,"talk.cameraDenied":`The camera is not allowed for this page.`,"video.join":`Join`,"video.rejoin":`Rejoin`,"video.leave":`Leave`,"video.hint":`Microphone and camera are asked for when you join. The chat beside it follows along and takes what a voice cannot.`,"video.you":`You`,"video.cameraOff":`Camera off`,"video.mute":`Mute`,"video.unmute":`Unmute`,"video.flip":`Switch camera`,"video.ended":`Call ended`,"video.chat":`Chat`,"talk.joinHint":`The microphone is asked for when you start, the camera only when you switch it on. The chat beside it follows along and takes what a voice cannot.`,"chat.skip":`Skip`,"chat.skipped":`Skipped`,"chat.change":`Change`,"chat.placeholder":`Your answer …`,"chat.above":`Answer above in the chat`,"chat.required":`I need an answer for this one.`,"chat.badEmail":`That doesn't look like an email address.`,"chat.badUrl":`That isn't a valid address.`,"chat.badNumber":`Please enter a number.`,"chat.file":`1 file`,"chat.files":`{n} files`,"chat.voice":`Voice note`,"chat.rows":`{n} rows`,"chat.connected":`Connected`,"chat.checked":`Checked`,"type.page":`Page`,"type.agent":`AI step`,"type.generate":`Generate`,"type.surface":`View`,"type.widget":`Widget`,"type.film":`Film`,"type.review":`Review`,"type.result":`Result`,"run.regenerate":`New version`,"run.regenerateNote":`What should change?`,"market.search":`Search templates …`,"market.hits":`From the marketplace`,"market.all":`All`,"market.industry":`Industry`,"market.format":`Result`,"market.capability":`Capability`,"market.unavailable":`not set up`,"market.without":`Works without: {list}`,"market.optional":`not set up, works without`,"market.optionalHint":`Runs here without {list}: answers that would need it are locked in the wizard. Set it up under Models.`,"market.missing":`Not set up here: {list}`,"market.plan":`Plan`,"market.pro":`Pro`,"market.proHint":`Needs plugins that come with Pro on engenty.ai`,"market.needsPro":`With Pro: needs {list}`,"market.needsProHint":`This template needs {list}. The plugins come with Pro and Team on engenty.ai.`,"market.missingHint":`This needs a model that isn't set up here: {list}. Set it up under Models.`,"market.none":`No template matches this selection.`,"market.notFound":`There is no such template (any more).`,"market.star":`Star`,"market.starred":`Starred`,"market.starHint":`Starred templates are kept on this computer, ready without a connection.`,"market.fromPlugin":`Comes with the plugin “{name}”`,"market.noneStarred":`You haven't starred a template yet.`,"market.offline":`No connection to the marketplace: you see the templates kept here.`,"market.more":`Show more`,"market.reset":`Reset selection`,"market.count":`{n} templates`,"market.countOf":`{n} of {all} templates`,"market.countOfShort":`{n} of {all}`,"market.resetShort":`Reset`,"market.minutes":`~ {n} min`,"market.credits":`~ {n} credits per run`,"market.needsUpdate":`Needs a newer app`,"market.needsUpdateHint":`This template uses features your app does not know yet. Update the app, then you can use it.`,"market.use":`Start with this template`,"market.steps":`How the wizard runs`,"market.duration":`Duration`,"market.durationHint":`from start to result, with {n} inputs from you`,"market.result":`Result`,"market.creditsRange":`~ {n} credits`,"market.creditsHint":`estimated per run, rarely more than twice that`,"market.needs":`Needs`,"market.cost":`Cost`,"new.forWebsite":`Small helpers for your website`,"run.download":`Download`,"run.madeWith":`Made with engenty wizards`,"run.required":`Required`,"settings.title":`Settings`,"settings.name":`Name`,"settings.mcp":`Connected systems`,"settings.mcpHint":`AI steps can read from and write to these systems — only when you allow it on the step.`,"settings.addServer":`Connect a system`,"settings.serverName":`Name`,"settings.serverUrl":`MCP URL`,"settings.serverHeader":`Authorization header (optional)`,"settings.save":`Save`,"settings.saved":`Saved`,"settings.delete":`Delete space`,"settings.noProject":`Your space shows up here once your local install has published its first wizard.`,"settings.copy":`Copy`,"settings.copied":`Copied`,"settings.lastUsed":`last used {when}`,"settings.neverUsed":`never used`,"settings.revoke":`Delete key`,"mcp.appsDisconnect":`Remove`,"plugins.title":`Plugins`,"plugins.hint":`Plugins add pages, settings and tools for steps to this app. They run with the app's full rights: install only what you know.`,"plugins.hintManaged":`These plugins are switched on for your account.`,"plugins.reload":`Reload`,"plugins.rescan":`Look again`,"plugins.tools":`Tools for steps`,"plugins.serverFailed":`The server half did not load: {error}`,"plugins.studioFailed":`The studio half did not load: {error}`,"plugins.problems":`Not a plugin`,"plugins.crashed":`This part of a plugin crashed.`,"plugins.none":`No plugins of your own installed.`,"pro.title":`Pro modules`,"pro.hint":`Modules your plan (Pro, Team) includes, here on your computer. They come from your engenty account, are signed by engenty and stay on while your plan includes them – up to a week without internet.`,"pro.check":`Check plan`,"pro.notLinked":`Link your engenty account (Settings → Account) to use your plan's modules here.`,"pro.plan":`Plan: {plan}`,"pro.confirmedUntil":`confirmed until {date}`,"pro.plans":`Plans`,"pro.on":`On`,"pro.notInPlan":`Not in your plan`,"pro.install":`Install`,"pro.update":`Update`,"pro.remove":`Remove`,"pro.none":`There are no Pro modules for this version ({runtime}) yet.`,"pro.held.plan":`Not in your plan`,"pro.held.release":`Fetched again for this version`,"pro.held.unconfirmed":`Plan not confirmed – check online`,"integrate.nav":`Integrate`,"integrate.title":`Your wizards in your AI apps`,"integrate.intro":`Start wizards right in the chat of Claude, ChatGPT, Cursor and the like — answer the pages there and get the result. The thinking runs on the subscription you already have.`,"integrate.introManaged":`Start your wizards right in the chat of claude.ai, ChatGPT, Claude Desktop and the like — answer the pages there and get the result.`,"integrate.groupHere":`On this computer`,"integrate.groupCloud":`Through engenty.ai`,"integrate.groupBrowser":`In the browser`,"integrate.groupDesktop":`On your computer`,"integrate.groupMore":`More apps`,"integrate.groupShare":`Share`,"integrate.shareLink":`Share by link`,"integrate.shareSite":`On a website`,"integrate.wpIntro":`The plugin "engenty wizards" puts your published wizards on a WordPress site: as a block, a shortcode, an Elementor widget or a bubble at the bottom right. Results, contacts and bookings show in the WordPress admin too.`,"integrate.wpInstall":`1 · Install the plugin`,"integrate.wpInstallHint":`In WordPress under Plugins → Add New → Upload Plugin, choose the ZIP file and activate it.`,"integrate.wpDownload":`Download engenty-wizards.zip`,"integrate.wpConnect":`2 · Connect`,"integrate.wpConnectHint":`In the WordPress admin under "engenty", choose "Create your own AI" (new account) or "Sign in". The site then reads itself in: name, logo, colours, contact details and its pages as knowledge.`,"integrate.wpConnectLocal":`The plugin connects to an account on engenty.ai, not to this install. Link your account here and publish your wizards there; then you pick them in WordPress.`,"integrate.wpPlace":`3 · Put it on a page`,"integrate.wpPlaceHint":`The "engenty Wizard" block, the Elementor widget of the same name, the bubble from the plugin's settings, or this shortcode with the wizard's ID:`,"integrate.wpSampleLabel":`Start a request`,"share.wpPlugin":`Get the plugin`,"share.wpLocal":`Without an account, on the site itself`,"share.wpLocalHint":`Imported as a package into a WordPress 7, the wizard thinks with the site's own AI provider and needs no account. What it needs, as the gallery puts it:`,"share.wpPackage":`Download the package`,"share.wpPackageDraft":`Draft as a package`,"share.wpKnowledge":`Take the knowledge along`,"share.wpKnowledgeHint":`This project's pages go into the package as files (up to 2 MB): what the wizard otherwise looks up in the space.`,"share.wpFull":`Runs there as is`,"share.wpLess":`Runs with less`,"share.wpNo":`Needs an account`,"share.wpNeedsAccount":`With an account: needs {list}`,"share.wpHelp":`In the plugin: engenty → Wizards → Import. Without an account the results stay in WordPress; contacts, bookings and files come with the account.`,"need.full":`runs`,"need.missing":`not set up`,"need.optional":`works without`,"need.lists":`Lists the wizard keeps between runs`,"need.memory":`The wizard's memory`,"need.each":`One run per entry (one after the other here)`,"need.field:slot":`Picking an appointment from free times`,"need.asset:document":`Making documents (PDF, Word)`,"need.asset:dashboard":`Making dashboards`,"need.tool:pages":`Reading the space's pages`,"need.format":`Result as {format}`,"integrate.wpLocal":`Without an account`,"integrate.wpLocalHint":`A WordPress 7 with its own AI provider (Settings → Connectors) runs wizards without an account: the templates that ship with the plugin, or a package from a wizard's share dialog. The share dialog says per wizard whether it runs there as is, with less, or only with an account.`,"integrate.wpPro":`With Pro`,"integrate.wpProHint":`Contacts and bookings from your wizards in the WordPress admin; wizards made from templates right in WordPress.`,"integrate.soon":`soon`,"integrate.found":`Found on this computer`,"integrate.stateWorks":`Works`,"integrate.stateAdded":`Added, not tested yet`,"integrate.stateNone":`Not set up yet`,"integrate.outRun":`Start wizards in the chat`,"integrate.outWidget":`The wizard shows in the chat`,"integrate.outText":`Wizards as text in the chat`,"integrate.outSignIn":`No API key — you sign in`,"integrate.view":`View`,"integrate.testIt":`Test`,"integrate.connectShort":`Connect`,"integrate.cloudTitle":`claude.ai and ChatGPT`,"integrate.cloudText":`They run in the browser and cannot reach your computer. With your engenty account your wizards get there anyway.`,"integrate.cloudButton":`Connect through engenty.ai`,"integrate.steps":`How it works`,"integrate.connect":`Add to {app}`,"integrate.connectHint":`Adds engenty wizards to the settings of {app}.`,"integrate.connected":`Added to {app}`,"integrate.notInstalled":`{app} is not on this computer. Adding works anyway — it takes effect once {app} is there.`,"integrate.details":`Details`,"integrate.restart":`Restart {app}`,"integrate.restartHint":`Quit it completely and open it again. We notice by ourselves — nothing to click here.`,"integrate.reload":`Reload the servers in {app}, or restart {app}. We notice by ourselves.`,"integrate.waiting":`Waiting for {app}`,"integrate.try":`Try it in the chat`,"integrate.tryHint":`In a new chat, write:`,"integrate.askTool":`Which wizards do I have in engenty?`,"integrate.elsewhere":`{app} on another computer?`,"integrate.byAddress":`Connect with the address and an API key`,"integrate.backHere":`Connect on this computer after all`,"integrate.keyCreate":`Create an API key for {app}`,"integrate.keyHint":`{app} signs in with it. It is shown once and goes right into the command.`,"integrate.keyReady":`API key created — it is already in the command.`,"integrate.add":`Add the server`,"integrate.addressLocal":`Reachable on this computer only, and only while engenty wizards runs.`,"integrate.works":`Works`,"integrate.next":`Try next`,"integrate.nextHint":`Copy a sentence into a new chat in {app}.`,"integrate.labelAsk":`Ask`,"integrate.labelRun":`Run`,"integrate.labelBuild":`Build`,"integrate.labelExplain":`Explain`,"integrate.askRun":`Start my wizard “{title}”`,"integrate.askBuild":`Build me a wizard for newsletter drafts`,"integrate.askExplain":`What does the wizard “{title}” do?`,"integrate.textOnly":`{app} shows wizards as text: pages and questions come as messages. Claude Desktop, Cursor and VS Code show the wizard itself as a window in the chat.`,"integrate.addedIn":`Added to {app}`,"integrate.remoteWhy":`{app} runs on its maker's servers and cannot reach your computer. It can reach your wizards on engenty.ai.`,"integrate.viaAccount":`Connect through your engenty account`,"integrate.tileHere":`This computer`,"integrate.tileHereText":`You keep building here as before.`,"integrate.tileCloudText":`Gets your published wizards, to run them.`,"integrate.tileAppText":`Connects to engenty.ai and starts them in the chat.`,"integrate.linkAccount":`Connect to engenty.ai`,"integrate.linkHint":`Then we show you the steps in {app}.`,"integrate.noAccount":`Rather without an account?`,"integrate.useDesktop":`Claude Desktop works right here — one click`,"integrate.linked":`Through your account {email}: {app} sees the wizards you publish here.`,"integrate.openConnectors":`Open connectors in claude.ai`,"integrate.open":`Open {app}`,"integrate.claudeAiWhere":`There: Add custom connector`,"integrate.desktopWhere":`In Claude Desktop: Settings → Connectors → Add custom connector`,"integrate.chatgptWhere":`In ChatGPT: Settings → Apps & Connectors → Advanced → Developer mode, then “Create”`,"integrate.nameAddress":`Enter name and address`,"integrate.name":`Name`,"integrate.address":`Address`,"integrate.allow":`Click “Connect”, sign in, allow`,"integrate.allowHint":`A window of engenty opens. You sign in and click “Allow”. It looks like this:`,"integrate.allowFirst":`Sign in and allow on first use`,"integrate.allowFirstHint":`{app} opens a window of engenty. You sign in and click “Allow”.`,"integrate.consentPreview":`{app} wants to access your wizards`,"integrate.checkSeen":`Connected`,"integrate.checkTool":`Used a tool`,"integrate.checkWidget":`Showed a wizard in the chat`,"integrate.revoke":`Disconnect any time in your account — access ends at once.`,"integrate.revokeLink":`Connected apps`,"integrate.needsPublic":`{app} connects from its maker's servers. That only works when this server can be reached publicly over HTTPS.`,"integrate.file":`Put this into {file}:`,"integrate.vscode":`In VS Code: "MCP: Open User Configuration", then add:`,"integrate.chatgpt":`In ChatGPT: Settings → Apps & Connectors → Advanced → Developer mode, then "Create" with this address:`,"integrate.generic":`In the app's MCP settings, add a server at this address (Streamable HTTP):`,"mcp.terminal":`Run in the terminal:`,"mcp.ccPlugin":`Optionally the plugin — it adds the /wizard command:`,"mcp.codexKey":`Run in the terminal — Codex reads the API key from an environment variable:`,"mcp.claudeAi":`In claude.ai: Settings → Connectors → Add custom connector, and enter this address:`,"mcp.oauth":`No API key needed: on first use your app signs in in the browser.`,"mcp.keys":`API keys`,"mcp.keysHint":`Each API key signs one app in and has every right — treat it like a password. Delete it and that app is signed out.`,"editor.viaClient":`Via {client}`,"editor.changedVia":`Changed via {client}`,"editor.merged":`Merged with changes from elsewhere`,"browser.takeOver":`Take over`,"browser.handBack":`Hand back`,"browser.driving":`You are driving the browser – click and type in the page. The wizard waits.`,"composer.send":`Send`,"dictation.settings":`Microphone and recording`,"dictation.microphone":`Microphone`,"dictation.default":`System default`,"dictation.mic":`Microphone {n}`,"dictation.showMics":`Show microphone names …`,"dictation.hold":`Hold to record`,"dictation.holdToTalk":`Hold to talk`,"date.pick":`Pick a date`,"time.pick":`Pick a time`,"time.hour":`Hour`,"time.minute":`Minute`,"date.pickRange":`Pick a day or a period`,"date.pickStart":`Pick the first day`,"date.pickEnd":`Pick the last day – or the same one for one day`,"date.today":`Today`,"date.clear":`Clear`,"date.prev":`Previous month`,"date.next":`Next month`,"connectors.title":`Connectors`,"connectors.hint":`Services a wizard can work in for the person — they connect their own account during a run. The main ones are built in; any other you find in the integrations.sh registry and import from its OpenAPI spec or its MCP server.`,"connectors.imported":`From the registry`,"connectors.noneImported":`No connector from the registry is imported here.`,"connectors.notSetUp":`not set up`,"connectors.setup":`The server still needs:`,"connectors.search":`Find a service, e.g. Notion, Stripe, GitHub`,"connectors.find":`Search`,"connectors.none":`Nothing found.`,"connectors.import":`Import`,"connectors.exists":`Already imported.`,"connectors.ownClient":`Own OAuth client`,"connectors.refresh":`Reload actions`,"connectors.remove":`Remove`,"connectors.actions":`{n} actions, {r} read-only`,"connectors.pending":`Actions appear once an account is connected`,"connectors.needsClient":`This service needs an OAuth client (id and secret). Remove it and import again with “Own OAuth client”.`,"connectors.authNone":`no sign-in`,"connectors.authOauth":`OAuth sign-in`,"connectors.authKey":`API key`,"connectors.group.read":`reads`,"connectors.group.write":`changes`,"connectors.group.destructive":`deletes`,"camera.missing":`No camera was found on this device. Upload a photo instead.`,"camera.busy":`Another app is using the camera. Close it and try again.`,"location.unavailable":`Your device could not find its location right now. Try again outdoors or type the address.`,"location.timeout":`That took too long. Try again or type the address.`,"install.add":`Add to home screen`,"install.ios":`Tap “Share” below, then “Add to Home Screen”.`,"install.bookmark":`Bookmark this wizard`,"install.bookmark.mac":`Press ⌘ D to keep this wizard in your bookmarks.`,"install.bookmark.pc":`Press Ctrl + D to keep this wizard in your bookmarks.`,"install.app":`Open in the app`,"install.app.offer":`Install the studio as an app: its own window, its own icon in the Dock or taskbar.`,"install.app.browser":`In Chrome or Edge the studio installs as an app: its own window, its own icon.`,"install.app.action":`Install as app`,"install.app.close":`Close`,"install.app.how.ios":`In Safari, tap Share and then "Add to Home Screen". The studio then sits on your home screen like an app.`,"install.app.how.mac":`In Safari, choose File → "Add to Dock". The studio gets its own window and an icon in the Dock.`,"install.app.how.android":`In Chrome, tap the ⋮ menu and then "Install app" or "Add to Home screen".`,"install.app.how.chromium":`Click the install icon in the address bar, or choose "Install app" in the menu. The studio gets its own window and an icon.`,"common.loading":`Loading …`,"common.error":`Error`,"data.hint":`Tables and pages the space and its wizards keep.`,"data.all":`All data`,"data.own":`General`,"data.table":`Table`,"data.page":`Page`,"data.newTable":`New table`,"data.newPage":`New page`,"data.title":`Title`,"data.owner":`Belongs to`,"data.create":`Create`,"data.empty":`No tables or pages yet. Create one – soon your wizards will write here too.`,"data.rows":`{n} rows`,"data.addRow":`Row`,"data.noRows":`No rows yet.`,"data.deleteRow":`Delete row`,"data.deleteTable":`Delete table`,"data.deletePage":`Delete page`,"data.confirmDelete":`Delete “{title}”?`,"data.newColumn":`New column`,"data.columnName":`Name`,"data.columnType":`Type`,"data.required":`Must be filled in`,"data.deleteColumn":`Delete column`,"data.removeOption":`Remove`,"data.fromList":`A list of the wizard: every run writes into it. The columns come from the wizard.`,"data.badCell":`This value does not fit “{column}” and is not saved.`,"data.type.text":`Text`,"data.type.number":`Number`,"data.type.date":`Date`,"data.type.duration":`Duration`,"data.type.select":`Choice`,"data.type.boolean":`Yes / no`,"data.text.single":`One line`,"data.text.multiline":`Several lines`,"data.number.integer":`Whole number`,"data.number.decimal":`Decimal`,"data.number.percent":`Percent`,"data.number.currency":`Amount`,"data.currency":`Currency (e.g. EUR)`,"data.date.date":`Date`,"data.date.datetime":`Date and time`,"data.date.time":`Time`,"data.unit":`Entered in`,"data.unit.milliseconds":`ms`,"data.unit.seconds":`seconds`,"data.unit.minutes":`minutes`,"data.unit.hours":`hours`,"data.unit.days":`days`,"data.options":`Choices, one per line`,"data.multiple":`Several can be chosen`,"data.write":`Write`,"data.preview":`Preview`,"data.pageEmpty":`This page is still empty.`,"data.markdownHint":`Markdown: # heading, **bold**, - list`,"space.holds.intro":`A space holds what belongs together – a company, a brand or a project. Every wizard belongs to exactly one space.`,"space.holds.wizards":`Its own list – the home and the search show only these.`,"space.holds.info":`Name, logos, colours and facts its wizards know.`,"space.holds.knowledge":`Documents, tables and pages its wizards share.`,"space.holds.connectors":`The connections its wizards use.`,"space.holds.results":`The runs of its wizards.`,"space.holds.shared":`Account, models and plugins apply to every space.`,"space.info":`Info & brand`,"space.knowledge":`Knowledge`,"space.data":`Data`,"space.results":`Results`,"space.resultsAll":`All results`,"space.resultsHint":`Runs of your wizards that reached their result, newest first.`,"space.resultsEmpty":`No results yet. A run shows up here once it is done.`,"space.resultCredits":`{n} credits`,"space.resultsSearch":`Search: wizard, answers, result …`,"space.resultsModeAll":`Live & test`,"space.resultsAnyTime":`Any time`,"space.resultsDay":`Last 24 hours`,"space.resultsDays":`Last {n} days`,"space.resultsNone":`No results for this search.`,"space.resultFiles":`{n} files`,"project.rename":`Rename space`,"project.saving":`Saving …`,"project.base":`Basics`,"project.baseHint":`Who is behind the wizards. Every AI step knows this.`,"project.title":`Title`,"project.titleHint":`Company, brand or undertaking — end users see it too.`,"project.about":`About`,"project.aboutHint":`What you do, for whom, and the tone you write in.`,"project.logos":`Logos`,"project.logosHint":`End users see the first logo. A description says what a variant is for.`,"project.logoAdd":`Logo`,"project.logoMain":`Main logo`,"project.logoMakeMain":`Make main logo`,"project.colors":`Colours`,"project.colorsHint":`The first colour is the accent of documents, dashboards and public pages.`,"project.colorAdd":`Colour`,"project.colorName":`e.g. Primary — buttons and headings`,"project.colorUse":`Describe how engenty should use this color.`,"project.colorAddTitle":`Add a colour`,"project.colorValue":`Colour value`,"project.colorUseLabel":`Use`,"project.add":`Add`,"project.colorAccent":`Accent`,"project.colorFirst":`Make accent`,"project.assets":`Assets`,"project.assetsHint":`Images, graphics, videos. AI steps place them in documents and choose by the description.`,"project.assetAdd":`Files`,"project.assetSearch":`Filter assets …`,"know.all":`All`,"know.title":`Knowledge`,"know.hint":`What your wizards' steps look things up in. Documents become pages and tables when they arrive; Kategorien keep the items apart.`,"know.empty":`Nothing here yet. Upload documents, add a page or give the assistant a website.`,"know.drop":`Drop documents here or`,"know.pick":`choose`,"know.page":`Page`,"know.table":`Table`,"know.faq":`FAQ`,"know.file":`File`,"know.category":`Kategorie`,"know.categories":`Kategorien`,"know.newPage":`New page`,"know.newTable":`New table`,"know.asFaq":`As an FAQ: a question and its answer per row`,"know.newCategory":`New Kategorie`,"know.search":`Try a search …`,"know.searchNone":`Nothing relevant found.`,"know.searchStats":`{candidates} candidates checked, {hits} relevant`,"know.searchUnchecked":`{hits} hits, unchecked`,"know.unchecked":`Without a classifier hits stay unchecked. It needs an AI Gateway or TypeSafe key, or an account.`,"know.keywordsOnly":`Without an embedding model the search finds words, not meaning.`,"know.clear":`Reset`,"know.sub":`{n} sub-pages`,"know.rows":`{n} rows`,"know.review":`Check`,"know.reviewed":`Checked`,"know.from":`From {label}`,"know.kept":`Changed by hand: {label} no longer writes it.`,"know.original":`Original`,"know.reading":`Reading …`,"know.subPages":`Sub-pages`,"know.addSub":`Sub-page`,"know.type.choice":`Choice`,"know.type.date":`Date`,"know.type.number":`Number`,"know.type.text":`Text`,"know.type.boolean":`Yes / no`,"know.name":`Name`,"know.type":`Type`,"know.unit":`Unit`,"know.unitHint":`e.g. h, €, kg`,"know.multiple":`Several values per item`,"know.ordered":`The values are ranked (low → high)`,"know.values":`Values`,"know.valuesHint":`One per line. More come with the items.`,"know.hintField":`Where the values come from`,"know.hintFieldHint":`Short, e.g. header, file name, the website's filter.`,"know.create":`Create`,"know.proposed":`Proposed`,"know.proposedHint":`It is filled once it is taken.`,"know.accept":`Take`,"know.dismiss":`Dismiss`,"know.alike":`“{a}” and “{b}” look like one value.`,"know.merge":`Merge`,"know.items":`{n} items`,"know.item":`1 item`,"know.row":`1 row`,"know.oneSub":`1 sub-page`,"know.addValue":`Add a value`,"know.range":`{min} to {max}`,"know.summary":`Overview`,"know.summaryHint":`A model sums up the items of this value. The search finds the overview like a page.`,"know.summaryWrite":`Write the overview`,"know.summaryAgain":`Write again`,"know.summaryEmpty":`No overview yet.`,"know.toc":`Contents`,"know.tocRows":`{n} rows in {table}`,"know.deleteCategory":`Delete Kategorie`,"know.confirmCategory":`Delete “{name}”? The items stay, only the Kategorie goes.`,"know.deleteValue":`Delete value`,"know.yes":`Yes`,"know.no":`No`,"know.minimum":`from`,"know.maximum":`to`,"know.contains":`contains`,"know.by.person":`set by hand`,"know.by.origin":`from the source`,"know.by.model":`read by a model`,"know.remove":`Remove`,"know.unset":`Not set`,"know.deleteFile":`Delete file`,"project.documents":`Documents`,"project.documentsHint":`PDFs, lists, Excel, Word, text. They are read and put into an index every AI step searches.`,"project.documentAdd":`Documents`,"project.drop":`Drop here or`,"project.staysLocal":`Stays in your local install and is not sent here.`,"project.description":`Add a description …`,"project.describing":`Looking at it …`,"project.reading":`Reading …`,"project.indexed":`In the index`,"project.indexedKeywords":`In the index (keywords)`,"project.notIndexed":`No text found`,"project.reindex":`Read again`,"project.pages":`{n} pages`,"project.keywordsOnly":`The index searches by keywords right now. With an AI Gateway or OpenAI key it also searches by meaning.`,"project.preview":`Preview`,"project.viewList":`Show as a list`,"project.viewCards":`Show as cards`,"project.original":`Original`,"project.readText":`Text as read`,"project.openOriginal":`Open the original`,"project.noText":`No text yet: the document is still being read, or could not be read.`,"project.textCut":`The preview shows the start ({shown} of {total} characters).`,"project.searchTest":`Search the index …`,"project.searchNone":`Nothing found.`,"project.remove":`Remove`,"project.removeConfirm":`Remove “{name}”?`,"project.facts":`Facts`,"project.factsHint":`What wizards should know: address, VAT id, opening hours — anything that fits.`,"project.factLabel":`Label`,"project.factValue":`Value`,"project.factAdd":`Entry`,"project.factType":`Type`,"project.factAuto":`Automatic`,"project.type.text":`Text`,"project.type.longtext":`Long text`,"project.type.number":`Number`,"project.type.date":`Date`,"project.type.url":`Link`,"project.type.email":`Email`,"project.type.phone":`Phone`,"project.type.boolean":`Yes / No`,"project.yes":`Yes`,"project.no":`No`,"assistant.name":`Assistant`,"assistant.ask":`Ask the assistant`,"assistant.open":`Open the assistant`,"assistant.sees":`Sees: {page}`,"assistant.menu":`Chat menu`,"assistant.newChat":`New chat`,"assistant.earlier":`Earlier chats`,"assistant.noEarlier":`No earlier chats yet.`,"assistant.untitled":`Untitled`,"assistant.summarising":`Summarising the chat …`,"assistant.readOnly":`An earlier chat, to read only. The assistant knows its summary.`,"assistant.back":`Back`,"assistant.layoutBottom":`Dock at the bottom`,"assistant.layoutSidebar":`As a sidebar`,"assistant.minimize":`Make small`,"assistant.close":`Fold away`,"assistant.helloTitle":`How can I help?`,"assistant.hello":`I know engenty wizards and see what you see. Ask me how something works – I'll show you too.`,"assistant.composer":`Ask something or say what you need …`,"assistant.filesNeedSpace":`Files go into a space – none can be changed here.`,"assistant.talk":`Talk`,"assistant.live":`Live chat`,"assistant.liveListening":`Listening`,"assistant.liveThinking":`Thinking`,"assistant.liveSpeaking":`Speaking`,"assistant.liveMuted":`Muted`,"assistant.mute":`Microphone off`,"assistant.unmute":`Microphone on`,"assistant.end":`End`,"assistant.naturalVoice":`Natural voice (speech model)`,"assistant.gotIt":`Got it`,"assistant.tool.navigate":`Opened {where}`,"assistant.tool.highlight":`Marked: {what}`,"assistant.tool.look":`Looked at the page`,"assistant.tool.read":`Read: {what}`,"assistant.tool.fill":`Filled in: {what}`,"assistant.tool.docs":`Read the guide`,"assistant.tool.gallery":`Searched the gallery`,"assistant.tool.account":`Checked the account`,"assistant.tool.chats":`Searched earlier chats`,"assistant.tool.space":`Checked wizards and runs`,"assistant.tool.models":`Checked the models`,"assistant.suggest.what":`What can I do with engenty wizards?`,"assistant.suggest.models":`Show me where to set up the models`,"assistant.suggest.credits":`How many credits do I have left?`,"assistant.suggest.modelsNow":`What thinks here right now, and what is missing?`,"assistant.suggest.modelsMissing":`Why can no video be made here?`,"assistant.suggest.modelsCost":`What does each way cost me?`,"assistant.suggest.accountWhy":`What do I need an account for?`,"assistant.suggest.plans":`Which plans are there, and what do they cost?`,"assistant.suggest.integrateWhat":`What can I do from Claude or Cursor?`,"assistant.suggest.integrateClaude":`How do I add Claude Desktop?`,"assistant.suggest.connectorsWhat":`What are connectors for?`,"assistant.suggest.connectorsAdd":`Connect this service: `,"assistant.suggest.readSite":`Read our website `,"assistant.suggest.missing":`What is the space still missing?`,"assistant.suggest.facts":`What do the wizards need the facts for?`,"assistant.suggest.knowledgeHow":`How does knowledge get into the space?`,"assistant.suggest.knowledgeSite":`Read this website into the knowledge: `,"assistant.suggest.knowledgeCategories":`What are Kategorien for?`,"assistant.suggest.dataWhat":`What is in this data?`,"assistant.suggest.dataWho":`Which wizard fills which table?`,"assistant.suggest.dataEdit":`How do I change a column?`,"assistant.suggest.resultsFailed":`Which runs failed lately?`,"assistant.suggest.resultsCost":`What cost the most credits this month?`,"assistant.suggest.resultsShare":`How do I share a result?`,"project.assistantTitle":`Tell me about yourselves`,"project.assistantHello":`Name your website or give me files. I fill in what I find: title, description, logo, colours and facts.`,"project.assistantComposer":`e.g. “Read our website example.com” …`,"project.assistantTitleKnowledge":`What should your wizards know?`,"project.assistantHelloKnowledge":`Give me documents or tell me where the knowledge is. I read it in – this page shows what goes in.`,"project.assistantComposerKnowledge":`Attach documents or say where the knowledge is …`,"project.assistantChanged":`Space updated`,"flowApp.loading":`The wizard is on its way …`,"flowApp.broken":`This can't be shown here.`,"flowApp.draft":`Draft`,"flowApp.published":`Published`,"flowApp.issues":`{n} issues in the draft`,"flowApp.flow":`Flow`,"flowApp.notPublished":`Publish it in the studio to run it here.`,"flowApp.runPage":`Continue in the browser`,"flowApp.inBrowser":`Only in the browser: {fields}`,"flowApp.done":`Done`,"flowApp.credits":`{n} credits`,"flowApp.ask":`The wizard asks`,"flowApp.allow":`Allow`,"flowApp.skip":`Skip`,"flowApp.signIn":`A sign-in at {site} — only in the browser.`,"flowApp.fullscreen":`Larger`,"flowApp.inline":`Smaller`,"flowApp.failed":`That did not work: {error}`},na=`wizards.lang`;function ra(){try{let e=localStorage.getItem(na);return e===`de`||e===`en`?e:null}catch{return null}}var ia=ra()??(typeof navigator<`u`&&!navigator.language.toLowerCase().startsWith(`de`)?`en`:`de`),aa=ia===`de`?ea:ta,oa=new Set;function sa(e){if(e!==ia){ia=e,aa=e===`de`?ea:ta,Qi(e),document.documentElement.lang=e;try{localStorage.setItem(na,e)}catch{}for(let e of oa)e()}}function ca(){return(0,a.useSyncExternalStore)(e=>(oa.add(e),()=>oa.delete(e)),()=>ia)}function la(e){return e.note&&Gi(e.note,ia)||e.message}function N(e,t){let n=aa[e]??ea[e]??e;for(let[e,r]of Object.entries(t??{}))n=n.replace(`{${e}}`,String(r));return n}typeof document<`u`&&(document.documentElement.lang=ia);var P=t(r(),1);function F(...e){return e.filter(Boolean).join(` `)}var ua={primary:`bg-primary text-primary-foreground hover:brightness-[1.06] active:brightness-95 shadow-[0_1px_0_oklch(0%_0_0/0.08)]`,secondary:`bg-card text-ink border border-border hover:bg-paper-2`,ghost:`text-ink-2 hover:text-ink hover:bg-accent`,quiet:`bg-paper-2 text-ink hover:bg-paper-3`,danger:`text-rose hover:bg-rose-tint`},I=(0,a.forwardRef)(function({variant:e=`primary`,size:t=`md`,busy:n,className:r,children:i,disabled:a,...o},s){return(0,P.jsxs)(`button`,{ref:s,type:`button`,disabled:a||n,className:F(`inline-flex select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium transition-[background,filter,color,transform] duration-150 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-50`,t===`sm`&&`h-8 px-3 text-[0.8125rem] coarse:h-11 coarse:px-4`,t===`md`&&`h-10 px-4 text-sm coarse:h-11`,t===`lg`&&`h-12 px-6 text-[0.9375rem]`,ua[e],r),...o,children:[n?(0,P.jsx)(Ca,{className:`size-4`}):null,i]})});function da({label:e,className:t,children:n,...r}){return(0,P.jsx)(`button`,{type:`button`,"aria-label":e,title:e,className:F(`inline-flex size-9 shrink-0 items-center justify-center rounded-full text-ink-3 transition hover:bg-accent hover:text-ink disabled:opacity-40 coarse:size-11`,t),...r,children:n})}var fa=`rounded-lg border border-input bg-card px-3.5 text-[0.9375rem] text-ink shadow-[inset_0_1px_0_oklch(0%_0_0/0.02)] outline-none transition placeholder:text-ink-4 focus:border-focus focus:ring-4 focus:ring-focus-glow disabled:opacity-60`;function pa(e){return/(^|\s)w-/.test(e??``)?null:`w-full`}var ma=(0,a.forwardRef)(function({className:e,...t},n){return(0,P.jsx)(`input`,{ref:n,className:F(fa,pa(e),`h-11`,e),...t})});function ha(e){return(0,P.jsx)(`input`,{type:`color`,className:`swatch size-11 shrink-0 cursor-pointer rounded-lg border border-input bg-card p-1`,...e})}var ga=(0,a.forwardRef)(function({className:e,minRows:t=3,maxRows:n=14,onChange:r,...i},o){let s=(0,a.useRef)(null),c=()=>{let e=s.current;if(!e)return;let r=Number.parseFloat(getComputedStyle(e).lineHeight)||22;e.style.height=`auto`;let i=r*n+20;e.style.height=`${Math.min(Math.max(e.scrollHeight,r*t+20),i)}px`,e.style.overflowY=e.scrollHeight>i?`auto`:`hidden`};return(0,a.useLayoutEffect)(c),(0,P.jsx)(`textarea`,{ref:e=>{s.current=e,typeof o==`function`?o(e):o&&(o.current=e)},className:F(fa,pa(e),`resize-none py-2.5 leading-[1.5]`,e),onChange:e=>{c(),r?.(e)},...i})});function _a({value:e,onChange:t,options:n,className:r,placeholder:i}){return(0,P.jsxs)(`div`,{className:F(`relative`,r),children:[(0,P.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),className:F(fa,`h-11 w-full appearance-none pr-9`),children:[i===void 0?null:(0,P.jsx)(`option`,{value:``,children:i}),n.map(e=>(0,P.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}),(0,P.jsx)(`svg`,{className:`-translate-y-1/2 pointer-events-none absolute top-1/2 right-3 size-4 text-ink-3`,viewBox:`0 0 16 16`,fill:`none`,children:(0,P.jsx)(`path`,{d:`M4 6l4 4 4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})]})}function va({value:e,onChange:t,options:n,multi:r,disabled:i}){let a=new Set(Array.isArray(e)?e:e?[e]:[]);return(0,P.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:n.map(e=>{let o=a.has(e);return(0,P.jsx)(`button`,{type:`button`,"aria-pressed":o,disabled:i?.includes(e),onClick:()=>{if(r){let r=new Set(a);o?r.delete(e):r.add(e),t(n.filter(e=>r.has(e)))}else t(e)},className:F(`h-10 rounded-full border px-4 text-sm transition disabled:pointer-events-none disabled:opacity-60 disabled:line-through coarse:h-11`,o?`border-ember bg-ember-tint text-ink`:`border-input bg-card text-ink-2 hover:border-ink-4 hover:text-ink`),children:e},e)})})}var ya=`cubic-bezier(0.3, 0.7, 0.2, 1)`;function ba({value:e,onChange:t,options:n,label:r}){let i=(0,a.useRef)(new Map),[o,s]=(0,a.useState)(null);return(0,a.useLayoutEffect)(()=>{let t=i.current.get(e);if(!t)return;let n=()=>s({x:t.offsetLeft,w:t.offsetWidth});n();let r=new ResizeObserver(n);return r.observe(t),()=>r.disconnect()},[e]),(0,P.jsxs)(`div`,{role:`tablist`,"aria-label":r,className:`relative inline-flex items-center rounded-full bg-paper-2 p-0.5 ring-1 ring-border-soft`,children:[o?(0,P.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-0.5 bottom-0.5 left-0 rounded-full bg-card shadow-sm motion-reduce:transition-none`,style:{width:o.w,transform:`translateX(${o.x}px)`,transition:`transform 300ms ${ya}, width 300ms ${ya}`}}):null,n.map(n=>{let r=n.id===e;return(0,P.jsx)(`button`,{ref:e=>{e?i.current.set(n.id,e):i.current.delete(n.id)},type:`button`,role:`tab`,"aria-selected":r,onClick:()=>t(n.id),className:F(`relative h-8 whitespace-nowrap rounded-full px-4 font-medium text-[0.875rem] transition-colors motion-reduce:transition-none coarse:h-9`,r?`text-ink`:`text-ink-3 hover:text-ink-2`),children:n.label},n.id)})]})}function xa({checked:e,onChange:t,label:n,disabled:r}){return(0,P.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":n,disabled:r,onClick:()=>t(!e),className:F(`relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition before:absolute before:-inset-x-1 before:-inset-y-2.5 before:content-[''] disabled:pointer-events-none disabled:opacity-60`,e?`bg-primary`:`bg-paper-3`),children:(0,P.jsx)(`span`,{className:F(`inline-block size-5 rounded-full bg-white shadow-sm transition-transform`,e?`translate-x-[22px]`:`translate-x-[2px]`)})})}function Sa({children:e,hint:t,required:n}){return(0,P.jsxs)(`div`,{className:`mb-2`,children:[(0,P.jsxs)(`div`,{className:`font-medium text-[0.875rem] text-ink`,children:[e,n?(0,P.jsx)(`span`,{className:`ml-1 text-ember`,children:`*`}):null]}),t?(0,P.jsx)(`div`,{className:`mt-0.5 text-[0.8125rem] text-ink-3`,children:t}):null]})}function Ca({className:e}){return(0,P.jsxs)(`svg`,{className:F(`size-5 animate-spin`,e),viewBox:`0 0 24 24`,fill:`none`,children:[(0,P.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeOpacity:`0.2`,strokeWidth:`3`}),(0,P.jsx)(`path`,{d:`M21 12a9 9 0 0 0-9-9`,stroke:`currentColor`,strokeWidth:`3`,strokeLinecap:`round`})]})}function wa({className:e,children:t,...n}){return(0,P.jsx)(`div`,{className:F(`rounded-xl bg-card shadow-soft ring-1 ring-border-soft`,e),...n,children:t})}function Ta({children:e,tone:t=`neutral`,icon:n,title:r}){return(0,P.jsxs)(`span`,{title:r,className:F(`inline-flex h-6 items-center gap-1.5 whitespace-nowrap rounded-full px-2.5 font-medium text-[0.75rem]`,t===`neutral`&&`bg-paper-2 text-ink-2`,t===`live`&&`bg-moss-tint text-moss`,t===`warn`&&`bg-amber-tint text-ink-2`,t===`ember`&&`bg-ember-tint text-ember-strong`),children:[n??(t===`live`?(0,P.jsx)(`span`,{className:`size-1.5 rounded-full bg-moss`}):null),e]})}function Ea({open:e,onClose:t,title:n,children:r,wide:i,bare:o,height:s=`auto`}){let c=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let t=c.current;t&&(e&&!t.open?(t.showModal(),t.querySelector(`[data-autofocus]`)?.focus()):!e&&t.open&&t.close())},[e]),(0,a.useEffect)(()=>{let t=c.current;if(!t||!e||o||s===`tall`)return;let n=0,r=()=>{n=Math.max(n,t.getBoundingClientRect().height),t.style.minHeight=`${Math.min(n,window.innerHeight-32)}px`},i=new ResizeObserver(r);return i.observe(t),window.addEventListener(`resize`,r),()=>{i.disconnect(),window.removeEventListener(`resize`,r),t.style.minHeight=``}},[e,o,s]),(0,P.jsx)(`dialog`,{ref:c,onClose:t,onClick:e=>{e.target===c.current&&t()},className:F(`m-auto p-0 text-ink backdrop:bg-[oklch(20%_0.01_60/0.28)] backdrop:backdrop-blur-[2px]`,`max-sm:m-0 max-sm:h-dvh max-sm:max-h-none max-sm:w-full max-sm:max-w-none`,o?`w-[calc(100%-48px)] overflow-visible bg-transparent`:`max-h-[calc(100dvh-32px)] w-[calc(100%-32px)] overflow-y-auto overscroll-contain rounded-2xl bg-card shadow-overlay max-sm:rounded-none max-sm:pt-[env(safe-area-inset-top)] max-sm:pb-[env(safe-area-inset-bottom)]`,i===`page`?`sm:max-w-4xl`:i?`sm:max-w-2xl`:`sm:max-w-md`,!o&&s===`tall`&&`sm:h-[min(calc(100dvh-32px),56rem)]`),children:e&&o?r:e?(0,P.jsxs)(`div`,{className:`p-5 sm:p-7`,children:[n?(0,P.jsxs)(`div`,{className:`mb-5 flex items-start justify-between gap-3`,children:[(0,P.jsx)(`h2`,{className:`min-w-0 font-display font-semibold text-xl`,children:n}),(0,P.jsx)(da,{label:M(`common.close`),onClick:t,className:`-mt-1.5 -mr-2`,children:(0,P.jsx)(`svg`,{viewBox:`0 0 16 16`,fill:`none`,className:`size-4`,"aria-hidden":`true`,children:(0,P.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}):null,r]}):null})}function Da({children:e}){return(0,P.jsx)(`div`,{className:`py-16 text-center text-ink-3`,children:e})}function Oa({text:e}){return e.split(/(https?:\/\/[^\s)]+)/).map((e,t)=>t%2?(0,P.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,className:`font-medium text-ink underline underline-offset-2`,children:new URL(e).host},e):e)}var ka=class extends Error{status;body;constructor(e,t,n){super(e),this.status=t,this.body=n}};function Aa(e){return e instanceof ka&&e.status===0}function ja(e){try{return JSON.parse(e)}catch{return{error:e}}}function Ma(e,t={},n){async function r(r,i,a){let o=await fetch(e(i),{method:r,credentials:`include`,headers:{...t,...a!==void 0&&!(a instanceof FormData)?{"content-type":`application/json`}:{}},body:a===void 0?void 0:a instanceof FormData?a:JSON.stringify(a)}).catch(()=>{throw new ka(M(`common.offline`),0,null)}),s=await o.text(),c=s?ja(s):null;if(!o.ok)throw o.status>=500&&n?.(`${r} ${i} answered ${o.status}: ${c?.error??``}`),new ka(c?.error??c?.message??o.statusText,o.status,c);return c}return{get:e=>r(`GET`,e),post:(e,t)=>r(`POST`,e,t??{}),put:(e,t)=>r(`PUT`,e,t),patch:(e,t)=>r(`PATCH`,e,t),del:e=>r(`DELETE`,e),upload:(e,t)=>{let n=new FormData;return n.set(`file`,t),r(`POST`,e,n)}}}var Na={can:()=>!1,call:e=>Promise.reject(Error(`the app cannot ${e}`)),tell:()=>void 0,download:()=>!1},Pa=null;function Fa(e){Pa=e,La=Ma(e.withBase,e.headers,e.onServerError),Qi(e.lang)}function Ia(){if(!Pa)throw Error(`configureRunner() first`);return Pa}var La=Ma(e=>e),Ra=e=>Ia().withBase(e),za=e=>Ia().asset(e),L=e=>Ia().runBase(e),Ba=e=>(Pa?.app??Na).can(e),Va=(e,t)=>(Pa?.app??Na).call(e,t),Ha=(e,t)=>(Pa?.app??Na).tell(e,t),Ua=(e,t,n)=>(Pa?.app??Na).download(e,t,n),Wa=()=>Pa?.standalone===!0,Ga=250;function Ka({runId:e,driving:t,caption:n,action:r,hint:i,className:o,onBroken:s}){let c=(0,a.useRef)(null),l=(0,a.useRef)(null),[u,d]=(0,a.useState)(``),[f,p]=(0,a.useState)(!1),[m,h]=(0,a.useState)(null),g=async t=>{h(null);try{await La.post(`${L(e)}/browser/act`,t)}catch(e){h(e.message)}};return(0,a.useEffect)(()=>{t&&l.current?.scrollIntoView({block:`nearest`,behavior:`smooth`})},[t]),(0,a.useEffect)(()=>{let n=c.current;if(!(n&&t))return;let r=0,i=null,a=t=>{t.preventDefault(),r+=t.deltaY,i??=setTimeout(()=>{i=null;let t=Math.max(-2e3,Math.min(2e3,Math.round(r)));r=0,t&&La.post(`${L(e)}/browser/act`,{type:`scroll`,dy:t}).catch(()=>void 0)},Ga)};return n.addEventListener(`wheel`,a,{passive:!1}),()=>{n.removeEventListener(`wheel`,a),i&&clearTimeout(i)}},[t,e]),(0,P.jsxs)(`div`,{className:o,children:[(0,P.jsxs)(`div`,{className:F(`relative aspect-[1280/900] w-full overflow-hidden rounded-xl bg-paper-2 ring-1`,t?`ring-2 ring-ember`:`ring-border-soft`),children:[(0,P.jsx)(`img`,{ref:c,src:Ra(`${L(e)}/browser/live`),alt:``,draggable:!1,onClick:e=>{if(!t)return;let n=e.currentTarget.getBoundingClientRect();g({type:`click`,fx:Math.min(1,Math.max(0,(e.clientX-n.left)/n.width)),fy:Math.min(1,Math.max(0,(e.clientY-n.top)/n.height))})},onError:s,className:F(`size-full object-cover object-top`,t&&`cursor-pointer`)}),r?(0,P.jsx)(`div`,{className:`absolute top-2 right-2`,children:r}):null,n&&!t?(0,P.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-0 flex items-center gap-1.5 bg-gradient-to-t from-black/75 to-transparent px-3 pt-8 pb-2 text-[0.8125rem] text-white`,children:[(0,P.jsx)(ai,{className:`size-3.5 shrink-0`}),(0,P.jsx)(`span`,{className:`truncate`,children:n})]}):null]}),t?(0,P.jsxs)(`div`,{ref:l,className:`mt-1.5`,children:[i?(0,P.jsx)(`p`,{className:`mb-1.5 text-[0.8125rem] text-ink-3`,children:i}):null,(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 rounded-xl bg-card p-2 ring-1 ring-border-soft`,children:[(0,P.jsx)(ma,{type:f?`password`:`text`,autoComplete:`off`,value:u,placeholder:M(`ask.typeInto`),onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),g({type:`type`,text:u}).then(()=>d(``)))},autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,enterKeyHint:`send`,className:`h-9 min-w-[9rem] flex-1 basis-full text-[0.8125rem] sm:basis-0 coarse:h-11`}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>p(e=>!e),className:F(`h-9 shrink-0 rounded-md px-2.5 text-[0.75rem] coarse:h-11 coarse:px-3.5`,f?`bg-ember-veil text-ink`:`text-ink-3 hover:bg-paper-2`),children:M(`ask.hide`)}),(0,P.jsx)(qa,{label:`Enter`,onClick:()=>void g({type:`key`,key:`Enter`}),children:(0,P.jsx)(xr,{className:`size-4`})}),(0,P.jsx)(qa,{label:M(`ask.up`),onClick:()=>void g({type:`scroll`,dy:-500}),children:(0,P.jsx)(Zn,{className:`size-4`})}),(0,P.jsx)(qa,{label:M(`ask.down`),onClick:()=>void g({type:`scroll`,dy:500}),children:(0,P.jsx)(Gn,{className:`size-4`})})]}),m?(0,P.jsx)(`p`,{className:`mt-1.5 text-[0.8125rem] text-rose`,children:m}):null]}):null]})}function qa({label:e,onClick:t,children:n}){return(0,P.jsx)(`button`,{type:`button`,"aria-label":e,title:e,onClick:t,className:`flex size-9 shrink-0 items-center justify-center rounded-md text-ink-3 hover:bg-paper-2 hover:text-ink coarse:size-11`,children:n})}function Ja({runId:e,ask:t}){return t.kind===`confirm`?(0,P.jsx)(Ya,{runId:e,ask:t}):(0,P.jsx)(Xa,{runId:e,ask:t})}function Ya({runId:e,ask:t}){let[n,r]=(0,a.useState)(!1),[i,o]=(0,a.useState)(!1),[s,c]=(0,a.useState)(null),l=async n=>{o(!0),c(null);try{await La.post(`${L(e)}/ask/${t.id}`,n)}catch(e){c(e.message),o(!1)}},u=t.action.destructive?Li:di;return(0,P.jsxs)(`div`,{className:`animate-rise`,children:[(0,P.jsxs)(`div`,{className:`mb-5 flex items-start gap-3`,children:[(0,P.jsx)(`div`,{className:F(`flex size-10 shrink-0 items-center justify-center rounded-full`,t.action.destructive?`bg-rose-tint text-rose`:`bg-ember-tint text-ember-strong`),children:(0,P.jsx)(u,{className:`size-5`})}),(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`p`,{className:`text-[0.8125rem] text-ink-3`,children:M(`ask.wants`,{service:t.service})}),(0,P.jsx)(`h2`,{className:`font-display font-semibold text-[1.25rem] leading-snug tracking-tight`,children:t.reason})]})]}),(0,P.jsx)(`pre`,{className:`max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-xl bg-paper-2 p-4 text-[0.8125rem] leading-relaxed ring-1 ring-border-soft`,children:t.input}),(0,P.jsxs)(`div`,{className:`mt-5 flex items-center gap-4`,children:[(0,P.jsx)(xa,{checked:n,onChange:r,label:M(`ask.allowRest`)}),(0,P.jsx)(`span`,{className:`flex-1 text-[0.8125rem] text-ink-2`,children:M(`ask.allowRest`)})]}),s?(0,P.jsx)(`div`,{className:`mt-3 rounded-lg bg-rose-tint px-4 py-3 text-[0.875rem] text-rose`,children:s}):null,(0,P.jsxs)(`div`,{className:`action-bar mt-6 flex items-center justify-between gap-3`,children:[(0,P.jsx)(I,{variant:`ghost`,disabled:i,onClick:()=>void l({type:`skip`}),children:M(`ask.deny`)}),(0,P.jsx)(I,{busy:i,onClick:()=>void l({type:`done`,remember:n}),children:M(`ask.allow`)})]})]})}function Xa({runId:e,ask:t}){let[n,r]=(0,a.useState)({}),[i,o]=(0,a.useState)(!1),[s,c]=(0,a.useState)(!1),[l,u]=(0,a.useState)(null),d=async n=>{c(!0),u(null);try{await La.post(`${L(e)}/ask/${t.id}`,n)}catch(e){u(e.message),c(!1)}},f=t.fields.some(e=>n[e.id]);return(0,P.jsxs)(`div`,{className:`animate-rise`,children:[(0,P.jsxs)(`div`,{className:`mb-5 flex items-start gap-3`,children:[(0,P.jsx)(`div`,{className:`flex size-10 shrink-0 items-center justify-center rounded-full bg-ember-tint text-ember-strong`,children:(0,P.jsx)(Zr,{className:`size-5`})}),(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`h2`,{className:`font-display font-semibold text-[1.25rem] leading-snug tracking-tight`,children:t.reason}),(0,P.jsxs)(`p`,{className:`mt-0.5 truncate text-[0.8125rem] text-ink-3`,children:[t.site.host,t.site.title?` · ${t.site.title}`:``]})]})]}),(0,P.jsx)(Ka,{runId:e,driving:!0}),(0,P.jsx)(`p`,{className:`mt-2 text-[0.75rem] text-ink-4`,children:M(`ask.pictureHint`)}),t.fields.length?(0,P.jsxs)(`form`,{className:`mt-5 flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),d({type:`fill`,values:n,remember:i})},children:[t.fields.map((e,i)=>(0,P.jsxs)(`div`,{children:[(0,P.jsx)(Sa,{children:e.label}),(0,P.jsx)(ma,{autoFocus:i===0,type:e.secret?`password`:`text`,autoComplete:`off`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,enterKeyHint:i===t.fields.length-1?`go`:`next`,value:n[e.id]??``,onChange:t=>r(n=>({...n,[e.id]:t.target.value}))})]},e.id)),(0,P.jsx)(`button`,{type:`submit`,hidden:!0})]}):null,(0,P.jsxs)(`div`,{className:`mt-5 flex items-center justify-between gap-4`,children:[(0,P.jsx)(xa,{checked:i,onChange:o,label:M(`ask.remember`)}),(0,P.jsx)(`span`,{className:`flex-1 text-[0.8125rem] text-ink-2`,children:M(`ask.remember`)})]}),(0,P.jsxs)(`p`,{className:`mt-3 flex items-start gap-2 text-[0.8125rem] text-ink-3`,children:[(0,P.jsx)(Di,{className:`mt-0.5 size-4 shrink-0 text-moss`}),` `,M(`ask.private`)]}),l?(0,P.jsx)(`div`,{className:`mt-3 rounded-lg bg-rose-tint px-4 py-3 text-[0.875rem] text-rose`,children:l}):null,(0,P.jsxs)(`div`,{className:`action-bar mt-6 flex flex-wrap items-center justify-between gap-3`,children:[(0,P.jsx)(I,{variant:`ghost`,disabled:s,onClick:()=>void d({type:`skip`}),children:M(`ask.skip`)}),(0,P.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[t.fields.length?(0,P.jsx)(I,{variant:`secondary`,disabled:s,onClick:()=>void d({type:`done`,remember:i}),children:M(`ask.done`)}):null,t.fields.length?(0,P.jsx)(I,{busy:s,disabled:!f,onClick:()=>void d({type:`fill`,values:n,remember:i}),children:M(`ask.signIn`)}):(0,P.jsx)(I,{busy:s,onClick:()=>void d({type:`done`,remember:i}),children:M(`ask.done`)})]})]})]})}var Za=typeof window<`u`&&window.matchMedia?.(`(pointer: coarse)`).matches===!0,Qa=typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia;function $a(){(0,a.useEffect)(()=>{let e=window.visualViewport;if(!e)return;let t=document.documentElement,n=()=>{let n=e.scale>1.01?0:window.innerHeight-e.height-e.offsetTop,r=n>80;t.style.setProperty(`--kb`,r?`${Math.round(n)}px`:`0px`),t.classList.toggle(`keyboard-open`,r)};return n(),e.addEventListener(`resize`,n),e.addEventListener(`scroll`,n),()=>{e.removeEventListener(`resize`,n),e.removeEventListener(`scroll`,n),t.style.removeProperty(`--kb`),t.classList.remove(`keyboard-open`)}},[])}function eo(e){let[t,n]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(e&&Ba(`keepAwake`))return Ha(`keepAwake`,!0),n(!0),()=>{Ha(`keepAwake`,!1),n(!1)};if(!e||!(`wakeLock`in navigator))return;let t=null,r=!1,i=async()=>{if(!(r||t||document.visibilityState!==`visible`))try{let e=await navigator.wakeLock.request(`screen`);if(r){e.release().catch(()=>void 0);return}t=e,n(!0),e.addEventListener(`release`,()=>{t===e&&(t=null,n(!1))})}catch{}};return i(),document.addEventListener(`visibilitychange`,i),()=>{r=!0,document.removeEventListener(`visibilitychange`,i),t?.release().catch(()=>void 0),t=null,n(!1)}},[e]),t}var to=`wz.notify`,no=new Set,ro=null;function io(){try{return localStorage.getItem(to)===`1`}catch{return!1}}function ao(e){try{e?localStorage.setItem(to,`1`):localStorage.removeItem(to)}catch{}for(let e of no)e()}var oo=typeof window<`u`&&`Notification`in window,so=null;function co(){return io()?Ba(`notify`)?so===!1?`quiet`:`on`:oo&&Notification.permission===`granted`?`on`:`quiet`:`off`}function lo(){return(0,a.useSyncExternalStore)(e=>(no.add(e),()=>no.delete(e)),co,()=>`off`)}function uo(){return Ba(`notify`)?so===!1:oo&&Notification.permission===`denied`}async function fo(){if(ao(!0),Ba(`notify`)){so=!Ba(`notifyPermission`)||await Va(`notifyPermission`).catch(()=>!1);for(let e of no)e();return co()}try{ro??=new AudioContext,ro.resume()}catch{ro=null}if(oo&&Notification.permission==="default")try{await Notification.requestPermission()}catch{}if(oo&&Notification.permission===`granted`){let e=Ia().serviceWorker;e&&await navigator.serviceWorker?.register(e).catch(()=>void 0)}for(let e of no)e();return co()}function po(){ao(!1)}function mo(){let e=ro;if(e?.state!==`running`)return;let t=e.currentTime;for(let[n,r]of[660,880].entries()){let i=e.createOscillator(),a=e.createGain();i.frequency.value=r,a.gain.setValueAtTime(0,t+n*.16),a.gain.linearRampToValueAtTime(.18,t+n*.16+.02),a.gain.exponentialRampToValueAtTime(.001,t+n*.16+.32),i.connect(a).connect(e.destination),i.start(t+n*.16),i.stop(t+n*.16+.34)}}async function ho(e){if(!io())return;if(Ba(`notify`)){Ha(`notify`,e);return}if(document.visibilityState===`visible`){mo(),navigator.vibrate?.([120,60,120]);return}if(!oo||Notification.permission!==`granted`)return;let t={body:e.body,tag:e.tag,icon:za(`icons/icon-192.png`),badge:za(`icons/icon-192.png`),data:{url:location.href}};try{let n=await navigator.serviceWorker?.getRegistration();if(n?.active){await n.showNotification(e.title,t);return}}catch{}try{new Notification(e.title,t)}catch{}}function go(){if(typeof navigator>`u`||!navigator.canShare)return!1;try{return navigator.canShare({files:[new File([`x`],`x.pdf`,{type:`application/pdf`})]})}catch{return!1}}async function _o(e,t=2400){if(!/^image\/(jpeg|png|webp)$/.test(e.type)||e.size<12e5)return e;try{let n=await createImageBitmap(e),r=Math.min(1,t/Math.max(n.width,n.height)),i=document.createElement(`canvas`);i.width=Math.round(n.width*r),i.height=Math.round(n.height*r),i.getContext(`2d`)?.drawImage(n,0,0,i.width,i.height);let a=await new Promise(e=>i.toBlob(e,`image/jpeg`,.86));return a&&a.size<e.size?new File([a],`${e.name.replace(/\.[^.]+$/,``)}.jpg`,{type:`image/jpeg`}):e}catch{return e}}function vo(){return new Date().toISOString().slice(0,19).replace(/[:T]/g,`-`)}function yo(e){let t=e?.name;return t===`NotFoundError`||t===`OverconstrainedError`?`missing`:t===`NotReadableError`||t===`AbortError`?`busy`:`denied`}function bo(e){return!!e?.getCapabilities?.()?.torch}function xo(e,t,n=!1){let r=(0,a.useRef)(null),[i,o]=(0,a.useState)(null),[s,c]=(0,a.useState)(null),[l,u]=(0,a.useState)(1),[d,f]=(0,a.useState)(!1),[p,m]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(!e)return;let r=null,i=!1;c(null),o(null),f(!1),m(!1);let a={facingMode:{ideal:t},width:{ideal:2560},height:{ideal:1440}};return(async()=>{if(!navigator.mediaDevices?.getUserMedia)throw new DOMException(`no camera api`,`NotAllowedError`);try{r=await navigator.mediaDevices.getUserMedia({video:a,audio:n})}catch(e){if(!n)throw e;r=await navigator.mediaDevices.getUserMedia({video:a})}if(i){for(let e of r.getTracks())e.stop();return}o(r);let e=r.getVideoTracks()[0],t=()=>!i&&f(bo(e));t(),setTimeout(t,600);let s=await navigator.mediaDevices.enumerateDevices().catch(()=>[]);i||u(s.filter(e=>e.kind===`videoinput`).length)})().catch(e=>!i&&c(yo(e))),()=>{i=!0;for(let e of r?.getTracks()??[])e.stop()}},[e,t,n]),(0,a.useEffect)(()=>{r.current&&i&&(r.current.srcObject=i)},[i]),{video:r,stream:i,error:s,cameras:l,torchable:d,torch:p,setTorch:async e=>{let t=i?.getVideoTracks()[0];try{await t?.applyConstraints({advanced:[{torch:e}]}),m(e)}catch{f(!1)}},mirrored:i?.getVideoTracks()[0]?.getSettings().facingMode===`user`}}function So({open:e,onClose:t,label:n,children:r}){let i=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let t=i.current;t&&(e&&!t.open?t.showModal():!e&&t.open&&t.close())},[e]),(0,P.jsx)(`dialog`,{ref:i,onClose:t,"aria-label":n,className:`media-sheet`,children:e?(0,P.jsx)(`div`,{className:`flex h-full flex-col`,children:r}):null})}function Co({label:e,onClick:t,active:n,children:r}){return(0,P.jsx)(`button`,{type:`button`,"aria-label":e,title:e,"aria-pressed":n,onClick:t,className:F(`flex size-11 shrink-0 items-center justify-center rounded-full transition`,n?`bg-white text-black`:`bg-white/12 text-white hover:bg-white/20`),children:r})}function wo({title:e,onClose:t,camera:n,onFlip:r}){return(0,P.jsx)(`div`,{className:`safe-top`,children:(0,P.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2`,children:[(0,P.jsx)(Co,{label:M(`common.close`),onClick:t,children:(0,P.jsx)(Ui,{className:`size-5`})}),(0,P.jsx)(`div`,{className:`min-w-0 flex-1 truncate text-center font-medium text-[0.9375rem]`,children:e}),n.torchable?(0,P.jsx)(Co,{label:M(`camera.torch`),active:n.torch,onClick:()=>void n.setTorch(!n.torch),children:n.torch?(0,P.jsx)(zr,{className:`size-5`}):(0,P.jsx)(Lr,{className:`size-5`})}):null,n.stream&&(n.cameras>1||Za)?(0,P.jsx)(Co,{label:M(`camera.flip`),onClick:r,children:(0,P.jsx)(Ni,{className:`size-5`})}):(0,P.jsx)(`span`,{className:`size-11`})]})})}function To({camera:e,asking:t,children:n,actions:r}){return(0,P.jsxs)(`div`,{className:`relative min-h-0 flex-1 overflow-hidden`,children:[(0,P.jsx)(`video`,{ref:e.video,autoPlay:!0,playsInline:!0,muted:!0,className:F(`absolute inset-0 size-full object-contain`,e.mirrored&&`-scale-x-100`)}),e.error?(0,P.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-5 bg-black px-8 text-center`,children:[(0,P.jsx)(`p`,{className:`max-w-sm text-[0.9375rem] text-white/85 leading-relaxed`,children:M(`camera.${e.error}`)}),r]}):e.stream?n:(0,P.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-4 px-8 text-center text-white/75`,children:[(0,P.jsx)(Ca,{}),(0,P.jsx)(`p`,{className:`max-w-xs text-[0.875rem] leading-relaxed`,children:t})]})]})}var Eo=30;function Do(){if(typeof MediaRecorder<`u`)return[`video/mp4;codecs=avc1.42E01E,mp4a.40.2`,`video/mp4`,`video/webm;codecs=vp9,opus`,`video/webm;codecs=vp8,opus`,`video/webm`].find(e=>MediaRecorder.isTypeSupported(e))}var Oo=!!Do();function ko({open:e,multiple:t,video:n,onClose:r,onCapture:i,onNative:o}){let[s,c]=(0,a.useState)(`environment`),[l,u]=(0,a.useState)(`photo`),[d,f]=(0,a.useState)(0),[p,m]=(0,a.useState)(!1),[h,g]=(0,a.useState)(null),_=(0,a.useRef)(null),v=xo(e,s,l===`video`);(0,a.useEffect)(()=>{e&&(f(0),u(`photo`),g(null))},[e]);let y=async e=>{m(!0);try{await i(e),f(e=>e+1),t||r()}finally{m(!1)}},b=async()=>{let e=v.video.current;if(!e?.videoWidth)return;let t=document.createElement(`canvas`);t.width=e.videoWidth,t.height=e.videoHeight,t.getContext(`2d`)?.drawImage(e,0,0);let n=await new Promise(e=>t.toBlob(e,`image/jpeg`,.9));n&&await y(new File([n],`foto-${vo()}.jpg`,{type:`image/jpeg`}))},x=()=>{_.current?.state===`recording`&&_.current.stop()},S=()=>{let e=Do();if(!v.stream||!e)return;let t=[],n=new MediaRecorder(v.stream,{mimeType:e,videoBitsPerSecond:25e5,audioBitsPerSecond:96e3});n.ondataavailable=e=>e.data.size&&t.push(e.data),n.onstop=()=>{g(null),_.current=null;let n=e.split(`;`)[0];if(t.length){let e=n===`video/mp4`?`mp4`:`webm`;y(new File(t,`video-${vo()}.${e}`,{type:n}))}},_.current=n,n.start(1e3),g(0)};(0,a.useEffect)(()=>{if(h===null)return;if(h>=Eo){_.current?.state===`recording`&&_.current.stop();return}let e=setTimeout(()=>g(e=>e===null?null:e+1),1e3);return()=>clearTimeout(e)},[h]),(0,a.useEffect)(()=>{!e&&_.current&&(_.current.onstop=null,_.current.stop(),_.current=null)},[e]);let C=e=>`0:${String(e).padStart(2,`0`)}`;return(0,P.jsxs)(So,{open:e,onClose:r,label:M(`camera.title`),children:[(0,P.jsx)(wo,{title:h===null?d?M(`camera.taken`,{n:d}):M(`camera.title`):`${C(h)} / ${C(Eo)}`,onClose:r,camera:v,onFlip:()=>c(e=>e===`environment`?`user`:`environment`)}),(0,P.jsx)(To,{camera:v,asking:M(`camera.asking`),actions:(0,P.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[o?(0,P.jsxs)(Ao,{onClick:()=>{r(),o()},children:[(0,P.jsx)(sr,{className:`size-4`}),` `,M(Za?`camera.native`:`camera.pick`)]}):null,(0,P.jsx)(Ao,{quiet:!0,onClick:r,children:M(`common.close`)})]})}),(0,P.jsxs)(`div`,{className:F(`safe-bottom px-4 pt-3`,v.error&&`invisible`),children:[n&&Oo&&h===null?(0,P.jsx)(`div`,{className:`mb-3 flex justify-center gap-1 text-[0.8125rem]`,children:[`photo`,`video`].map(e=>(0,P.jsx)(`button`,{type:`button`,"aria-pressed":l===e,onClick:()=>u(e),className:F(`h-9 rounded-full px-4 font-medium transition`,l===e?`bg-white text-black`:`text-white/70 hover:text-white`),children:M(e===`photo`?`camera.photo`:`camera.video`)},e))}):null,(0,P.jsxs)(`div`,{className:`grid grid-cols-[1fr_auto_1fr] items-center gap-3`,children:[(0,P.jsx)(`span`,{className:`text-[0.8125rem] text-white/70 leading-snug`,children:h===null?l===`video`?M(`camera.clipHint`,{s:Eo}):M(t?`camera.hintMany`:`camera.hint`):M(`camera.recording`)}),(0,P.jsx)(`button`,{type:`button`,"aria-label":M(l===`photo`?`camera.shoot`:h===null?`camera.record`:`camera.stop`),disabled:!v.stream||p,onClick:()=>l===`photo`?void b():h===null?S():x(),className:`flex size-[72px] items-center justify-center rounded-full border-4 border-white transition active:scale-95 disabled:opacity-40`,children:p?(0,P.jsx)(Ca,{className:`text-white`}):l===`photo`?(0,P.jsx)(`span`,{className:`size-[54px] rounded-full bg-white`}):h===null?(0,P.jsx)(`span`,{className:`flex size-[54px] items-center justify-center rounded-full bg-[#e5484d]`,children:(0,P.jsx)(Vi,{className:`size-6 text-white`})}):(0,P.jsx)(`span`,{className:`size-7 rounded-md bg-[#e5484d]`})}),(0,P.jsx)(`div`,{className:`flex justify-end`,children:t&&d&&h===null?(0,P.jsxs)(Ao,{onClick:r,children:[(0,P.jsx)(lr,{className:`size-4`}),` `,M(`camera.done`)]}):null})]})]})]})}function Ao({onClick:e,quiet:t,children:n}){return(0,P.jsx)(`button`,{type:`button`,onClick:e,className:F(`inline-flex h-11 items-center justify-center gap-2 rounded-full px-5 font-medium text-[0.875rem] transition`,t?`text-white/75 hover:text-white`:`bg-white text-black hover:bg-white/90`),children:n})}function jo(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function Mo(e,t=`|`){return e.map(e=>is(e)).join(t)}function No(e,t){return typeof t==`bigint`?t.toString():t}var Po=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function Fo(e){return new Po(e)}function Io(e){return e==null}function Lo(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function Ro(e,t){let n=e/t,r=Math.round(n),i=4*2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}function zo(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function Bo(e){let t=Object.getOwnPropertyDescriptor(e,`shape`);return t?.get?t.get.raw:t?.value}function Vo(e){return Bo(e._zod.def)??e._zod.def.shape}function Ho(e,t,n){Object.defineProperty(e,t,{get(){let e=n();return zo(this,t,e),e},enumerable:!0,configurable:!0})}function Uo(e,t,n){t in e?zo(e,t,n):e[t]=n}function Wo(e,t,n,r){let i=Vo(t);for(let a of n){let n=Object.getOwnPropertyDescriptor(i,a);n.enumerable&&(n.get?Ho(e,a,()=>{let e=t._zod.def.shape[a];return r?r(e,a):e}):Uo(e,a,r?r(n.value,a):n.value))}}function Go(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?Ho(e,n,()=>t[n]):Uo(e,n,r.value))}}function Ko(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function qo(e){return JSON.stringify(e)}function Jo(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var Yo=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function Xo(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Zo=Fo(()=>{if(Ks.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function Qo(e){if(Xo(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return Xo(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function $o(e){return Qo(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var es=new Set([`string`,`number`,`symbol`]),ts=new Set([`string`,`number`,`bigint`,`boolean`,`symbol`,`undefined`]);function ns(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function rs(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function R(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function is(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function as(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var os={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},ss={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function cs(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return Wo(i,e,ls(e,t)),rs(e,Ko(n,{shape:i,checks:[]}))}function ls(e,t){let n=Vo(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function us(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set(ls(e,t)),a={};return Wo(a,e,Reflect.ownKeys(Vo(e)).filter(e=>!i.has(e))),rs(e,Ko(n,{shape:a,checks:[]}))}function ds(e,t){if(!Qo(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=Vo(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return rs(e,Ko(e._zod.def,{shape:fs(e,t)}))}function fs(e,t){let n={};return Wo(n,e,Reflect.ownKeys(Vo(e))),Go(n,t),n}function ps(e,t){if(!Qo(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return rs(e,Ko(e._zod.def,{shape:fs(e,t)}))}function ms(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return Wo(n,e,Reflect.ownKeys(Vo(e))),Wo(n,t,Reflect.ownKeys(Vo(t))),rs(e,Ko(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function hs(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set(ls(t,n)):void 0,o={};return Wo(o,t,Reflect.ownKeys(Vo(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),rs(t,Ko(t._zod.def,{shape:o,checks:[]}))}function gs(e,t,n){let r=n?new Set(ls(t,n)):void 0,i={};return Wo(i,t,Reflect.ownKeys(Vo(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),rs(t,Ko(t._zod.def,{shape:i}))}function _s(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function vs(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function ys(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function bs(e){return typeof e==`string`?e:e?.message}function xs(e,t,n){var r;for(let i=t;i<e.length;i++)(r=e[i]).schema??(r.schema=n)}function Ss(e,t,n){var r;let i=e.inst?._zod?.traits;i?.has(`$ZodType`)&&(i.has(`$ZodCheck`)?(r=e).schema??(r.schema=e.inst):e.schema=e.inst);let a=e.schema===e.inst?void 0:e.schema?._zod.def?.error,o=e.message?e.message:bs(e.inst?._zod.def?.error?.(e))??bs(a?.(e))??bs(t?.error?.(e))??bs(n.customError?.(e))??bs(n.localeError?.(e))??`Invalid input`,s={};for(let t of Object.keys(e))t!==`inst`&&t!==`schema`&&t!==`continue`&&t!==`input`&&t!==`__proto__`&&(s[t]=e[t]);return s.path??=[],s.message=o,t?.reportInput&&(s.input=e.input),s}var Cs=/[\uD800-\uDBFF]/;function ws(e){let t=e.length;if(!Cs.test(e))return t;let n=t;for(let r=0;r<t-1;r++)(e.charCodeAt(r)&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320&&(n--,r++);return n}function Ts(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Es(e){let t=typeof e;switch(t){case`number`:return Number.isNaN(e)?`nan`:`number`;case`object`:{if(e===null)return`null`;if(Array.isArray(e))return`array`;let t=e;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&`constructor`in t&&t.constructor)return t.constructor.name}}return t}function Ds(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}function Os(e,t){for(let n in t){let r=Object.getOwnPropertyDescriptor(t,n);r.get?Object.defineProperty(e,n,{...r,enumerable:!1}):Ms(e,n,r.value)}}function ks(e,t,n,r=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:r,value:n}),n}function As(e,t,n){return ks(e,t,n,!1)}function js(e,t){for(let n in e){let r=e[n];Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get(){return ks(this,n,r(this))},set(e){ks(this,n,e)}})}return t}function Ms(e,t,n){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?n:ks(this,t,n.bind(this))},set(e){ks(this,t,e)}})}function Ns(e,t){let n=Object.getPrototypeOf(e);return t in n?void 0:n}var Ps,Fs=!1,Is={configurable:!0,get(){Fs=!0}};function z(e,t,n){let r=Object.getPrototypeOf(e._zod);if(t in r&&Ps!==e._zod){Ps=void 0;return}Ps=e._zod,Object.defineProperty(r,t,{configurable:!0,get(){Object.defineProperty(this,t,Is);let e=Fs;Fs=!1;try{let r=n(this);return Fs?delete this[t]:Object.defineProperty(this,t,{configurable:!0,writable:!0,value:r}),Fs||=e,r}catch(n){throw delete this[t],Fs||=e,n}},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})}function Ls(e,t,n,r){let i=Ns(e,t);i&&Object.defineProperty(i,t,{configurable:!0,get(){let e={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,t,e),e.value=n(this),Object.defineProperty(this,t,e),e.value},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:r,value:e})}})}var Rs=`~constantCatch`;function zs(e){let t=()=>e;return t[Rs]=!0,t}var Bs,Vs={value:void 0,enumerable:!1},Hs=`captureStackTrace`in Error?Error:null;function Us(e){let t=Hs;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return Hs=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function B(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){Vs.value=new a(r);try{Object.defineProperty(n,"_zod",Vs)}finally{Vs.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),Os(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?Us(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var Ws=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},Gs=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Bs=globalThis).__zod_globalConfig??(Bs.__zod_globalConfig={});var Ks=globalThis.__zod_globalConfig;function qs(e){return e&&Object.assign(Ks,e),Ks}function Js(){let e=this._zod;return e.message??=JSON.stringify(e.def,No,2),e.message}function Ys(e){this._zod.message=e}var Xs={get:Js,set:Ys,enumerable:!0,configurable:!0},Zs={value:void 0,enumerable:!1},Qs=new WeakSet([Object.prototype,Error.prototype]),$s=(e,t)=>{e.name=`$ZodError`,Zs.value=t,Object.defineProperty(e,"issues",Zs),Zs.value=void 0,Object.defineProperty(e,"message",Xs);let n=Object.getPrototypeOf(e);Qs.has(n)||(Qs.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},ec=B(`$ZodError`,$s);B(`$ZodError`,$s,void 0,{Parent:Error});function tc(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function nc(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?tc(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function rc(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i],o=i===e.length-1;if(n===`_errors`){o&&r._errors.push(t(a)),i++;continue}Object.prototype.hasOwnProperty.call(r,n)||Object.defineProperty(r,n,{value:{_errors:[]},enumerable:!0,writable:!0,configurable:!0});let s=r[n];o&&s._errors.push(t(a)),r=s,i++}}}};return r(e),n}function ic(e,t){return{callee:t?.callee??e,Err:t?.Err}}var ac=e=>{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new Ws;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>Ss(e,o,qs())));throw Yo(n,a?.callee??t),n}return s.value};return t},oc=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>Ss(e,o,qs())));throw Yo(n,a?.callee??t),n}return s.value};return t},sc=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new Ws;return a.issues.length?cc(e,a.issues,i):{success:!0,data:a.value}};function cc(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>Ss(e,n,qs()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var lc=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?cc(e,a.issues,i):{success:!0,data:a.value}},uc=Symbol.for(`zod.compile.invalid`),dc=Symbol.for(`zod.compile.fallback`),fc=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==uc)return!0;if(r.definite===!0&&n===void 0)return!1}return pc(e,t,n)});function pc(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[dc]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new Ws;return a.issues.length===0}var mc=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},hc=e=>{let t=ac(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,ic(n,a))};return n},gc=e=>{let t=ac(e),n=(e,r,i,a)=>t(e,r,i,ic(n,a));return n},_c=e=>{let t=oc(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,ic(n,a))};return n},vc=e=>{let t=oc(e),n=async(e,r,i,a)=>await t(e,r,i,ic(n,a));return n},yc=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return sc(e)(t,n,i)},bc=e=>(t,n,r)=>sc(e)(t,n,r),xc=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return lc(e)(t,n,i)},Sc=e=>async(t,n,r)=>lc(e)(t,n,r),Cc=/^[cC][0-9a-z]{6,}$/,wc=/^[0-9a-z]+$/,Tc=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,Ec=/^[0-9a-vA-V]{20}$/,Dc=/^[A-Za-z0-9]{27}$/,Oc=/^[a-zA-Z0-9_-]{21}$/;function kc(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var Ac=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,jc=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Mc=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Nc=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Pc=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function Fc(){return new RegExp(Pc,`u`)}var Ic=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Lc=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Rc=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,zc=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Bc=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Vc=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,Hc=/^https?$/,Uc=/^\+[1-9]\d{6,14}$/,Wc=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function Gc(e){return RegExp(`^${e}$`)}var Kc=Gc(Wc);function qc(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Jc(e){return RegExp(`^${qc(e)}$`)}function Yc(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${qc({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${qc({precision:e.precision})}`:n;return RegExp(`^${Wc}T(?:${r})$`)}var Xc=/^[\s\S]{0,}$/,Zc=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},Qc=/^-?\d+$/,$c=/^-?\d+(?:\.\d+)?$/,el=/^(?:true|false)$/i,tl=/^[^A-Z]*$/,nl=/^[^a-z]*$/,rl=B(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),il=e=>{let t=e.value;return!Io(t)&&t.length!==void 0},al={number:`number`,bigint:`bigint`,object:`date`},ol=B(`$ZodCheckLessThan`,(e,t)=>{rl.init(e,t);let n=al[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:al[typeof r.value]??n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),sl=B(`$ZodCheckGreaterThan`,(e,t)=>{rl.init(e,t);let n=al[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:al[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),cl=B(`$ZodCheckMultipleOf`,(e,t)=>{rl.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):Ro(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),ll=B(`$ZodCheckNumberFormat`,(e,t)=>{rl.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=os[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),ul=B(`$ZodCheckMaxLength`,(e,t)=>{var n;rl.init(e,t),(n=e._zod.def).when??(n.when=il),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?ws(r):i)<=t.maximum)return;let a=Ts(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),dl=B(`$ZodCheckMinLength`,(e,t)=>{var n;rl.init(e,t),(n=e._zod.def).when??(n.when=il),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i<t.minimum*2?ws(r):i)>=t.minimum)return;let a=Ts(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),fl=B(`$ZodCheckLengthEquals`,(e,t)=>{var n;rl.init(e,t),(n=e._zod.def).when??(n.when=il),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?ws(r):i;if(a===t.length)return;let o=Ts(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),pl=B(`$ZodCheckStringFormat`,(e,t)=>{var n,r;rl.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),ml=B(`$ZodCheckRegex`,(e,t)=>{pl.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),hl=B(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=tl,pl.init(e,t)}),gl=B(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=nl,pl.init(e,t)}),_l=B(`$ZodCheckIncludes`,(e,t)=>{rl.init(e,t);let n=ns(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),vl=B(`$ZodCheckStartsWith`,(e,t)=>{rl.init(e,t);let n=RegExp(`^${ns(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),yl=B(`$ZodCheckEndsWith`,(e,t)=>{rl.init(e,t);let n=RegExp(`.*${ns(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),bl=B(`$ZodCheckOverwrite`,(e,t)=>{rl.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),xl=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
4
|
+
Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let d=nt(),m;if(t){let e=typeof t==`string`?v(t):t;f(l===`/`||e.pathname?.startsWith(l),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${l}" but pathname "${e.pathname}" was given in the \`location\` prop.`),m=e}else m=d;let h=m.pathname||`/`,g=h;if(l!==`/`){let e=l.replace(/^\//,``).split(`/`);g=`/`+h.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let _=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):x(e,{pathname:g});p(u||_!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),p(_==null||_[_.length-1].route.element!==void 0||_[_.length-1].route.Component!==void 0||_[_.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let y=gt(_&&_.map(e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:xe([l,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?l:xe([l,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&y?a.createElement(Ke.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...m},navigationType:`POP`}},y):y}function dt(){let e=Ct(),t=Te(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},o={padding:`2px 4px`,backgroundColor:r},s=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),s=a.createElement(a.Fragment,null,a.createElement(`p`,null,`💿 Hey developer 👋`),a.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,a.createElement(`code`,{style:o},`ErrorBoundary`),` or`,` `,a.createElement(`code`,{style:o},`errorElement`),` prop on your route.`)),a.createElement(a.Fragment,null,a.createElement(`h2`,null,`Unexpected Application Error!`),a.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?a.createElement(`pre`,{style:i},n):null,s)}var ft=a.createElement(dt,null),pt=class extends a.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=$e(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:a.createElement(qe.Provider,{value:this.props.routeContext},a.createElement(Je.Provider,{value:e,children:this.props.component}));return this.context?a.createElement(mt,{error:e},t):t}};pt.contextType=Be;var A=new WeakMap;function mt({children:e,error:t}){let{basename:n,navigator:r}=a.useContext(Ge);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Qe(t.digest);if(e){let i=A.get(t);if(i)throw i;let o=Oe(e.location,n),s=o.absoluteURL||o.to;if(Ne(e.location,s,Ae(r),`allow-explicit`),Le(s))throw Error(`Invalid redirect location`);if(De&&!A.get(t)){if(o.isExternal||e.reloadDocument)window.location.href=s;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(o.to,{replace:e.replace}));throw A.set(t,n),n}}return a.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${s}`})}}return e}function ht({routeContext:e,match:t,children:n}){let r=a.useContext(Re);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),a.createElement(qe.Provider,{value:e},n)}function gt(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,o=r?.errors;if(o!=null){let e=i.findIndex(e=>e.route.id&&o?.[e.route.id]!==void 0);f(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let s=!1,c=-1;if(n&&r){s=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:a}=r,o=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||o){n.isStatic&&(s=!0),i=c>=0?i.slice(0,c+1):[i[0]];break}}}}let l=n?.onError,u=r&&l?(e,t)=>{l(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:Ee(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,l)=>{let d,f=!1,p=null,m=null;r&&(d=o&&n.route.id?o[n.route.id]:void 0,p=n.route.errorElement||ft,s&&(c<0&&l===0?(Et(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),f=!0,m=null):c===l&&(f=!0,m=n.route.hydrateFallbackElement||null)));let h=t.concat(i.slice(0,l+1)),g=()=>{let t;return t=d?p:f?m:n.route.Component?a.createElement(n.route.Component,null):n.route.element?n.route.element:e,a.createElement(ht,{match:n,routeContext:{outlet:e,matches:h,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||l===0)?a.createElement(pt,{location:r.location,revalidation:r.revalidation,component:p,error:d,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:u}):g()},null)}function _t(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function vt(e){let t=a.useContext(Re);return f(t,_t(e)),t}function yt(e){let t=a.useContext(ze);return f(t,_t(e)),t}function bt(e){let t=a.useContext(qe);return f(t,_t(e)),t}function xt(e){let t=bt(e),n=t.matches[t.matches.length-1];return f(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function St(){return xt(`useRouteId`)}function Ct(){let e=a.useContext(Je),t=yt(`useRouteError`),n=xt(`useRouteError`);return e===void 0?t.errors?.[n]:e}function wt(){let{router:e}=vt(`useNavigate`),t=xt(`useNavigate`),n=a.useRef(!1);return it(()=>{n.current=!0}),a.useCallback(async(r,i={})=>{p(n.current,rt),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Tt={};function Et(e,t,n){!t&&!Tt[e]&&(Tt[e]=!0,p(!1,n))}a.memo(Dt);function Dt({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return ut(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Ot({to:e,replace:t,state:n,relative:r}){f(tt(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i,navigator:o}=a.useContext(Ge);p(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:s}=a.useContext(qe),{pathname:c}=nt(),l=at(),u=ye(e,ve(s),c,r===`path`);Ne(typeof e==`string`?e:_(e),o.createHref(u),Ae(o),`reject`);let d=JSON.stringify(u);return a.useEffect(()=>{l(JSON.parse(d),{replace:t,state:n,relative:r})},[l,d,r,t,n]),null}function kt(e){f(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function At({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:o=!1,useTransitions:s}){f(!tt(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let c=e.replace(/^\/*/,`/`),l=a.useMemo(()=>({basename:c,navigator:i,static:o,useTransitions:s,future:{}}),[c,i,o,s]);typeof n==`string`&&(n=v(n));let{pathname:u=`/`,search:d=``,hash:m=``,state:h=null,key:g=`default`,mask:_}=n,y=a.useMemo(()=>{let e=pe(u,c);return e==null?null:{location:{pathname:e,search:d,hash:m,state:h,key:g,mask:_},navigationType:r}},[c,u,d,m,h,g,r,_]);return p(y!=null,`<Router basename="${c}"> is not able to match the URL "${u}${d}${m}" because it does not start with the basename, so the <Router> won't render anything.`),y==null?null:a.createElement(Ge.Provider,{value:l},a.createElement(Ke.Provider,{children:t,value:y}))}function jt({children:e,location:t}){return lt(Mt(e),t)}a.Component;function Mt(e,t=[]){let n=[];return a.Children.forEach(e,(e,r)=>{if(!a.isValidElement(e))return;let i=[...t,r];if(e.type===a.Fragment){n.push.apply(n,Mt(e.props.children,i));return}f(e.type===kt,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),f(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let o={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(o.children=Mt(e.props.children,i)),n.push(o)}),n}var Nt=`get`,Pt=`application/x-www-form-urlencoded`;function Ft(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function It(e){return Ft(e)&&e.tagName.toLowerCase()===`button`}function Lt(e){return Ft(e)&&e.tagName.toLowerCase()===`form`}function Rt(e){return Ft(e)&&e.tagName.toLowerCase()===`input`}function zt(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Bt(e,t){return e.button===0&&(!t||t===`_self`)&&!zt(e)}function Vt(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function Ht(e,t){let n=Vt(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var Ut=null;function Wt(){if(Ut===null)try{new FormData(document.createElement(`form`),0),Ut=!1}catch{Ut=!0}return Ut}var Gt=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Kt(e){return e!=null&&!Gt.has(e)?(p(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Pt}"`),null):e}function qt(e,t){let n,r,i,a,o;if(Lt(e)){let o=e.getAttribute(`action`);r=o?pe(o,t):null,n=e.getAttribute(`method`)||Nt,i=Kt(e.getAttribute(`enctype`))||Pt,a=new FormData(e)}else if(It(e)||Rt(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?pe(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||Nt,i=Kt(e.getAttribute(`formenctype`))||Kt(o.getAttribute(`enctype`))||Pt,a=new FormData(o,e),!Wt()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(Ft(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=Nt,r=null,i=Pt,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function Jt(e,t){if(e===!1||e==null)throw Error(t)}function Yt(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return i.pathname=n?i.pathname.endsWith(`/`)?`${i.pathname}_.${r}`:`${i.pathname}.${r}`:i.pathname===`/`?`_root.${r}`:t&&pe(i.pathname,t)===`/`?`${O(t)}/_root.${r}`:`${O(i.pathname)}.${r}`,i}async function Xt(e,t){if(e.id in t)return t[e.id];try{let n=await i(()=>import(e.module),[]);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function Zt(e){return e!=null&&typeof e.page==`string`}function Qt(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function $t(e,t,n){return an((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Xt(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Qt).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function en(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function tn(e,t,{includeHydrateFallback:n}={}){return nn(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function nn(e){return[...new Set(e)]}function rn(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function an(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Zt(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(rn(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function on(){let e=a.useContext(Re);return Jt(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function sn(){let e=a.useContext(ze);return Jt(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var cn=a.createContext(void 0);cn.displayName=`FrameworkContext`;function ln(){let e=a.useContext(cn);return Jt(e,`You must render this element inside a <HydratedRouter> element`),e}function un(e,t){let n=a.useContext(cn),[r,i]=a.useState(!1),[o,s]=a.useState(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:f}=t,p=a.useRef(null);a.useEffect(()=>{if(e===`render`&&s(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{s(e.isIntersecting)})},{threshold:.5});return p.current&&e.observe(p.current),()=>{e.disconnect()}}},[e]),a.useEffect(()=>{if(r){let e=setTimeout(()=>{s(!0)},100);return()=>{clearTimeout(e)}}},[r]);let m=()=>{i(!0)},h=()=>{i(!1),s(!1)};return n?e===`intent`?[o,p,{onFocus:dn(c,m),onBlur:dn(l,h),onMouseEnter:dn(u,m),onMouseLeave:dn(d,h),onTouchStart:dn(f,m)}]:[o,p,{}]:[!1,p,{}]}function dn(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function fn({page:e,...t}){let n=Ve(),{nonce:r}=ln(),{router:i}=on(),o=a.useMemo(()=>x(i.routes,e,i.basename),[i.routes,e,i.basename]);return o?(t.nonce==null&&r&&(t={...t,nonce:r}),n?a.createElement(mn,{page:e,matches:o,...t}):a.createElement(hn,{page:e,matches:o,...t})):null}function pn(e){let{manifest:t,routeModules:n}=ln(),[r,i]=a.useState([]);return a.useEffect(()=>{let r=!1;return $t(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function mn({page:e,matches:t,...n}){let r=nt(),{future:i}=ln(),{basename:o}=on(),s=a.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Yt(e,o,i.v8_trailingSlashAwareDataRequests,`rsc`),a=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?a=!0:s.push(e.route.id);return a&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[o,i.v8_trailingSlashAwareDataRequests,e,r,t]);return a.createElement(a.Fragment,null,s.map(e=>a.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function hn({page:e,matches:t,...n}){let r=nt(),{future:i,manifest:o,routeModules:s}=ln(),{basename:c}=on(),{loaderData:l,matches:u}=sn(),d=a.useMemo(()=>en(e,t,u,o,r,`data`),[e,t,u,o,r]),f=a.useMemo(()=>en(e,t,u,o,r,`assets`),[e,t,u,o,r]),p=a.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,a=!1;if(t.forEach(e=>{let t=o.routes[e.route.id];t&&t.hasLoader&&(!d.some(t=>t.route.id===e.route.id)&&e.route.id in l&&s[e.route.id]?.shouldRevalidate||t.hasClientLoader?a=!0:n.add(e.route.id))}),n.size===0)return[];let u=Yt(e,c,i.v8_trailingSlashAwareDataRequests,`data`);return a&&n.size>0&&u.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[u.pathname+u.search]},[c,i.v8_trailingSlashAwareDataRequests,l,r,o,d,t,e,s]),m=a.useMemo(()=>tn(f,o),[f,o]),h=pn(f);return a.createElement(a.Fragment,null,p.map(e=>a.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>a.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>a.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function gn(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}a.Component;var _n=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{_n&&(window.__reactRouterVersion=`7.18.4`)}catch{}function vn({basename:e,children:t,useTransitions:n,window:r}){let i=a.useRef();i.current??=d({window:r,v5Compat:!0});let o=i.current,[s,c]=a.useState({action:o.action,location:o.location}),l=a.useCallback(e=>{n===!1?c(e):a.startTransition(()=>c(e))},[n]);return a.useLayoutEffect(()=>o.listen(l),[o,l]),a.createElement(At,{basename:e,children:t,location:s.location,navigationType:s.action,navigator:o,useTransitions:n})}var yn=a.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:s,mask:c,state:l,target:u,to:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g){let{basename:_,navigator:v,useTransitions:y}=a.useContext(Ge),b=typeof d==`string`&&o.test(d),x=Oe(d,_);d=x.to;let S=et(d,{relative:r}),C=nt(),w=null;if(c){let e=ye(c,[],C.mask?C.mask.pathname:`/`,!0);_!==`/`&&(e.pathname=e.pathname===`/`?_:xe([_,e.pathname])),w=v.createHref(e)}let[T,ee,te]=un(n,h),ne=wn(d,{replace:s,mask:c,state:l,target:u,preventScrollReset:f,relative:r,viewTransition:p,defaultShouldRevalidate:m,useTransitions:y});function E(t){e&&e(t),t.defaultPrevented||ne(t)}let re=!(x.isExternal||i),ie=a.createElement(`a`,{...h,...te,href:(re?w:void 0)||x.absoluteURL||S,onClick:re?E:e,ref:gn(g,ee),target:u,"data-discover":!b&&t===`render`?`true`:void 0});return T&&!b?a.createElement(a.Fragment,null,ie,a.createElement(fn,{page:S})):ie});yn.displayName=`Link`;var bn=a.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:o,viewTransition:s,children:c,...l},u){let d=ct(o,{relative:l.relative}),f=nt(),p=a.useContext(ze),{navigator:m,basename:h}=a.useContext(Ge),g=p!=null&&An(d)&&s===!0,_=m.encodeLocation?m.encodeLocation(d).pathname:d.pathname,v=f.pathname,y=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;t||(v=v.toLowerCase(),y=y?y.toLowerCase():null,_=_.toLowerCase()),y&&h&&(y=pe(y,h)||y);let b=_!==`/`&&_.endsWith(`/`)?_.length-1:_.length,x=v===_||!r&&v.startsWith(_)&&v.charAt(b)===`/`,S=y!=null&&(y===_||!r&&y.startsWith(_)&&y.charAt(_.length)===`/`),C={isActive:x,isPending:S,isTransitioning:g},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,g?`transitioning`:null].filter(Boolean).join(` `);let ee=typeof i==`function`?i(C):i;return a.createElement(yn,{...l,"aria-current":w,className:T,ref:u,style:ee,to:o,viewTransition:s},typeof c==`function`?c(C):c)});bn.displayName=`NavLink`;var xn=a.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:s,method:c=Nt,action:l,onSubmit:u,relative:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g)=>{let{useTransitions:_}=a.useContext(Ge),v=On(),y=kn(l,{relative:d}),b=c.toLowerCase()===`get`?`get`:`post`,x=typeof l==`string`&&o.test(l);return a.createElement(`form`,{ref:g,method:b,action:y,onSubmit:r?u:e=>{if(u&&u(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,o=r?.getAttribute(`formmethod`)||c,l=()=>v(r||e.currentTarget,{fetcherKey:t,method:o,navigate:n,replace:i,state:s,relative:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m});_&&n!==!1?a.startTransition(()=>l()):l()},...h,"data-discover":!x&&e===`render`?`true`:void 0})});xn.displayName=`Form`;function Sn(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Cn(e){let t=a.useContext(Re);return f(t,Sn(e)),t}function wn(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l,useTransitions:u}={}){let d=at(),f=nt(),p=ct(e,{relative:s});return a.useCallback(m=>{if(Bt(m,t)){m.preventDefault();let t=n===void 0?_(f)===_(p):n,h=()=>d(e,{replace:t,mask:r,state:i,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l});u?a.startTransition(()=>h()):h()}},[f,d,p,n,r,i,t,e,o,s,c,l,u])}function Tn(e){p(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=a.useRef(Vt(e)),n=a.useRef(!1),r=nt(),i=a.useMemo(()=>Ht(r.search,n.current?null:t.current),[r.search]),o=at();return[i,a.useCallback((e,t)=>{let r=Vt(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,o(`?`+r,t)},[o,i])]}var En=0,Dn=()=>`__${String(++En)}__`;function On(){let{router:e}=Cn(`useSubmit`),{basename:t}=a.useContext(Ge),n=St(),r=e.fetch,i=e.navigate;return a.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=qt(e,t);if(a.navigate===!1){let e=a.fetcherKey||Dn();await r(e,n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync})}else await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function kn(e,{relative:t}={}){let{basename:n}=a.useContext(Ge),r=a.useContext(qe);f(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),o={...ct(e||`.`,{relative:t})},s=nt();if(e==null){o.search=s.search;let e=new URLSearchParams(o.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();o.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(o.search=o.search?o.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(o.pathname=o.pathname===`/`?n:xe([n,o.pathname])),_(o)}function An(e,{relative:t}={}){let n=a.useContext(He);f(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=Cn(`useViewTransitionState`),i=ct(e,{relative:t});if(!n.isTransitioning)return!1;let o=pe(n.currentLocation.pathname,r)||n.currentLocation.pathname,s=pe(n.nextLocation.pathname,r)||n.nextLocation.pathname;return ue(i.pathname,s)!=null||ue(i.pathname,o)!=null}var jn=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function Mn(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:jn(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var Nn=e=>{let t=``,n=!1;for(let r of e){if(r===`-`||r===`_`||r<=` `){n=t.length>0;continue}t.length===0?t+=r.toLowerCase():t+=n?r.toUpperCase():r,n=!1}return t},Pn=e=>{let t=Nn(e);return t.charAt(0).toUpperCase()+t.slice(1)},Fn=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),In={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Ln(e){return e!=null}function Rn(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??In.width,a=e.size??e.height??In.height,o=e.aliases?.filter(e=>typeof e==`string`&&e.trim()!==``).map(e=>`lucide-${e}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...o],c=t.className?.split(` `).filter(Boolean)??[],l=t.includeDefaultClasses===!1?Fn(...c):Fn(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??In[`stroke-width`])*Number(e.size??e.width??In.width)/Number(t.size??t.width??In.width):t.strokeWidth??In[`stroke-width`];return[`svg`,{...Object.entries(In).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&Ln(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&Ln(t.width)&&{[r(`width`)]:t.width},...`height`in t&&Ln(t.height)&&{[r(`height`)]:t.height},[r(`stroke-width`)]:u,...l&&{[r(`class`)]:l},[r(`viewBox`)]:`0 0 ${i} ${a}`,...t.hasA11yProp===!1?{[r(`aria-hidden`)]:`true`}:{},...`attributes`in t&&t.attributes},e.node.map(e=>{let[n,i,a]=e,o=t.nonScalingStroke?{[r(`vector-effect`)]:`non-scaling-stroke`,...i}:i;return a?[n,o,a]:[n,o]})]}function zn(e,t={}){return Rn(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var Bn=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Vn=(0,a.createContext)({}),Hn=()=>(0,a.useContext)(Vn),Un=(0,a.forwardRef)(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:s,className:c=``,children:l,iconNode:u=[],icon:d={node:u,aliases:[],size:24},...f},p)=>{let{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,nonScalingStroke:_=!1,color:v=`currentColor`,className:y=``}=Hn()??{},b=!!l||Bn(f),[x,S,C=[]]=zn(d,{color:e??v,width:n??t??m,height:r??t??m,strokeWidth:i??h,absoluteStrokeWidth:o??g,nonScalingStroke:s??_,className:Fn(y,c),hasA11yProp:b,attributes:f});return(0,a.createElement)(x,{ref:p,...S},[...C.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(l)?l:[l]])});function j(e,t=[],n=[]){let r=typeof e==`string`?Mn(e,t,n):e,i=(0,a.forwardRef)(({className:e,...t},n)=>(0,a.createElement)(Un,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=Pn(r.name)),i}var Wn={name:`arrow-down`,size:24,node:[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]};Wn.node;var Gn=j(Wn),Kn={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};Kn.node;var qn=j(Kn),Jn={name:`arrow-right`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]};Jn.node;var Yn=j(Jn),Xn={name:`arrow-up`,size:24,node:[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]};Xn.node;var Zn=j(Xn),Qn={name:`audio-lines`,size:24,node:[[`path`,{d:`M2 10v3`,key:`1fnikh`}],[`path`,{d:`M6 6v11`,key:`11sgs0`}],[`path`,{d:`M10 3v18`,key:`yhl04a`}],[`path`,{d:`M14 8v7`,key:`3a1oy3`}],[`path`,{d:`M18 5v13`,key:`123xd1`}],[`path`,{d:`M22 10v3`,key:`154ddg`}]]};Qn.node;var $n=j(Qn),er={name:`bell-ring`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]]};er.node;var tr=j(er),nr={name:`bell`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]};nr.node;var rr=j(nr),ir={name:`calendar-days`,size:24,node:[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 13h.01`,key:`1sbv64`}],[`path`,{d:`M12 13h.01`,key:`y0uutt`}],[`path`,{d:`M16 13h.01`,key:`wip0gl`}],[`path`,{d:`M8 17h.01`,key:`p3bg7i`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}],[`path`,{d:`M16 17h.01`,key:`ql8jdd`}]]};ir.node;var ar=j(ir),or={name:`camera`,size:24,node:[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]};or.node;var sr=j(or),cr={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};cr.node;var lr=j(cr),ur={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};ur.node;var dr=j(ur),fr={name:`chevron-left`,size:24,node:[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]};fr.node;var pr=j(fr),mr={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};mr.node;var hr=j(mr),gr={name:`clock`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]};gr.node;var _r=j(gr),vr={name:`copy`,size:24,node:[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]};vr.node;var yr=j(vr),br={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]};br.node;var xr=j(br),Sr={name:`database`,size:24,node:[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]};Sr.node;var Cr=j(Sr),wr={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};wr.node;var Tr=j(wr),Er={name:`eraser`,size:24,node:[[`path`,{d:`M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21`,key:`g5wo59`}],[`path`,{d:`m5.082 11.09 8.828 8.828`,key:`1wx5vj`}]]};Er.node;var Dr=j(Er),Or={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};Or.node;var kr=j(Or),Ar={name:`file-headphone`,size:24,node:[[`path`,{d:`M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343`,key:`1vfytu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0`,key:`1etmh7`}]],aliases:[`file-audio`,`file-audio-2`]};Ar.node;var jr=j(Ar),Mr={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};Mr.node;var Nr=j(Mr),Pr={name:`film`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M3 7.5h4`,key:`zfgn84`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 16.5h4`,key:`1230mu`}],[`path`,{d:`M17 3v18`,key:`in4fa5`}],[`path`,{d:`M17 7.5h4`,key:`myr1c1`}],[`path`,{d:`M17 16.5h4`,key:`go4c1d`}]]};Pr.node;var Fr=j(Pr),Ir={name:`flashlight-off`,size:24,node:[[`path`,{d:`M11.652 6H18`,key:`voqkpr`}],[`path`,{d:`M12 13v1`,key:`176q98`}],[`path`,{d:`M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-8a4 4 0 0 0-.8-2.4l-.6-.8A3 3 0 0 1 6 7V6`,key:`dzyf92`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M7.649 2H17a1 1 0 0 1 1 1v4a3 3 0 0 1-.6 1.8l-.6.8a4 4 0 0 0-.55 1.007`,key:`1hvcfn`}]]};Ir.node;var Lr=j(Ir),Rr={name:`flashlight`,size:24,node:[[`path`,{d:`M12 13v1`,key:`176q98`}],[`path`,{d:`M17 2a1 1 0 0 1 1 1v4a3 3 0 0 1-.6 1.8l-.6.8A4 4 0 0 0 16 12v8a2 2 0 0 1-2 2H10a2 2 0 0 1-2-2v-8a4 4 0 0 0-.8-2.4l-.6-.8A3 3 0 0 1 6 7V3a1 1 0 0 1 1-1z`,key:`17vh7j`}],[`path`,{d:`M6 6h12`,key:`n6hhss`}]]};Rr.node;var zr=j(Rr),Br={name:`grip-vertical`,size:24,node:[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]};Br.node;var Vr=j(Br),Hr={name:`image-plus`,size:24,node:[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]};Hr.node;var Ur=j(Hr),Wr={name:`image-up`,size:24,node:[[`path`,{d:`M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21`,key:`9csbqa`}],[`path`,{d:`m14 19.5 3-3 3 3`,key:`9vmjn0`}],[`path`,{d:`M17 22v-5.5`,key:`1aa6fl`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]};Wr.node;var Gr=j(Wr),Kr={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};Kr.node;var qr=j(Kr),Jr={name:`locate-fixed`,size:24,node:[[`line`,{x1:`2`,x2:`5`,y1:`12`,y2:`12`,key:`bvdh0s`}],[`line`,{x1:`19`,x2:`22`,y1:`12`,y2:`12`,key:`1tbv5k`}],[`line`,{x1:`12`,x2:`12`,y1:`2`,y2:`5`,key:`11lu5j`}],[`line`,{x1:`12`,x2:`12`,y1:`19`,y2:`22`,key:`x3vr5v`}],[`circle`,{cx:`12`,cy:`12`,r:`7`,key:`fim9np`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};Jr.node;var Yr=j(Jr),Xr={name:`lock-keyhole`,size:24,node:[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]};Xr.node;var Zr=j(Xr),Qr={name:`map-pin`,size:24,node:[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]};Qr.node;var $r=j(Qr),ei={name:`maximize-2`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]};ei.node;var ti=j(ei),ni={name:`mic`,size:24,node:[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]};ni.node;var ri=j(ni),ii={name:`mouse-pointer-click`,size:24,node:[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]};ii.node;var ai=j(ii),oi={name:`paperclip`,size:24,node:[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]};oi.node;var si=j(oi),ci={name:`pen-line`,size:24,node:[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]],aliases:[`edit-3`]};ci.node;var li=j(ci),ui={name:`pencil-line`,size:24,node:[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]]};ui.node;var di=j(ui),fi={name:`pencil`,size:24,node:[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]};fi.node;var pi=j(fi),mi={name:`plus`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]};mi.node;var hi=j(mi),gi={name:`printer`,size:24,node:[[`path`,{d:`M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2`,key:`143wyd`}],[`path`,{d:`M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6`,key:`1itne7`}],[`rect`,{x:`6`,y:`14`,width:`12`,height:`8`,rx:`1`,key:`1ue0tg`}]]};gi.node;var _i=j(gi),vi={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};vi.node;var yi=j(vi),bi={name:`rotate-ccw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]};bi.node;var xi=j(bi),Si={name:`scan-line`,size:24,node:[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}]]};Si.node;var Ci=j(Si),wi={name:`share`,size:24,node:[[`path`,{d:`M12 2v13`,key:`1km8f5`}],[`path`,{d:`m16 6-4-4-4 4`,key:`13yo43`}],[`path`,{d:`M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8`,key:`1b2hhj`}]]};wi.node;var Ti=j(wi),Ei={name:`shield-check`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]};Ei.node;var Di=j(Ei),Oi={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]};Oi.node;var ki=j(Oi),Ai={name:`square`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]};Ai.node;var ji=j(Ai),Mi={name:`switch-camera`,size:24,node:[[`path`,{d:`M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5`,key:`mtk2lu`}],[`path`,{d:`M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5`,key:`120jsl`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`m18 22-3-3 3-3`,key:`kgdoj7`}],[`path`,{d:`m6 2 3 3-3 3`,key:`1fnbkv`}]]};Mi.node;var Ni=j(Mi),Pi={name:`trash`,size:24,node:[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]],aliases:[`trash-2`]};Pi.node;var Fi=j(Pi),Ii={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};Ii.node;var Li=j(Ii),Ri={name:`unplug`,size:24,node:[[`path`,{d:`m19 5 3-3`,key:`yk6iyv`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z`,key:`1snsnr`}]]};Ri.node;var zi=j(Ri),Bi={name:`video`,size:24,node:[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]};Bi.node;var Vi=j(Bi),Hi={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};Hi.node;var Ui=j(Hi),Wi={entry:{de:`Eintrag {n} von {total}`,en:`Entry {n} of {total}`},deciding:{de:`Entscheidet, wie es weitergeht …`,en:`Deciding how to go on …`},choosingFields:{de:`Wählt die passenden Fragen …`,en:`Choosing the right questions …`},batchDone:{de:`{done} von {total} fertig`,en:`{done} of {total} done`},editing:{de:`Bearbeitet {n} von {total}`,en:`Editing {n} of {total}`},filming:{de:`Dreht {n} von {total}`,en:`Filming {n} of {total}`},clipsRendering:{de:`{count} Clips werden gerendert – das dauert einige Minuten.`,en:`Rendering {count} clips – this takes a few minutes.`},videoRendering:{de:`Das Video wird gerendert – das dauert meist 1–3 Minuten.`,en:`Rendering the video – this usually takes 1–3 minutes.`},photo:{de:`Sieht sich Foto {n} von {total} an`,en:`Looking at photo {n} of {total}`},listen:{de:`Hört „{label}“ an …`,en:`Listening to “{label}” …`},listenFailed:{de:`„{label}“ konnte nicht verschriftlicht werden.`,en:`“{label}” could not be written down.`},filmCutting:{de:`Der Film wird geschnitten – das dauert etwa eine Minute.`,en:`Cutting the film – this takes about a minute.`},filmProgress:{de:`{pct} % geschnitten`,en:`{pct} % cut`},filmError:{de:`Der Film meldet: {detail}`,en:`The film reports: {detail}`},widgetError:{de:`Das Widget meldet einen Fehler: {detail}`,en:`The widget reports an error: {detail}`},mcpConnected:{de:`Verbunden mit {names}`,en:`Connected to {names}`},mcpUnreachable:{de:`MCP-Server nicht erreichbar: {detail}`,en:`MCP server unreachable: {detail}`},reads:{de:`Liest {name}`,en:`Reading {name}`},readsMany:{de:`Liest {count} Dokumente`,en:`Reading {count} documents`},opens:{de:`Öffnet {name}`,en:`Opening {name}`},clicks:{de:`Klickt im Browser`,en:`Clicking in the browser`},clicksOn:{de:`Klickt auf „{name}“`,en:`Clicking “{name}”`},types:{de:`Tippt im Browser`,en:`Typing in the browser`},typesText:{de:`Tippt „{text}“`,en:`Typing “{text}”`},selects:{de:`Wählt „{option}“`,en:`Choosing “{option}”`},scrolls:{de:`Scrollt`,en:`Scrolling`},presses:{de:`Drückt {key}`,en:`Pressing {key}`},goesBack:{de:`Geht eine Seite zurück`,en:`Going back a page`},waitsForPage:{de:`Wartet auf die Seite`,en:`Waiting for the page`},fastLoop:{de:`Erledigt im Browser: {goal}`,en:`Doing in the browser: {goal}`},personDrives:{de:`Du steuerst den Browser – der Wizard wartet`,en:`You are driving the browser – the wizard waits`},agentDrives:{de:`Der Wizard macht im Browser weiter`,en:`The wizard carries on in the browser`},looksAtPage:{de:`Sieht sich die Seite an`,en:`Looking at the page`},waitsForSignIn:{de:`Wartet auf deine Anmeldung bei {name}`,en:`Waiting for you to sign in at {name}`},downloads:{de:`Lädt {name} herunter`,en:`Downloading {name}`},runs:{de:`Führt aus: {command}`,en:`Running: {command}`},python:{de:`Führt Python aus`,en:`Running Python`},drawing:{de:`Zeichnet ein Bild`,en:`Drawing an image`},writesPage:{de:`Schreibt die Seite „{title}“`,en:`Writing the page “{title}”`},searchesDocuments:{de:`Sucht in den Dokumenten: {query}`,en:`Searching the documents: {query}`},searchesKnowledge:{de:`Sucht in Wissen: {query} – {relevant} von {candidates} passen`,en:`Searching the knowledge: {query} – {relevant} of {candidates} fit`},listsKnowledge:{de:`Listet Wissen`,en:`Listing the knowledge`},searchesMail:{de:`Durchsucht {label}`,en:`Searching {label}`},savesReceipts:{de:`Speichert {count} Belege aus {label}`,en:`Saving {count} receipts from {label}`},remembers:{de:`Merkt sich {title}`,en:`Remembering {title}`},files:{de:`Legt {count} Dateien ab`,en:`Filing {count} files`},filmSetup:{de:`Richtet den Arbeitsordner für den Film ein`,en:`Setting up the folder for the film`},filmClient:{de:`{client} arbeitet am Film – das dauert meist 10–40 Minuten.`,en:`{client} is working on the film – this usually takes 10–40 minutes.`},filmTask:{de:`Am Film: {task}`,en:`On the film: {task}`},filmLooks:{de:`Sieht sich Bilder des Films an`,en:`Looking at frames of the film`},filmFix:{de:`Der Film ließ sich nicht rendern – Claude Code bessert nach`,en:`The film did not render – Claude Code is fixing it`},filmResume:{de:`Macht dort weiter, wo der Film stehen geblieben ist`,en:`Picking the film up where it stopped`},wizardUnavailable:{de:`Dieser Wizard ist gerade nicht verfügbar.`,en:`This wizard is not available right now.`},wizardLimit:{de:`Für heute ist das Limit dieses Wizards erreicht. Bitte morgen wieder versuchen.`,en:`This wizard has reached its limit for today. Try again tomorrow.`},confirmHuman:{de:`Bitte bestätige kurz, dass du ein Mensch bist.`,en:`Please confirm that you are a person.`},tooManyRuns:{de:`Du hast gerade viele Durchläufe gestartet. Bitte versuche es in einer Stunde wieder.`,en:`You started many runs just now. Try again in an hour.`},runOver:{de:`Der Durchlauf ist beendet.`,en:`The run is over.`},runBusy:{de:`Der Wizard arbeitet gerade.`,en:`The wizard is working right now.`},pageOutdated:{de:`Diese Seite ist nicht mehr aktuell.`,en:`This page is out of date.`},noStepBefore:{de:`Kein vorheriger Schritt.`,en:`There is no step before this one.`},checkFields:{de:`Bitte die markierten Felder prüfen.`,en:`Please check the marked fields.`},talkOff:{de:`Live-Gespräche sind für diesen Wizard nicht eingeschaltet.`,en:`Live conversations are not switched on for this wizard.`},talkKeyRefused:{de:`Das Gespräch ließ sich nicht starten: Der OpenAI API Key wurde abgelehnt.`,en:`The conversation could not be started: the OpenAI API key was refused.`},talkFailed:{de:`Das Gespräch ließ sich nicht starten ({status}).`,en:`The conversation could not be started ({status}).`},talkNoSecret:{de:`Das Gespräch ließ sich nicht starten: Es kam kein Zugang zurück.`,en:`The conversation could not be started: no secret came back.`},tryLater:{de:`Bitte später noch einmal.`,en:`Try again later.`},recordingTooLarge:{de:`Bitte eine Aufnahme bis 10 MB.`,en:`A recording of up to 10 MB, please.`},fileTooLarge:{de:`Bitte eine Datei bis {mb} MB wählen.`,en:`Choose a file of up to {mb} MB, please.`},askClosed:{de:`Diese Frage ist nicht mehr offen.`,en:`This question is no longer open.`},noBrowser:{de:`Der Wizard hat gerade keinen Browser offen.`,en:`The wizard has no browser open right now.`},notWaiting:{de:`Der Wizard wartet gerade nicht auf dich.`,en:`The wizard is not waiting for you right now.`},pageActFailed:{de:`Das hat auf der Seite nicht geklappt.`,en:`That did not work on the page.`},linkGone:{de:`Dieser Link ist abgelaufen oder wurde zurückgezogen.`,en:`This link has expired or was withdrawn.`},connected:{de:`Verbunden. Du kannst dieses Fenster schließen.`,en:`Connected. You can close this window.`},connectFailed:{de:`Verbinden hat nicht geklappt. Bitte noch einmal versuchen.`,en:`Connecting did not work. Try again.`},connectCancelled:{de:`Verbinden wurde abgebrochen.`,en:`Connecting was cancelled.`},appleOff:{de:`Apple Intelligence ist auf diesem Mac ausgeschaltet. Einschalten unter Systemeinstellungen → Apple Intelligence & Siri.`,en:`Apple Intelligence is switched off on this Mac. Switch it on in System Settings → Apple Intelligence & Siri.`},appleLoading:{de:`Apple lädt das Modell für Apple Intelligence noch auf diesen Mac. Gleich noch einmal versuchen.`,en:`Apple is still loading the model for Apple Intelligence onto this Mac. Try again in a moment.`},appleMissing:{de:`Der Helfer für Apple Intelligence (wizards-apple) fehlt in dieser Installation.`,en:`The helper for Apple Intelligence (wizards-apple) is missing from this installation.`},appleOs:{de:`Apple Intelligence braucht macOS 26 oder neuer.`,en:`Apple Intelligence needs macOS 26 or later.`},appleDevice:{de:`Apple Intelligence gibt es nur auf einem Mac mit Apple Silicon.`,en:`Apple Intelligence is only there on a Mac with Apple silicon.`},appleBusy:{de:`Apple Intelligence nimmt gerade keine weiteren Anfragen an. Gleich noch einmal versuchen.`,en:`Apple Intelligence takes no more requests right now. Try again in a moment.`},appleTooLong:{de:`Apple Intelligence: Der Text ist zu lang für das Modell auf diesem Mac (4.096 Tokens für Frage und Antwort). Diese Klasse in den Einstellungen unter „Modelle“ auf ein anderes Modell legen.`,en:`Apple Intelligence: the text is too long for the model on this Mac (4,096 tokens for question and answer). Put this class on another model under “Models” in the settings.`},appleRefused:{de:`Apple Intelligence hat die Anfrage abgelehnt: Apples Inhaltsregeln lassen sie nicht zu.`,en:`Apple Intelligence turned the request down: Apple's content rules do not allow it.`},appleLanguage:{de:`Apple Intelligence versteht die Sprache dieser Anfrage nicht.`,en:`Apple Intelligence does not understand the language of this request.`},appleFormat:{de:`Apple Intelligence kann dieses Antwortformat nicht liefern: {detail}`,en:`Apple Intelligence cannot answer in this format: {detail}`},appleFailed:{de:`Apple Intelligence: {detail}`,en:`Apple Intelligence: {detail}`},appleNoFfmpeg:{de:`Apple Intelligence liest {type} nicht; ohne ffmpeg bleibt die Aufnahme so. ffmpeg installieren oder im Browser als MP4 aufnehmen.`,en:`Apple Intelligence cannot read {type}, and without ffmpeg the recording stays as it is. Install ffmpeg or record as MP4 in the browser.`},appleNotConverted:{de:`Apple Intelligence: die Aufnahme ließ sich nicht wandeln: {detail}`,en:`Apple Intelligence: the recording could not be converted: {detail}`}};function Gi(e,t){let n=Wi[e.code];return n?n[t].replace(/\{(\w+)\}/g,(t,n)=>e.params?.[n]===void 0?t:String(e.params[n])):``}var Ki={"share.copied":`Kopiert`,"run.closed":`Hier gerade nicht verfügbar, dafür fehlt: {list}`,"slot.later":`Spätere Termine zeigen`,"slot.none":`Gerade sind keine Termine frei.`,"cards.open":`Details`,"cards.picked":`Ausgewählt ✓`,"cards.pick":`Auswählen`,"run.cls.text":`Text`,"run.cls.image":`Bilder`,"run.cls.video":`Videos`,"run.cls.speech":`Sprachausgabe`,"run.cls.audio":`Sprachnotizen`,"run.cls.account":`ein engenty-Konto`,"run.next":`Weiter`,"run.back":`Zurück`,"run.accept":`Passt so`,"run.edit":`Bearbeiten`,"run.pickItem":`Nr. {n}`,"run.pickedItem":`Nr. {n} neu`,"run.regeneratePicked":`Neu erstellt wird nur Nr. {n}.`,"run.regenerateAll":`Alle werden neu erstellt. Tippe oben auf eine Nummer, um nur einzelne zu erneuern.`,"check.progress":`{done} von {total} geprüft`,"check.onlyOpen":`Nur offene`,"check.noFile":`Zu dieser Zeile gibt es keine Datei.`,"check.noPreview":`Für diese Datei gibt es keine Vorschau – öffne sie mit dem Link oben.`,"check.reopen":`Wieder offen`,"run.feedbackPlaceholder":`Passt etwas nicht? Schreib, was anders sein soll …`,"run.feedbackTarget":`Was soll sich ändern?`,"run.feedbackPick":`Wähle oben, was sich ändern soll.`,"ai.generated":`KI-generiert`,"ai.modified":`Mit KI verändert`,"ai.publish":`Mit KI erstellt: Wer das veröffentlicht, muss es als KI-generiert kennzeichnen (EU AI Act, Art. 50). Die Datei trägt die Kennzeichnung bereits in ihren Metadaten.`,"run.regenerateGo":`Neu erstellen`,"run.retry":`Erneut versuchen`,"run.again":`Nochmal`,"run.copy":`Text kopieren`,"run.failed":`Da hat etwas nicht geklappt.`,"run.notFound":`Diesen Wizard gibt es nicht (mehr).`,"run.working":`Einen Moment …`,"run.elapsed":`{s} s`,"run.cancelled":`Abgebrochen.`,"run.addRow":`Zeile hinzufügen`,"run.upload":`Datei wählen oder hierher ziehen`,"run.uploading":`Lädt hoch …`,"run.net":`Netto`,"run.vat":`USt. {r} %`,"run.total":`Gesamt`,"run.uploadMore":`Weitere Datei`,"run.camera":`Kamera`,"camera.title":`Mit der Kamera aufnehmen`,"camera.hint":`Gerade und gut beleuchtet ins Bild halten.`,"camera.taken":`{n} aufgenommen`,"camera.shoot":`Aufnehmen`,"camera.done":`Fertig`,"camera.denied":`Die Kamera ist für diese Seite nicht freigegeben. Erlaube sie in den Website-Einstellungen deines Browsers (Schloss-Symbol in der Adresszeile) – oder nimm das Foto mit der Kamera-App auf.`,"connect.go":`Verbinden`,"connect.connected":`Verbunden über {name}`,"connect.disconnect":`Trennen`,"connect.none":`Auf diesem Server ist noch kein Anbieter zum Verbinden eingerichtet.`,"connect.openLink":`Hier klicken, um die Anmeldung in einem neuen Tab zu öffnen`,"list.empty":`Noch keine Einträge.`,"list.delete":`Zeile löschen`,"ask.typeInto":`Text in die Seite tippen …`,"ask.hide":`verdeckt`,"ask.up":`Nach oben`,"ask.down":`Nach unten`,"ask.pictureHint":`Das ist die Seite, die der Wizard geöffnet hat, live. Du kannst auch direkt hineinklicken und tippen.`,"ask.remember":`Anmeldung für nächstes Mal merken`,"ask.private":`Was du eingibst, geht direkt in die Seite. Die KI bekommt es nicht zu sehen. Gemerkte Anmeldungen werden verschlüsselt gespeichert.`,"ask.skip":`Überspringen`,"ask.done":`Ich bin angemeldet`,"ask.signIn":`Anmelden`,"ask.wants":`Der Wizard möchte in {service} Folgendes ausführen:`,"ask.allowRest":`Für den Rest dieses Durchlaufs erlauben`,"ask.allow":`Erlauben`,"ask.deny":`Nicht erlauben`,"store.open":`Was dieser Wizard sich merkt`,"store.title":`Gespeichert für dich`,"store.explain":`Dieser Wizard merkt sich Listen, Dateien und verbundene Konten für deinen nächsten Durchlauf. Nur du siehst sie.`,"store.empty":`Noch nichts gespeichert.`,"store.rows":`{n} Einträge`,"store.signIns":`Gemerkte Anmeldungen im Browser`,"store.files":`{n} Dateien · {size}`,"store.delete":`Alles löschen`,"store.confirmDelete":`Wirklich alles löschen`,"common.close":`Schließen`,"run.uploadTouch":`Datei wählen`,"run.maxFiles":`Hier gehen höchstens {n} – die übrigen habe ich weggelassen.`,"run.filesMin":`{n} von mindestens {min}`,"run.filesOf":`{n} von höchstens {max}`,"run.moveFile":`Nr. {n} verschieben`,"run.moveFileHint":`Ziehen, um die Reihenfolge zu ändern`,"run.removeFile":`Entfernen`,"run.awake":`Der Bildschirm bleibt an, solange der Wizard arbeitet.`,"run.openFull":`Groß öffnen`,"run.yes":`Ja`,"run.no":`Nein`,"run.share":`Teilen`,"run.shareNow":`Jetzt teilen`,"run.shareFile":`Als Datei teilen oder in einer App öffnen`,"run.print":`Drucken`,"camera.asking":`Dein Browser fragt gleich nach der Kamera. Das Bild bleibt in diesem Wizard.`,"camera.native":`Kamera-App öffnen`,"camera.pick":`Foto auswählen`,"camera.torch":`Licht`,"camera.flip":`Kamera wechseln`,"camera.photo":`Foto`,"camera.video":`Video`,"camera.record":`Aufnahme starten`,"camera.stop":`Aufnahme beenden`,"camera.recording":`Nimmt auf – tippe zum Beenden.`,"camera.clipHint":`Ein kurzer Clip, höchstens {s} Sekunden.`,"camera.hintMany":`Seite für Seite aufnehmen, dann „Fertig“.`,"scan.button":`Scannen`,"scan.title":`Code scannen`,"scan.asking":`Dein Browser fragt gleich nach der Kamera – sie liest nur den Code.`,"scan.hint":`Halte den QR- oder Strichcode in den Rahmen.`,"scan.hintQr":`Halte den QR-Code in den Rahmen. Strichcodes liest dieses Gerät hier nicht.`,"scan.miss":`Auf dem Foto war kein Code zu erkennen. Versuch es näher und schärfer.`,"scan.fromPhoto":`Foto mit dem Code wählen`,"scan.typeInstead":`Lieber eintippen`,"location.use":`Meinen Standort übernehmen`,"location.locating":`Standort wird bestimmt …`,"location.refining":`wird noch genauer …`,"location.accuracy":`auf etwa {m} m genau`,"location.map":`Karte`,"location.remove":`Standort entfernen`,"location.why":`Dein Browser fragt nach deinem Standort. Er wird nur für diesen Wizard verwendet. Du kannst auch einfach die Adresse eintippen.`,"location.denied":`Der Standort ist für diese Seite nicht freigegeben. Erlaube ihn in den Website-Einstellungen deines Browsers (Schloss-Symbol in der Adresszeile) – oder tippe die Adresse unten ein.`,"location.manual":`Adresse oder Ort eintippen`,"location.label":`Adresse oder Beschreibung des Orts`,"voice.start":`Sprachnotiz aufnehmen`,"voice.stop":`Stopp`,"voice.recording":`Aufnahme läuft …`,"voice.left":`noch {s} s`,"voice.again":`Neu aufnehmen`,"voice.remove":`Löschen`,"voice.pick":`Audiodatei wählen`,"voice.why":`Dein Browser fragt nach dem Mikrofon. Die Aufnahme wird danach in Text umgewandelt.`,"voice.denied":`Das Mikrofon ist für diese Seite nicht freigegeben. Erlaube es in den Website-Einstellungen deines Browsers – oder nimm die Notiz mit der Diktier-App auf und wähle die Datei.`,"voice.noRecorder":`Dieser Browser kann hier nicht aufnehmen. Nimm die Notiz mit der Diktier-App auf und wähle die Datei.`,"sign.open":`Hier unterschreiben`,"sign.hint":`Mit dem Finger unterschreiben`,"sign.pad":`Unterschriftsfeld`,"sign.clear":`Löschen`,"sign.accept":`Übernehmen`,"sign.again":`Neu unterschreiben`,"sign.remove":`Unterschrift entfernen`,"notify.ask":`Bescheid geben, wenn es fertig ist`,"notify.on":`Du bekommst Bescheid`,"notify.why":`Mit Ton, Vibration oder einer Mitteilung. Dein Browser fragt dafür einmal um Erlaubnis.`,"notify.onHint":`Du kannst die App wechseln – eine Mitteilung holt dich zurück.`,"notify.quiet":`Mit Ton und Vibration, solange diese Seite offen ist.`,"notify.blocked":`Mitteilungen sind für diese Seite blockiert – es gibt Ton und Vibration, solange sie offen ist. Erlauben kannst du sie in den Website-Einstellungen deines Browsers.`,"notify.done":`Dein Ergebnis ist fertig.`,"notify.next":`Es geht weiter – wirf einen Blick darauf.`,"notify.needsYou":`Der Wizard braucht dich kurz.`,"common.offline":`Keine Verbindung. Prüfe dein Netz und versuch es noch einmal.`,"common.retry":`Erneut versuchen`,"common.cancel":`Abbrechen`,"run.start":`Los geht's`,"run.unavailable":`Dieser Wizard ist gerade nicht verfügbar.`,"run.resume":`Letzten Durchlauf fortsetzen`},qi={"share.copied":`Copied`,"run.closed":`Not available here right now, it needs: {list}`,"slot.later":`Show later times`,"slot.none":`No times are free right now.`,"cards.open":`Details`,"cards.picked":`Chosen ✓`,"cards.pick":`Choose`,"run.cls.text":`text`,"run.cls.image":`images`,"run.cls.video":`video`,"run.cls.speech":`speech output`,"run.cls.audio":`voice notes`,"run.cls.account":`an engenty account`,"run.next":`Continue`,"run.back":`Back`,"run.accept":`Looks good`,"run.edit":`Edit`,"run.pickItem":`No. {n}`,"run.pickedItem":`No. {n} again`,"run.regeneratePicked":`Only no. {n} will be made again.`,"run.regenerateAll":`Applies to all. Tap a number to change single ones only.`,"check.progress":`{done} of {total} checked`,"check.onlyOpen":`Open only`,"check.noFile":`There is no file for this row.`,"check.noPreview":`This file has no preview – open it with the link above.`,"check.reopen":`Open again`,"run.feedbackPlaceholder":`Something not right? Write what should be different …`,"run.feedbackTarget":`What should change?`,"run.feedbackPick":`Pick above what should change.`,"ai.generated":`AI generated`,"ai.modified":`AI modified`,"ai.publish":`Made with AI: whoever publishes this has to label it as AI-generated (EU AI Act, Art. 50). The file already carries the marking in its metadata.`,"run.regenerateGo":`Recreate`,"run.retry":`Try again`,"run.again":`Start over`,"run.copy":`Copy text`,"run.failed":`Something went wrong.`,"run.notFound":`This wizard does not exist (anymore).`,"run.working":`One moment …`,"run.elapsed":`{s} s`,"run.cancelled":`Cancelled.`,"run.addRow":`Add row`,"run.upload":`Choose a file or drop it here`,"run.uploading":`Uploading …`,"run.net":`Net`,"run.vat":`VAT {r} %`,"run.total":`Total`,"run.uploadMore":`Another file`,"run.camera":`Camera`,"camera.title":`Take a picture`,"camera.hint":`Hold it flat and well lit.`,"camera.taken":`{n} taken`,"camera.shoot":`Capture`,"camera.done":`Done`,"camera.denied":`The camera is not allowed for this page. Allow it in your browser's site settings (the lock icon in the address bar) — or take the photo with your camera app.`,"connect.go":`Connect`,"connect.connected":`Connected through {name}`,"connect.disconnect":`Disconnect`,"connect.none":`No provider is set up for connecting on this server yet.`,"connect.openLink":`Click here to open the sign-in in a new tab`,"list.empty":`No entries yet.`,"list.delete":`Delete row`,"ask.typeInto":`Type into the page …`,"ask.hide":`hidden`,"ask.up":`Scroll up`,"ask.down":`Scroll down`,"ask.pictureHint":`This is the page the wizard has open, live. You can also click and type right in it.`,"ask.remember":`Remember this sign-in for next time`,"ask.private":`What you enter goes straight into the page. The AI never sees it. Remembered sign-ins are stored encrypted.`,"ask.skip":`Skip`,"ask.done":`I am signed in`,"ask.signIn":`Sign in`,"ask.wants":`The wizard wants to run this in {service}:`,"ask.allowRest":`Allow for the rest of this run`,"ask.allow":`Allow`,"ask.deny":`Don't allow`,"store.open":`What this wizard remembers`,"store.title":`Kept for you`,"store.explain":`This wizard keeps lists, files and connected accounts for your next run. Only you see them.`,"store.empty":`Nothing kept yet.`,"store.rows":`{n} entries`,"store.signIns":`Remembered sign-ins in the browser`,"store.files":`{n} files · {size}`,"store.delete":`Delete everything`,"store.confirmDelete":`Really delete everything`,"common.close":`Close`,"run.uploadTouch":`Choose a file`,"run.maxFiles":`At most {n} fit here – I left out the rest.`,"run.filesMin":`{n} of at least {min}`,"run.filesOf":`{n} of at most {max}`,"run.moveFile":`Move no. {n}`,"run.moveFileHint":`Drag to change the order`,"run.removeFile":`Remove`,"run.awake":`The screen stays on while the wizard works.`,"run.openFull":`Open full size`,"run.yes":`Yes`,"run.no":`No`,"run.share":`Share`,"run.shareNow":`Share now`,"run.shareFile":`Share as a file or open in an app`,"run.print":`Print`,"camera.asking":`Your browser is about to ask for the camera. The picture stays in this wizard.`,"camera.native":`Open the camera app`,"camera.pick":`Choose a photo`,"camera.torch":`Light`,"camera.flip":`Switch camera`,"camera.photo":`Photo`,"camera.video":`Video`,"camera.record":`Start recording`,"camera.stop":`Stop recording`,"camera.recording":`Recording — tap to stop.`,"camera.clipHint":`A short clip, {s} seconds at most.`,"camera.hintMany":`Capture page after page, then “Done”.`,"scan.button":`Scan`,"scan.title":`Scan a code`,"scan.asking":`Your browser is about to ask for the camera — it only reads the code.`,"scan.hint":`Hold the QR code or barcode inside the frame.`,"scan.hintQr":`Hold the QR code inside the frame. This device does not read barcodes here.`,"scan.miss":`No code was found in the photo. Try closer and sharper.`,"scan.fromPhoto":`Choose a photo of the code`,"scan.typeInstead":`Type it instead`,"location.use":`Use my location`,"location.locating":`Finding your location …`,"location.refining":`getting more exact …`,"location.accuracy":`exact to about {m} m`,"location.map":`Map`,"location.remove":`Remove location`,"location.why":`Your browser asks for your location. It is only used for this wizard. You can also just type the address.`,"location.denied":`Location is not allowed for this page. Allow it in your browser's site settings (the lock icon in the address bar) — or type the address below.`,"location.manual":`Type an address or place`,"location.label":`Address or description of the place`,"voice.start":`Record a voice note`,"voice.stop":`Stop`,"voice.recording":`Recording …`,"voice.left":`{s} s left`,"voice.again":`Record again`,"voice.remove":`Delete`,"voice.pick":`Choose an audio file`,"voice.why":`Your browser asks for the microphone. The recording is turned into text afterwards.`,"voice.denied":`The microphone is not allowed for this page. Allow it in your browser's site settings — or record the note with your voice memo app and choose the file.`,"voice.noRecorder":`This browser cannot record here. Record the note with your voice memo app and choose the file.`,"sign.open":`Sign here`,"sign.hint":`Sign with your finger`,"sign.pad":`Signature pad`,"sign.clear":`Clear`,"sign.accept":`Use it`,"sign.again":`Sign again`,"sign.remove":`Remove signature`,"notify.ask":`Tell me when it is done`,"notify.on":`You will be told`,"notify.why":`With a sound, a buzz or a notification. Your browser asks once for permission.`,"notify.onHint":`You can switch apps — a notification brings you back.`,"notify.quiet":`With a sound and a buzz while this page is open.`,"notify.blocked":`Notifications are blocked for this page — you get a sound and a buzz while it is open. You can allow them in your browser's site settings.`,"notify.done":`Your result is ready.`,"notify.next":`It goes on — have a look.`,"notify.needsYou":`The wizard needs you for a moment.`,"common.offline":`No connection. Check your network and try again.`,"common.retry":`Try again`,"common.cancel":`Cancel`,"run.start":`Let's go`,"run.unavailable":`This wizard is not available right now.`,"run.resume":`Continue your last run`},Ji={de:Ki,en:qi},Yi=`de`,Xi=Ki,Zi=new Set;function Qi(e){if(e!==Yi){Yi=e,Xi=e===`de`?Ki:qi;for(let e of Zi)e()}}function $i(e){return e.note&&Gi(e.note,Yi)||e.message}function M(e,t){let n=Xi[e]??Ki[e]??e;for(let[e,r]of Object.entries(t??{}))n=n.replace(`{${e}}`,String(r));return n}var ea={...Ji.de,"brand.tagline":`Wünsch dir was. Wir bauen deinen Wizard.`,"brand.sub":`Er führt dich Schritt für Schritt zum Ergebnis. Die KI erledigt die Arbeit.`,"auth.dev":`Dev-Login (lokal)`,"auth.legal":`Kein Passwort, keine Registrierung – du meldest dich mit einem bestehenden Konto an.`,"auth.signIn":`Anmelden oder Konto erstellen`,"auth.failed":`Die Anmeldung hat nicht geklappt. Bitte noch einmal versuchen.`,"auth.localTitle":`Dieser Browser ist nicht angemeldet`,"auth.localWhy":`Das Studio läuft auf deinem Computer und lässt nur einen Browser herein, der seinen Link geöffnet hat. Hier fehlt diese Anmeldung – etwa weil die Cookies gelöscht wurden oder ein anderes Studio auf diesem Computer (eine andere Adresse auf localhost) sie ersetzt hat.`,"auth.localLink":`Führe das in einem Terminal aus – es öffnet das Studio und meldet diesen Browser an:`,"auth.localStartLink":`Oder öffne den Link, den die App beim Start ausgegeben hat („Open the studio: …/api/local/enter?k=…“). Er gilt einmal pro Start.`,"auth.wrongHost":`Das Studio läuft unter einer anderen Adresse`,"auth.wrongHostWhy":`Die App auf diesem Computer antwortet nur unter ihrer eigenen Adresse – das schützt sie vor fremden Webseiten. Öffne das Studio dort:`,"auth.unreachable":`Die App antwortet gerade nicht`,"auth.unreachableWhy":`Unter {address} läuft das Studio, aber die App dahinter gibt keine Antwort – sie startet vielleicht gerade neu oder ist beendet. Die Seite versucht es weiter.`,"nav.account":`Konto & Guthaben`,"setup.keysInAccount":`API-Schlüssel für Skripte gehören zu deinem Konto. Du legst sie dort an und ziehst sie dort zurück.`,"setup.openAccount":`Konto öffnen`,"class.label":`Modell-Klasse`,"class.classifier":`Classifier`,"class.standard":`Standard`,"class.high":`High`,"class.highest":`Highest`,"class.image":`Bild`,"class.video":`Video`,"class.audio":`Audio`,"class.speech":`Sprachausgabe`,"class.classifier.hint":`Zuordnen, Ja/Nein, wenige Werte aus Text ziehen. Am günstigsten.`,"class.standard.hint":`Kurze Texte, eine API aufrufen, umformatieren.`,"class.high.hint":`Recherche mit Werkzeugen, lange Dokumente, Abwägen vieler Quellen.`,"class.highest.hint":`Schweres Abwägen oder Code. Mehrfach so teuer wie High.`,"class.effort":`Denkaufwand`,"class.effortAuto":`Automatisch`,"class.effort.low":`Niedrig`,"class.effort.medium":`Mittel`,"class.effort.high":`Hoch`,"estimate.step":`≈ {n} Credits, selten mehr als {high}`,"estimate.measured":`gemessen aus den letzten Läufen`,"estimate.formula":`geschätzt, wird nach fünf Läufen genauer`,"estimate.share":`Ein Lauf kostet etwa {run} Credits. Beim Tageslimit sind es höchstens {day} Credits am Tag.`,"local.title":`Modelle`,"local.accountWaiting":`Warte auf die Anmeldung im Browser …`,"local.accountFailed":`Der Konto-Dienst ist gerade nicht erreichbar.`,"local.accountExpired":`Die Anmeldung ist abgelaufen. Bitte neu anmelden.`,"local.sourceNeedsAccount":`Dafür brauchst du ein Konto.`,"local.toAccount":`Zu Einstellungen → Konto`,"local.sourceOwn":`Eigene Schlüssel`,"local.keys":`Schlüssel`,"local.keysHint":`Ein Schlüssel reicht. Schlüssel liegen im Schlüsselbund dieses Geräts, nie in der Datenbank.`,"local.keySet":`hinterlegt`,"local.keyEmpty":`nicht hinterlegt`,"local.keyRemove":`Entfernen`,"local.classes":`Modell je Klasse`,"local.classesHint":`Ein Schritt nennt nur die Klasse. Hier steht, welches Modell sie bedient, z. B. anthropic/claude-haiku-4.5, openai:gpt-5.4-mini oder ollama:qwen3.`,"local.save":`Speichern`,"local.saved":`Gespeichert`,"local.chat":`Der Chat im Studio antwortet über`,"local.chatModels":`Modell-Klasse Highest`,"local.chatClaude":`Claude-Abo (Claude Code)`,"local.subscription":`Mit dem Abo baut das auf diesem Gerät installierte Claude Code den Wizard – mit deiner Anmeldung dort. Läufe nutzen weiter Schlüssel oder Guthaben.`,"harness.hint":`Texte denkt das auf diesem Gerät installierte {name} – mit deinem {sub} und deiner Anmeldung dort. Kein Schlüssel nötig. Bilder, Videos und Audio brauchen weiter einen Schlüssel.`,"harness.hintImages":`Texte und Bilder macht das auf diesem Gerät installierte {name} – mit deinem {sub} und deiner Anmeldung dort. Kein Schlüssel nötig. Videos und Audio brauchen weiter einen Schlüssel.`,"harness.found":`{name} {version} gefunden`,"harness.missing":`{name} ist auf diesem Gerät nicht installiert.`,"harness.install":`Oder in deinem eigenen Terminal:`,"harness.installButton":`{name} installieren`,"harness.installing":`{name} wird im Terminal unten installiert – das dauert etwa eine Minute. Danach meldest du es an.`,"harness.installEnded":`Die Installation ist zu Ende, aber {name} ist nicht da. Was oben steht, sagt warum.`,"harness.appHere":`Die {app}-App ist auf diesem Computer: {name} meldet sich mit demselben {sub} an.`,"harness.notInstalled":`nicht installiert`,"harness.authSubscription":`Angemeldet mit deinem {sub}.`,"harness.authKey":`Angemeldet mit einem API-Schlüssel aus deiner Shell – nicht mit dem Abo. Melde dich hier an, damit es über dein {sub} läuft.`,"harness.authNone":`Noch nicht angemeldet.`,"harness.signIn":`Hier anmelden`,"harness.signingIn":`Die Anmeldung läuft im Terminal unten – dein Browser öffnet sich dafür. Das Terminal schließt sich, sobald die Anmeldung da ist.`,"harness.signInInteractive":`Unten startet {name}. Wähle dort die Anmeldung mit deinem {sub} und melde dich im Browser an. Das Terminal schließt sich, sobald die Anmeldung da ist.`,"harness.loginEnded":`Die Anmeldung wurde beendet, ohne dass {name} angemeldet ist.`,"harness.sub.claude":`Claude-Abo`,"harness.sub.codex":`ChatGPT-Abo`,"harness.sub.gemini":`Google-Konto`,"harness.sub.cursor":`Cursor-Abo`,"harness.desc.claude":`Mit deinem Claude-Abo – kein Schlüssel nötig.`,"harness.desc.codex":`Mit deinem ChatGPT-Abo – kein Schlüssel nötig.`,"harness.desc.gemini":`Mit deinem Google-Konto – kein Schlüssel nötig.`,"harness.desc.cursor":`Mit deinem Cursor-Abo – kein Schlüssel nötig.`,"harness.ready":`angemeldet`,"local.recheck":`Erneut prüfen`,"local.test":`Testen`,"local.testHint":`Ein kurzer Aufruf zeigt, ob der Weg zum Modell offen ist.`,"local.testOk":`Antwort in {s} s über {ref}: „{reply}“`,"local.testFailed":`Der Test hat nicht geklappt: {error}`,"models.groupCaps":`Fähigkeiten`,"models.groupAccess":`Zugänge`,"models.groupMore":`Weitere Anbieter`,"models.cap.text":`Text & Denken`,"models.cap.text.hint":`Schreibt, fasst zusammen, recherchiert und entscheidet – in fast jedem Schritt.`,"models.cap.image":`Bilder`,"models.cap.image.hint":`Erzeugt Bilder: Logos, Produktfotos, Illustrationen.`,"models.cap.video":`Videos`,"models.cap.video.hint":`Erzeugt kurze Clips aus Text oder aus einem Bild.`,"models.cap.speech":`Sprachausgabe`,"models.cap.speech.hint":`Liest Texte vor: Voice-over, Hörfassungen, Ansagen.`,"models.cap.listening":`Sprachnotizen`,"models.cap.listening.hint":`Versteht Gesprochenes und macht aus Sprachnotizen Text.`,"models.way.local":`Lokales Modell`,"models.way.credits":`Guthaben`,"models.way.creditsTeam":`Guthaben des Teams`,"models.way.none":`nicht eingerichtet`,"models.who":`Wer macht das?`,"models.optSubscription":`Dein Abo`,"models.optKey":`Eigener API Key`,"models.optLocal":`Lokales Modell`,"models.optLocalNote":`Ollama auf diesem Computer`,"models.optApple":`Apple Intelligence`,"models.optAppleNote":`auf diesem Mac, ohne Internet`,"models.appleOff":`ausgeschaltet – Systemeinstellungen → Apple Intelligence & Siri`,"models.appleLoading":`Apple lädt das Modell noch`,"models.appleDevice":`nicht auf diesem Mac`,"models.appleHint":`Kurze Texte und Entscheidungen (Classifier, Standard) denkt das Modell von Apple Intelligence auf diesem Mac – nichts verlässt ihn. Recherche, lange Dokumente und Code (High, Highest): {way}.`,"models.appleListenHint":`Sprachnotizen schreibt dieser Mac selbst auf – nichts verlässt ihn. Beim ersten Mal lädt Apple die Sprache nach.`,"models.noteIncluded":`im Abo enthalten`,"models.noteSignedOut":`nicht angemeldet`,"models.noteMissing":`nicht installiert`,"models.noteKey":`API Key hinterlegt`,"models.noteKeyShort":`Key`,"models.noteSignedIn":`angemeldet`,"models.noteShellKey":`API Key aus der Shell`,"models.optOther":`Sonst`,"models.optCreditsGroup":`engenty`,"models.noteNoKey":`API Key fehlt`,"models.noteNeedsAccount":`Konto nötig`,"models.notePerImage":`≈ {n} Credits je Bild`,"models.notePerSecond":`≈ {n} Credits je Sekunde`,"models.notePer1k":`≈ {n} Credits je 1000 Zeichen`,"models.notePerMinute":`≈ {n} Credits je Minute`,"models.creditsAuto":`engenty wählt: {model}`,"models.creditsAutoNone":`engenty wählt das Modell`,"models.creditsPickHint":`Abgerechnet in Credits – ohne eigenen API Key.`,"models.viaCredits":`{name} über engenty Guthaben`,"models.viaCreditsHint":`Ohne eigenen API Key, abgerechnet in Credits.`,"models.viaCreditsNeedsAccount":`Mit einem engenty-Konto, abgerechnet in Credits.`,"models.noteUsage":`Credits nach Verbrauch`,"models.model":`Modell`,"models.modelCustom":`Eigenes Modell …`,"models.textSimple":`Einfache Schritte`,"models.textDemanding":`Anspruchsvolle Schritte`,"models.perClass":`Je Klasse anpassen`,"models.manageKey":`API Key von {name}`,"models.key":`API Key`,"models.keyFor":`API Key von {name}`,"models.keyGet":`Key bei {name} holen`,"models.keySave":`Prüfen und speichern`,"models.keyStored":`API Key hinterlegt`,"models.keyNone":`Kein API Key`,"models.keyCheck":`Prüfen`,"models.keyReplace":`Ersetzen`,"models.keyRemove":`Entfernen`,"models.keyOk":`Der Key gilt.`,"models.keyBad":`Der Key wurde nicht angenommen.`,"models.keyWhereLocal":`Der Key bleibt auf diesem Gerät, nie in der Datenbank.`,"models.keyWhereCloud":`Der Key liegt verschlüsselt beim Team. Niemand sieht ihn wieder.`,"models.keyFallback":`Bis der Key da ist, springt das Guthaben ein.`,"models.uses":`Wofür`,"models.useFor":`Nutzen`,"models.inUse":`wird genutzt`,"models.try":`Ausprobieren`,"models.try.text":`Testen`,"models.try.image":`Probebild erzeugen`,"models.try.video":`Probeclip erzeugen`,"models.try.speech":`Probe anhören`,"models.try.listening":`Zuhören testen`,"models.tryCost":`Kostet wie ein echter Aufruf.`,"models.tryCostVideo":`Ein Clip von 4 Sekunden – kostet wie ein echter.`,"models.tryWait":`Wird erzeugt …`,"models.tryWaitVideo":`Ein Clip dauert ein bis zwei Minuten …`,"models.tryOk":`In {s} s mit {model}`,"models.tryHeard":`Gehört: „{text}“`,"models.tryHeardNothing":`Nichts gehört – der Weg ist offen.`,"models.tryFailed":`Hat nicht geklappt: {error}`,"models.creditsName":`engenty Guthaben`,"models.creditsTeam":`Guthaben des Teams`,"models.creditsLocalLead":`Springt ein, wo kein Abo und kein eigener API Key eingerichtet ist.`,"models.creditsCloudHint":`Alles ohne eigenen API Key läuft über das Guthaben. Eigene Keys gehen vor und kosten keine Credits.`,"models.creditsConnectTitle":`Mit einem Konto`,"models.creditsLocalHint":`Mit einem engenty-Konto springt das Guthaben ein, wo nichts Eigenes eingerichtet ist – etwa für Videos ohne eigenen API Key.`,"models.creditsConnect":`Konto verbinden`,"models.creditsFallback":`Guthaben springt ein`,"models.creditsFallbackOn":`Was kein Abo und keinen eigenen API Key hat, läuft über das Guthaben.`,"models.creditsFallbackOff":`Aus: Was kein Abo und keinen eigenen API Key hat, läuft nicht.`,"models.creditsOn":`Läuft über das Guthaben`,"models.creditsNone":`Gerade läuft nichts über das Guthaben.`,"models.creditsTopUp":`Aufladen`,"models.creditsPicks":`engenty wählt das Modell und rechnet in Credits ab.`,"models.creditsModel":`Gerade: {model}.`,"models.clientSignIn":`Anmeldung`,"models.clientImages":`{name} erzeugt Bilder mit deinem {sub} – ohne eigenen API Key.`,"models.clientNotChosen":`Text läuft gerade nicht über {name}.`,"models.ollamaHint":`Adresse von Ollama und das Modell, das dort läuft.`,"models.readOnly":`Nur Admins des Teams ändern die Modelle.`,"models.viewAs":`Vorschau als`,"models.view.auto":`wie es ist`,"models.view.local":`lokal`,"models.view.linked":`lokal + Konto`,"models.view.cloud":`Cloud-Studio`,"setup.title":`Setup`,"setup.sub":`engenty kann deine vorhandenen Konten auf deinem Computer nutzen.`,"setup.source":`Womit soll engenty denken?`,"setup.local":`Läuft lokal auf diesem Gerät.`,"setup.stage.connect":`Verbinden`,"setup.stage.test":`Testen`,"setup.stage.done":`Fertig`,"setup.h.install":`Installiere {name}`,"setup.h.signIn":`Melde {name} an`,"setup.h.keys":`Trage einen Schlüssel ein`,"setup.h.test":`Ein kurzer Test`,"setup.h.done":`Verbunden.`,"setup.ready":`Alles bereit.`,"setup.noHarness":`Noch kein KI-Client installiert. Wähle einen – er wird hier installiert – oder trage eigene Schlüssel ein.`,"setup.ownDesc":`AI Gateway, OpenAI, Anthropic oder Ollama.`,"setup.appleDesc":`Das Modell auf diesem Mac – ohne Konto, ohne Internet.`,"setup.appleHint":`Apple Intelligence denkt kurze Texte und Entscheidungen auf diesem Mac; nichts verlässt ihn. Für Recherche, lange Dokumente und Code legst du später unter Einstellungen → Modelle einen weiteren Weg an.`,"setup.appleHintKeeps":`Apple Intelligence denkt kurze Texte und Entscheidungen auf diesem Mac; nichts verlässt ihn. Recherche, lange Dokumente und Code (High, Highest) bleiben, wie sie waren: {way}.`,"setup.recommended":`Empfohlen`,"setup.done":`Zum Studio`,"setup.untilWorks":`Das Studio öffnet sich, sobald der Test klappt.`,"cloud.notSent":`Diese Version ist noch nicht in der Cloud.`,"cloud.send":`Jetzt senden`,"cloud.resend":`Erneut senden`,"cloud.again":`Um {when} wird es noch einmal versucht.`,"cloud.sent":`Version {v} · gesendet am {when}`,"cloud.notRunnable":`Version {v} läuft in der Cloud nicht.`,"cloud.keepsRunning":`Dort läuft weiter Version {v}.`,"cloud.nothingRuns":`Dort läuft deshalb noch nichts.`,"cloud.notes":`Was in der Cloud anders läuft:`,"cloud.check":`Was dem jetzigen Stand in der Cloud fehlen würde:`,"cloud.checkBlocking":`So, wie der Wizard jetzt ist, würde er in der Cloud nicht laufen:`,"cloud.documents":`Die Dokumente des Space bleiben auf diesem Gerät. In der Cloud arbeiten die Schritte ohne sie.`,"cloud.stepName":`„{title}“`,"cloud.problem.sandbox":`Der Server hat keine Maschine für Code. Dort läuft das ohne sie.`,"cloud.problem.mcp":`Die MCP-Server des Space gibt es auf dem Server nicht: {detail}.`,"cloud.problem.model":`Dafür gibt es in der Cloud kein Modell.`,"cloud.problem.connector":`Dem Space fehlt in der Cloud ein Connector.`,"cloud.problem.invalid":`So nimmt der Server den Wizard nicht an.`,"cloud.spaceLimit":`In der Cloud deines Kontos liegt schon der Space einer anderen Installation:`,"cloud.replace":`Bisherigen Space ersetzen`,"cloud.replaceConfirm":`Den bisherigen Space aus der Cloud entfernen? Seine Wizards und ihre Links verschwinden dort. Danach wird gesendet, was hier veröffentlicht ist.`,"cloud.noticeError":`Hier veröffentlicht. In der Cloud ist diese Version nicht angekommen – mehr dazu unten.`,"cloud.noticeNotRunnable":`Hier veröffentlicht. In der Cloud läuft diese Version nicht – mehr dazu unten.`,"readonly.wizard":`Dieser Wizard kommt aus deiner lokalen Installation und wird dort geändert. Hier läuft, was du dort veröffentlichst.`,"readonly.project":`Dieser Space kommt aus deiner lokalen Installation und wird dort geändert.`,"readonly.server":`Auf diesem Server wird nichts gebaut. Hier laufen die Wizards, die deine lokale Installation veröffentlicht.`,"nav.wizards":`Wizards`,"nav.settings":`Einstellungen`,"nav.project":`Space`,"nav.switchSpace":`Space wechseln`,"nav.addSpace":`Space hinzufügen`,"nav.wizardCount":`{n} Wizards`,"appbar.position":`Position`,"appbar.left":`Links`,"appbar.top":`Oben`,"appbar.right":`Rechts`,"appbar.bottom":`Unten`,"appbar.theme":`Farbschema`,"appbar.light":`Hell`,"appbar.dark":`Dunkel`,"appbar.system":`Wie das System`,"account.title":`Konto`,"account.hint":`Wie dich die App nennt und wie man dich erreicht.`,"account.initials":`Dein Kürzel im Menü oben rechts: die Anfangsbuchstaben deines Namens.`,"account.name":`Name`,"account.nameHint":`Anfangs steht hier der Benutzername dieses Geräts.`,"account.fromAccount":`Name und E-Mail kommen aus deinem Konto.`,"account.about":`Über dich`,"account.aboutHint":`Wer du bist und was du machst.`,"account.email":`E-Mail`,"account.phone":`Telefon`,"account.connection":`engenty.ai`,"account.connectionHint":`Anmeldung, Guthaben und die Cloud, in der deine Wizards für alle laufen.`,"account.profile":`Profil`,"account.local":`Lokale Installation`,"account.localText":`Diese App läuft auf deinem Gerät und ist mit keinem Konto verbunden. Wizards, Space und Dateien bleiben hier.`,"account.linked":`Verbunden`,"account.with":`Mit einem Konto`,"account.withCredits":`Guthaben für die Modelle, wo kein KI-Client installiert ist. Kein API Key nötig.`,"account.withCloud":`Was du veröffentlichst, läuft auch auf engenty.ai – hinter einem öffentlichen Link, auch wenn dieses Gerät aus ist.`,"account.signIn":`Anmelden`,"account.signInAgain":`Neu anmelden`,"account.new":`Noch kein Konto?`,"account.newHint":`Ein neues Konto braucht einen Einladungscode. Trag ihn hier ein, dann steht er bei der Registrierung schon im Formular.`,"account.code":`Einladungscode`,"account.create":`Konto erstellen`,"account.credits":`Guthaben`,"account.topUp":`Aufladen`,"account.expires":`{n} Credits gültig bis {date}`,"account.kind.start":`Startguthaben`,"account.kind.monthly":`Monatsguthaben`,"account.kind.gift":`Geschenkt`,"account.cloud":`Was du hier veröffentlichst, läuft auch auf {host}.`,"account.look":`Darstellung`,"account.lookHint":`Sprache und Design der App in diesem Browser.`,"nav.logout":`Abmelden`,"nav.connected":`Verbunden mit {host}`,"nav.expired":`Anmeldung abgelaufen`,"nav.onlyHere":`Nur auf diesem Computer`,"nav.local":`lokal`,"nav.language":`Sprache`,"nav.theme":`Design`,"nav.credits":`{n} Credits`,"footer.billing":`Guthaben`,"footer.usage":`Verbrauch`,"footer.invoices":`Rechnungen`,"footer.account":`Konto`,"about.version":`Version {v}`,"about.title":`Über engenty wizards`,"about.kind.script":`Lokale Installation`,"about.kind.checkout":`Entwicklungs-Checkout`,"about.kind.npm":`Mit npm installiert`,"about.kind.cloud":`In der Cloud`,"about.update.check":`Nach Updates suchen`,"about.update.checking":`Sucht nach Updates …`,"about.update.upToDate":`Du bist auf dem neuesten Stand.`,"about.update.checkedAt":`zuletzt geprüft {when}`,"about.update.unknown":`Konnte nicht prüfen – keine Verbindung zu GitHub?`,"about.update.off":`Die Suche nach Updates ist abgeschaltet.`,"about.update.manual":`Diese Installation aktualisiert sich nicht selbst: Hol dir die neue Version dort, wo du sie installiert hast.`,"about.tab.new":`Was ist neu`,"about.tab.earlier":`Versionen`,"about.changes":`{n} Änderungen`,"about.change":`1 Änderung`,"about.update.available":`Version {v} von engenty wizards ist da.`,"about.update.install":`Aktualisieren`,"about.update.installing":`Version {v} wird installiert …`,"about.update.restarting":`Startet neu mit Version {v} …`,"about.update.done":`Installiert. Starte engenty wizards neu, um {v} zu nutzen.`,"about.update.failed":`Das Update ist fehlgeschlagen. Logs: logs/update.log`,"about.update.notes":`Was ist neu`,"about.changelog":`Changelog`,"about.changelogHint":`Was sich von Version zu Version geändert hat.`,"about.changelogEmpty":`Noch keine Einträge.`,"about.unreleased":`Noch nicht veröffentlicht`,"about.breaking":`breaking`,"about.credits":`Credits`,"about.creditsHint":`engenty wizards und die Open-Source-Software, auf der es aufbaut.`,"about.creditsProduct":`engenty`,"about.creditsBuiltWith":`Gebaut mit`,"about.creditsDeps":`Direkte Abhängigkeiten`,"about.creditsDepsHint":`Was die Teile dieser App selbst einbinden, mit Version und Lizenz – ohne deren eigene Abhängigkeiten.`,"about.creditsShared":`Von mehreren Teilen genutzt`,"about.search":`Suchen …`,"about.noMatches":`Keine Treffer.`,"theme.dark":`Dunkles Design`,"theme.light":`Helles Design`,"home.title":`Deine Wizards`,"home.search":`Suche nach deinen Wizards`,"home.noMatch":`Keiner deiner Wizards heißt so.`,"home.newFromSearch":`Neuen Wizard bauen: „{q}“`,"home.new":`Neuer Wizard`,"home.import":`Importieren`,"import.failed":`Import hat nicht geklappt`,"home.empty":`Noch keine Wizards in diesem Space.`,"home.live":`Live`,"home.draft":`Entwurf`,"where.here":`Lokal`,"where.hereVersion":`Lokal · Version {v}`,"where.hereHint":`Läuft nur auf diesem Computer, solange die App läuft.`,"where.liveHint":`Läuft auf {host} – für alle mit dem Link.`,"where.liveAt":`Live auf {host} · Version {v}`,"where.note":`1 Hinweis`,"where.notes":`{n} Hinweise`,"where.sending":`Wird gesendet`,"where.missing":`Nicht in der Cloud`,"home.steps":`{n} Schritte`,"home.all":`Alle`,"home.newProject":`Neuer Space`,"home.projectName":`Name des Space`,"home.projectLimit":`Höchstens {n} Spaces`,"team.title":`Team`,"team.hint":`Wer im Team ist und auf welchem Paket es läuft. Eingeladen und verwaltet wird im Konto.`,"team.plan":`Paket`,"team.planFree":`Free`,"team.seats":`{taken} von {limit} Plätzen`,"team.seatsUnlimited":`Plätze ohne Limit`,"team.members":`Mitglieder`,"team.invited":`eingeladen`,"team.you":`du`,"team.manage":`Mitglieder verwalten`,"team.changePlan":`Paket ansehen`,"team.roles":`Inhaber und Admins legen Wizards und Spaces an und löschen sie; Mitglieder bearbeiten die Wizards, die es gibt.`,"team.memberNote":`Du bist Mitglied: Du bearbeitest Wizards, Admins legen neue an und löschen.`,"team.failed":`Das Team ließ sich nicht laden.`,"team.role.owner":`Inhaber`,"team.role.admin":`Admin`,"team.role.member":`Mitglied`,"models.ownKeysPlan":`Eigene API Keys gibt es ab dem Pro-Paket. Hier zahlen die Credits des Teams.`,"home.fromLocal":`Aus deiner lokalen Installation – geändert wird dort.`,"home.syncedAt":`Zuletzt angekommen: {when}.`,"home.local.title":`Hier laufen die Wizards aus deiner lokalen Installation`,"home.local.text":`Du baust auf deinem eigenen Computer. Was du dort veröffentlichst, läuft hier – für alle, hinter einem Link.`,"home.local.install":`Installiere engenty wizards auf deinem Computer:`,"home.local.signIn":`Melde dich dort unter Einstellungen → Konto mit diesem Konto an.`,"home.local.publish":`Veröffentliche einen Wizard. Er erscheint dann hier.`,"new.title":`Was soll dein Wizard können?`,"new.placeholder":`z. B. Kunden geben ihr Produkt und ihre Zielgruppe ein, der Wizard recherchiert Wettbewerber und erstellt daraus ein Positionierungs-Briefing als PDF.`,"new.build":`Wizard bauen`,"new.orStarter":`Oder beginne mit einer Vorlage`,"new.import":`Wizard-Paket importieren`,"new.hint":`Du kannst alles danach im Gespräch ändern.`,"new.runsAs":`Läuft als`,"new.where":`Wo soll er laufen?`,"new.web":`Im Browser`,"new.phone":`Am Telefon`,"new.messages":`Per Nachricht`,"new.off":`aus`,"new.ch.steps":`Wizard in Schritten`,"new.ch.chat":`Chat`,"new.ch.talk":`Live Voice`,"new.ch.video":`Video Call`,"new.ch.call":`Anruf`,"new.ch.sms":`SMS`,"new.ch.whatsapp":`WhatsApp`,"new.callHandoff":`Was am Telefon nicht geht, kommt per SMS.`,"new.similar":`Gibt es schon ähnlich`,"new.yours":`Deiner`,"new.template":`Vorlage`,"new.open":`Öffnen`,"new.take":`Nehmen`,"new.more":`{n} weitere …`,"new.dropHint":`Zum Anhängen loslassen`,"editor.resize":`Breite ändern – Doppelklick setzt zurück`,"editor.resizeSheet":`Höhe ändern – Tippen klappt ein und aus`,"editor.export":`Als Paket exportieren (.wizard)`,"addStep.title":`Was soll hier passieren?`,"addStep.placeholder":`Zum Beispiel: eine Karte mit allen gefundenen Objekten, der Preis als Farbe`,"addStep.kind":`Art des Schritts`,"addStep.auto":`KI wählt`,"addStep.empty":`Beschreibe zuerst, was der Schritt tun soll.`,"addStep.busy":`Der Assistent arbeitet noch an der letzten Nachricht. Versuch es gleich noch einmal.`,"addStep.emptyStep":`Leer einfügen`,"addStep.cancel":`Abbrechen`,"addStep.create":`Erstellen`,"addStep.building":`Neuer Schritt wird gebaut …`,"addStep.showChat":`Im Gespräch ansehen`,"addStep.add":`Schritt hinzufügen`,"surface.preview":`Vorschau`,"surface.code":`Code`,"surface.sampleNote":`Mit Beispieldaten – ein Lauf zeigt seine eigenen.`,"surface.sampleText":`Beispieltext`,"surface.sampleBrand":`Deine Firma`,"addStep.when":`Wann?`,"addStep.always":`Immer`,"addStep.onlyIf":`Nur wenn …`,"addStep.aiDecides":`KI entscheidet …`,"addStep.ifPlaceholder":`Zum Beispiel: Umsatz unter 100`,"addStep.askPlaceholder":`Zum Beispiel: die Person will ihr Geld zurück`,"addStep.whenEmpty":`Sag, wann der Schritt kommen soll.`,"addStep.messageIf":`Nur wenn: {text} – sonst geht es nach „{from}“ weiter wie bisher.`,"addStep.messageAsk":`KI entscheidet: {text} – sonst geht es nach „{from}“ weiter wie bisher.`,"addStep.here":`Hier einen Schritt einfügen`,"addStep.between":`Zwischen „{before}“ und „{after}“`,"addStep.after":`Nach „{title}“`,"addStep.first":`Als erster Schritt, vor „{title}“`,"addStep.message":`Neuer Schritt · {place}`,"addStep.messageAs":`Neuer Schritt ({kind}) · {place}`,"widget.missing":`Das Widget ist noch nicht gebaut.`,"widget.what":`Was soll das Widget zeigen? (optional)`,"widget.build":`Vom Assistenten bauen lassen`,"widget.upload":`Eigene HTML hochladen`,"widget.buildMessage":`Bitte baue das Widget „{title}“. {what}`,"editor.chat":`Gespräch`,"editor.dropToAttach":`Loslassen, um es der Nachricht anzuhängen`,"editor.memory":`Gedächtnis`,"memory.explain":`Was der Wizard über alle Läufe hinweg weiß: Notizen, die KI-Schritte mit dem Werkzeug „Seiten“ lesen und fortschreiben, und die Tabellen seiner geteilten Listen. Dieselben Daten stehen im Bereich unter Daten.`,"memory.unused":`Noch nutzt kein Schritt das Gedächtnis. Bitte den Assistenten, dass sich ein KI-Schritt etwas merken soll.`,"memory.none":`Noch nichts gemerkt.`,"memory.add":`Notiz`,"memory.newNote":`Notiz`,"memory.back":`Gedächtnis`,"memory.testCopy":`Testläufe lesen das Gedächtnis, schreiben aber in eine eigene Kopie, die mit dem Lauf verschwindet.`,"editor.step":`Schritte`,"editor.runs":`Durchläufe`,"editor.reviewEditable":`bearbeitbar`,"editor.reviewRedo":`neu erstellbar`,"editor.otherwise":`sonst`,"editor.next.title":`Nächster Schritt`,"editor.next.ways":`Nächster Schritt · {count} Wege`,"editor.next.open":`Schritt öffnen`,"editor.next.then":`Danach`,"editor.next.fold":`Zuklappen`,"editor.next.unfold":`Kurz zeigen`,"editor.branch.ai":`KI`,"editor.branch.addWhen":`Bedingung`,"editor.branch.when":`Weiter, wenn`,"editor.branch.pick":`Wählen …`,"editor.branch.and":`und`,"editor.branch.statement":`Aussage`,"editor.branch.none":`Keine trifft klar zu`,"editor.branch.how":`Entschieden von einem Entscheidungsmodell (Jev), wo es einen Weg dorthin gibt, sonst vom Sprachmodell der Klasse Klassifizieren. Liegen die zwei wahrscheinlichsten Antworten weniger als 10 Punkte auseinander, gilt „keine“.`,"editor.branch.lastRun":`Im letzten Testlauf entschieden von {source}.`,"editor.branch.bySystemOne":`einem Entscheidungsmodell`,"editor.branch.byLlm":`dem Sprachmodell`,"editor.branch.notYet":`Ein Testlauf zeigt hier, wie die KI entschieden hat.`,"editor.branch.end":`Ende`,"editor.branch.max":`Höchstens so oft (sonst 10)`,"editor.branch.remove":`Verzweigung entfernen`,"editor.branch.addAsk":`KI entscheidet`,"editor.branch.newAsk":`Die Person möchte …`,"editor.whenFilled":`{field} ausgefüllt`,"editor.whenEmpty":`{field} leer`,"editor.whenContains":`{field} enthält {value}`,"editor.whenAsk":`entscheidet: {text}`,"editor.surfaceJson":`Ansicht (JSON)`,"editor.fieldAsk":`Oder: zeigen, wenn die KI das für zutreffend hält …`,"editor.atMost":`höchstens {count}×`,"editor.shownWhen":`Nur zeigen, wenn`,"editor.shownAlways":`Immer zeigen`,"editor.conditionValue":`Wert`,"editor.optionsFrom":`Auswahl aus früheren Daten`,"editor.optionsFixed":`Feste Auswahl`,"editor.op.equals":`ist`,"editor.op.notEquals":`ist nicht`,"editor.op.in":`ist eine von`,"editor.op.notEmpty":`ist ausgefüllt`,"editor.op.empty":`ist leer`,"editor.op.gt":`größer als`,"editor.op.lt":`kleiner als`,"editor.op.contains":`enthält`,"editor.conditionsMore":`und {count} weitere Bedingungen`,"tool.web_search":`Websuche`,"tool.web_fetch":`Webseiten lesen`,"tool.browser":`Browser`,"tool.sandbox":`Code & Shell`,"tool.image":`Bilder`,"tool.http":`API`,"tool.pages":`Seiten`,"editor.test":`Testen`,"editor.share":`Teilen`,"editor.published":`Live · Version {v}`,"editor.notPublished":`Noch nicht veröffentlicht`,"editor.composer":`Beschreibe, was sich ändern soll …`,"editor.attach":`Dateien anhängen`,"editor.detach":`Entfernen`,"editor.attached":`Angehängt`,"editor.thread":`Verlauf`,"editor.voice":`Diktieren`,"editor.voiceStop":`Diktat beenden`,"editor.listening":`Ich höre zu …`,"editor.transcribing":`Wird verschriftlicht …`,"editor.micDenied":`Das Mikrofon ist für diese Seite nicht freigegeben.`,"editor.building":`Baue den Ablauf …`,"editor.files":`Dateien`,"files.explain":`Was dein Wizard bei jedem Durchlauf braucht: Widget-Code, Bibliotheken, Kartenumrisse, Preislisten. Der Assistent legt sie im Gespräch an – du kannst auch eigene hochladen.`,"files.upload":`Hochladen`,"files.drop":`Zum Hochladen loslassen`,"files.count":`{n} Dateien · {size}`,"files.empty":`Noch keine Dateien. Zieh Dateien hierher oder bitte den Assistenten, ein Widget zu bauen.`,"files.download":`Herunterladen`,"files.delete":`Löschen`,"files.confirmDelete":`„{path}“ löschen?`,"files.none":`Dieser Wizard hat keine Dateien.`,"editor.thinking":`Denkt nach …`,"editor.chatBroken":`Die Verbindung ist abgebrochen. Was schon gebaut war, ist gespeichert – schick die Nachricht bitte noch einmal.`,"editor.issues":`Bevor du testest oder teilst, braucht der Wizard noch Korrekturen:`,"editor.fixWithChat":`Vom Assistenten beheben lassen`,"editor.models.blocking":`So kann der Wizard nicht starten. Es fehlen Modelle:`,"editor.models.optional":`Diese Schritte laufen so nicht. Wähle beim Testen einen Weg ohne sie oder richte die Modelle ein:`,"editor.models.settings":`Modelle einrichten`,"editor.prevStep":`Vorheriger Schritt`,"editor.nextStep":`Nächster Schritt`,"editor.deleteStep":`Schritt löschen`,"editor.holdToDelete":`Zum Löschen halten`,"editor.deleting":`Löschen`,"editor.moveUp":`Nach oben`,"editor.moveDown":`Nach unten`,"editor.noRuns":`Noch keine Durchläufe.`,"editor.restart":`Neu starten`,"editor.close":`Schließen`,"runDrawer.expand":`Ganzes Fenster`,"runDrawer.shrink":`Zurück an den Rand`,"editor.chatHello":`Beschreibe mir, was dein Wizard tun soll. Ich baue den Ablauf und du siehst ihn links als Diagramm.`,"shareRun.button":`Teilen`,"shareRun.title":`Ergebnis teilen`,"shareRun.email":`E-Mail`,"shareRun.more":`Mehr …`,"shareRun.until":`Der Link ist bis {date} gültig.`,"shareRun.kept":`Der Link bleibt gültig, bis du ihn zurückziehst.`,"shareRun.withdraw":`Link zurückziehen`,"sharePage.gone":`Dieser Link ist abgelaufen oder wurde zurückgezogen.`,"sharePage.own":`Selbst ausprobieren`,"sharePage.until":`Geteilt · verfügbar bis {date}`,"sharePage.shared":`Geteilt am {date}`,"share.publishing":`Wird veröffentlicht …`,"share.firstTitle":`Beim Teilen veröffentlicht`,"share.firstText":`Version {v} ist live. Hinein kommt nur, wer den Link bekommt.`,"share.notReady":`Noch nicht bereit zum Teilen`,"share.notReadyHint":`Beim ersten Teilen wird er veröffentlicht – vorher muss das stimmen:`,"share.stillBuilding":`Der Assistent baut ihn noch. Sobald er fertig ist, wird er beim Teilen veröffentlicht.`,"live.open":`Änderungen live schalten`,"live.openShort":`Live schalten`,"live.title":`Änderungen live schalten`,"live.intro":`Andere sehen Version {v}. Live geschaltet wird daraus Version {next} – der Link bleibt gleich.`,"live.changed":`Was sich geändert hat`,"live.nothing":`Nichts, was Schritte oder Dateien ändert.`,"live.stepAdded":`Neuer Schritt „{name}“`,"live.stepRemoved":`Schritt „{name}“ entfernt`,"live.stepChanged":`„{name}“: {parts}`,"live.wizardChanged":`Der Wizard selbst: {parts}`,"live.order":`Reihenfolge der Schritte`,"live.fileAdded":`Datei „{name}“ neu`,"live.fileRemoved":`Datei „{name}“ entfernt`,"live.fileChanged":`Datei „{name}“ ersetzt`,"live.and":`und`,"live.part.title":`Titel`,"live.part.description":`Beschreibung`,"live.part.fields":`Felder`,"live.part.cta":`Knopf`,"live.part.instructions":`Anweisung`,"live.part.tools":`Werkzeuge`,"live.part.connections":`Verbindungen`,"live.part.output":`Ergebnis`,"live.part.model":`Modell`,"live.part.next":`was danach kommt`,"live.part.each":`Wiederholung`,"live.part.intro":`Begrüßung`,"live.part.avatar":`engenty`,"live.part.lists":`Listen`,"live.part.other":`Einstellungen`,"live.fixFirst":`Erst beheben, dann live schalten`,"live.tested":`Getestet {when} – mit diesen Änderungen`,"live.testedFailed":`Der Test {when} mit diesen Änderungen ist fehlgeschlagen`,"live.justNow":`gerade eben`,"live.seeRun":`Durchlauf ansehen`,"live.untested":`Noch nicht mit diesen Änderungen getestet.`,"live.test":`Jetzt testen`,"live.keepRunning":`Wer gerade mittendrin ist, macht mit Version {v} weiter.`,"live.cost":`Ein Durchlauf kostet jetzt etwa {after} statt {before} Credits.`,"live.cloud":`Version {v} geht auch in die Cloud deines Kontos.`,"live.cancel":`Abbrechen`,"live.go":`Live schalten`,"live.going":`Wird live geschaltet …`,"live.done":`Version {v} ist live`,"live.doneHint":`Neue Durchläufe starten mit Version {v}. Wer mittendrin war, macht mit Version {was} weiter.`,"live.doneCloud":`Neue Durchläufe starten mit Version {v}, hier und in der Cloud. Wer mittendrin war, macht mit Version {was} weiter.`,"live.close":`Fertig`,"share.titleOf":`„{title}“ teilen`,"share.access":`Zugriff`,"share.anyone":`Jeder mit dem Link`,"share.anyoneMenu":`kann ihn öffnen und ausfüllen`,"share.anyoneHint":`kann ihn öffnen und ausfüllen · bis zu {n} Durchläufe am Tag`,"share.onlyYou":`Nur du`,"share.onlyYouHint":`Der Link ist aus. Du testest ihn im Studio.`,"share.thisComputer":`Nur auf diesem Computer`,"share.thisComputerHint":`Andere erreichen ihn erst über die Cloud.`,"share.ways":`So erreichen ihn andere`,"share.change":`Ändern`,"share.copyLink":`Link`,"share.copyNumber":`Nummer`,"share.copyLinkFor":`Link für {name} kopieren`,"share.copyNumberFor":`Nummer für {name} kopieren`,"share.keywordTo":`„{keyword}“ an {number}`,"share.unset":`Noch nicht eingerichtet`,"share.setUp":`Einrichten`,"share.offNote":`Solange nur du Zugriff hast, sehen alle anderen nur einen Hinweis.`,"share.opensSteps":`in Schritten`,"share.opensAs":`als {name}`,"share.linkNote":`„Link kopieren“ öffnet ihn {how} und bietet die anderen Wege gleich mit an.`,"share.copyMain":`Link kopieren`,"share.notPublished":`Noch nicht veröffentlicht`,"share.changes":`Andere sehen Version {v}. Deine Änderungen sind noch nicht live.`,"share.localHint":`Hier läuft er nur auf diesem Computer. Mit einem Konto läuft er auch in der Cloud – dort öffnen ihn alle.`,"share.back":`Zurück`,"share.close":`Schließen`,"share.done":`Fertig`,"share.qrOpens":`Öffnet`,"share.qrMessage":`Mit der Handykamera scannen: {name} öffnet sich, das Stichwort steht schon da.`,"share.print":`Drucken`,"share.download":`Herunterladen`,"share.onWebsite":`Auf deiner Website`,"share.webShows":`Was zeigt die Website?`,"share.webWhere":`Wo auf der Seite?`,"share.webCode":`Code für deine Seite`,"share.copyCode":`Code kopieren`,"share.webNeedsLink":`Der Code für deine Seite braucht einen Link, den alle erreichen: veröffentlicht, für jeden mit dem Link.`,"share.wpLine":`WordPress? Mit unserem Plugin geht es ohne Code.`,"share.wpPackageLink":`Ohne Konto: als Paket`,"share.place.inline":`In der Seite`,"share.place.inlineHint":`Er steht mitten auf deiner Seite, wo du den Code einfügst.`,"share.place.button":`Hinter einem Knopf`,"share.place.buttonHint":`Ein Knopf auf deiner Seite öffnet ihn in einem Fenster.`,"share.place.bubble":`Als Blase`,"share.place.bubbleHint":`Unten rechts auf jeder Seite – ein Klick öffnet ihn. Den Code am besten in die Fußzeile.`,"share.place.popout":`Als Chat-Knopf`,"share.place.popoutHint":`Unten rechts auf jeder Seite – ein Klick öffnet den Chat. Den Code am besten in die Fußzeile.`,"share.runs":`Durchläufe`,"share.newLink":`Neuer Link`,"share.rotated":`Neuer Link erzeugt`,"share.link":`Link`,"share.copy":`Kopieren`,"share.limit":`Höchstens am Tag`,"share.rotate":`Neuen Link erzeugen`,"share.rotateHint":`Der alte Link und der QR-Code gehen danach nicht mehr.`,"share.website":`Website`,"share.openHere":`Auf diesem Computer testen`,"share.settings":`Einstellungen`,"share.rotateCloud":`Der alte Link und der QR-Code gehen danach nicht mehr – auch in der Cloud.`,"share.others":`Mit anderen teilen`,"share.details":`Details`,"teaser.link":`Dieser Link geht nur auf diesem Computer, solange die App läuft. Mit einem Konto läuft der Wizard auch auf engenty.ai – mit einem Link für alle.`,"teaser.models":`Ohne eigenen API Key: mit einem Konto laufen Text, Bilder und Videos über Guthaben.`,"teaser.connect":`Konto verbinden`,"teaser.modelsLinked":`Oder über das Guthaben deines Kontos: unter Modelle „Guthaben des Kontos“ wählen.`,"share.open":`Öffnen`,"share.qr":`QR-Code`,"share.qrHint":`Mit der Kamera des Handys scannen: der Wizard öffnet sich, in der App engenty wizards, wenn sie installiert ist.`,"share.code":`ID für die App:`,"share.readOnly":`Ob der Link aktiv ist und wie viele Durchläufe er am Tag zulässt, stellst du in deiner lokalen Installation ein.`,"share.fit.no":`Nicht möglich: {steps}`,"run.orAs":`Oder: {label}`,"chat.view":`Ansicht`,"chat.steps":`Schritte`,"chat.chat":`Chat`,"chat.send":`Senden`,"chat.dictate":`Diktieren (⌘⇧M)`,"chat.dictateStop":`Diktat beenden`,"chat.listening":`Ich höre zu …`,"chat.transcribing":`Wird verschriftlicht …`,"chat.micDenied":`Das Mikrofon ist für diese Seite nicht freigegeben.`,"chat.readAloud":`Vorlesen`,"chat.readAloudOff":`Vorlesen beenden`,"talk.start":`Gespräch beginnen`,"talk.stop":`Gespräch beenden`,"talk.connecting":`Verbinde …`,"talk.live":`Im Gespräch`,"talk.speaking":`Spricht`,"talk.listening":`Hört zu`,"talk.failed":`Das Gespräch konnte nicht beginnen`,"talk.hint":`Sprich mit dem Wizard – der Bildschirm zeigt mit.`,"talk.camera":`Kamera einschalten`,"talk.cameraOff":`Kamera ausschalten`,"talk.cameraDenied":`Die Kamera ist für diese Seite nicht freigegeben.`,"video.join":`Beitreten`,"video.rejoin":`Wieder beitreten`,"video.leave":`Verlassen`,"video.hint":`Mikrofon und Kamera werden beim Beitreten gefragt. Der Chat daneben zeigt mit und nimmt, was eine Stimme nicht kann.`,"video.you":`Du`,"video.cameraOff":`Kamera aus`,"video.mute":`Stummschalten`,"video.unmute":`Stummschaltung aufheben`,"video.flip":`Kamera wechseln`,"video.ended":`Anruf beendet`,"video.chat":`Chat`,"talk.joinHint":`Das Mikrofon wird beim Start gefragt, die Kamera erst, wenn du sie einschaltest. Der Chat daneben zeigt mit und nimmt, was eine Stimme nicht kann.`,"chat.skip":`Überspringen`,"chat.skipped":`Übersprungen`,"chat.change":`Ändern`,"chat.placeholder":`Deine Antwort …`,"chat.above":`Antworte oben im Chat`,"chat.required":`Dafür brauche ich eine Antwort.`,"chat.badEmail":`Das sieht nicht nach einer E-Mail-Adresse aus.`,"chat.badUrl":`Das ist keine gültige Adresse.`,"chat.badNumber":`Bitte eine Zahl.`,"chat.file":`1 Datei`,"chat.files":`{n} Dateien`,"chat.voice":`Sprachnotiz`,"chat.rows":`{n} Zeilen`,"chat.connected":`Verbunden`,"chat.checked":`Geprüft`,"type.page":`Seite`,"type.agent":`KI-Schritt`,"type.generate":`Erzeugen`,"type.surface":`Ansicht`,"type.widget":`Widget`,"type.film":`Film`,"type.review":`Prüfen`,"type.result":`Ergebnis`,"run.regenerate":`Neue Variante`,"run.regenerateNote":`Was soll anders werden?`,"market.search":`Vorlage suchen …`,"market.hits":`Aus dem Marktplatz`,"market.all":`Alle`,"market.industry":`Branche`,"market.format":`Ergebnis`,"market.capability":`Fähigkeit`,"market.unavailable":`nicht eingerichtet`,"market.without":`Geht auch ohne: {list}`,"market.optional":`nicht eingerichtet, geht auch ohne`,"market.optionalHint":`Läuft hier ohne {list}: Antworten, die das bräuchten, sind im Wizard gesperrt. Einrichten unter Modelle.`,"market.missing":`Hier nicht eingerichtet: {list}`,"market.plan":`Paket`,"market.pro":`Pro`,"market.proHint":`Braucht Plugins, die mit Pro auf engenty.ai dabei sind`,"market.needsPro":`Mit Pro: braucht {list}`,"market.needsProHint":`Diese Vorlage braucht {list}. Die Plugins sind mit Pro und Team auf engenty.ai dabei.`,"market.missingHint":`Dafür fehlt hier ein Modell: {list}. Richte es unter Modelle ein.`,"market.none":`Keine Vorlage passt zu dieser Auswahl.`,"market.notFound":`Diese Vorlage gibt es nicht (mehr).`,"market.star":`Merken`,"market.starred":`Gemerkt`,"market.starHint":`Gemerkte Vorlagen liegen auf diesem Rechner auch ohne Verbindung bereit.`,"market.fromPlugin":`Kommt mit dem Plugin „{name}“`,"market.noneStarred":`Du hast noch keine Vorlage gemerkt.`,"market.offline":`Keine Verbindung zum Marktplatz: du siehst die Vorlagen, die hier bereitliegen.`,"market.more":`Mehr anzeigen`,"market.reset":`Auswahl zurücksetzen`,"market.count":`{n} Vorlagen`,"market.countOf":`{n} von {all} Vorlagen`,"market.countOfShort":`{n} von {all}`,"market.resetShort":`Zurücksetzen`,"market.minutes":`~ {n} Min.`,"market.credits":`~ {n} Credits pro Lauf`,"market.needsUpdate":`Braucht eine neuere App`,"market.needsUpdateHint":`Diese Vorlage nutzt Funktionen, die deine App noch nicht kennt. Aktualisiere die App, dann kannst du sie verwenden.`,"market.use":`Mit dieser Vorlage starten`,"market.steps":`So läuft der Wizard ab`,"market.duration":`Dauer`,"market.durationHint":`vom Start bis zum Ergebnis, mit {n} Angaben von dir`,"market.result":`Ergebnis`,"market.creditsRange":`~ {n} Credits`,"market.creditsHint":`pro Lauf geschätzt, selten mehr als das Doppelte`,"market.needs":`Braucht`,"market.cost":`Kosten`,"new.forWebsite":`Kleine Helfer für deine Website`,"run.download":`Herunterladen`,"run.madeWith":`Erstellt mit engenty wizards`,"run.required":`Pflichtfeld`,"settings.title":`Einstellungen`,"settings.name":`Name`,"settings.mcp":`Verbundene Systeme`,"settings.mcpHint":`KI-Schritte können in diese Systeme schreiben oder daraus lesen – nur, wenn du sie im Schritt freigibst.`,"settings.addServer":`System verbinden`,"settings.serverName":`Name`,"settings.serverUrl":`MCP-URL`,"settings.serverHeader":`Authorization-Header (optional)`,"settings.save":`Speichern`,"settings.saved":`Gespeichert`,"settings.delete":`Space löschen`,"settings.noProject":`Hier erscheint dein Space, sobald deine lokale Installation den ersten Wizard veröffentlicht hat.`,"settings.copy":`Kopieren`,"settings.copied":`Kopiert`,"settings.lastUsed":`zuletzt {when}`,"settings.neverUsed":`noch nie benutzt`,"settings.revoke":`Schlüssel löschen`,"mcp.appsDisconnect":`Austragen`,"plugins.title":`Plugins`,"plugins.hint":`Plugins erweitern diese App um Seiten, Einstellungen und Werkzeuge für Schritte. Sie laufen mit allen Rechten der App: installiere nur, was du kennst.`,"plugins.hintManaged":`Diese Plugins sind für dein Konto freigeschaltet.`,"plugins.reload":`Neu laden`,"plugins.rescan":`Neu suchen`,"plugins.tools":`Werkzeuge für Schritte`,"plugins.serverFailed":`Der Server-Teil hat nicht geladen: {error}`,"plugins.studioFailed":`Der Studio-Teil hat nicht geladen: {error}`,"plugins.problems":`Kein Plugin`,"plugins.crashed":`Dieser Teil eines Plugins ist abgestürzt.`,"plugins.none":`Keine eigenen Plugins installiert.`,"pro.title":`Pro-Module`,"pro.hint":`Module, die dein Paket (Pro, Team) enthält, hier auf deinem Rechner. Sie kommen von deinem engenty-Konto, sind von engenty signiert und bleiben an, solange dein Paket sie enthält – ohne Internet bis zu einer Woche.`,"pro.check":`Paket prüfen`,"pro.notLinked":`Verbinde dein engenty-Konto (Einstellungen → Konto), um die Module deines Pakets hier zu nutzen.`,"pro.plan":`Paket: {plan}`,"pro.confirmedUntil":`bestätigt bis {date}`,"pro.plans":`Pakete`,"pro.on":`Aktiv`,"pro.notInPlan":`Nicht in deinem Paket`,"pro.install":`Installieren`,"pro.update":`Aktualisieren`,"pro.remove":`Entfernen`,"pro.none":`Für diese Version ({runtime}) gibt es noch keine Pro-Module.`,"pro.held.plan":`Nicht in deinem Paket`,"pro.held.release":`Wird für diese Version neu geladen`,"pro.held.unconfirmed":`Paket nicht bestätigt – online prüfen`,"integrate.nav":`Einbinden`,"integrate.title":`Deine Wizards in deinen KI-Apps`,"integrate.intro":`Starte Wizards direkt im Chat von Claude, ChatGPT, Cursor und Co. – beantworte die Seiten dort und bekomm das Ergebnis. Gedacht wird mit dem Abo, das du schon hast.`,"integrate.introManaged":`Starte deine Wizards direkt im Chat von claude.ai, ChatGPT, Claude Desktop und Co. – beantworte die Seiten dort und bekomm das Ergebnis.`,"integrate.groupHere":`Auf diesem Computer`,"integrate.groupCloud":`Über engenty.ai`,"integrate.groupBrowser":`Im Browser`,"integrate.groupDesktop":`Auf deinem Computer`,"integrate.groupMore":`Weitere Apps`,"integrate.groupShare":`Teilen`,"integrate.shareLink":`Per Link teilen`,"integrate.shareSite":`Auf einer Website`,"integrate.wpIntro":`Das Plugin „engenty wizards“ bringt deine veröffentlichten Wizards auf eine WordPress-Seite: als Block, Shortcode, Elementor-Widget oder Blase unten rechts. Ergebnisse, Kontakte und Termine stehen dann auch im WordPress-Admin.`,"integrate.wpInstall":`1 · Plugin installieren`,"integrate.wpInstallHint":`In WordPress unter Plugins → Installieren → Plugin hochladen die ZIP-Datei wählen und aktivieren.`,"integrate.wpDownload":`engenty-wizards.zip laden`,"integrate.wpConnect":`2 · Verbinden`,"integrate.wpConnectHint":`Im WordPress-Admin unter „engenty“ auf „Eigene KI erstellen“ (neues Konto) oder „Anmelden“. Die Website liest sich dann selbst ein: Name, Logo, Farben, Kontaktdaten und ihre Seiten als Wissen.`,"integrate.wpConnectLocal":`Das Plugin verbindet sich mit einem Konto auf engenty.ai, nicht mit dieser Installation. Verknüpfe hier dein Konto und veröffentliche deine Wizards dorthin; dann wählst du sie in WordPress.`,"integrate.wpPlace":`3 · Auf die Seite bringen`,"integrate.wpPlaceHint":`Block „engenty Wizard“, das gleichnamige Elementor-Widget, die Blase aus den Einstellungen des Plugins oder dieser Shortcode mit der ID des Wizards:`,"integrate.wpSampleLabel":`Anfrage starten`,"share.wpPlugin":`Plugin laden`,"share.wpLocal":`Ohne Konto, auf der Website selbst`,"share.wpLocalHint":`Als Paket in ein WordPress 7 importiert, denkt der Wizard mit dem KI-Anbieter der Website und braucht kein Konto. Was er braucht, wie die Galerie es sagt:`,"share.wpPackage":`Paket herunterladen`,"share.wpPackageDraft":`Entwurf als Paket`,"share.wpKnowledge":`Wissen mitnehmen`,"share.wpKnowledgeHint":`Die Seiten dieses Projekts kommen als Dateien ins Paket (bis 2 MB) – was der Wizard sonst im Space nachliest.`,"share.wpFull":`Läuft dort ganz`,"share.wpLess":`Läuft mit weniger`,"share.wpNo":`Braucht ein Konto`,"share.wpNeedsAccount":`Mit Konto: braucht {list}`,"share.wpHelp":`Im Plugin: engenty → Wizards → Importieren. Ohne Konto bleiben die Ergebnisse in WordPress; Kontakte, Termine und Dateien gibt es nur über das Konto.`,"need.full":`läuft`,"need.missing":`nicht eingerichtet`,"need.optional":`geht auch ohne`,"need.lists":`Listen, die der Wizard zwischen Durchläufen behält`,"need.memory":`Das Gedächtnis des Wizards`,"need.each":`Ein Durchlauf je Eintrag (hier nacheinander)`,"need.field:slot":`Terminwahl aus freien Zeiten`,"need.asset:document":`Dokumente erzeugen (PDF, Word)`,"need.asset:dashboard":`Dashboards erzeugen`,"need.tool:pages":`Die Seiten des Space lesen`,"need.format":`Ergebnis als {format}`,"integrate.wpLocal":`Ohne Konto`,"integrate.wpLocalHint":`Ein WordPress 7 mit eigenem KI-Anbieter (Einstellungen → Connectors) lässt Wizards auch ohne Konto laufen: mitgelieferte Vorlagen, oder ein Paket aus dem Teilen-Dialog eines Wizards. Der Teilen-Dialog sagt je Wizard, ob er dort ganz, mit weniger oder nur mit Konto läuft.`,"integrate.wpPro":`Mit Pro`,"integrate.wpProHint":`Kontakte und Termine aus deinen Wizards im WordPress-Admin, Wizards aus Vorlagen direkt in WordPress anlegen.`,"integrate.soon":`bald`,"integrate.found":`Auf diesem Computer gefunden`,"integrate.stateWorks":`Funktioniert`,"integrate.stateAdded":`Eingetragen, noch nicht getestet`,"integrate.stateNone":`Noch nicht eingerichtet`,"integrate.outRun":`Wizards im Chat starten`,"integrate.outWidget":`Wizard erscheint im Chat`,"integrate.outText":`Wizards als Text im Chat`,"integrate.outSignIn":`Ohne API Key – du meldest dich an`,"integrate.view":`Ansehen`,"integrate.testIt":`Testen`,"integrate.connectShort":`Verbinden`,"integrate.cloudTitle":`claude.ai und ChatGPT`,"integrate.cloudText":`Laufen im Browser und erreichen deinen Computer nicht. Mit deinem engenty-Konto kommen deine Wizards trotzdem dorthin.`,"integrate.cloudButton":`Über engenty.ai verbinden`,"integrate.steps":`So geht’s`,"integrate.connect":`In {app} eintragen`,"integrate.connectHint":`Trägt engenty wizards in die Einstellungen von {app} ein.`,"integrate.connected":`In {app} eingetragen`,"integrate.notInstalled":`{app} ist auf diesem Computer nicht zu finden. Eintragen geht trotzdem – es wirkt, sobald {app} da ist.`,"integrate.details":`Details`,"integrate.restart":`{app} neu starten`,"integrate.restartHint":`Ganz beenden und wieder öffnen. Wir merken es von selbst – du musst hier nichts klicken.`,"integrate.reload":`Lade die Server in {app} neu oder starte {app} neu. Wir merken es von selbst.`,"integrate.waiting":`Wartet auf {app}`,"integrate.try":`Im Chat ausprobieren`,"integrate.tryHint":`Schreib in einem neuen Chat:`,"integrate.askTool":`Welche Wizards habe ich in engenty?`,"integrate.elsewhere":`{app} auf einem anderen Rechner?`,"integrate.byAddress":`Mit Adresse und API Key verbinden`,"integrate.backHere":`Doch auf diesem Computer verbinden`,"integrate.keyCreate":`API Key für {app} erstellen`,"integrate.keyHint":`Damit meldet sich {app} an. Er wird nur einmal angezeigt und steht dann gleich im Befehl.`,"integrate.keyReady":`API Key erstellt – er steht schon im Befehl.`,"integrate.add":`Server eintragen`,"integrate.addressLocal":`Nur auf diesem Rechner erreichbar, und nur solange engenty wizards läuft.`,"integrate.works":`Funktioniert`,"integrate.next":`Probier als Nächstes`,"integrate.nextHint":`Kopier einen Satz in einen neuen Chat in {app}.`,"integrate.labelAsk":`Fragen`,"integrate.labelRun":`Ausführen`,"integrate.labelBuild":`Bauen`,"integrate.labelExplain":`Erklären`,"integrate.askRun":`Starte meinen Wizard „{title}“`,"integrate.askBuild":`Bau mir einen Wizard für Newsletter-Entwürfe`,"integrate.askExplain":`Was macht der Wizard „{title}“?`,"integrate.textOnly":`{app} zeigt Wizards als Text: Seiten und Fragen kommen als Nachrichten. Den Wizard selbst als Fenster im Chat zeigen Claude Desktop, Cursor und VS Code.`,"integrate.addedIn":`Eingetragen in {app}`,"integrate.remoteWhy":`{app} läuft auf den Servern seines Herstellers und erreicht deinen Computer nicht. Deine Wizards auf engenty.ai erreicht es schon.`,"integrate.viaAccount":`Über dein engenty-Konto verbinden`,"integrate.tileHere":`Dieser Computer`,"integrate.tileHereText":`Hier baust du weiter wie bisher.`,"integrate.tileCloudText":`Bekommt deine veröffentlichten Wizards, zum Ausführen.`,"integrate.tileAppText":`Verbindet sich mit engenty.ai und startet sie im Chat.`,"integrate.linkAccount":`Mit engenty.ai verbinden`,"integrate.linkHint":`Danach zeigen wir dir die Schritte in {app}.`,"integrate.noAccount":`Lieber ohne Konto?`,"integrate.useDesktop":`Claude Desktop geht direkt hier – ein Klick`,"integrate.linked":`Über dein Konto {email}: {app} sieht die Wizards, die du hier veröffentlichst.`,"integrate.openConnectors":`Konnektoren in claude.ai öffnen`,"integrate.open":`{app} öffnen`,"integrate.claudeAiWhere":`Dort: Eigenen Konnektor hinzufügen`,"integrate.desktopWhere":`In Claude Desktop: Einstellungen → Konnektoren → Eigenen Konnektor hinzufügen`,"integrate.chatgptWhere":`In ChatGPT: Einstellungen → Apps & Connectors → Erweitert → Entwicklermodus, dann „Erstellen“`,"integrate.nameAddress":`Name und Adresse eintragen`,"integrate.name":`Name`,"integrate.address":`Adresse`,"integrate.allow":`Auf „Verbinden“ klicken, anmelden, erlauben`,"integrate.allowHint":`Ein Fenster von engenty öffnet sich. Du meldest dich an und klickst „Erlauben“. So sieht es aus:`,"integrate.allowFirst":`Beim ersten Aufruf anmelden und erlauben`,"integrate.allowFirstHint":`{app} öffnet ein Fenster von engenty. Du meldest dich an und klickst „Erlauben“.`,"integrate.consentPreview":`{app} möchte auf deine Wizards zugreifen`,"integrate.checkSeen":`Verbunden`,"integrate.checkTool":`Werkzeug benutzt`,"integrate.checkWidget":`Wizard im Chat gezeigt`,"integrate.revoke":`Trennen geht jederzeit in deinem Konto – der Zugriff endet sofort.`,"integrate.revokeLink":`Verbundene Programme`,"integrate.needsPublic":`{app} verbindet sich von den Servern seines Herstellers aus. Das geht nur, wenn dieser Server öffentlich über HTTPS erreichbar ist.`,"integrate.file":`In {file} eintragen:`,"integrate.vscode":`In VS Code: „MCP: Open User Configuration“, dann eintragen:`,"integrate.chatgpt":`In ChatGPT: Einstellungen → Apps & Connectors → Erweitert → Entwicklermodus, dann „Erstellen“ mit dieser Adresse:`,"integrate.generic":`In den MCP-Einstellungen der App einen Server mit dieser Adresse anlegen (Streamable HTTP):`,"mcp.terminal":`Im Terminal ausführen:`,"mcp.ccPlugin":`Optional das Plugin – es bringt den Befehl /wizard mit:`,"mcp.codexKey":`Im Terminal ausführen – Codex liest den API Key aus einer Umgebungsvariable:`,"mcp.claudeAi":`In claude.ai: Einstellungen → Konnektoren → Eigenen Konnektor hinzufügen, diese Adresse eintragen:`,"mcp.oauth":`Kein API Key nötig: Beim ersten Aufruf meldet sich deine App im Browser an.`,"mcp.keys":`API Keys`,"mcp.keysHint":`Jeder API Key meldet eine App an und hat alle Rechte – behandle ihn wie ein Passwort. Löschst du ihn, ist die App abgemeldet.`,"editor.viaClient":`Über {client}`,"editor.changedVia":`Geändert über {client}`,"editor.merged":`Mit Änderungen von außen zusammengeführt`,"browser.takeOver":`Übernehmen`,"browser.handBack":`Zurückgeben`,"browser.driving":`Du steuerst den Browser – klick und tipp in die Seite. Der Wizard wartet.`,"composer.send":`Senden`,"dictation.settings":`Mikrofon und Aufnahme`,"dictation.microphone":`Mikrofon`,"dictation.default":`Standard des Systems`,"dictation.mic":`Mikrofon {n}`,"dictation.showMics":`Namen der Mikrofone zeigen …`,"dictation.hold":`Halten zum Aufnehmen`,"dictation.holdToTalk":`Zum Sprechen gedrückt halten`,"date.pick":`Datum wählen`,"time.pick":`Uhrzeit wählen`,"time.hour":`Stunde`,"time.minute":`Minute`,"date.pickRange":`Tag oder Zeitraum wählen`,"date.pickStart":`Ersten Tag wählen`,"date.pickEnd":`Letzten Tag wählen – oder denselben für einen Tag`,"date.today":`Heute`,"date.clear":`Leeren`,"date.prev":`Voriger Monat`,"date.next":`Nächster Monat`,"connectors.title":`Connectors`,"connectors.hint":`Dienste, in denen ein Wizard für die Person arbeiten kann – sie verbindet beim Durchlauf ihr eigenes Konto. Die wichtigsten sind eingebaut; jeden weiteren findest du im Verzeichnis integrations.sh und importierst ihn aus seiner OpenAPI-Beschreibung oder seinem MCP-Server.`,"connectors.imported":`Aus dem Verzeichnis`,"connectors.noneImported":`Hier ist kein Connector aus dem Verzeichnis importiert.`,"connectors.notSetUp":`nicht eingerichtet`,"connectors.setup":`Auf dem Server fehlen:`,"connectors.search":`Dienst suchen, z. B. Notion, Stripe, GitHub`,"connectors.find":`Suchen`,"connectors.none":`Nichts gefunden.`,"connectors.import":`Importieren`,"connectors.exists":`Schon importiert.`,"connectors.ownClient":`Eigener OAuth-Client`,"connectors.refresh":`Aktionen neu laden`,"connectors.remove":`Entfernen`,"connectors.actions":`{n} Aktionen, {r} lesend`,"connectors.pending":`Aktionen erscheinen, sobald ein Konto verbunden ist`,"connectors.needsClient":`Dieser Dienst braucht einen OAuth-Client (ID und Secret). Entfernen und mit „Eigener OAuth-Client“ neu importieren.`,"connectors.authNone":`ohne Anmeldung`,"connectors.authOauth":`Anmeldung per OAuth`,"connectors.authKey":`API-Schlüssel`,"connectors.group.read":`liest`,"connectors.group.write":`ändert`,"connectors.group.destructive":`löscht`,"camera.missing":`An diesem Gerät wurde keine Kamera gefunden. Lade stattdessen ein Foto hoch.`,"camera.busy":`Die Kamera wird gerade von einer anderen App verwendet. Schließe sie und versuche es noch einmal.`,"location.unavailable":`Dein Gerät konnte den Standort gerade nicht bestimmen. Versuch es im Freien noch einmal oder tippe die Adresse ein.`,"location.timeout":`Das hat zu lange gedauert. Versuch es noch einmal oder tippe die Adresse ein.`,"install.add":`Zum Startbildschirm hinzufügen`,"install.ios":`Tippe unten auf „Teilen“ und dann auf „Zum Home-Bildschirm“.`,"install.bookmark":`Als Lesezeichen speichern`,"install.bookmark.mac":`Drücke ⌘ D, dann liegt dieser Wizard in deinen Lesezeichen.`,"install.bookmark.pc":`Drücke Strg + D, dann liegt dieser Wizard in deinen Lesezeichen.`,"install.app":`In der App öffnen`,"install.app.offer":`Installiere das Studio als App: eigenes Fenster, eigenes Symbol im Dock oder in der Taskleiste.`,"install.app.browser":`In Chrome oder Edge lässt sich das Studio als App installieren: eigenes Fenster, eigenes Symbol.`,"install.app.action":`Als App installieren`,"install.app.close":`Schließen`,"install.app.how.ios":`Tippe in Safari auf Teilen und dann auf „Zum Home-Bildschirm“. Das Studio liegt dann wie eine App auf deinem Home-Bildschirm.`,"install.app.how.mac":`Wähle in Safari „Ablage“ → „Zum Dock hinzufügen“. Das Studio bekommt ein eigenes Fenster und ein Symbol im Dock.`,"install.app.how.android":`Tippe in Chrome auf das Menü ⋮ und dann auf „App installieren“ oder „Zum Startbildschirm hinzufügen“.`,"install.app.how.chromium":`Klicke in der Adressleiste auf das Installieren-Symbol oder wähle im Menü „App installieren“. Das Studio bekommt ein eigenes Fenster und ein Symbol.`,"common.loading":`Lädt …`,"common.error":`Fehler`,"data.hint":`Tabellen und Seiten, die der Space und seine Wizards behalten.`,"data.all":`Alle Daten`,"data.own":`Allgemein`,"data.table":`Tabelle`,"data.page":`Seite`,"data.newTable":`Neue Tabelle`,"data.newPage":`Neue Seite`,"data.title":`Titel`,"data.owner":`Gehört zu`,"data.create":`Anlegen`,"data.empty":`Noch keine Tabellen und Seiten. Leg eine an – bald schreiben auch deine Wizards hier.`,"data.rows":`{n} Zeilen`,"data.addRow":`Zeile`,"data.noRows":`Noch keine Zeilen.`,"data.deleteRow":`Zeile löschen`,"data.deleteTable":`Tabelle löschen`,"data.deletePage":`Seite löschen`,"data.confirmDelete":`„{title}“ löschen?`,"data.newColumn":`Neue Spalte`,"data.columnName":`Name`,"data.columnType":`Typ`,"data.required":`Muss ausgefüllt werden`,"data.deleteColumn":`Spalte löschen`,"data.removeOption":`Entfernen`,"data.fromList":`Eine Liste des Wizards: jeder Durchlauf schreibt hier hinein. Die Spalten kommen aus dem Wizard.`,"data.badCell":`Dieser Wert passt nicht in „{column}“ und ist nicht gespeichert.`,"data.type.text":`Text`,"data.type.number":`Zahl`,"data.type.date":`Datum`,"data.type.duration":`Dauer`,"data.type.select":`Auswahl`,"data.type.boolean":`Ja / Nein`,"data.text.single":`Eine Zeile`,"data.text.multiline":`Mehrere Zeilen`,"data.number.integer":`Ganze Zahl`,"data.number.decimal":`Dezimalzahl`,"data.number.percent":`Prozent`,"data.number.currency":`Betrag`,"data.currency":`Währung (z. B. EUR)`,"data.date.date":`Datum`,"data.date.datetime":`Datum und Uhrzeit`,"data.date.time":`Uhrzeit`,"data.unit":`Eingabe in`,"data.unit.milliseconds":`ms`,"data.unit.seconds":`Sekunden`,"data.unit.minutes":`Minuten`,"data.unit.hours":`Stunden`,"data.unit.days":`Tage`,"data.options":`Auswahlmöglichkeiten, eine je Zeile`,"data.multiple":`Mehrere wählbar`,"data.write":`Schreiben`,"data.preview":`Vorschau`,"data.pageEmpty":`Diese Seite ist noch leer.`,"data.markdownHint":`Markdown: # Überschrift, **fett**, - Liste`,"space.holds.intro":`Ein Space bündelt, was zusammengehört – eine Firma, eine Marke oder ein Projekt. Jeder Wizard gehört zu genau einem Space.`,"space.holds.wizards":`Seine eigene Liste – die Startseite und die Suche zeigen nur sie.`,"space.holds.info":`Name, Logos, Farben und Fakten, die seine Wizards kennen.`,"space.holds.knowledge":`Dokumente, Tabellen und Seiten, die sich seine Wizards teilen.`,"space.holds.connectors":`Die Verbindungen, die seine Wizards nutzen.`,"space.holds.results":`Die Läufe seiner Wizards.`,"space.holds.shared":`Konto, Modelle und Plugins gelten für alle Spaces.`,"space.info":`Info & Marke`,"space.knowledge":`Wissen`,"space.data":`Daten`,"space.results":`Ergebnisse`,"space.resultsAll":`Alle Ergebnisse`,"space.resultsHint":`Läufe deiner Wizards, die ihr Ergebnis erreicht haben, die neuesten zuerst.`,"space.resultsEmpty":`Noch keine Ergebnisse. Ein Lauf steht hier, sobald er fertig ist.`,"space.resultCredits":`{n} Credits`,"space.resultsSearch":`Suchen: Wizard, Eingaben, Ergebnis …`,"space.resultsModeAll":`Live & Test`,"space.resultsAnyTime":`Jederzeit`,"space.resultsDay":`Letzte 24 Stunden`,"space.resultsDays":`Letzte {n} Tage`,"space.resultsNone":`Keine Ergebnisse zu dieser Suche.`,"space.resultFiles":`{n} Dateien`,"project.rename":`Space umbenennen`,"project.saving":`Speichert …`,"project.base":`Basis`,"project.baseHint":`Wer hinter den Wizards steht. Jeder KI-Schritt kennt das.`,"project.title":`Titel`,"project.titleHint":`Firma, Marke oder Vorhaben – so sehen es auch Endnutzer.`,"project.about":`Über`,"project.aboutHint":`Was ihr macht, für wen, und in welchem Ton ihr schreibt.`,"project.logos":`Logos`,"project.logosHint":`Das erste Logo sehen Endnutzer. Eine Beschreibung sagt, wofür eine Variante gedacht ist.`,"project.logoAdd":`Logo`,"project.logoMain":`Hauptlogo`,"project.logoMakeMain":`Als Hauptlogo`,"project.colors":`Farben`,"project.colorsHint":`Die erste Farbe ist der Akzent in Dokumenten, Dashboards und auf öffentlichen Seiten.`,"project.colorAdd":`Farbe`,"project.colorName":`z. B. Primär – Buttons und Überschriften`,"project.colorUse":`Beschreibe, wie engenty diese Farbe einsetzen soll.`,"project.colorAddTitle":`Farbe hinzufügen`,"project.colorValue":`Farbwert`,"project.colorUseLabel":`Verwendung`,"project.add":`Hinzufügen`,"project.colorAccent":`Akzent`,"project.colorFirst":`Als Akzent`,"project.assets":`Assets`,"project.assetsHint":`Bilder, Grafiken, Videos. KI-Schritte setzen sie in Dokumente und wählen nach der Beschreibung.`,"project.assetAdd":`Dateien`,"project.assetSearch":`Assets filtern …`,"know.all":`Alles`,"know.title":`Wissen`,"know.hint":`Was die Schritte deiner Wizards nachschlagen. Dokumente werden beim Hochladen zu Seiten und Tabellen; Kategorien halten die Einträge auseinander.`,"know.empty":`Noch nichts da. Lade Dokumente hoch, leg eine Seite an oder gib dem Assistenten eine Website.`,"know.drop":`Dokumente hierher ziehen oder`,"know.pick":`auswählen`,"know.page":`Seite`,"know.table":`Tabelle`,"know.faq":`FAQ`,"know.file":`Datei`,"know.category":`Kategorie`,"know.categories":`Kategorien`,"know.newPage":`Neue Seite`,"know.newTable":`Neue Tabelle`,"know.asFaq":`Als FAQ: Frage und Antwort je Zeile`,"know.newCategory":`Neue Kategorie`,"know.search":`Suche testen …`,"know.searchNone":`Nichts Relevantes gefunden.`,"know.searchStats":`{candidates} Kandidaten geprüft, {hits} relevant`,"know.searchUnchecked":`{hits} Treffer, ungeprüft`,"know.unchecked":`Ohne Classifier bleiben Treffer ungeprüft. Er braucht einen AI-Gateway- oder TypeSafe-Key oder ein Konto.`,"know.keywordsOnly":`Ohne Embedding-Modell findet die Suche nach Wörtern, nicht nach Bedeutung.`,"know.clear":`Zurücksetzen`,"know.sub":`{n} Unterseiten`,"know.rows":`{n} Zeilen`,"know.review":`Prüfen`,"know.reviewed":`Geprüft`,"know.from":`Aus {label}`,"know.kept":`Von Hand geändert: {label} schreibt sie nicht mehr.`,"know.original":`Original`,"know.reading":`Wird gelesen …`,"know.subPages":`Unterseiten`,"know.addSub":`Unterseite`,"know.type.choice":`Auswahl`,"know.type.date":`Datum`,"know.type.number":`Zahl`,"know.type.text":`Text`,"know.type.boolean":`Ja / Nein`,"know.name":`Name`,"know.type":`Typ`,"know.unit":`Einheit`,"know.unitHint":`z. B. h, €, kg`,"know.multiple":`Mehrere Werte je Eintrag`,"know.ordered":`Die Werte sind gestuft (niedrig → hoch)`,"know.values":`Werte`,"know.valuesHint":`Einer je Zeile. Weitere kommen mit den Einträgen dazu.`,"know.hintField":`Woher die Werte kommen`,"know.hintFieldHint":`Kurz, z. B. Kopfzeile, Dateiname, Filter der Website.`,"know.create":`Anlegen`,"know.proposed":`Vorgeschlagen`,"know.proposedHint":`Erst übernommen wird sie gefüllt.`,"know.accept":`Übernehmen`,"know.dismiss":`Verwerfen`,"know.alike":`„{a}“ und „{b}“ sehen nach einem Wert aus.`,"know.merge":`Zusammenführen`,"know.items":`{n} Einträge`,"know.item":`1 Eintrag`,"know.row":`1 Zeile`,"know.oneSub":`1 Unterseite`,"know.addValue":`Wert hinzufügen`,"know.range":`{min} bis {max}`,"know.summary":`Übersicht`,"know.summaryHint":`Ein Modell fasst die Einträge dieses Werts zusammen. Die Suche findet die Übersicht wie eine Seite.`,"know.summaryWrite":`Übersicht schreiben`,"know.summaryAgain":`Neu schreiben`,"know.summaryEmpty":`Noch keine Übersicht.`,"know.toc":`Inhaltsverzeichnis`,"know.tocRows":`{n} Zeilen in {table}`,"know.deleteCategory":`Kategorie löschen`,"know.confirmCategory":`„{name}“ löschen? Die Einträge bleiben, nur die Kategorie geht.`,"know.deleteValue":`Wert löschen`,"know.yes":`Ja`,"know.no":`Nein`,"know.minimum":`ab`,"know.maximum":`bis`,"know.contains":`enthält`,"know.by.person":`von Hand gesetzt`,"know.by.origin":`aus der Quelle`,"know.by.model":`von einem Modell gelesen`,"know.remove":`Entfernen`,"know.unset":`Nicht gesetzt`,"know.deleteFile":`Datei löschen`,"project.documents":`Dokumente`,"project.documentsHint":`PDFs, Listen, Excel, Word, Text. Sie werden gelesen und kommen in einen Index, den jeder KI-Schritt durchsucht.`,"project.documentAdd":`Dokumente`,"project.drop":`Hierher ziehen oder`,"project.staysLocal":`Bleibt in deiner lokalen Installation und wird nicht hierher gesendet.`,"project.description":`Beschreibung hinzufügen …`,"project.describing":`Wird angesehen …`,"project.reading":`Wird gelesen …`,"project.indexed":`Im Index`,"project.indexedKeywords":`Im Index (Stichwörter)`,"project.notIndexed":`Kein Text gefunden`,"project.reindex":`Neu einlesen`,"project.pages":`{n} Seiten`,"project.keywordsOnly":`Der Index sucht gerade nach Stichwörtern. Mit einem AI-Gateway- oder OpenAI-Schlüssel kommt die Suche nach Bedeutung dazu.`,"project.preview":`Vorschau`,"project.viewList":`Als Liste zeigen`,"project.viewCards":`Als Karten zeigen`,"project.original":`Original`,"project.readText":`Gelesener Text`,"project.openOriginal":`Original öffnen`,"project.noText":`Noch kein Text: das Dokument wird gerade gelesen oder ließ sich nicht lesen.`,"project.textCut":`Die Vorschau zeigt den Anfang ({shown} von {total} Zeichen).`,"project.searchTest":`Im Index suchen …`,"project.searchNone":`Nichts gefunden.`,"project.remove":`Entfernen`,"project.removeConfirm":`„{name}“ entfernen?`,"project.facts":`Fakten`,"project.factsHint":`Was Wizards wissen sollen: Adresse, UID, Öffnungszeiten – alles, was passt.`,"project.factLabel":`Bezeichnung`,"project.factValue":`Wert`,"project.factAdd":`Eintrag`,"project.factType":`Typ`,"project.factAuto":`Automatisch`,"project.type.text":`Text`,"project.type.longtext":`Langer Text`,"project.type.number":`Zahl`,"project.type.date":`Datum`,"project.type.url":`Link`,"project.type.email":`E-Mail`,"project.type.phone":`Telefon`,"project.type.boolean":`Ja / Nein`,"project.yes":`Ja`,"project.no":`Nein`,"assistant.name":`Assistent`,"assistant.ask":`Frag den Assistenten`,"assistant.open":`Assistent öffnen`,"assistant.sees":`Sieht: {page}`,"assistant.menu":`Chat-Menü`,"assistant.newChat":`Neuer Chat`,"assistant.earlier":`Frühere Chats`,"assistant.noEarlier":`Noch keine früheren Chats.`,"assistant.untitled":`Ohne Titel`,"assistant.summarising":`Fasst den Chat zusammen …`,"assistant.readOnly":`Ein früherer Chat, nur zum Lesen. Der Assistent kennt seine Zusammenfassung.`,"assistant.back":`Zurück`,"assistant.layoutBottom":`Unten andocken`,"assistant.layoutSidebar":`Als Seitenleiste`,"assistant.minimize":`Klein machen`,"assistant.close":`Zuklappen`,"assistant.helloTitle":`Wie kann ich helfen?`,"assistant.hello":`Ich kenne engenty wizards und sehe, was du gerade siehst. Frag mich, wie etwas geht – ich zeige es dir auch.`,"assistant.composer":`Frag etwas oder sag, was du brauchst …`,"assistant.filesNeedSpace":`Dateien kommen in einen Space – hier lässt sich keiner ändern.`,"assistant.talk":`Sprechen`,"assistant.live":`Live-Chat`,"assistant.liveListening":`Hört zu`,"assistant.liveThinking":`Denkt nach`,"assistant.liveSpeaking":`Spricht`,"assistant.liveMuted":`Stumm`,"assistant.mute":`Mikrofon aus`,"assistant.unmute":`Mikrofon an`,"assistant.end":`Beenden`,"assistant.naturalVoice":`Natürliche Stimme (Sprachmodell)`,"assistant.gotIt":`Verstanden`,"assistant.tool.navigate":`Geöffnet: {where}`,"assistant.tool.highlight":`Markiert: {what}`,"assistant.tool.look":`Seite angesehen`,"assistant.tool.read":`Gelesen: {what}`,"assistant.tool.fill":`Eingetragen: {what}`,"assistant.tool.docs":`In der Anleitung gelesen`,"assistant.tool.gallery":`In der Galerie gesucht`,"assistant.tool.account":`Konto nachgesehen`,"assistant.tool.chats":`Frühere Chats durchsucht`,"assistant.tool.space":`Wizards und Läufe nachgesehen`,"assistant.tool.models":`Modelle nachgesehen`,"assistant.suggest.what":`Was kann ich mit engenty wizards machen?`,"assistant.suggest.models":`Zeig mir, wo ich die Modelle einstelle`,"assistant.suggest.credits":`Wie viele Credits habe ich noch?`,"assistant.suggest.modelsNow":`Was denkt hier gerade, und was fehlt?`,"assistant.suggest.modelsMissing":`Warum kann hier kein Video entstehen?`,"assistant.suggest.modelsCost":`Was kostet mich welcher Weg?`,"assistant.suggest.accountWhy":`Wozu brauche ich ein Konto?`,"assistant.suggest.plans":`Welche Pläne gibt es, und was kosten sie?`,"assistant.suggest.integrateWhat":`Was kann ich aus Claude oder Cursor heraus machen?`,"assistant.suggest.integrateClaude":`Wie binde ich Claude Desktop ein?`,"assistant.suggest.connectorsWhat":`Wofür sind Connectors gut?`,"assistant.suggest.connectorsAdd":`Verbinde diesen Dienst: `,"assistant.suggest.readSite":`Lies unsere Website `,"assistant.suggest.missing":`Was fehlt dem Space noch?`,"assistant.suggest.facts":`Wofür brauchen die Wizards die Fakten?`,"assistant.suggest.knowledgeHow":`Wie kommt Wissen in den Space?`,"assistant.suggest.knowledgeSite":`Lies diese Website ins Wissen: `,"assistant.suggest.knowledgeCategories":`Wofür sind Kategorien gut?`,"assistant.suggest.dataWhat":`Was steht in diesen Daten?`,"assistant.suggest.dataWho":`Welcher Wizard füllt welche Tabelle?`,"assistant.suggest.dataEdit":`Wie ändere ich eine Spalte?`,"assistant.suggest.resultsFailed":`Welche Läufe sind zuletzt fehlgeschlagen?`,"assistant.suggest.resultsCost":`Was hat diesen Monat am meisten Credits gekostet?`,"assistant.suggest.resultsShare":`Wie teile ich ein Ergebnis?`,"project.assistantTitle":`Erzähl mir von euch`,"project.assistantHello":`Nenn mir eure Website oder gib mir Dateien. Ich trage ein, was ich finde: Titel, Beschreibung, Logo, Farben und Fakten.`,"project.assistantComposer":`z. B. „Lies unsere Website example.at“ …`,"project.assistantTitleKnowledge":`Was sollen deine Wizards wissen?`,"project.assistantHelloKnowledge":`Gib mir Dokumente oder sag mir, wo das Wissen steht. Ich lese es ein – auf dieser Seite siehst du, was hineinkommt.`,"project.assistantComposerKnowledge":`Dokumente anhängen oder sagen, wo das Wissen steht …`,"project.assistantChanged":`Space aktualisiert`,"flowApp.loading":`Der Wizard kommt …`,"flowApp.broken":`Das lässt sich hier nicht zeigen.`,"flowApp.draft":`Entwurf`,"flowApp.published":`Veröffentlicht`,"flowApp.issues":`{n} Fehler im Entwurf`,"flowApp.flow":`Ablauf`,"flowApp.notPublished":`Veröffentliche ihn im Studio, dann läuft er hier.`,"flowApp.runPage":`Im Browser weiter`,"flowApp.inBrowser":`Nur im Browser: {fields}`,"flowApp.done":`Fertig`,"flowApp.credits":`{n} Credits`,"flowApp.ask":`Der Wizard fragt`,"flowApp.allow":`Erlauben`,"flowApp.skip":`Überspringen`,"flowApp.signIn":`Eine Anmeldung bei {site} – das geht nur im Browser.`,"flowApp.fullscreen":`Größer`,"flowApp.inline":`Kleiner`,"flowApp.failed":`Das hat nicht geklappt: {error}`},ta={...Ji.en,"brand.tagline":`Build AI wizards, no code.`,"brand.sub":`Describe a flow in your own words. engenty turns it into a wizard you share with a link.`,"auth.dev":`Dev login (local)`,"auth.legal":`No password, no sign-up form — you sign in with an account you already have.`,"auth.signIn":`Sign in or create an account`,"auth.failed":`Sign-in did not work. Please try again.`,"auth.localTitle":`This browser is not signed in`,"auth.localWhy":`The studio runs on your computer and lets in only a browser that opened its link. That sign-in is missing here – maybe the cookies were cleared, or another studio on this computer (another address on localhost) replaced it.`,"auth.localLink":`Run this in a terminal — it opens the studio and signs this browser in:`,"auth.localStartLink":`Or open the link the app printed at its start (“Open the studio: …/api/local/enter?k=…”). It works once per start.`,"auth.wrongHost":`The studio runs at another address`,"auth.wrongHostWhy":`The app on this computer answers only at its own address – that keeps other web pages out. Open the studio there:`,"auth.unreachable":`The app is not answering`,"auth.unreachableWhy":`The studio is at {address}, but the app behind it gives no answer – it may be restarting or stopped. This page keeps trying.`,"nav.account":`Account & credits`,"setup.keysInAccount":`API keys for scripts belong to your account. You create and revoke them there.`,"setup.openAccount":`Open account`,"class.label":`Model class`,"class.classifier":`Classifier`,"class.standard":`Standard`,"class.high":`High`,"class.highest":`Highest`,"class.image":`Image`,"class.video":`Video`,"class.audio":`Audio`,"class.speech":`Speech`,"class.classifier.hint":`Routing, yes/no, pulling a few values out of text. Cheapest.`,"class.standard.hint":`Short copy, calling an API, reformatting.`,"class.high.hint":`Research with tools, long documents, weighing many sources.`,"class.highest.hint":`Hard reasoning or code. Several times the cost of High.`,"class.effort":`Thinking effort`,"class.effortAuto":`Automatic`,"class.effort.low":`Low`,"class.effort.medium":`Medium`,"class.effort.high":`High`,"estimate.step":`≈ {n} credits, rarely more than {high}`,"estimate.measured":`measured from the latest runs`,"estimate.formula":`estimated, gets exact after five runs`,"estimate.share":`A run costs about {run} credits. At the daily limit that is at most {day} credits a day.`,"local.title":`Models`,"local.accountWaiting":`Waiting for the sign-in in your browser …`,"local.accountFailed":`The account service cannot be reached right now.`,"local.accountExpired":`The sign-in has expired. Please sign in again.`,"local.sourceNeedsAccount":`This needs an account.`,"local.toAccount":`Go to Settings → Account`,"local.sourceOwn":`Own keys`,"local.keys":`Keys`,"local.keysHint":`One key is enough. Keys live in this device's keychain, never in the database.`,"local.keySet":`stored`,"local.keyEmpty":`not stored`,"local.keyRemove":`Remove`,"local.classes":`Model per class`,"local.classesHint":`A step names only the class. Here is which model serves it, e.g. anthropic/claude-haiku-4.5, openai:gpt-5.4-mini or ollama:qwen3.`,"local.save":`Save`,"local.saved":`Saved`,"local.chat":`The studio chat answers on`,"local.chatModels":`Model class Highest`,"local.chatClaude":`Claude subscription (Claude Code)`,"local.subscription":`With the subscription, the Claude Code installed on this device builds the wizard — on your sign-in there. Runs keep using keys or credits.`,"harness.hint":`Text thinks on the {name} installed on this device — on your {sub} and your sign-in there. No key needed. Images, video and audio still need a key.`,"harness.hintImages":`Text and images come from the {name} installed on this device — on your {sub} and your sign-in there. No key needed. Video and audio still need a key.`,"harness.found":`{name} {version} found`,"harness.missing":`{name} is not installed on this device.`,"harness.install":`Or in your own terminal:`,"harness.installButton":`Install {name}`,"harness.installing":`{name} installs in the terminal below — it takes about a minute. Then you sign it in.`,"harness.installEnded":`The install ended, but {name} is not there. What it printed above says why.`,"harness.appHere":`The {app} app is on this computer: {name} signs in with the same {sub}.`,"harness.notInstalled":`not installed`,"harness.authSubscription":`Signed in with your {sub}.`,"harness.authKey":`Signed in with an API key from your shell — not the subscription. Sign in here so it runs on your {sub}.`,"harness.authNone":`Not signed in yet.`,"harness.signIn":`Sign in here`,"harness.signingIn":`The sign-in runs in the terminal below — your browser opens for it. The terminal closes once the sign-in is there.`,"harness.signInInteractive":`{name} starts below. Pick the sign-in with your {sub} there and sign in in the browser. The terminal closes once the sign-in is there.`,"harness.loginEnded":`The sign-in ended without {name} being signed in.`,"harness.sub.claude":`Claude subscription`,"harness.sub.codex":`ChatGPT subscription`,"harness.sub.gemini":`Google account`,"harness.sub.cursor":`Cursor subscription`,"harness.desc.claude":`On your Claude subscription — no key needed.`,"harness.desc.codex":`On your ChatGPT subscription — no key needed.`,"harness.desc.gemini":`On your Google account — no key needed.`,"harness.desc.cursor":`On your Cursor subscription — no key needed.`,"harness.ready":`signed in`,"local.recheck":`Check again`,"local.test":`Test`,"local.testHint":`One short call shows whether the way to the model is open.`,"local.testOk":`Answered in {s} s on {ref}: “{reply}”`,"local.testFailed":`The test did not work: {error}`,"models.groupCaps":`Capabilities`,"models.groupAccess":`Access`,"models.groupMore":`More providers`,"models.cap.text":`Text & reasoning`,"models.cap.text.hint":`Writes, summarizes, researches and decides – in almost every step.`,"models.cap.image":`Images`,"models.cap.image.hint":`Makes images: logos, product shots, illustrations.`,"models.cap.video":`Videos`,"models.cap.video.hint":`Makes short clips from text or from an image.`,"models.cap.speech":`Voice`,"models.cap.speech.hint":`Reads text aloud: voice-overs, audio versions, announcements.`,"models.cap.listening":`Voice notes`,"models.cap.listening.hint":`Understands speech and turns voice notes into text.`,"models.way.local":`Local model`,"models.way.credits":`Credits`,"models.way.creditsTeam":`Team credits`,"models.way.none":`not set up`,"models.who":`Who does it?`,"models.optSubscription":`Your subscription`,"models.optKey":`Own API key`,"models.optLocal":`Local model`,"models.optLocalNote":`Ollama on this computer`,"models.optApple":`Apple Intelligence`,"models.optAppleNote":`on this Mac, offline`,"models.appleOff":`switched off – System Settings → Apple Intelligence & Siri`,"models.appleLoading":`Apple is still loading the model`,"models.appleDevice":`not on this Mac`,"models.appleHint":`Short texts and decisions (Classifier, Standard) think on Apple Intelligence's model on this Mac; nothing leaves it. Research, long documents and code (High, Highest): {way}.`,"models.appleListenHint":`This Mac writes voice notes down itself; nothing leaves it. The first time, Apple fetches the language.`,"models.noteIncluded":`included in the plan`,"models.noteSignedOut":`not signed in`,"models.noteMissing":`not installed`,"models.noteKey":`API key stored`,"models.noteKeyShort":`key`,"models.noteSignedIn":`signed in`,"models.noteShellKey":`API key from the shell`,"models.optOther":`Other`,"models.optCreditsGroup":`engenty`,"models.noteNoKey":`API key missing`,"models.noteNeedsAccount":`needs an account`,"models.notePerImage":`≈ {n} credits per image`,"models.notePerSecond":`≈ {n} credits per second`,"models.notePer1k":`≈ {n} credits per 1000 characters`,"models.notePerMinute":`≈ {n} credits per minute`,"models.creditsAuto":`engenty picks: {model}`,"models.creditsAutoNone":`engenty picks the model`,"models.creditsPickHint":`Billed in credits – no API key of your own.`,"models.viaCredits":`{name} on engenty credits`,"models.viaCreditsHint":`No API key of your own, billed in credits.`,"models.viaCreditsNeedsAccount":`With an engenty account, billed in credits.`,"models.noteUsage":`credits by usage`,"models.model":`Model`,"models.modelCustom":`Another model …`,"models.textSimple":`Simple steps`,"models.textDemanding":`Demanding steps`,"models.perClass":`Adjust per class`,"models.manageKey":`{name} API key`,"models.key":`API key`,"models.keyFor":`{name} API key`,"models.keyGet":`Get a key from {name}`,"models.keySave":`Check and save`,"models.keyStored":`API key stored`,"models.keyNone":`No API key`,"models.keyCheck":`Check`,"models.keyReplace":`Replace`,"models.keyRemove":`Remove`,"models.keyOk":`The key works.`,"models.keyBad":`The key was not accepted.`,"models.keyWhereLocal":`The key stays on this device, never in the database.`,"models.keyWhereCloud":`The key is kept encrypted for the team. Nobody sees it again.`,"models.keyFallback":`Until the key is there, credits step in.`,"models.uses":`Used for`,"models.useFor":`Use`,"models.inUse":`in use`,"models.try":`Try it`,"models.try.text":`Test`,"models.try.image":`Make a test image`,"models.try.video":`Make a test clip`,"models.try.speech":`Hear a sample`,"models.try.listening":`Test listening`,"models.tryCost":`Costs like a real call.`,"models.tryCostVideo":`A 4-second clip – costs like a real one.`,"models.tryWait":`Generating …`,"models.tryWaitVideo":`A clip takes a minute or two …`,"models.tryOk":`In {s} s with {model}`,"models.tryHeard":`Heard: “{text}”`,"models.tryHeardNothing":`Nothing heard – the way is open.`,"models.tryFailed":`That did not work: {error}`,"models.creditsName":`engenty credits`,"models.creditsTeam":`Team credits`,"models.creditsLocalLead":`Step in where no subscription and no own API key is set up.`,"models.creditsCloudHint":`Everything without an own API key runs on the credits. Own keys come first and cost no credits.`,"models.creditsConnectTitle":`With an account`,"models.creditsLocalHint":`With an engenty account, credits step in where nothing of your own is set up – for videos without an own API key, say.`,"models.creditsConnect":`Connect an account`,"models.creditsFallback":`Credits step in`,"models.creditsFallbackOn":`What has no subscription and no own API key runs on the credits.`,"models.creditsFallbackOff":`Off: what has no subscription and no own API key does not run.`,"models.creditsOn":`Runs on credits`,"models.creditsNone":`Nothing runs on credits right now.`,"models.creditsTopUp":`Top up`,"models.creditsPicks":`engenty picks the model and bills in credits.`,"models.creditsModel":`Right now: {model}.`,"models.clientSignIn":`Sign-in`,"models.clientImages":`{name} makes images with your {sub} – no API key of your own.`,"models.clientNotChosen":`Text does not run on {name} right now.`,"models.ollamaHint":`Where Ollama runs and the model it serves.`,"models.readOnly":`Only the team's admins change its models.`,"models.viewAs":`Preview as`,"models.view.auto":`as it is`,"models.view.local":`local`,"models.view.linked":`local + account`,"models.view.cloud":`cloud studio`,"setup.title":`Setup`,"setup.sub":`engenty can use your existing accounts on your computer.`,"setup.source":`Choose your Engine`,"setup.local":`Runs locally on this device.`,"setup.stage.connect":`Connect`,"setup.stage.test":`Test`,"setup.stage.done":`Done`,"setup.h.install":`Install {name}`,"setup.h.signIn":`Sign in to {name}`,"setup.h.keys":`Enter a key`,"setup.h.test":`One short test`,"setup.h.done":`Connected.`,"setup.ready":`All set.`,"setup.noHarness":`No AI client installed yet. Pick one — it installs right here — or enter your own keys.`,"setup.ownDesc":`AI Gateway, OpenAI, Anthropic or Ollama.`,"setup.appleDesc":`The model on this Mac – no account, no internet.`,"setup.appleHint":`Apple Intelligence thinks short texts and decisions on this Mac; nothing leaves it. For research, long documents and code, add another way later under Settings → Models.`,"setup.appleHintKeeps":`Apple Intelligence thinks short texts and decisions on this Mac; nothing leaves it. Research, long documents and code (High, Highest) stay as they were: {way}.`,"setup.recommended":`Recommended`,"setup.done":`Open the studio`,"setup.untilWorks":`The studio opens once the test works.`,"cloud.notSent":`This version is not in the cloud yet.`,"cloud.send":`Send now`,"cloud.resend":`Send again`,"cloud.again":`It is tried again at {when}.`,"cloud.sent":`Version {v} · sent {when}`,"cloud.notRunnable":`Version {v} does not run in the cloud.`,"cloud.keepsRunning":`Version {v} keeps running there.`,"cloud.nothingRuns":`So nothing runs there yet.`,"cloud.notes":`What runs differently in the cloud:`,"cloud.check":`What the cloud would lack for the wizard as it is now:`,"cloud.checkBlocking":`As it is now, the wizard would not run in the cloud:`,"cloud.documents":`The space's documents stay on this device. In the cloud the steps work without them.`,"cloud.stepName":`“{title}”`,"cloud.problem.sandbox":`The server has no machine for code. There it works without one.`,"cloud.problem.mcp":`The space's MCP servers are not on the server: {detail}.`,"cloud.problem.model":`The cloud has no model for this.`,"cloud.problem.connector":`The space lacks a connector in the cloud.`,"cloud.problem.invalid":`The server does not take the wizard like this.`,"cloud.spaceLimit":`Your account's cloud already holds the space of another install:`,"cloud.replace":`Replace that space`,"cloud.replaceConfirm":`Remove that space from the cloud? Its wizards and their links go from there. Then everything published here is sent.`,"cloud.noticeError":`Published here. This version did not arrive in the cloud — see below.`,"cloud.noticeNotRunnable":`Published here. This version does not run in the cloud — see below.`,"readonly.wizard":`This wizard comes from your local install and is changed there. What you publish there runs here.`,"readonly.project":`This space comes from your local install and is changed there.`,"readonly.server":`Nothing is built on this server. The wizards your local install publishes run here.`,"nav.wizards":`Wizards`,"nav.settings":`Settings`,"nav.project":`Space`,"nav.switchSpace":`Switch space`,"nav.addSpace":`Add space`,"nav.wizardCount":`{n} wizards`,"appbar.position":`Position`,"appbar.left":`Left`,"appbar.top":`Top`,"appbar.right":`Right`,"appbar.bottom":`Bottom`,"appbar.theme":`Colour scheme`,"appbar.light":`Light`,"appbar.dark":`Dark`,"appbar.system":`Like the system`,"account.title":`Account`,"account.hint":`What the app calls you and how to reach you.`,"account.initials":`Your initials in the menu at the top right: the first letters of your name.`,"account.name":`Name`,"account.nameHint":`It starts as this device's user name.`,"account.fromAccount":`Name and e-mail come from your account.`,"account.about":`About you`,"account.aboutHint":`Who you are and what you do.`,"account.email":`E-mail`,"account.phone":`Phone`,"account.connection":`engenty.ai`,"account.connectionHint":`Sign-in, credits and the cloud that runs your wizards for everyone.`,"account.profile":`Profile`,"account.local":`Local install`,"account.localText":`This app runs on your device and is not connected to an account. Wizards, the space and files stay here.`,"account.linked":`Connected`,"account.with":`With an account`,"account.withCredits":`Credits for the models where no AI client is installed. No API key needed.`,"account.withCloud":`What you publish also runs on engenty.ai, behind a public link, even when this device is off.`,"account.signIn":`Sign in`,"account.signInAgain":`Sign in again`,"account.new":`No account yet?`,"account.newHint":`A new account needs an invitation code. Enter it here and the sign-up page has it filled in.`,"account.code":`Invitation code`,"account.create":`Create account`,"account.credits":`Credits`,"account.topUp":`Top up`,"account.expires":`{n} credits valid until {date}`,"account.kind.start":`Starting credits`,"account.kind.monthly":`Monthly credits`,"account.kind.gift":`Gift`,"account.cloud":`What you publish here also runs on {host}.`,"account.look":`Appearance`,"account.lookHint":`Language and theme of the app in this browser.`,"nav.logout":`Sign out`,"nav.connected":`Connected to {host}`,"nav.expired":`Sign-in expired`,"nav.onlyHere":`Only on this computer`,"nav.local":`local`,"nav.language":`Language`,"nav.theme":`Theme`,"nav.credits":`{n} credits`,"footer.billing":`Credits`,"footer.usage":`Usage`,"footer.invoices":`Invoices`,"footer.account":`Account`,"about.version":`Version {v}`,"about.title":`About engenty wizards`,"about.kind.script":`Local install`,"about.kind.checkout":`Development checkout`,"about.kind.npm":`Installed with npm`,"about.kind.cloud":`In the cloud`,"about.update.check":`Check for updates`,"about.update.checking":`Checking for updates …`,"about.update.upToDate":`You are up to date.`,"about.update.checkedAt":`last checked {when}`,"about.update.unknown":`Could not check – no connection to GitHub?`,"about.update.off":`Checking for updates is switched off.`,"about.update.manual":`This install does not update itself: get the new version where you installed it.`,"about.tab.new":`What's new`,"about.tab.earlier":`Versions`,"about.changes":`{n} changes`,"about.change":`1 change`,"about.update.available":`Version {v} of engenty wizards is out.`,"about.update.install":`Update`,"about.update.installing":`Installing version {v} …`,"about.update.restarting":`Restarting with version {v} …`,"about.update.done":`Installed. Restart engenty wizards to use {v}.`,"about.update.failed":`The update failed. Logs: logs/update.log`,"about.update.notes":`What's new`,"about.changelog":`Changelog`,"about.changelogHint":`What changed from release to release.`,"about.changelogEmpty":`Nothing here yet.`,"about.unreleased":`Unreleased`,"about.breaking":`breaking`,"about.credits":`Credits`,"about.creditsHint":`engenty wizards and the open-source software it builds on.`,"about.creditsProduct":`engenty`,"about.creditsBuiltWith":`Built with`,"about.creditsDeps":`Direct dependencies`,"about.creditsDepsHint":`What the parts of this app include themselves, with version and license — without their own dependencies.`,"about.creditsShared":`Used by more than one part`,"about.search":`Search …`,"about.noMatches":`No matches.`,"theme.dark":`Dark theme`,"theme.light":`Light theme`,"home.title":`Your wizards`,"home.search":`Search your wizards`,"home.noMatch":`None of your wizards goes by that.`,"home.newFromSearch":`Build a new wizard: “{q}”`,"home.new":`New wizard`,"home.import":`Import`,"import.failed":`The import did not work`,"home.empty":`No wizards in this space yet.`,"home.live":`Live`,"home.draft":`Draft`,"where.here":`Local`,"where.hereVersion":`Local · version {v}`,"where.hereHint":`Runs only on this computer, while the app is running.`,"where.liveHint":`Runs on {host}, for everyone with the link.`,"where.liveAt":`Live on {host} · version {v}`,"where.note":`1 note`,"where.notes":`{n} notes`,"where.sending":`Being sent`,"where.missing":`Not in the cloud`,"home.steps":`{n} steps`,"home.all":`All`,"home.newProject":`New space`,"home.projectName":`Space name`,"home.projectLimit":`At most {n} spaces`,"team.title":`Team`,"team.hint":`Who is in the team and which plan it is on. Inviting and managing happens in the account.`,"team.plan":`Plan`,"team.planFree":`Free`,"team.seats":`{taken} of {limit} seats`,"team.seatsUnlimited":`Unlimited seats`,"team.members":`Members`,"team.invited":`invited`,"team.you":`you`,"team.manage":`Manage members`,"team.changePlan":`See plans`,"team.roles":`Owners and admins create and delete wizards and spaces; members edit the wizards there are.`,"team.memberNote":`You are a member: you edit wizards, admins create new ones and delete.`,"team.failed":`The team could not be loaded.`,"team.role.owner":`Owner`,"team.role.admin":`Admin`,"team.role.member":`Member`,"models.ownKeysPlan":`Your own API keys come with the Pro plan. Here the team's credits pay.`,"home.fromLocal":`From your local install — changed there.`,"home.syncedAt":`Last arrived: {when}.`,"home.local.title":`The wizards from your local install run here`,"home.local.text":`You build on your own computer. What you publish there runs here — for everyone, behind a link.`,"home.local.install":`Install engenty wizards on your computer:`,"home.local.signIn":`Sign in there with this account, under Settings → Account.`,"home.local.publish":`Publish a wizard. It then shows up here.`,"new.title":`What should your wizard do?`,"new.placeholder":`e.g. Customers enter their product and audience, the wizard researches competitors and writes a positioning briefing as a PDF.`,"new.build":`Build wizard`,"new.orStarter":`Or start from a template`,"new.import":`Import a wizard package`,"new.hint":`You can change everything afterwards in the conversation.`,"new.runsAs":`Runs as`,"new.where":`Where should it run?`,"new.web":`In the browser`,"new.phone":`On the phone`,"new.messages":`By message`,"new.off":`off`,"new.ch.steps":`Step-by-step wizard`,"new.ch.chat":`Chat`,"new.ch.talk":`Live voice`,"new.ch.video":`Video call`,"new.ch.call":`Call`,"new.ch.sms":`SMS`,"new.ch.whatsapp":`WhatsApp`,"new.callHandoff":`What a call cannot do goes out by SMS.`,"new.similar":`Already there, or close`,"new.yours":`Yours`,"new.template":`Template`,"new.open":`Open`,"new.take":`Use`,"new.more":`{n} more …`,"new.dropHint":`Drop to attach`,"editor.resize":`Resize — double-click resets`,"editor.resizeSheet":`Resize — tap folds and unfolds`,"editor.export":`Export as a package (.wizard)`,"addStep.title":`What should happen here?`,"addStep.placeholder":`For example: a map of all the objects found, with the price as colour`,"addStep.kind":`Kind of step`,"addStep.auto":`AI picks`,"addStep.empty":`Describe what the step should do first.`,"addStep.busy":`The assistant is still working on the last message. Try again in a moment.`,"addStep.emptyStep":`Insert empty`,"addStep.cancel":`Cancel`,"addStep.create":`Create`,"addStep.building":`Building the new step …`,"addStep.showChat":`See it in the conversation`,"addStep.add":`Add step`,"surface.preview":`Preview`,"surface.code":`Code`,"surface.sampleNote":`With sample data – a run shows its own.`,"surface.sampleText":`Sample text`,"surface.sampleBrand":`Your company`,"addStep.when":`When?`,"addStep.always":`Always`,"addStep.onlyIf":`Only if …`,"addStep.aiDecides":`AI decides …`,"addStep.ifPlaceholder":`For example: revenue below 100`,"addStep.askPlaceholder":`For example: the person wants a refund`,"addStep.whenEmpty":`Say when the step should come.`,"addStep.messageIf":`Only if: {text} – otherwise the run goes on after “{from}” as before.`,"addStep.messageAsk":`AI decides: {text} – otherwise the run goes on after “{from}” as before.`,"addStep.here":`Add a step here`,"addStep.between":`Between “{before}” and “{after}”`,"addStep.after":`After “{title}”`,"addStep.first":`As the first step, before “{title}”`,"addStep.message":`New step · {place}`,"addStep.messageAs":`New step ({kind}) · {place}`,"widget.missing":`The widget isn't built yet.`,"widget.what":`What should the widget show? (optional)`,"widget.build":`Let the assistant build it`,"widget.upload":`Upload your own HTML`,"widget.buildMessage":`Please build the widget “{title}”. {what}`,"editor.chat":`Conversation`,"editor.dropToAttach":`Drop to attach to your message`,"editor.memory":`Memory`,"memory.explain":`What the wizard knows across all its runs: notes that AI steps with the “pages” tool read and add to, and the tables of its shared lists. The same data is under Data in your space.`,"memory.unused":`No step uses the memory yet. Ask the assistant to have an AI step remember something.`,"memory.none":`Nothing remembered yet.`,"memory.add":`Note`,"memory.newNote":`Note`,"memory.back":`Memory`,"memory.testCopy":`Test runs read the memory but write into a copy of their own, which goes with the run.`,"editor.step":`Steps`,"editor.runs":`Runs`,"editor.reviewEditable":`editable`,"editor.reviewRedo":`can be redone`,"editor.otherwise":`otherwise`,"editor.next.title":`Next step`,"editor.next.ways":`Next step · {count} ways`,"editor.next.open":`Open step`,"editor.next.then":`Then`,"editor.next.fold":`Fold`,"editor.next.unfold":`Show in brief`,"editor.branch.ai":`AI`,"editor.branch.addWhen":`Condition`,"editor.branch.when":`Go on when`,"editor.branch.pick":`Pick …`,"editor.branch.and":`and`,"editor.branch.statement":`Statement`,"editor.branch.none":`None clearly holds`,"editor.branch.how":`Decided by a decision model (Jev) where there is a way to one, otherwise by the classifier class's language model. If the two most probable answers are less than 10 points apart, "none" holds.`,"editor.branch.lastRun":`In the last test run decided by {source}.`,"editor.branch.bySystemOne":`a decision model`,"editor.branch.byLlm":`the language model`,"editor.branch.notYet":`A test run shows here how the AI decided.`,"editor.branch.end":`End`,"editor.branch.max":`At most this often (otherwise 10)`,"editor.branch.remove":`Remove branch`,"editor.branch.addAsk":`AI decides`,"editor.branch.newAsk":`The person wants …`,"editor.whenFilled":`{field} filled in`,"editor.whenEmpty":`{field} empty`,"editor.whenContains":`{field} contains {value}`,"editor.whenAsk":`decides: {text}`,"editor.surfaceJson":`View (JSON)`,"editor.fieldAsk":`Or: show when the AI finds this true …`,"editor.atMost":`at most {count}×`,"editor.shownWhen":`Show only when`,"editor.shownAlways":`Always show`,"editor.conditionValue":`Value`,"editor.optionsFrom":`Choices from earlier data`,"editor.optionsFixed":`Fixed choices`,"editor.op.equals":`is`,"editor.op.notEquals":`is not`,"editor.op.in":`is one of`,"editor.op.notEmpty":`is filled in`,"editor.op.empty":`is empty`,"editor.op.gt":`greater than`,"editor.op.lt":`less than`,"editor.op.contains":`contains`,"editor.conditionsMore":`and {count} more conditions`,"tool.web_search":`Web search`,"tool.web_fetch":`Read web pages`,"tool.browser":`Browser`,"tool.sandbox":`Code & shell`,"tool.image":`Images`,"tool.http":`API`,"tool.pages":`Pages`,"editor.test":`Test`,"editor.share":`Share`,"editor.published":`Live · version {v}`,"editor.notPublished":`Not published yet`,"editor.composer":`Describe what should change …`,"editor.attach":`Attach files`,"editor.detach":`Remove`,"editor.attached":`Attached`,"editor.thread":`Thread`,"editor.voice":`Dictate`,"editor.voiceStop":`Stop dictating`,"editor.listening":`Listening …`,"editor.transcribing":`Writing it down …`,"editor.micDenied":`The microphone is not allowed for this page.`,"editor.building":`Building the flow …`,"editor.files":`Files`,"files.explain":`What your wizard needs on every run: widget code, libraries, map outlines, price lists. The assistant creates them in the chat – you can upload your own too.`,"files.upload":`Upload`,"files.drop":`Drop to upload`,"files.count":`{n} files · {size}`,"files.empty":`No files yet. Drop files here or ask the assistant to build a widget.`,"files.download":`Download`,"files.delete":`Delete`,"files.confirmDelete":`Delete “{path}”?`,"files.none":`This wizard has no files.`,"editor.thinking":`Thinking …`,"editor.chatBroken":`The connection dropped. What was already built is saved – please send your message again.`,"editor.issues":`Before you test or share, the wizard needs a few fixes:`,"editor.fixWithChat":`Let the assistant fix it`,"editor.models.blocking":`The wizard can't start like this. Models are missing:`,"editor.models.optional":`These steps won't run like this. Choose a path without them when testing, or set up the models:`,"editor.models.settings":`Set up models`,"editor.prevStep":`Previous step`,"editor.nextStep":`Next step`,"editor.deleteStep":`Delete step`,"editor.holdToDelete":`Hold to delete`,"editor.deleting":`Delete`,"editor.moveUp":`Move up`,"editor.moveDown":`Move down`,"editor.noRuns":`No runs yet.`,"editor.restart":`Restart`,"editor.close":`Close`,"runDrawer.expand":`Fill the window`,"runDrawer.shrink":`Back to the side`,"editor.chatHello":`Tell me what your wizard should do. I'll build the flow and you'll see it as a diagram on the left.`,"shareRun.button":`Share`,"shareRun.title":`Share result`,"shareRun.email":`Email`,"shareRun.more":`More …`,"shareRun.until":`The link works until {date}.`,"shareRun.kept":`The link works until you withdraw it.`,"shareRun.withdraw":`Withdraw link`,"sharePage.gone":`This link has expired or was withdrawn.`,"sharePage.own":`Try it yourself`,"sharePage.until":`Shared · available until {date}`,"sharePage.shared":`Shared on {date}`,"share.publishing":`Publishing …`,"share.firstTitle":`Published by sharing`,"share.firstText":`Version {v} is live. Only those who get the link come in.`,"share.notReady":`Not ready to share yet`,"share.notReadyHint":`Sharing it the first time publishes it – first this has to be right:`,"share.stillBuilding":`The assistant is still building it. Once it is done, sharing publishes it.`,"live.open":`Make changes live`,"live.openShort":`Go live`,"live.title":`Make changes live`,"live.intro":`Others see version {v}. Going live makes it version {next} – the link stays the same.`,"live.changed":`What changed`,"live.nothing":`Nothing that changes steps or files.`,"live.stepAdded":`New step “{name}”`,"live.stepRemoved":`Step “{name}” removed`,"live.stepChanged":`“{name}”: {parts}`,"live.wizardChanged":`The wizard itself: {parts}`,"live.order":`The order of the steps`,"live.fileAdded":`File “{name}” added`,"live.fileRemoved":`File “{name}” removed`,"live.fileChanged":`File “{name}” replaced`,"live.and":`and`,"live.part.title":`title`,"live.part.description":`description`,"live.part.fields":`fields`,"live.part.cta":`button`,"live.part.instructions":`instructions`,"live.part.tools":`tools`,"live.part.connections":`connections`,"live.part.output":`result`,"live.part.model":`model`,"live.part.next":`what comes next`,"live.part.each":`repetition`,"live.part.intro":`greeting`,"live.part.avatar":`engenty`,"live.part.lists":`lists`,"live.part.other":`settings`,"live.fixFirst":`Fix first, then go live`,"live.tested":`Tested {when} – with these changes`,"live.testedFailed":`The test {when} with these changes failed`,"live.justNow":`just now`,"live.seeRun":`See the run`,"live.untested":`Not tested with these changes yet.`,"live.test":`Test now`,"live.keepRunning":`Anyone in the middle of a run carries on with version {v}.`,"live.cost":`A run now costs about {after} instead of {before} credits.`,"live.cloud":`Version {v} goes to your account's cloud too.`,"live.cancel":`Cancel`,"live.go":`Go live`,"live.going":`Going live …`,"live.done":`Version {v} is live`,"live.doneHint":`New runs start on version {v}. Anyone in the middle carries on with version {was}.`,"live.doneCloud":`New runs start on version {v}, here and in the cloud. Anyone in the middle carries on with version {was}.`,"live.close":`Done`,"share.titleOf":`Share “{title}”`,"share.access":`Access`,"share.anyone":`Anyone with the link`,"share.anyoneMenu":`can open and fill it in`,"share.anyoneHint":`can open and fill it in · up to {n} runs a day`,"share.onlyYou":`Only you`,"share.onlyYouHint":`The link is off. You test it in the studio.`,"share.thisComputer":`Only on this computer`,"share.thisComputerHint":`Others reach it only through the cloud.`,"share.ways":`How others reach it`,"share.change":`Change`,"share.copyLink":`Link`,"share.copyNumber":`Number`,"share.copyLinkFor":`Copy the link for {name}`,"share.copyNumberFor":`Copy the number for {name}`,"share.keywordTo":`“{keyword}” to {number}`,"share.unset":`Not set up yet`,"share.setUp":`Set up`,"share.offNote":`While only you have access, everyone else sees a notice.`,"share.opensSteps":`step by step`,"share.opensAs":`as {name}`,"share.linkNote":`“Copy link” opens it {how} and offers the other ways right away.`,"share.copyMain":`Copy link`,"share.notPublished":`Not published yet`,"share.changes":`Others see version {v}. Your changes are not live yet.`,"share.localHint":`Here it runs on this computer only. With an account it runs in the cloud too, and everyone opens it there.`,"share.back":`Back`,"share.close":`Close`,"share.done":`Done`,"share.qrOpens":`Opens`,"share.qrMessage":`Scan with the phone's camera: {name} opens with the keyword written.`,"share.print":`Print`,"share.download":`Download`,"share.onWebsite":`On your website`,"share.webShows":`What does the website show?`,"share.webWhere":`Where on the page?`,"share.webCode":`Code for your page`,"share.copyCode":`Copy code`,"share.webNeedsLink":`The code for your page needs a link everyone reaches: published, for anyone with the link.`,"share.wpLine":`WordPress? Our plugin does it without code.`,"share.wpPackageLink":`Without an account: as a package`,"share.place.inline":`In the page`,"share.place.inlineHint":`It sits in your page, where you paste the code.`,"share.place.button":`Behind a button`,"share.place.buttonHint":`A button on your page opens it in a window.`,"share.place.bubble":`As a bubble`,"share.place.bubbleHint":`Bottom right on every page, one click opens it. Best put the code in the footer.`,"share.place.popout":`As a chat button`,"share.place.popoutHint":`Bottom right on every page, one click opens the chat. Best put the code in the footer.`,"share.runs":`runs`,"share.newLink":`New link`,"share.rotated":`New link created`,"share.link":`Link`,"share.copy":`Copy`,"share.limit":`At most a day`,"share.rotate":`Create a new link`,"share.rotateHint":`The old link and the QR code stop working.`,"share.open":`Open`,"share.website":`Website`,"share.openHere":`Test on this computer`,"share.settings":`Settings`,"share.rotateCloud":`The old link and the QR code stop working, in the cloud too.`,"share.others":`Share with others`,"share.details":`Details`,"teaser.link":`This link only works on this computer, while the app is running. With an account the wizard also runs on engenty.ai, with a link for everyone.`,"teaser.models":`No API key of your own: with an account, text, images and videos run on credits.`,"teaser.connect":`Connect an account`,"teaser.modelsLinked":`Or on your account's credits: under Models, choose "The account's credits".`,"share.qr":`QR code`,"share.qrHint":`Scan it with a phone's camera: the wizard opens, in the engenty wizards app when it is installed.`,"share.code":`ID for the app:`,"share.readOnly":`Whether the link is active and how many runs a day it allows is set in your local install.`,"share.fit.no":`Not possible: {steps}`,"run.orAs":`Or: {label}`,"chat.view":`View`,"chat.steps":`Steps`,"chat.chat":`Chat`,"chat.send":`Send`,"chat.dictate":`Dictate (⌘⇧M)`,"chat.dictateStop":`Stop dictating`,"chat.listening":`Listening …`,"chat.transcribing":`Writing it down …`,"chat.micDenied":`The microphone is not allowed for this page.`,"chat.readAloud":`Read aloud`,"chat.readAloudOff":`Stop reading aloud`,"talk.start":`Start talking`,"talk.stop":`End the conversation`,"talk.connecting":`Connecting …`,"talk.live":`In conversation`,"talk.speaking":`Speaking`,"talk.listening":`Listening`,"talk.failed":`The conversation could not start`,"talk.hint":`Talk to the wizard – the screen follows along.`,"talk.camera":`Switch the camera on`,"talk.cameraOff":`Switch the camera off`,"talk.cameraDenied":`The camera is not allowed for this page.`,"video.join":`Join`,"video.rejoin":`Rejoin`,"video.leave":`Leave`,"video.hint":`Microphone and camera are asked for when you join. The chat beside it follows along and takes what a voice cannot.`,"video.you":`You`,"video.cameraOff":`Camera off`,"video.mute":`Mute`,"video.unmute":`Unmute`,"video.flip":`Switch camera`,"video.ended":`Call ended`,"video.chat":`Chat`,"talk.joinHint":`The microphone is asked for when you start, the camera only when you switch it on. The chat beside it follows along and takes what a voice cannot.`,"chat.skip":`Skip`,"chat.skipped":`Skipped`,"chat.change":`Change`,"chat.placeholder":`Your answer …`,"chat.above":`Answer above in the chat`,"chat.required":`I need an answer for this one.`,"chat.badEmail":`That doesn't look like an email address.`,"chat.badUrl":`That isn't a valid address.`,"chat.badNumber":`Please enter a number.`,"chat.file":`1 file`,"chat.files":`{n} files`,"chat.voice":`Voice note`,"chat.rows":`{n} rows`,"chat.connected":`Connected`,"chat.checked":`Checked`,"type.page":`Page`,"type.agent":`AI step`,"type.generate":`Generate`,"type.surface":`View`,"type.widget":`Widget`,"type.film":`Film`,"type.review":`Review`,"type.result":`Result`,"run.regenerate":`New version`,"run.regenerateNote":`What should change?`,"market.search":`Search templates …`,"market.hits":`From the marketplace`,"market.all":`All`,"market.industry":`Industry`,"market.format":`Result`,"market.capability":`Capability`,"market.unavailable":`not set up`,"market.without":`Works without: {list}`,"market.optional":`not set up, works without`,"market.optionalHint":`Runs here without {list}: answers that would need it are locked in the wizard. Set it up under Models.`,"market.missing":`Not set up here: {list}`,"market.plan":`Plan`,"market.pro":`Pro`,"market.proHint":`Needs plugins that come with Pro on engenty.ai`,"market.needsPro":`With Pro: needs {list}`,"market.needsProHint":`This template needs {list}. The plugins come with Pro and Team on engenty.ai.`,"market.missingHint":`This needs a model that isn't set up here: {list}. Set it up under Models.`,"market.none":`No template matches this selection.`,"market.notFound":`There is no such template (any more).`,"market.star":`Star`,"market.starred":`Starred`,"market.starHint":`Starred templates are kept on this computer, ready without a connection.`,"market.fromPlugin":`Comes with the plugin “{name}”`,"market.noneStarred":`You haven't starred a template yet.`,"market.offline":`No connection to the marketplace: you see the templates kept here.`,"market.more":`Show more`,"market.reset":`Reset selection`,"market.count":`{n} templates`,"market.countOf":`{n} of {all} templates`,"market.countOfShort":`{n} of {all}`,"market.resetShort":`Reset`,"market.minutes":`~ {n} min`,"market.credits":`~ {n} credits per run`,"market.needsUpdate":`Needs a newer app`,"market.needsUpdateHint":`This template uses features your app does not know yet. Update the app, then you can use it.`,"market.use":`Start with this template`,"market.steps":`How the wizard runs`,"market.duration":`Duration`,"market.durationHint":`from start to result, with {n} inputs from you`,"market.result":`Result`,"market.creditsRange":`~ {n} credits`,"market.creditsHint":`estimated per run, rarely more than twice that`,"market.needs":`Needs`,"market.cost":`Cost`,"new.forWebsite":`Small helpers for your website`,"run.download":`Download`,"run.madeWith":`Made with engenty wizards`,"run.required":`Required`,"settings.title":`Settings`,"settings.name":`Name`,"settings.mcp":`Connected systems`,"settings.mcpHint":`AI steps can read from and write to these systems — only when you allow it on the step.`,"settings.addServer":`Connect a system`,"settings.serverName":`Name`,"settings.serverUrl":`MCP URL`,"settings.serverHeader":`Authorization header (optional)`,"settings.save":`Save`,"settings.saved":`Saved`,"settings.delete":`Delete space`,"settings.noProject":`Your space shows up here once your local install has published its first wizard.`,"settings.copy":`Copy`,"settings.copied":`Copied`,"settings.lastUsed":`last used {when}`,"settings.neverUsed":`never used`,"settings.revoke":`Delete key`,"mcp.appsDisconnect":`Remove`,"plugins.title":`Plugins`,"plugins.hint":`Plugins add pages, settings and tools for steps to this app. They run with the app's full rights: install only what you know.`,"plugins.hintManaged":`These plugins are switched on for your account.`,"plugins.reload":`Reload`,"plugins.rescan":`Look again`,"plugins.tools":`Tools for steps`,"plugins.serverFailed":`The server half did not load: {error}`,"plugins.studioFailed":`The studio half did not load: {error}`,"plugins.problems":`Not a plugin`,"plugins.crashed":`This part of a plugin crashed.`,"plugins.none":`No plugins of your own installed.`,"pro.title":`Pro modules`,"pro.hint":`Modules your plan (Pro, Team) includes, here on your computer. They come from your engenty account, are signed by engenty and stay on while your plan includes them – up to a week without internet.`,"pro.check":`Check plan`,"pro.notLinked":`Link your engenty account (Settings → Account) to use your plan's modules here.`,"pro.plan":`Plan: {plan}`,"pro.confirmedUntil":`confirmed until {date}`,"pro.plans":`Plans`,"pro.on":`On`,"pro.notInPlan":`Not in your plan`,"pro.install":`Install`,"pro.update":`Update`,"pro.remove":`Remove`,"pro.none":`There are no Pro modules for this version ({runtime}) yet.`,"pro.held.plan":`Not in your plan`,"pro.held.release":`Fetched again for this version`,"pro.held.unconfirmed":`Plan not confirmed – check online`,"integrate.nav":`Integrate`,"integrate.title":`Your wizards in your AI apps`,"integrate.intro":`Start wizards right in the chat of Claude, ChatGPT, Cursor and the like — answer the pages there and get the result. The thinking runs on the subscription you already have.`,"integrate.introManaged":`Start your wizards right in the chat of claude.ai, ChatGPT, Claude Desktop and the like — answer the pages there and get the result.`,"integrate.groupHere":`On this computer`,"integrate.groupCloud":`Through engenty.ai`,"integrate.groupBrowser":`In the browser`,"integrate.groupDesktop":`On your computer`,"integrate.groupMore":`More apps`,"integrate.groupShare":`Share`,"integrate.shareLink":`Share by link`,"integrate.shareSite":`On a website`,"integrate.wpIntro":`The plugin "engenty wizards" puts your published wizards on a WordPress site: as a block, a shortcode, an Elementor widget or a bubble at the bottom right. Results, contacts and bookings show in the WordPress admin too.`,"integrate.wpInstall":`1 · Install the plugin`,"integrate.wpInstallHint":`In WordPress under Plugins → Add New → Upload Plugin, choose the ZIP file and activate it.`,"integrate.wpDownload":`Download engenty-wizards.zip`,"integrate.wpConnect":`2 · Connect`,"integrate.wpConnectHint":`In the WordPress admin under "engenty", choose "Create your own AI" (new account) or "Sign in". The site then reads itself in: name, logo, colours, contact details and its pages as knowledge.`,"integrate.wpConnectLocal":`The plugin connects to an account on engenty.ai, not to this install. Link your account here and publish your wizards there; then you pick them in WordPress.`,"integrate.wpPlace":`3 · Put it on a page`,"integrate.wpPlaceHint":`The "engenty Wizard" block, the Elementor widget of the same name, the bubble from the plugin's settings, or this shortcode with the wizard's ID:`,"integrate.wpSampleLabel":`Start a request`,"share.wpPlugin":`Get the plugin`,"share.wpLocal":`Without an account, on the site itself`,"share.wpLocalHint":`Imported as a package into a WordPress 7, the wizard thinks with the site's own AI provider and needs no account. What it needs, as the gallery puts it:`,"share.wpPackage":`Download the package`,"share.wpPackageDraft":`Draft as a package`,"share.wpKnowledge":`Take the knowledge along`,"share.wpKnowledgeHint":`This project's pages go into the package as files (up to 2 MB): what the wizard otherwise looks up in the space.`,"share.wpFull":`Runs there as is`,"share.wpLess":`Runs with less`,"share.wpNo":`Needs an account`,"share.wpNeedsAccount":`With an account: needs {list}`,"share.wpHelp":`In the plugin: engenty → Wizards → Import. Without an account the results stay in WordPress; contacts, bookings and files come with the account.`,"need.full":`runs`,"need.missing":`not set up`,"need.optional":`works without`,"need.lists":`Lists the wizard keeps between runs`,"need.memory":`The wizard's memory`,"need.each":`One run per entry (one after the other here)`,"need.field:slot":`Picking an appointment from free times`,"need.asset:document":`Making documents (PDF, Word)`,"need.asset:dashboard":`Making dashboards`,"need.tool:pages":`Reading the space's pages`,"need.format":`Result as {format}`,"integrate.wpLocal":`Without an account`,"integrate.wpLocalHint":`A WordPress 7 with its own AI provider (Settings → Connectors) runs wizards without an account: the templates that ship with the plugin, or a package from a wizard's share dialog. The share dialog says per wizard whether it runs there as is, with less, or only with an account.`,"integrate.wpPro":`With Pro`,"integrate.wpProHint":`Contacts and bookings from your wizards in the WordPress admin; wizards made from templates right in WordPress.`,"integrate.soon":`soon`,"integrate.found":`Found on this computer`,"integrate.stateWorks":`Works`,"integrate.stateAdded":`Added, not tested yet`,"integrate.stateNone":`Not set up yet`,"integrate.outRun":`Start wizards in the chat`,"integrate.outWidget":`The wizard shows in the chat`,"integrate.outText":`Wizards as text in the chat`,"integrate.outSignIn":`No API key — you sign in`,"integrate.view":`View`,"integrate.testIt":`Test`,"integrate.connectShort":`Connect`,"integrate.cloudTitle":`claude.ai and ChatGPT`,"integrate.cloudText":`They run in the browser and cannot reach your computer. With your engenty account your wizards get there anyway.`,"integrate.cloudButton":`Connect through engenty.ai`,"integrate.steps":`How it works`,"integrate.connect":`Add to {app}`,"integrate.connectHint":`Adds engenty wizards to the settings of {app}.`,"integrate.connected":`Added to {app}`,"integrate.notInstalled":`{app} is not on this computer. Adding works anyway — it takes effect once {app} is there.`,"integrate.details":`Details`,"integrate.restart":`Restart {app}`,"integrate.restartHint":`Quit it completely and open it again. We notice by ourselves — nothing to click here.`,"integrate.reload":`Reload the servers in {app}, or restart {app}. We notice by ourselves.`,"integrate.waiting":`Waiting for {app}`,"integrate.try":`Try it in the chat`,"integrate.tryHint":`In a new chat, write:`,"integrate.askTool":`Which wizards do I have in engenty?`,"integrate.elsewhere":`{app} on another computer?`,"integrate.byAddress":`Connect with the address and an API key`,"integrate.backHere":`Connect on this computer after all`,"integrate.keyCreate":`Create an API key for {app}`,"integrate.keyHint":`{app} signs in with it. It is shown once and goes right into the command.`,"integrate.keyReady":`API key created — it is already in the command.`,"integrate.add":`Add the server`,"integrate.addressLocal":`Reachable on this computer only, and only while engenty wizards runs.`,"integrate.works":`Works`,"integrate.next":`Try next`,"integrate.nextHint":`Copy a sentence into a new chat in {app}.`,"integrate.labelAsk":`Ask`,"integrate.labelRun":`Run`,"integrate.labelBuild":`Build`,"integrate.labelExplain":`Explain`,"integrate.askRun":`Start my wizard “{title}”`,"integrate.askBuild":`Build me a wizard for newsletter drafts`,"integrate.askExplain":`What does the wizard “{title}” do?`,"integrate.textOnly":`{app} shows wizards as text: pages and questions come as messages. Claude Desktop, Cursor and VS Code show the wizard itself as a window in the chat.`,"integrate.addedIn":`Added to {app}`,"integrate.remoteWhy":`{app} runs on its maker's servers and cannot reach your computer. It can reach your wizards on engenty.ai.`,"integrate.viaAccount":`Connect through your engenty account`,"integrate.tileHere":`This computer`,"integrate.tileHereText":`You keep building here as before.`,"integrate.tileCloudText":`Gets your published wizards, to run them.`,"integrate.tileAppText":`Connects to engenty.ai and starts them in the chat.`,"integrate.linkAccount":`Connect to engenty.ai`,"integrate.linkHint":`Then we show you the steps in {app}.`,"integrate.noAccount":`Rather without an account?`,"integrate.useDesktop":`Claude Desktop works right here — one click`,"integrate.linked":`Through your account {email}: {app} sees the wizards you publish here.`,"integrate.openConnectors":`Open connectors in claude.ai`,"integrate.open":`Open {app}`,"integrate.claudeAiWhere":`There: Add custom connector`,"integrate.desktopWhere":`In Claude Desktop: Settings → Connectors → Add custom connector`,"integrate.chatgptWhere":`In ChatGPT: Settings → Apps & Connectors → Advanced → Developer mode, then “Create”`,"integrate.nameAddress":`Enter name and address`,"integrate.name":`Name`,"integrate.address":`Address`,"integrate.allow":`Click “Connect”, sign in, allow`,"integrate.allowHint":`A window of engenty opens. You sign in and click “Allow”. It looks like this:`,"integrate.allowFirst":`Sign in and allow on first use`,"integrate.allowFirstHint":`{app} opens a window of engenty. You sign in and click “Allow”.`,"integrate.consentPreview":`{app} wants to access your wizards`,"integrate.checkSeen":`Connected`,"integrate.checkTool":`Used a tool`,"integrate.checkWidget":`Showed a wizard in the chat`,"integrate.revoke":`Disconnect any time in your account — access ends at once.`,"integrate.revokeLink":`Connected apps`,"integrate.needsPublic":`{app} connects from its maker's servers. That only works when this server can be reached publicly over HTTPS.`,"integrate.file":`Put this into {file}:`,"integrate.vscode":`In VS Code: "MCP: Open User Configuration", then add:`,"integrate.chatgpt":`In ChatGPT: Settings → Apps & Connectors → Advanced → Developer mode, then "Create" with this address:`,"integrate.generic":`In the app's MCP settings, add a server at this address (Streamable HTTP):`,"mcp.terminal":`Run in the terminal:`,"mcp.ccPlugin":`Optionally the plugin — it adds the /wizard command:`,"mcp.codexKey":`Run in the terminal — Codex reads the API key from an environment variable:`,"mcp.claudeAi":`In claude.ai: Settings → Connectors → Add custom connector, and enter this address:`,"mcp.oauth":`No API key needed: on first use your app signs in in the browser.`,"mcp.keys":`API keys`,"mcp.keysHint":`Each API key signs one app in and has every right — treat it like a password. Delete it and that app is signed out.`,"editor.viaClient":`Via {client}`,"editor.changedVia":`Changed via {client}`,"editor.merged":`Merged with changes from elsewhere`,"browser.takeOver":`Take over`,"browser.handBack":`Hand back`,"browser.driving":`You are driving the browser – click and type in the page. The wizard waits.`,"composer.send":`Send`,"dictation.settings":`Microphone and recording`,"dictation.microphone":`Microphone`,"dictation.default":`System default`,"dictation.mic":`Microphone {n}`,"dictation.showMics":`Show microphone names …`,"dictation.hold":`Hold to record`,"dictation.holdToTalk":`Hold to talk`,"date.pick":`Pick a date`,"time.pick":`Pick a time`,"time.hour":`Hour`,"time.minute":`Minute`,"date.pickRange":`Pick a day or a period`,"date.pickStart":`Pick the first day`,"date.pickEnd":`Pick the last day – or the same one for one day`,"date.today":`Today`,"date.clear":`Clear`,"date.prev":`Previous month`,"date.next":`Next month`,"connectors.title":`Connectors`,"connectors.hint":`Services a wizard can work in for the person — they connect their own account during a run. The main ones are built in; any other you find in the integrations.sh registry and import from its OpenAPI spec or its MCP server.`,"connectors.imported":`From the registry`,"connectors.noneImported":`No connector from the registry is imported here.`,"connectors.notSetUp":`not set up`,"connectors.setup":`The server still needs:`,"connectors.search":`Find a service, e.g. Notion, Stripe, GitHub`,"connectors.find":`Search`,"connectors.none":`Nothing found.`,"connectors.import":`Import`,"connectors.exists":`Already imported.`,"connectors.ownClient":`Own OAuth client`,"connectors.refresh":`Reload actions`,"connectors.remove":`Remove`,"connectors.actions":`{n} actions, {r} read-only`,"connectors.pending":`Actions appear once an account is connected`,"connectors.needsClient":`This service needs an OAuth client (id and secret). Remove it and import again with “Own OAuth client”.`,"connectors.authNone":`no sign-in`,"connectors.authOauth":`OAuth sign-in`,"connectors.authKey":`API key`,"connectors.group.read":`reads`,"connectors.group.write":`changes`,"connectors.group.destructive":`deletes`,"camera.missing":`No camera was found on this device. Upload a photo instead.`,"camera.busy":`Another app is using the camera. Close it and try again.`,"location.unavailable":`Your device could not find its location right now. Try again outdoors or type the address.`,"location.timeout":`That took too long. Try again or type the address.`,"install.add":`Add to home screen`,"install.ios":`Tap “Share” below, then “Add to Home Screen”.`,"install.bookmark":`Bookmark this wizard`,"install.bookmark.mac":`Press ⌘ D to keep this wizard in your bookmarks.`,"install.bookmark.pc":`Press Ctrl + D to keep this wizard in your bookmarks.`,"install.app":`Open in the app`,"install.app.offer":`Install the studio as an app: its own window, its own icon in the Dock or taskbar.`,"install.app.browser":`In Chrome or Edge the studio installs as an app: its own window, its own icon.`,"install.app.action":`Install as app`,"install.app.close":`Close`,"install.app.how.ios":`In Safari, tap Share and then "Add to Home Screen". The studio then sits on your home screen like an app.`,"install.app.how.mac":`In Safari, choose File → "Add to Dock". The studio gets its own window and an icon in the Dock.`,"install.app.how.android":`In Chrome, tap the ⋮ menu and then "Install app" or "Add to Home screen".`,"install.app.how.chromium":`Click the install icon in the address bar, or choose "Install app" in the menu. The studio gets its own window and an icon.`,"common.loading":`Loading …`,"common.error":`Error`,"data.hint":`Tables and pages the space and its wizards keep.`,"data.all":`All data`,"data.own":`General`,"data.table":`Table`,"data.page":`Page`,"data.newTable":`New table`,"data.newPage":`New page`,"data.title":`Title`,"data.owner":`Belongs to`,"data.create":`Create`,"data.empty":`No tables or pages yet. Create one – soon your wizards will write here too.`,"data.rows":`{n} rows`,"data.addRow":`Row`,"data.noRows":`No rows yet.`,"data.deleteRow":`Delete row`,"data.deleteTable":`Delete table`,"data.deletePage":`Delete page`,"data.confirmDelete":`Delete “{title}”?`,"data.newColumn":`New column`,"data.columnName":`Name`,"data.columnType":`Type`,"data.required":`Must be filled in`,"data.deleteColumn":`Delete column`,"data.removeOption":`Remove`,"data.fromList":`A list of the wizard: every run writes into it. The columns come from the wizard.`,"data.badCell":`This value does not fit “{column}” and is not saved.`,"data.type.text":`Text`,"data.type.number":`Number`,"data.type.date":`Date`,"data.type.duration":`Duration`,"data.type.select":`Choice`,"data.type.boolean":`Yes / no`,"data.text.single":`One line`,"data.text.multiline":`Several lines`,"data.number.integer":`Whole number`,"data.number.decimal":`Decimal`,"data.number.percent":`Percent`,"data.number.currency":`Amount`,"data.currency":`Currency (e.g. EUR)`,"data.date.date":`Date`,"data.date.datetime":`Date and time`,"data.date.time":`Time`,"data.unit":`Entered in`,"data.unit.milliseconds":`ms`,"data.unit.seconds":`seconds`,"data.unit.minutes":`minutes`,"data.unit.hours":`hours`,"data.unit.days":`days`,"data.options":`Choices, one per line`,"data.multiple":`Several can be chosen`,"data.write":`Write`,"data.preview":`Preview`,"data.pageEmpty":`This page is still empty.`,"data.markdownHint":`Markdown: # heading, **bold**, - list`,"space.holds.intro":`A space holds what belongs together – a company, a brand or a project. Every wizard belongs to exactly one space.`,"space.holds.wizards":`Its own list – the home and the search show only these.`,"space.holds.info":`Name, logos, colours and facts its wizards know.`,"space.holds.knowledge":`Documents, tables and pages its wizards share.`,"space.holds.connectors":`The connections its wizards use.`,"space.holds.results":`The runs of its wizards.`,"space.holds.shared":`Account, models and plugins apply to every space.`,"space.info":`Info & brand`,"space.knowledge":`Knowledge`,"space.data":`Data`,"space.results":`Results`,"space.resultsAll":`All results`,"space.resultsHint":`Runs of your wizards that reached their result, newest first.`,"space.resultsEmpty":`No results yet. A run shows up here once it is done.`,"space.resultCredits":`{n} credits`,"space.resultsSearch":`Search: wizard, answers, result …`,"space.resultsModeAll":`Live & test`,"space.resultsAnyTime":`Any time`,"space.resultsDay":`Last 24 hours`,"space.resultsDays":`Last {n} days`,"space.resultsNone":`No results for this search.`,"space.resultFiles":`{n} files`,"project.rename":`Rename space`,"project.saving":`Saving …`,"project.base":`Basics`,"project.baseHint":`Who is behind the wizards. Every AI step knows this.`,"project.title":`Title`,"project.titleHint":`Company, brand or undertaking — end users see it too.`,"project.about":`About`,"project.aboutHint":`What you do, for whom, and the tone you write in.`,"project.logos":`Logos`,"project.logosHint":`End users see the first logo. A description says what a variant is for.`,"project.logoAdd":`Logo`,"project.logoMain":`Main logo`,"project.logoMakeMain":`Make main logo`,"project.colors":`Colours`,"project.colorsHint":`The first colour is the accent of documents, dashboards and public pages.`,"project.colorAdd":`Colour`,"project.colorName":`e.g. Primary — buttons and headings`,"project.colorUse":`Describe how engenty should use this color.`,"project.colorAddTitle":`Add a colour`,"project.colorValue":`Colour value`,"project.colorUseLabel":`Use`,"project.add":`Add`,"project.colorAccent":`Accent`,"project.colorFirst":`Make accent`,"project.assets":`Assets`,"project.assetsHint":`Images, graphics, videos. AI steps place them in documents and choose by the description.`,"project.assetAdd":`Files`,"project.assetSearch":`Filter assets …`,"know.all":`All`,"know.title":`Knowledge`,"know.hint":`What your wizards' steps look things up in. Documents become pages and tables when they arrive; Kategorien keep the items apart.`,"know.empty":`Nothing here yet. Upload documents, add a page or give the assistant a website.`,"know.drop":`Drop documents here or`,"know.pick":`choose`,"know.page":`Page`,"know.table":`Table`,"know.faq":`FAQ`,"know.file":`File`,"know.category":`Kategorie`,"know.categories":`Kategorien`,"know.newPage":`New page`,"know.newTable":`New table`,"know.asFaq":`As an FAQ: a question and its answer per row`,"know.newCategory":`New Kategorie`,"know.search":`Try a search …`,"know.searchNone":`Nothing relevant found.`,"know.searchStats":`{candidates} candidates checked, {hits} relevant`,"know.searchUnchecked":`{hits} hits, unchecked`,"know.unchecked":`Without a classifier hits stay unchecked. It needs an AI Gateway or TypeSafe key, or an account.`,"know.keywordsOnly":`Without an embedding model the search finds words, not meaning.`,"know.clear":`Reset`,"know.sub":`{n} sub-pages`,"know.rows":`{n} rows`,"know.review":`Check`,"know.reviewed":`Checked`,"know.from":`From {label}`,"know.kept":`Changed by hand: {label} no longer writes it.`,"know.original":`Original`,"know.reading":`Reading …`,"know.subPages":`Sub-pages`,"know.addSub":`Sub-page`,"know.type.choice":`Choice`,"know.type.date":`Date`,"know.type.number":`Number`,"know.type.text":`Text`,"know.type.boolean":`Yes / no`,"know.name":`Name`,"know.type":`Type`,"know.unit":`Unit`,"know.unitHint":`e.g. h, €, kg`,"know.multiple":`Several values per item`,"know.ordered":`The values are ranked (low → high)`,"know.values":`Values`,"know.valuesHint":`One per line. More come with the items.`,"know.hintField":`Where the values come from`,"know.hintFieldHint":`Short, e.g. header, file name, the website's filter.`,"know.create":`Create`,"know.proposed":`Proposed`,"know.proposedHint":`It is filled once it is taken.`,"know.accept":`Take`,"know.dismiss":`Dismiss`,"know.alike":`“{a}” and “{b}” look like one value.`,"know.merge":`Merge`,"know.items":`{n} items`,"know.item":`1 item`,"know.row":`1 row`,"know.oneSub":`1 sub-page`,"know.addValue":`Add a value`,"know.range":`{min} to {max}`,"know.summary":`Overview`,"know.summaryHint":`A model sums up the items of this value. The search finds the overview like a page.`,"know.summaryWrite":`Write the overview`,"know.summaryAgain":`Write again`,"know.summaryEmpty":`No overview yet.`,"know.toc":`Contents`,"know.tocRows":`{n} rows in {table}`,"know.deleteCategory":`Delete Kategorie`,"know.confirmCategory":`Delete “{name}”? The items stay, only the Kategorie goes.`,"know.deleteValue":`Delete value`,"know.yes":`Yes`,"know.no":`No`,"know.minimum":`from`,"know.maximum":`to`,"know.contains":`contains`,"know.by.person":`set by hand`,"know.by.origin":`from the source`,"know.by.model":`read by a model`,"know.remove":`Remove`,"know.unset":`Not set`,"know.deleteFile":`Delete file`,"project.documents":`Documents`,"project.documentsHint":`PDFs, lists, Excel, Word, text. They are read and put into an index every AI step searches.`,"project.documentAdd":`Documents`,"project.drop":`Drop here or`,"project.staysLocal":`Stays in your local install and is not sent here.`,"project.description":`Add a description …`,"project.describing":`Looking at it …`,"project.reading":`Reading …`,"project.indexed":`In the index`,"project.indexedKeywords":`In the index (keywords)`,"project.notIndexed":`No text found`,"project.reindex":`Read again`,"project.pages":`{n} pages`,"project.keywordsOnly":`The index searches by keywords right now. With an AI Gateway or OpenAI key it also searches by meaning.`,"project.preview":`Preview`,"project.viewList":`Show as a list`,"project.viewCards":`Show as cards`,"project.original":`Original`,"project.readText":`Text as read`,"project.openOriginal":`Open the original`,"project.noText":`No text yet: the document is still being read, or could not be read.`,"project.textCut":`The preview shows the start ({shown} of {total} characters).`,"project.searchTest":`Search the index …`,"project.searchNone":`Nothing found.`,"project.remove":`Remove`,"project.removeConfirm":`Remove “{name}”?`,"project.facts":`Facts`,"project.factsHint":`What wizards should know: address, VAT id, opening hours — anything that fits.`,"project.factLabel":`Label`,"project.factValue":`Value`,"project.factAdd":`Entry`,"project.factType":`Type`,"project.factAuto":`Automatic`,"project.type.text":`Text`,"project.type.longtext":`Long text`,"project.type.number":`Number`,"project.type.date":`Date`,"project.type.url":`Link`,"project.type.email":`Email`,"project.type.phone":`Phone`,"project.type.boolean":`Yes / No`,"project.yes":`Yes`,"project.no":`No`,"assistant.name":`Assistant`,"assistant.ask":`Ask the assistant`,"assistant.open":`Open the assistant`,"assistant.sees":`Sees: {page}`,"assistant.menu":`Chat menu`,"assistant.newChat":`New chat`,"assistant.earlier":`Earlier chats`,"assistant.noEarlier":`No earlier chats yet.`,"assistant.untitled":`Untitled`,"assistant.summarising":`Summarising the chat …`,"assistant.readOnly":`An earlier chat, to read only. The assistant knows its summary.`,"assistant.back":`Back`,"assistant.layoutBottom":`Dock at the bottom`,"assistant.layoutSidebar":`As a sidebar`,"assistant.minimize":`Make small`,"assistant.close":`Fold away`,"assistant.helloTitle":`How can I help?`,"assistant.hello":`I know engenty wizards and see what you see. Ask me how something works – I'll show you too.`,"assistant.composer":`Ask something or say what you need …`,"assistant.filesNeedSpace":`Files go into a space – none can be changed here.`,"assistant.talk":`Talk`,"assistant.live":`Live chat`,"assistant.liveListening":`Listening`,"assistant.liveThinking":`Thinking`,"assistant.liveSpeaking":`Speaking`,"assistant.liveMuted":`Muted`,"assistant.mute":`Microphone off`,"assistant.unmute":`Microphone on`,"assistant.end":`End`,"assistant.naturalVoice":`Natural voice (speech model)`,"assistant.gotIt":`Got it`,"assistant.tool.navigate":`Opened {where}`,"assistant.tool.highlight":`Marked: {what}`,"assistant.tool.look":`Looked at the page`,"assistant.tool.read":`Read: {what}`,"assistant.tool.fill":`Filled in: {what}`,"assistant.tool.docs":`Read the guide`,"assistant.tool.gallery":`Searched the gallery`,"assistant.tool.account":`Checked the account`,"assistant.tool.chats":`Searched earlier chats`,"assistant.tool.space":`Checked wizards and runs`,"assistant.tool.models":`Checked the models`,"assistant.suggest.what":`What can I do with engenty wizards?`,"assistant.suggest.models":`Show me where to set up the models`,"assistant.suggest.credits":`How many credits do I have left?`,"assistant.suggest.modelsNow":`What thinks here right now, and what is missing?`,"assistant.suggest.modelsMissing":`Why can no video be made here?`,"assistant.suggest.modelsCost":`What does each way cost me?`,"assistant.suggest.accountWhy":`What do I need an account for?`,"assistant.suggest.plans":`Which plans are there, and what do they cost?`,"assistant.suggest.integrateWhat":`What can I do from Claude or Cursor?`,"assistant.suggest.integrateClaude":`How do I add Claude Desktop?`,"assistant.suggest.connectorsWhat":`What are connectors for?`,"assistant.suggest.connectorsAdd":`Connect this service: `,"assistant.suggest.readSite":`Read our website `,"assistant.suggest.missing":`What is the space still missing?`,"assistant.suggest.facts":`What do the wizards need the facts for?`,"assistant.suggest.knowledgeHow":`How does knowledge get into the space?`,"assistant.suggest.knowledgeSite":`Read this website into the knowledge: `,"assistant.suggest.knowledgeCategories":`What are Kategorien for?`,"assistant.suggest.dataWhat":`What is in this data?`,"assistant.suggest.dataWho":`Which wizard fills which table?`,"assistant.suggest.dataEdit":`How do I change a column?`,"assistant.suggest.resultsFailed":`Which runs failed lately?`,"assistant.suggest.resultsCost":`What cost the most credits this month?`,"assistant.suggest.resultsShare":`How do I share a result?`,"project.assistantTitle":`Tell me about yourselves`,"project.assistantHello":`Name your website or give me files. I fill in what I find: title, description, logo, colours and facts.`,"project.assistantComposer":`e.g. “Read our website example.com” …`,"project.assistantTitleKnowledge":`What should your wizards know?`,"project.assistantHelloKnowledge":`Give me documents or tell me where the knowledge is. I read it in – this page shows what goes in.`,"project.assistantComposerKnowledge":`Attach documents or say where the knowledge is …`,"project.assistantChanged":`Space updated`,"flowApp.loading":`The wizard is on its way …`,"flowApp.broken":`This can't be shown here.`,"flowApp.draft":`Draft`,"flowApp.published":`Published`,"flowApp.issues":`{n} issues in the draft`,"flowApp.flow":`Flow`,"flowApp.notPublished":`Publish it in the studio to run it here.`,"flowApp.runPage":`Continue in the browser`,"flowApp.inBrowser":`Only in the browser: {fields}`,"flowApp.done":`Done`,"flowApp.credits":`{n} credits`,"flowApp.ask":`The wizard asks`,"flowApp.allow":`Allow`,"flowApp.skip":`Skip`,"flowApp.signIn":`A sign-in at {site} — only in the browser.`,"flowApp.fullscreen":`Larger`,"flowApp.inline":`Smaller`,"flowApp.failed":`That did not work: {error}`},na=`wizards.lang`;function ra(){try{let e=localStorage.getItem(na);return e===`de`||e===`en`?e:null}catch{return null}}var ia=ra()??(typeof navigator<`u`&&!navigator.language.toLowerCase().startsWith(`de`)?`en`:`de`),aa=ia===`de`?ea:ta,oa=new Set;function sa(e){if(e!==ia){ia=e,aa=e===`de`?ea:ta,Qi(e),document.documentElement.lang=e;try{localStorage.setItem(na,e)}catch{}for(let e of oa)e()}}function ca(){return(0,a.useSyncExternalStore)(e=>(oa.add(e),()=>oa.delete(e)),()=>ia)}function la(e){return e.note&&Gi(e.note,ia)||e.message}function N(e,t){let n=aa[e]??ea[e]??e;for(let[e,r]of Object.entries(t??{}))n=n.replace(`{${e}}`,String(r));return n}typeof document<`u`&&(document.documentElement.lang=ia);var P=t(r(),1);function F(...e){return e.filter(Boolean).join(` `)}var ua={primary:`bg-primary text-primary-foreground hover:brightness-[1.06] active:brightness-95 shadow-[0_1px_0_oklch(0%_0_0/0.08)]`,secondary:`bg-card text-ink border border-border hover:bg-paper-2`,ghost:`text-ink-2 hover:text-ink hover:bg-accent`,quiet:`bg-paper-2 text-ink hover:bg-paper-3`,danger:`text-rose hover:bg-rose-tint`},I=(0,a.forwardRef)(function({variant:e=`primary`,size:t=`md`,busy:n,className:r,children:i,disabled:a,...o},s){return(0,P.jsxs)(`button`,{ref:s,type:`button`,disabled:a||n,className:F(`inline-flex select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium transition-[background,filter,color,transform] duration-150 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-50`,t===`sm`&&`h-8 px-3 text-[0.8125rem] coarse:h-11 coarse:px-4`,t===`md`&&`h-10 px-4 text-sm coarse:h-11`,t===`lg`&&`h-12 px-6 text-[0.9375rem]`,ua[e],r),...o,children:[n?(0,P.jsx)(Ca,{className:`size-4`}):null,i]})});function da({label:e,className:t,children:n,...r}){return(0,P.jsx)(`button`,{type:`button`,"aria-label":e,title:e,className:F(`inline-flex size-9 shrink-0 items-center justify-center rounded-full text-ink-3 transition hover:bg-accent hover:text-ink disabled:opacity-40 coarse:size-11`,t),...r,children:n})}var fa=`rounded-lg border border-input bg-card px-3.5 text-[0.9375rem] text-ink shadow-[inset_0_1px_0_oklch(0%_0_0/0.02)] outline-none transition placeholder:text-ink-4 focus:border-focus focus:ring-4 focus:ring-focus-glow disabled:opacity-60`;function pa(e){return/(^|\s)w-/.test(e??``)?null:`w-full`}var ma=(0,a.forwardRef)(function({className:e,...t},n){return(0,P.jsx)(`input`,{ref:n,className:F(fa,pa(e),`h-11`,e),...t})});function ha(e){return(0,P.jsx)(`input`,{type:`color`,className:`swatch size-11 shrink-0 cursor-pointer rounded-lg border border-input bg-card p-1`,...e})}var ga=(0,a.forwardRef)(function({className:e,minRows:t=3,maxRows:n=14,onChange:r,...i},o){let s=(0,a.useRef)(null),c=()=>{let e=s.current;if(!e)return;let r=Number.parseFloat(getComputedStyle(e).lineHeight)||22;e.style.height=`auto`;let i=r*n+20;e.style.height=`${Math.min(Math.max(e.scrollHeight,r*t+20),i)}px`,e.style.overflowY=e.scrollHeight>i?`auto`:`hidden`};return(0,a.useLayoutEffect)(c),(0,P.jsx)(`textarea`,{ref:e=>{s.current=e,typeof o==`function`?o(e):o&&(o.current=e)},className:F(fa,pa(e),`resize-none py-2.5 leading-[1.5]`,e),onChange:e=>{c(),r?.(e)},...i})});function _a({value:e,onChange:t,options:n,className:r,placeholder:i}){return(0,P.jsxs)(`div`,{className:F(`relative`,r),children:[(0,P.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),className:F(fa,`h-11 w-full appearance-none pr-9`),children:[i===void 0?null:(0,P.jsx)(`option`,{value:``,children:i}),n.map(e=>(0,P.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}),(0,P.jsx)(`svg`,{className:`-translate-y-1/2 pointer-events-none absolute top-1/2 right-3 size-4 text-ink-3`,viewBox:`0 0 16 16`,fill:`none`,children:(0,P.jsx)(`path`,{d:`M4 6l4 4 4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})]})}function va({value:e,onChange:t,options:n,multi:r,disabled:i}){let a=new Set(Array.isArray(e)?e:e?[e]:[]);return(0,P.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:n.map(e=>{let o=a.has(e);return(0,P.jsx)(`button`,{type:`button`,"aria-pressed":o,disabled:i?.includes(e),onClick:()=>{if(r){let r=new Set(a);o?r.delete(e):r.add(e),t(n.filter(e=>r.has(e)))}else t(e)},className:F(`h-10 rounded-full border px-4 text-sm transition disabled:pointer-events-none disabled:opacity-60 disabled:line-through coarse:h-11`,o?`border-ember bg-ember-tint text-ink`:`border-input bg-card text-ink-2 hover:border-ink-4 hover:text-ink`),children:e},e)})})}var ya=`cubic-bezier(0.3, 0.7, 0.2, 1)`;function ba({value:e,onChange:t,options:n,label:r}){let i=(0,a.useRef)(new Map),[o,s]=(0,a.useState)(null);return(0,a.useLayoutEffect)(()=>{let t=i.current.get(e);if(!t)return;let n=()=>s({x:t.offsetLeft,w:t.offsetWidth});n();let r=new ResizeObserver(n);return r.observe(t),()=>r.disconnect()},[e]),(0,P.jsxs)(`div`,{role:`tablist`,"aria-label":r,className:`relative inline-flex items-center rounded-full bg-paper-2 p-0.5 ring-1 ring-border-soft`,children:[o?(0,P.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-0.5 bottom-0.5 left-0 rounded-full bg-card shadow-sm motion-reduce:transition-none`,style:{width:o.w,transform:`translateX(${o.x}px)`,transition:`transform 300ms ${ya}, width 300ms ${ya}`}}):null,n.map(n=>{let r=n.id===e;return(0,P.jsx)(`button`,{ref:e=>{e?i.current.set(n.id,e):i.current.delete(n.id)},type:`button`,role:`tab`,"aria-selected":r,onClick:()=>t(n.id),className:F(`relative h-8 whitespace-nowrap rounded-full px-4 font-medium text-[0.875rem] transition-colors motion-reduce:transition-none coarse:h-9`,r?`text-ink`:`text-ink-3 hover:text-ink-2`),children:n.label},n.id)})]})}function xa({checked:e,onChange:t,label:n,disabled:r}){return(0,P.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":n,disabled:r,onClick:()=>t(!e),className:F(`relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition before:absolute before:-inset-x-1 before:-inset-y-2.5 before:content-[''] disabled:pointer-events-none disabled:opacity-60`,e?`bg-primary`:`bg-paper-3`),children:(0,P.jsx)(`span`,{className:F(`inline-block size-5 rounded-full bg-white shadow-sm transition-transform`,e?`translate-x-[22px]`:`translate-x-[2px]`)})})}function Sa({children:e,hint:t,required:n}){return(0,P.jsxs)(`div`,{className:`mb-2`,children:[(0,P.jsxs)(`div`,{className:`font-medium text-[0.875rem] text-ink`,children:[e,n?(0,P.jsx)(`span`,{className:`ml-1 text-ember`,children:`*`}):null]}),t?(0,P.jsx)(`div`,{className:`mt-0.5 text-[0.8125rem] text-ink-3`,children:t}):null]})}function Ca({className:e}){return(0,P.jsxs)(`svg`,{className:F(`size-5 animate-spin`,e),viewBox:`0 0 24 24`,fill:`none`,children:[(0,P.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeOpacity:`0.2`,strokeWidth:`3`}),(0,P.jsx)(`path`,{d:`M21 12a9 9 0 0 0-9-9`,stroke:`currentColor`,strokeWidth:`3`,strokeLinecap:`round`})]})}function wa({className:e,children:t,...n}){return(0,P.jsx)(`div`,{className:F(`rounded-xl bg-card shadow-soft ring-1 ring-border-soft`,e),...n,children:t})}function Ta({children:e,tone:t=`neutral`,icon:n,title:r}){return(0,P.jsxs)(`span`,{title:r,className:F(`inline-flex h-6 items-center gap-1.5 whitespace-nowrap rounded-full px-2.5 font-medium text-[0.75rem]`,t===`neutral`&&`bg-paper-2 text-ink-2`,t===`live`&&`bg-moss-tint text-moss`,t===`warn`&&`bg-amber-tint text-ink-2`,t===`ember`&&`bg-ember-tint text-ember-strong`),children:[n??(t===`live`?(0,P.jsx)(`span`,{className:`size-1.5 rounded-full bg-moss`}):null),e]})}function Ea({open:e,onClose:t,title:n,children:r,wide:i,bare:o,height:s=`auto`}){let c=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let t=c.current;t&&(e&&!t.open?(t.showModal(),t.querySelector(`[data-autofocus]`)?.focus()):!e&&t.open&&t.close())},[e]),(0,a.useEffect)(()=>{let t=c.current;if(!t||!e||o||s===`tall`)return;let n=0,r=()=>{n=Math.max(n,t.getBoundingClientRect().height),t.style.minHeight=`${Math.min(n,window.innerHeight-32)}px`},i=new ResizeObserver(r);return i.observe(t),window.addEventListener(`resize`,r),()=>{i.disconnect(),window.removeEventListener(`resize`,r),t.style.minHeight=``}},[e,o,s]),(0,P.jsx)(`dialog`,{ref:c,onClose:t,onClick:e=>{e.target===c.current&&t()},className:F(`m-auto p-0 text-ink backdrop:bg-[oklch(20%_0.01_60/0.28)] backdrop:backdrop-blur-[2px]`,`max-sm:m-0 max-sm:h-dvh max-sm:max-h-none max-sm:w-full max-sm:max-w-none`,o?`w-[calc(100%-48px)] overflow-visible bg-transparent`:`max-h-[calc(100dvh-32px)] w-[calc(100%-32px)] overflow-y-auto overscroll-contain rounded-2xl bg-card shadow-overlay max-sm:rounded-none max-sm:pt-[env(safe-area-inset-top)] max-sm:pb-[env(safe-area-inset-bottom)]`,i===`page`?`sm:max-w-4xl`:i?`sm:max-w-2xl`:`sm:max-w-md`,!o&&s===`tall`&&`sm:h-[min(calc(100dvh-32px),56rem)]`),children:e&&o?r:e?(0,P.jsxs)(`div`,{className:`p-5 sm:p-7`,children:[n?(0,P.jsxs)(`div`,{className:`mb-5 flex items-start justify-between gap-3`,children:[(0,P.jsx)(`h2`,{className:`min-w-0 font-display font-semibold text-xl`,children:n}),(0,P.jsx)(da,{label:M(`common.close`),onClick:t,className:`-mt-1.5 -mr-2`,children:(0,P.jsx)(`svg`,{viewBox:`0 0 16 16`,fill:`none`,className:`size-4`,"aria-hidden":`true`,children:(0,P.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}):null,r]}):null})}function Da({children:e}){return(0,P.jsx)(`div`,{className:`py-16 text-center text-ink-3`,children:e})}function Oa({text:e}){return e.split(/(https?:\/\/[^\s)]+)/).map((e,t)=>t%2?(0,P.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,className:`font-medium text-ink underline underline-offset-2`,children:new URL(e).host},e):e)}var ka=class extends Error{status;body;constructor(e,t,n){super(e),this.status=t,this.body=n}};function Aa(e){return e instanceof ka&&e.status===0}function ja(e){try{return JSON.parse(e)}catch{return{error:e}}}function Ma(e,t={},n){async function r(r,i,a){let o=await fetch(e(i),{method:r,credentials:`include`,headers:{...t,...a!==void 0&&!(a instanceof FormData)?{"content-type":`application/json`}:{}},body:a===void 0?void 0:a instanceof FormData?a:JSON.stringify(a)}).catch(()=>{throw new ka(M(`common.offline`),0,null)}),s=await o.text(),c=s?ja(s):null;if(!o.ok)throw o.status>=500&&n?.(`${r} ${i} answered ${o.status}: ${c?.error??``}`),new ka(c?.error??c?.message??o.statusText,o.status,c);return c}return{get:e=>r(`GET`,e),post:(e,t)=>r(`POST`,e,t??{}),put:(e,t)=>r(`PUT`,e,t),patch:(e,t)=>r(`PATCH`,e,t),del:e=>r(`DELETE`,e),upload:(e,t)=>{let n=new FormData;return n.set(`file`,t),r(`POST`,e,n)}}}var Na={can:()=>!1,call:e=>Promise.reject(Error(`the app cannot ${e}`)),tell:()=>void 0,download:()=>!1},Pa=null;function Fa(e){Pa=e,La=Ma(e.withBase,e.headers,e.onServerError),Qi(e.lang)}function Ia(){if(!Pa)throw Error(`configureRunner() first`);return Pa}var La=Ma(e=>e),Ra=e=>Ia().withBase(e),za=e=>Ia().asset(e),L=e=>Ia().runBase(e),Ba=e=>(Pa?.app??Na).can(e),Va=(e,t)=>(Pa?.app??Na).call(e,t),Ha=(e,t)=>(Pa?.app??Na).tell(e,t),Ua=(e,t,n)=>(Pa?.app??Na).download(e,t,n),Wa=()=>Pa?.standalone===!0,Ga=250;function Ka({runId:e,driving:t,caption:n,action:r,hint:i,className:o,onBroken:s}){let c=(0,a.useRef)(null),l=(0,a.useRef)(null),[u,d]=(0,a.useState)(``),[f,p]=(0,a.useState)(!1),[m,h]=(0,a.useState)(null),g=async t=>{h(null);try{await La.post(`${L(e)}/browser/act`,t)}catch(e){h(e.message)}};return(0,a.useEffect)(()=>{t&&l.current?.scrollIntoView({block:`nearest`,behavior:`smooth`})},[t]),(0,a.useEffect)(()=>{let n=c.current;if(!(n&&t))return;let r=0,i=null,a=t=>{t.preventDefault(),r+=t.deltaY,i??=setTimeout(()=>{i=null;let t=Math.max(-2e3,Math.min(2e3,Math.round(r)));r=0,t&&La.post(`${L(e)}/browser/act`,{type:`scroll`,dy:t}).catch(()=>void 0)},Ga)};return n.addEventListener(`wheel`,a,{passive:!1}),()=>{n.removeEventListener(`wheel`,a),i&&clearTimeout(i)}},[t,e]),(0,P.jsxs)(`div`,{className:o,children:[(0,P.jsxs)(`div`,{className:F(`relative aspect-[1280/900] w-full overflow-hidden rounded-xl bg-paper-2 ring-1`,t?`ring-2 ring-ember`:`ring-border-soft`),children:[(0,P.jsx)(`img`,{ref:c,src:Ra(`${L(e)}/browser/live`),alt:``,draggable:!1,onClick:e=>{if(!t)return;let n=e.currentTarget.getBoundingClientRect();g({type:`click`,fx:Math.min(1,Math.max(0,(e.clientX-n.left)/n.width)),fy:Math.min(1,Math.max(0,(e.clientY-n.top)/n.height))})},onError:s,className:F(`size-full object-cover object-top`,t&&`cursor-pointer`)}),r?(0,P.jsx)(`div`,{className:`absolute top-2 right-2`,children:r}):null,n&&!t?(0,P.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-0 flex items-center gap-1.5 bg-gradient-to-t from-black/75 to-transparent px-3 pt-8 pb-2 text-[0.8125rem] text-white`,children:[(0,P.jsx)(ai,{className:`size-3.5 shrink-0`}),(0,P.jsx)(`span`,{className:`truncate`,children:n})]}):null]}),t?(0,P.jsxs)(`div`,{ref:l,className:`mt-1.5`,children:[i?(0,P.jsx)(`p`,{className:`mb-1.5 text-[0.8125rem] text-ink-3`,children:i}):null,(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 rounded-xl bg-card p-2 ring-1 ring-border-soft`,children:[(0,P.jsx)(ma,{type:f?`password`:`text`,autoComplete:`off`,value:u,placeholder:M(`ask.typeInto`),onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),g({type:`type`,text:u}).then(()=>d(``)))},autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,enterKeyHint:`send`,className:`h-9 min-w-[9rem] flex-1 basis-full text-[0.8125rem] sm:basis-0 coarse:h-11`}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>p(e=>!e),className:F(`h-9 shrink-0 rounded-md px-2.5 text-[0.75rem] coarse:h-11 coarse:px-3.5`,f?`bg-ember-veil text-ink`:`text-ink-3 hover:bg-paper-2`),children:M(`ask.hide`)}),(0,P.jsx)(qa,{label:`Enter`,onClick:()=>void g({type:`key`,key:`Enter`}),children:(0,P.jsx)(xr,{className:`size-4`})}),(0,P.jsx)(qa,{label:M(`ask.up`),onClick:()=>void g({type:`scroll`,dy:-500}),children:(0,P.jsx)(Zn,{className:`size-4`})}),(0,P.jsx)(qa,{label:M(`ask.down`),onClick:()=>void g({type:`scroll`,dy:500}),children:(0,P.jsx)(Gn,{className:`size-4`})})]}),m?(0,P.jsx)(`p`,{className:`mt-1.5 text-[0.8125rem] text-rose`,children:m}):null]}):null]})}function qa({label:e,onClick:t,children:n}){return(0,P.jsx)(`button`,{type:`button`,"aria-label":e,title:e,onClick:t,className:`flex size-9 shrink-0 items-center justify-center rounded-md text-ink-3 hover:bg-paper-2 hover:text-ink coarse:size-11`,children:n})}function Ja({runId:e,ask:t}){return t.kind===`confirm`?(0,P.jsx)(Ya,{runId:e,ask:t}):(0,P.jsx)(Xa,{runId:e,ask:t})}function Ya({runId:e,ask:t}){let[n,r]=(0,a.useState)(!1),[i,o]=(0,a.useState)(!1),[s,c]=(0,a.useState)(null),l=async n=>{o(!0),c(null);try{await La.post(`${L(e)}/ask/${t.id}`,n)}catch(e){c(e.message),o(!1)}},u=t.action.destructive?Li:di;return(0,P.jsxs)(`div`,{className:`animate-rise`,children:[(0,P.jsxs)(`div`,{className:`mb-5 flex items-start gap-3`,children:[(0,P.jsx)(`div`,{className:F(`flex size-10 shrink-0 items-center justify-center rounded-full`,t.action.destructive?`bg-rose-tint text-rose`:`bg-ember-tint text-ember-strong`),children:(0,P.jsx)(u,{className:`size-5`})}),(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`p`,{className:`text-[0.8125rem] text-ink-3`,children:M(`ask.wants`,{service:t.service})}),(0,P.jsx)(`h2`,{className:`font-display font-semibold text-[1.25rem] leading-snug tracking-tight`,children:t.reason})]})]}),(0,P.jsx)(`pre`,{className:`max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-xl bg-paper-2 p-4 text-[0.8125rem] leading-relaxed ring-1 ring-border-soft`,children:t.input}),(0,P.jsxs)(`div`,{className:`mt-5 flex items-center gap-4`,children:[(0,P.jsx)(xa,{checked:n,onChange:r,label:M(`ask.allowRest`)}),(0,P.jsx)(`span`,{className:`flex-1 text-[0.8125rem] text-ink-2`,children:M(`ask.allowRest`)})]}),s?(0,P.jsx)(`div`,{className:`mt-3 rounded-lg bg-rose-tint px-4 py-3 text-[0.875rem] text-rose`,children:s}):null,(0,P.jsxs)(`div`,{className:`action-bar mt-6 flex items-center justify-between gap-3`,children:[(0,P.jsx)(I,{variant:`ghost`,disabled:i,onClick:()=>void l({type:`skip`}),children:M(`ask.deny`)}),(0,P.jsx)(I,{busy:i,onClick:()=>void l({type:`done`,remember:n}),children:M(`ask.allow`)})]})]})}function Xa({runId:e,ask:t}){let[n,r]=(0,a.useState)({}),[i,o]=(0,a.useState)(!1),[s,c]=(0,a.useState)(!1),[l,u]=(0,a.useState)(null),d=async n=>{c(!0),u(null);try{await La.post(`${L(e)}/ask/${t.id}`,n)}catch(e){u(e.message),c(!1)}},f=t.fields.some(e=>n[e.id]);return(0,P.jsxs)(`div`,{className:`animate-rise`,children:[(0,P.jsxs)(`div`,{className:`mb-5 flex items-start gap-3`,children:[(0,P.jsx)(`div`,{className:`flex size-10 shrink-0 items-center justify-center rounded-full bg-ember-tint text-ember-strong`,children:(0,P.jsx)(Zr,{className:`size-5`})}),(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`h2`,{className:`font-display font-semibold text-[1.25rem] leading-snug tracking-tight`,children:t.reason}),(0,P.jsxs)(`p`,{className:`mt-0.5 truncate text-[0.8125rem] text-ink-3`,children:[t.site.host,t.site.title?` · ${t.site.title}`:``]})]})]}),(0,P.jsx)(Ka,{runId:e,driving:!0}),(0,P.jsx)(`p`,{className:`mt-2 text-[0.75rem] text-ink-4`,children:M(`ask.pictureHint`)}),t.fields.length?(0,P.jsxs)(`form`,{className:`mt-5 flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),d({type:`fill`,values:n,remember:i})},children:[t.fields.map((e,i)=>(0,P.jsxs)(`div`,{children:[(0,P.jsx)(Sa,{children:e.label}),(0,P.jsx)(ma,{autoFocus:i===0,type:e.secret?`password`:`text`,autoComplete:`off`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,enterKeyHint:i===t.fields.length-1?`go`:`next`,value:n[e.id]??``,onChange:t=>r(n=>({...n,[e.id]:t.target.value}))})]},e.id)),(0,P.jsx)(`button`,{type:`submit`,hidden:!0})]}):null,(0,P.jsxs)(`div`,{className:`mt-5 flex items-center justify-between gap-4`,children:[(0,P.jsx)(xa,{checked:i,onChange:o,label:M(`ask.remember`)}),(0,P.jsx)(`span`,{className:`flex-1 text-[0.8125rem] text-ink-2`,children:M(`ask.remember`)})]}),(0,P.jsxs)(`p`,{className:`mt-3 flex items-start gap-2 text-[0.8125rem] text-ink-3`,children:[(0,P.jsx)(Di,{className:`mt-0.5 size-4 shrink-0 text-moss`}),` `,M(`ask.private`)]}),l?(0,P.jsx)(`div`,{className:`mt-3 rounded-lg bg-rose-tint px-4 py-3 text-[0.875rem] text-rose`,children:l}):null,(0,P.jsxs)(`div`,{className:`action-bar mt-6 flex flex-wrap items-center justify-between gap-3`,children:[(0,P.jsx)(I,{variant:`ghost`,disabled:s,onClick:()=>void d({type:`skip`}),children:M(`ask.skip`)}),(0,P.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[t.fields.length?(0,P.jsx)(I,{variant:`secondary`,disabled:s,onClick:()=>void d({type:`done`,remember:i}),children:M(`ask.done`)}):null,t.fields.length?(0,P.jsx)(I,{busy:s,disabled:!f,onClick:()=>void d({type:`fill`,values:n,remember:i}),children:M(`ask.signIn`)}):(0,P.jsx)(I,{busy:s,onClick:()=>void d({type:`done`,remember:i}),children:M(`ask.done`)})]})]})]})}var Za=typeof window<`u`&&window.matchMedia?.(`(pointer: coarse)`).matches===!0,Qa=typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia;function $a(){(0,a.useEffect)(()=>{let e=window.visualViewport;if(!e)return;let t=document.documentElement,n=()=>{let n=e.scale>1.01?0:window.innerHeight-e.height-e.offsetTop,r=n>80;t.style.setProperty(`--kb`,r?`${Math.round(n)}px`:`0px`),t.classList.toggle(`keyboard-open`,r)};return n(),e.addEventListener(`resize`,n),e.addEventListener(`scroll`,n),()=>{e.removeEventListener(`resize`,n),e.removeEventListener(`scroll`,n),t.style.removeProperty(`--kb`),t.classList.remove(`keyboard-open`)}},[])}function eo(e){let[t,n]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(e&&Ba(`keepAwake`))return Ha(`keepAwake`,!0),n(!0),()=>{Ha(`keepAwake`,!1),n(!1)};if(!e||!(`wakeLock`in navigator))return;let t=null,r=!1,i=async()=>{if(!(r||t||document.visibilityState!==`visible`))try{let e=await navigator.wakeLock.request(`screen`);if(r){e.release().catch(()=>void 0);return}t=e,n(!0),e.addEventListener(`release`,()=>{t===e&&(t=null,n(!1))})}catch{}};return i(),document.addEventListener(`visibilitychange`,i),()=>{r=!0,document.removeEventListener(`visibilitychange`,i),t?.release().catch(()=>void 0),t=null,n(!1)}},[e]),t}var to=`wz.notify`,no=new Set,ro=null;function io(){try{return localStorage.getItem(to)===`1`}catch{return!1}}function ao(e){try{e?localStorage.setItem(to,`1`):localStorage.removeItem(to)}catch{}for(let e of no)e()}var oo=typeof window<`u`&&`Notification`in window,so=null;function co(){return io()?Ba(`notify`)?so===!1?`quiet`:`on`:oo&&Notification.permission===`granted`?`on`:`quiet`:`off`}function lo(){return(0,a.useSyncExternalStore)(e=>(no.add(e),()=>no.delete(e)),co,()=>`off`)}function uo(){return Ba(`notify`)?so===!1:oo&&Notification.permission===`denied`}async function fo(){if(ao(!0),Ba(`notify`)){so=!Ba(`notifyPermission`)||await Va(`notifyPermission`).catch(()=>!1);for(let e of no)e();return co()}try{ro??=new AudioContext,ro.resume()}catch{ro=null}if(oo&&Notification.permission==="default")try{await Notification.requestPermission()}catch{}if(oo&&Notification.permission===`granted`){let e=Ia().serviceWorker;e&&await navigator.serviceWorker?.register(e).catch(()=>void 0)}for(let e of no)e();return co()}function po(){ao(!1)}function mo(){let e=ro;if(e?.state!==`running`)return;let t=e.currentTime;for(let[n,r]of[660,880].entries()){let i=e.createOscillator(),a=e.createGain();i.frequency.value=r,a.gain.setValueAtTime(0,t+n*.16),a.gain.linearRampToValueAtTime(.18,t+n*.16+.02),a.gain.exponentialRampToValueAtTime(.001,t+n*.16+.32),i.connect(a).connect(e.destination),i.start(t+n*.16),i.stop(t+n*.16+.34)}}async function ho(e){if(!io())return;if(Ba(`notify`)){Ha(`notify`,e);return}if(document.visibilityState===`visible`){mo(),navigator.vibrate?.([120,60,120]);return}if(!oo||Notification.permission!==`granted`)return;let t={body:e.body,tag:e.tag,icon:za(`icons/icon-192.png`),badge:za(`icons/icon-192.png`),data:{url:location.href}};try{let n=await navigator.serviceWorker?.getRegistration();if(n?.active){await n.showNotification(e.title,t);return}}catch{}try{new Notification(e.title,t)}catch{}}function go(){if(typeof navigator>`u`||!navigator.canShare)return!1;try{return navigator.canShare({files:[new File([`x`],`x.pdf`,{type:`application/pdf`})]})}catch{return!1}}async function _o(e,t=2400){if(!/^image\/(jpeg|png|webp)$/.test(e.type)||e.size<12e5)return e;try{let n=await createImageBitmap(e),r=Math.min(1,t/Math.max(n.width,n.height)),i=document.createElement(`canvas`);i.width=Math.round(n.width*r),i.height=Math.round(n.height*r),i.getContext(`2d`)?.drawImage(n,0,0,i.width,i.height);let a=await new Promise(e=>i.toBlob(e,`image/jpeg`,.86));return a&&a.size<e.size?new File([a],`${e.name.replace(/\.[^.]+$/,``)}.jpg`,{type:`image/jpeg`}):e}catch{return e}}function vo(){return new Date().toISOString().slice(0,19).replace(/[:T]/g,`-`)}function yo(e){let t=e?.name;return t===`NotFoundError`||t===`OverconstrainedError`?`missing`:t===`NotReadableError`||t===`AbortError`?`busy`:`denied`}function bo(e){return!!e?.getCapabilities?.()?.torch}function xo(e,t,n=!1){let r=(0,a.useRef)(null),[i,o]=(0,a.useState)(null),[s,c]=(0,a.useState)(null),[l,u]=(0,a.useState)(1),[d,f]=(0,a.useState)(!1),[p,m]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(!e)return;let r=null,i=!1;c(null),o(null),f(!1),m(!1);let a={facingMode:{ideal:t},width:{ideal:2560},height:{ideal:1440}};return(async()=>{if(!navigator.mediaDevices?.getUserMedia)throw new DOMException(`no camera api`,`NotAllowedError`);try{r=await navigator.mediaDevices.getUserMedia({video:a,audio:n})}catch(e){if(!n)throw e;r=await navigator.mediaDevices.getUserMedia({video:a})}if(i){for(let e of r.getTracks())e.stop();return}o(r);let e=r.getVideoTracks()[0],t=()=>!i&&f(bo(e));t(),setTimeout(t,600);let s=await navigator.mediaDevices.enumerateDevices().catch(()=>[]);i||u(s.filter(e=>e.kind===`videoinput`).length)})().catch(e=>!i&&c(yo(e))),()=>{i=!0;for(let e of r?.getTracks()??[])e.stop()}},[e,t,n]),(0,a.useEffect)(()=>{r.current&&i&&(r.current.srcObject=i)},[i]),{video:r,stream:i,error:s,cameras:l,torchable:d,torch:p,setTorch:async e=>{let t=i?.getVideoTracks()[0];try{await t?.applyConstraints({advanced:[{torch:e}]}),m(e)}catch{f(!1)}},mirrored:i?.getVideoTracks()[0]?.getSettings().facingMode===`user`}}function So({open:e,onClose:t,label:n,children:r}){let i=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let t=i.current;t&&(e&&!t.open?t.showModal():!e&&t.open&&t.close())},[e]),(0,P.jsx)(`dialog`,{ref:i,onClose:t,"aria-label":n,className:`media-sheet`,children:e?(0,P.jsx)(`div`,{className:`flex h-full flex-col`,children:r}):null})}function Co({label:e,onClick:t,active:n,children:r}){return(0,P.jsx)(`button`,{type:`button`,"aria-label":e,title:e,"aria-pressed":n,onClick:t,className:F(`flex size-11 shrink-0 items-center justify-center rounded-full transition`,n?`bg-white text-black`:`bg-white/12 text-white hover:bg-white/20`),children:r})}function wo({title:e,onClose:t,camera:n,onFlip:r}){return(0,P.jsx)(`div`,{className:`safe-top`,children:(0,P.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2`,children:[(0,P.jsx)(Co,{label:M(`common.close`),onClick:t,children:(0,P.jsx)(Ui,{className:`size-5`})}),(0,P.jsx)(`div`,{className:`min-w-0 flex-1 truncate text-center font-medium text-[0.9375rem]`,children:e}),n.torchable?(0,P.jsx)(Co,{label:M(`camera.torch`),active:n.torch,onClick:()=>void n.setTorch(!n.torch),children:n.torch?(0,P.jsx)(zr,{className:`size-5`}):(0,P.jsx)(Lr,{className:`size-5`})}):null,n.stream&&(n.cameras>1||Za)?(0,P.jsx)(Co,{label:M(`camera.flip`),onClick:r,children:(0,P.jsx)(Ni,{className:`size-5`})}):(0,P.jsx)(`span`,{className:`size-11`})]})})}function To({camera:e,asking:t,children:n,actions:r}){return(0,P.jsxs)(`div`,{className:`relative min-h-0 flex-1 overflow-hidden`,children:[(0,P.jsx)(`video`,{ref:e.video,autoPlay:!0,playsInline:!0,muted:!0,className:F(`absolute inset-0 size-full object-contain`,e.mirrored&&`-scale-x-100`)}),e.error?(0,P.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-5 bg-black px-8 text-center`,children:[(0,P.jsx)(`p`,{className:`max-w-sm text-[0.9375rem] text-white/85 leading-relaxed`,children:M(`camera.${e.error}`)}),r]}):e.stream?n:(0,P.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-4 px-8 text-center text-white/75`,children:[(0,P.jsx)(Ca,{}),(0,P.jsx)(`p`,{className:`max-w-xs text-[0.875rem] leading-relaxed`,children:t})]})]})}var Eo=30;function Do(){if(typeof MediaRecorder<`u`)return[`video/mp4;codecs=avc1.42E01E,mp4a.40.2`,`video/mp4`,`video/webm;codecs=vp9,opus`,`video/webm;codecs=vp8,opus`,`video/webm`].find(e=>MediaRecorder.isTypeSupported(e))}var Oo=!!Do();function ko({open:e,multiple:t,video:n,onClose:r,onCapture:i,onNative:o}){let[s,c]=(0,a.useState)(`environment`),[l,u]=(0,a.useState)(`photo`),[d,f]=(0,a.useState)(0),[p,m]=(0,a.useState)(!1),[h,g]=(0,a.useState)(null),_=(0,a.useRef)(null),v=xo(e,s,l===`video`);(0,a.useEffect)(()=>{e&&(f(0),u(`photo`),g(null))},[e]);let y=async e=>{m(!0);try{await i(e),f(e=>e+1),t||r()}finally{m(!1)}},b=async()=>{let e=v.video.current;if(!e?.videoWidth)return;let t=document.createElement(`canvas`);t.width=e.videoWidth,t.height=e.videoHeight,t.getContext(`2d`)?.drawImage(e,0,0);let n=await new Promise(e=>t.toBlob(e,`image/jpeg`,.9));n&&await y(new File([n],`foto-${vo()}.jpg`,{type:`image/jpeg`}))},x=()=>{_.current?.state===`recording`&&_.current.stop()},S=()=>{let e=Do();if(!v.stream||!e)return;let t=[],n=new MediaRecorder(v.stream,{mimeType:e,videoBitsPerSecond:25e5,audioBitsPerSecond:96e3});n.ondataavailable=e=>e.data.size&&t.push(e.data),n.onstop=()=>{g(null),_.current=null;let n=e.split(`;`)[0];if(t.length){let e=n===`video/mp4`?`mp4`:`webm`;y(new File(t,`video-${vo()}.${e}`,{type:n}))}},_.current=n,n.start(1e3),g(0)};(0,a.useEffect)(()=>{if(h===null)return;if(h>=Eo){_.current?.state===`recording`&&_.current.stop();return}let e=setTimeout(()=>g(e=>e===null?null:e+1),1e3);return()=>clearTimeout(e)},[h]),(0,a.useEffect)(()=>{!e&&_.current&&(_.current.onstop=null,_.current.stop(),_.current=null)},[e]);let C=e=>`0:${String(e).padStart(2,`0`)}`;return(0,P.jsxs)(So,{open:e,onClose:r,label:M(`camera.title`),children:[(0,P.jsx)(wo,{title:h===null?d?M(`camera.taken`,{n:d}):M(`camera.title`):`${C(h)} / ${C(Eo)}`,onClose:r,camera:v,onFlip:()=>c(e=>e===`environment`?`user`:`environment`)}),(0,P.jsx)(To,{camera:v,asking:M(`camera.asking`),actions:(0,P.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[o?(0,P.jsxs)(Ao,{onClick:()=>{r(),o()},children:[(0,P.jsx)(sr,{className:`size-4`}),` `,M(Za?`camera.native`:`camera.pick`)]}):null,(0,P.jsx)(Ao,{quiet:!0,onClick:r,children:M(`common.close`)})]})}),(0,P.jsxs)(`div`,{className:F(`safe-bottom px-4 pt-3`,v.error&&`invisible`),children:[n&&Oo&&h===null?(0,P.jsx)(`div`,{className:`mb-3 flex justify-center gap-1 text-[0.8125rem]`,children:[`photo`,`video`].map(e=>(0,P.jsx)(`button`,{type:`button`,"aria-pressed":l===e,onClick:()=>u(e),className:F(`h-9 rounded-full px-4 font-medium transition`,l===e?`bg-white text-black`:`text-white/70 hover:text-white`),children:M(e===`photo`?`camera.photo`:`camera.video`)},e))}):null,(0,P.jsxs)(`div`,{className:`grid grid-cols-[1fr_auto_1fr] items-center gap-3`,children:[(0,P.jsx)(`span`,{className:`text-[0.8125rem] text-white/70 leading-snug`,children:h===null?l===`video`?M(`camera.clipHint`,{s:Eo}):M(t?`camera.hintMany`:`camera.hint`):M(`camera.recording`)}),(0,P.jsx)(`button`,{type:`button`,"aria-label":M(l===`photo`?`camera.shoot`:h===null?`camera.record`:`camera.stop`),disabled:!v.stream||p,onClick:()=>l===`photo`?void b():h===null?S():x(),className:`flex size-[72px] items-center justify-center rounded-full border-4 border-white transition active:scale-95 disabled:opacity-40`,children:p?(0,P.jsx)(Ca,{className:`text-white`}):l===`photo`?(0,P.jsx)(`span`,{className:`size-[54px] rounded-full bg-white`}):h===null?(0,P.jsx)(`span`,{className:`flex size-[54px] items-center justify-center rounded-full bg-[#e5484d]`,children:(0,P.jsx)(Vi,{className:`size-6 text-white`})}):(0,P.jsx)(`span`,{className:`size-7 rounded-md bg-[#e5484d]`})}),(0,P.jsx)(`div`,{className:`flex justify-end`,children:t&&d&&h===null?(0,P.jsxs)(Ao,{onClick:r,children:[(0,P.jsx)(lr,{className:`size-4`}),` `,M(`camera.done`)]}):null})]})]})]})}function Ao({onClick:e,quiet:t,children:n}){return(0,P.jsx)(`button`,{type:`button`,onClick:e,className:F(`inline-flex h-11 items-center justify-center gap-2 rounded-full px-5 font-medium text-[0.875rem] transition`,t?`text-white/75 hover:text-white`:`bg-white text-black hover:bg-white/90`),children:n})}function jo(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function Mo(e,t=`|`){return e.map(e=>is(e)).join(t)}function No(e,t){return typeof t==`bigint`?t.toString():t}var Po=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function Fo(e){return new Po(e)}function Io(e){return e==null}function Lo(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function Ro(e,t){let n=e/t,r=Math.round(n),i=4*2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}function zo(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function Bo(e){let t=Object.getOwnPropertyDescriptor(e,`shape`);return t?.get?t.get.raw:t?.value}function Vo(e){return Bo(e._zod.def)??e._zod.def.shape}function Ho(e,t,n){Object.defineProperty(e,t,{get(){let e=n();return zo(this,t,e),e},enumerable:!0,configurable:!0})}function Uo(e,t,n){t in e?zo(e,t,n):e[t]=n}function Wo(e,t,n,r){let i=Vo(t);for(let a of n){let n=Object.getOwnPropertyDescriptor(i,a);n.enumerable&&(n.get?Ho(e,a,()=>{let e=t._zod.def.shape[a];return r?r(e,a):e}):Uo(e,a,r?r(n.value,a):n.value))}}function Go(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?Ho(e,n,()=>t[n]):Uo(e,n,r.value))}}function Ko(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function qo(e){return JSON.stringify(e)}function Jo(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var Yo=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function Xo(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Zo=Fo(()=>{if(Ks.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function Qo(e){if(Xo(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return Xo(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function $o(e){return Qo(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var es=new Set([`string`,`number`,`symbol`]),ts=new Set([`string`,`number`,`bigint`,`boolean`,`symbol`,`undefined`]);function ns(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function rs(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function R(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function is(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function as(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var os={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},ss={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function cs(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return Wo(i,e,ls(e,t)),rs(e,Ko(n,{shape:i,checks:[]}))}function ls(e,t){let n=Vo(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function us(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set(ls(e,t)),a={};return Wo(a,e,Reflect.ownKeys(Vo(e)).filter(e=>!i.has(e))),rs(e,Ko(n,{shape:a,checks:[]}))}function ds(e,t){if(!Qo(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=Vo(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return rs(e,Ko(e._zod.def,{shape:fs(e,t)}))}function fs(e,t){let n={};return Wo(n,e,Reflect.ownKeys(Vo(e))),Go(n,t),n}function ps(e,t){if(!Qo(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return rs(e,Ko(e._zod.def,{shape:fs(e,t)}))}function ms(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return Wo(n,e,Reflect.ownKeys(Vo(e))),Wo(n,t,Reflect.ownKeys(Vo(t))),rs(e,Ko(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function hs(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set(ls(t,n)):void 0,o={};return Wo(o,t,Reflect.ownKeys(Vo(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),rs(t,Ko(t._zod.def,{shape:o,checks:[]}))}function gs(e,t,n){let r=n?new Set(ls(t,n)):void 0,i={};return Wo(i,t,Reflect.ownKeys(Vo(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),rs(t,Ko(t._zod.def,{shape:i}))}function _s(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function vs(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function ys(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function bs(e){return typeof e==`string`?e:e?.message}function xs(e,t,n){var r;for(let i=t;i<e.length;i++)(r=e[i]).schema??(r.schema=n)}function Ss(e,t,n){var r;let i=e.inst?._zod?.traits;i?.has(`$ZodType`)&&(i.has(`$ZodCheck`)?(r=e).schema??(r.schema=e.inst):e.schema=e.inst);let a=e.schema===e.inst?void 0:e.schema?._zod.def?.error,o=e.message?e.message:bs(e.inst?._zod.def?.error?.(e))??bs(a?.(e))??bs(t?.error?.(e))??bs(n.customError?.(e))??bs(n.localeError?.(e))??`Invalid input`,s={};for(let t of Object.keys(e))t!==`inst`&&t!==`schema`&&t!==`continue`&&t!==`input`&&t!==`__proto__`&&(s[t]=e[t]);return s.path??=[],s.message=o,t?.reportInput&&(s.input=e.input),s}var Cs=/[\uD800-\uDBFF]/;function ws(e){let t=e.length;if(!Cs.test(e))return t;let n=t;for(let r=0;r<t-1;r++)(e.charCodeAt(r)&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320&&(n--,r++);return n}function Ts(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Es(e){let t=typeof e;switch(t){case`number`:return Number.isNaN(e)?`nan`:`number`;case`object`:{if(e===null)return`null`;if(Array.isArray(e))return`array`;let t=e;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&`constructor`in t&&t.constructor)return t.constructor.name}}return t}function Ds(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}function Os(e,t){for(let n in t){let r=Object.getOwnPropertyDescriptor(t,n);r.get?Object.defineProperty(e,n,{...r,enumerable:!1}):Ms(e,n,r.value)}}function ks(e,t,n,r=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:r,value:n}),n}function As(e,t,n){return ks(e,t,n,!1)}function js(e,t){for(let n in e){let r=e[n];Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get(){return ks(this,n,r(this))},set(e){ks(this,n,e)}})}return t}function Ms(e,t,n){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?n:ks(this,t,n.bind(this))},set(e){ks(this,t,e)}})}function Ns(e,t){let n=Object.getPrototypeOf(e);return t in n?void 0:n}var Ps,Fs=!1,Is={configurable:!0,get(){Fs=!0}};function z(e,t,n){let r=Object.getPrototypeOf(e._zod);if(t in r&&Ps!==e._zod){Ps=void 0;return}Ps=e._zod,Object.defineProperty(r,t,{configurable:!0,get(){Object.defineProperty(this,t,Is);let e=Fs;Fs=!1;try{let r=n(this);return Fs?delete this[t]:Object.defineProperty(this,t,{configurable:!0,writable:!0,value:r}),Fs||=e,r}catch(n){throw delete this[t],Fs||=e,n}},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})}function Ls(e,t,n,r){let i=Ns(e,t);i&&Object.defineProperty(i,t,{configurable:!0,get(){let e={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,t,e),e.value=n(this),Object.defineProperty(this,t,e),e.value},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:r,value:e})}})}var Rs=`~constantCatch`;function zs(e){let t=()=>e;return t[Rs]=!0,t}var Bs,Vs={value:void 0,enumerable:!1},Hs=`captureStackTrace`in Error?Error:null;function Us(e){let t=Hs;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return Hs=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function B(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){Vs.value=new a(r);try{Object.defineProperty(n,"_zod",Vs)}finally{Vs.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),Os(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?Us(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var Ws=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},Gs=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Bs=globalThis).__zod_globalConfig??(Bs.__zod_globalConfig={});var Ks=globalThis.__zod_globalConfig;function qs(e){return e&&Object.assign(Ks,e),Ks}function Js(){let e=this._zod;return e.message??=JSON.stringify(e.def,No,2),e.message}function Ys(e){this._zod.message=e}var Xs={get:Js,set:Ys,enumerable:!0,configurable:!0},Zs={value:void 0,enumerable:!1},Qs=new WeakSet([Object.prototype,Error.prototype]),$s=(e,t)=>{e.name=`$ZodError`,Zs.value=t,Object.defineProperty(e,"issues",Zs),Zs.value=void 0,Object.defineProperty(e,"message",Xs);let n=Object.getPrototypeOf(e);Qs.has(n)||(Qs.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},ec=B(`$ZodError`,$s);B(`$ZodError`,$s,void 0,{Parent:Error});function tc(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function nc(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?tc(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function rc(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i],o=i===e.length-1;if(n===`_errors`){o&&r._errors.push(t(a)),i++;continue}Object.prototype.hasOwnProperty.call(r,n)||Object.defineProperty(r,n,{value:{_errors:[]},enumerable:!0,writable:!0,configurable:!0});let s=r[n];o&&s._errors.push(t(a)),r=s,i++}}}};return r(e),n}function ic(e,t){return{callee:t?.callee??e,Err:t?.Err}}var ac=e=>{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new Ws;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>Ss(e,o,qs())));throw Yo(n,a?.callee??t),n}return s.value};return t},oc=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>Ss(e,o,qs())));throw Yo(n,a?.callee??t),n}return s.value};return t},sc=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new Ws;return a.issues.length?cc(e,a.issues,i):{success:!0,data:a.value}};function cc(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>Ss(e,n,qs()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var lc=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?cc(e,a.issues,i):{success:!0,data:a.value}},uc=Symbol.for(`zod.compile.invalid`),dc=Symbol.for(`zod.compile.fallback`),fc=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==uc)return!0;if(r.definite===!0&&n===void 0)return!1}return pc(e,t,n)});function pc(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[dc]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new Ws;return a.issues.length===0}var mc=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},hc=e=>{let t=ac(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,ic(n,a))};return n},gc=e=>{let t=ac(e),n=(e,r,i,a)=>t(e,r,i,ic(n,a));return n},_c=e=>{let t=oc(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,ic(n,a))};return n},vc=e=>{let t=oc(e),n=async(e,r,i,a)=>await t(e,r,i,ic(n,a));return n},yc=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return sc(e)(t,n,i)},bc=e=>(t,n,r)=>sc(e)(t,n,r),xc=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return lc(e)(t,n,i)},Sc=e=>async(t,n,r)=>lc(e)(t,n,r),Cc=/^[cC][0-9a-z]{6,}$/,wc=/^[0-9a-z]+$/,Tc=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,Ec=/^[0-9a-vA-V]{20}$/,Dc=/^[A-Za-z0-9]{27}$/,Oc=/^[a-zA-Z0-9_-]{21}$/;function kc(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var Ac=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,jc=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Mc=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Nc=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Pc=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function Fc(){return new RegExp(Pc,`u`)}var Ic=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Lc=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Rc=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,zc=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Bc=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Vc=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,Hc=/^https?$/,Uc=/^\+[1-9]\d{6,14}$/,Wc=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function Gc(e){return RegExp(`^${e}$`)}var Kc=Gc(Wc);function qc(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Jc(e){return RegExp(`^${qc(e)}$`)}function Yc(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${qc({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${qc({precision:e.precision})}`:n;return RegExp(`^${Wc}T(?:${r})$`)}var Xc=/^[\s\S]{0,}$/,Zc=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},Qc=/^-?\d+$/,$c=/^-?\d+(?:\.\d+)?$/,el=/^(?:true|false)$/i,tl=/^[^A-Z]*$/,nl=/^[^a-z]*$/,rl=B(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),il=e=>{let t=e.value;return!Io(t)&&t.length!==void 0},al={number:`number`,bigint:`bigint`,object:`date`},ol=B(`$ZodCheckLessThan`,(e,t)=>{rl.init(e,t);let n=al[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:al[typeof r.value]??n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),sl=B(`$ZodCheckGreaterThan`,(e,t)=>{rl.init(e,t);let n=al[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:al[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),cl=B(`$ZodCheckMultipleOf`,(e,t)=>{rl.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):Ro(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),ll=B(`$ZodCheckNumberFormat`,(e,t)=>{rl.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=os[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),ul=B(`$ZodCheckMaxLength`,(e,t)=>{var n;rl.init(e,t),(n=e._zod.def).when??(n.when=il),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?ws(r):i)<=t.maximum)return;let a=Ts(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),dl=B(`$ZodCheckMinLength`,(e,t)=>{var n;rl.init(e,t),(n=e._zod.def).when??(n.when=il),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i<t.minimum*2?ws(r):i)>=t.minimum)return;let a=Ts(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),fl=B(`$ZodCheckLengthEquals`,(e,t)=>{var n;rl.init(e,t),(n=e._zod.def).when??(n.when=il),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?ws(r):i;if(a===t.length)return;let o=Ts(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),pl=B(`$ZodCheckStringFormat`,(e,t)=>{var n,r;rl.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),ml=B(`$ZodCheckRegex`,(e,t)=>{pl.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),hl=B(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=tl,pl.init(e,t)}),gl=B(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=nl,pl.init(e,t)}),_l=B(`$ZodCheckIncludes`,(e,t)=>{rl.init(e,t);let n=ns(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),vl=B(`$ZodCheckStartsWith`,(e,t)=>{rl.init(e,t);let n=RegExp(`^${ns(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),yl=B(`$ZodCheckEndsWith`,(e,t)=>{rl.init(e,t);let n=RegExp(`.*${ns(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),bl=B(`$ZodCheckOverwrite`,(e,t)=>{rl.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),xl=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
5
5
|
`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(`
|
|
6
6
|
`)}\n};`)(...Object.values(this.closed))}},Sl={major:4,minor:6,patch:5},V=B(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Sl;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=_s(t),a;for(let o of n){if(o._zod.def.when){if(vs(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new Ws;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(xs(t.issues,n,e),i||=_s(t,n))});else{if(t.issues.length===n)continue;xs(t.issues,n,e),i||=_s(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(_s(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new Ws;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new Ws;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return As(this,`~standard`,Tl(this))},set"~standard"(e){ks(this,`~standard`,e)}}),Cl=(e,t)=>e.issues.length?{issues:e.issues.map(e=>Ss(e,t,qs()))}:{value:e.value};async function wl(e,t){let n={async:!0};return Cl(await e._zod.run({value:t,issues:[]},n),n)}function Tl(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return Cl(r,n)}catch{}return wl(e,t)},vendor:`zod`,version:1}}var El=B(`$ZodString`,(e,t)=>{V.init(e,t),e._zod.pattern=t.pattern??Xc,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),H=B(`$ZodStringFormat`,(e,t)=>{pl.init(e,t),El.init(e,t)}),Dl=B(`$ZodGUID`,(e,t)=>{t.pattern??=jc,H.init(e,t)}),Ol=B(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=Mc(e)}else t.pattern??=Mc();H.init(e,t)}),kl=B(`$ZodEmail`,(e,t)=>{t.pattern??=Nc,H.init(e,t)});function Al(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function jl(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?Al(e)||2:Ml(e,t)}function Ml(e,t){if(!t.normalize&&t.protocol?.source===Hc.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var Nl=/[\t\n\r]/g;function Pl(e){return e.replace(Nl,``)}function Fl(e,t){return t.lastIndex=0,t.test(e.hostname)}function Il(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var Ll=B(`$ZodURL`,(e,t)=>{H.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=jl(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=Pl(r);return}t.hostname&&!Fl(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!Il(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:Pl(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),Rl=B(`$ZodEmoji`,(e,t)=>{t.pattern??=Fc(),H.init(e,t)}),zl=B(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?Oc:kc(t.length),H.init(e,t)}),Bl=B(`$ZodCUID`,(e,t)=>{t.pattern??=Cc,H.init(e,t)}),Vl=B(`$ZodCUID2`,(e,t)=>{t.pattern??=wc,H.init(e,t)}),Hl=B(`$ZodULID`,(e,t)=>{t.pattern??=Tc,H.init(e,t)}),Ul=B(`$ZodXID`,(e,t)=>{t.pattern??=Ec,H.init(e,t)}),Wl=B(`$ZodKSUID`,(e,t)=>{t.pattern??=Dc,H.init(e,t)}),Gl=B(`$ZodISODateTime`,(e,t)=>{t.pattern??=Yc(t),H.init(e,t)}),Kl=B(`$ZodISODate`,(e,t)=>{t.pattern??=Kc,H.init(e,t)}),ql=B(`$ZodISOTime`,(e,t)=>{t.pattern??=Jc(t),H.init(e,t)}),Jl=B(`$ZodISODuration`,(e,t)=>{t.pattern??=Ac,H.init(e,t)}),Yl=B(`$ZodIPv4`,(e,t)=>{t.pattern??=Ic,H.init(e,t)}),Xl=/^[0-9a-fA-F:.]+$/;function Zl(e){return Xl.test(e)?Al(`http://[${e}]`):!1}var Ql=B(`$ZodIPv6`,(e,t)=>{t.pattern??=Lc,H.init(e,t),e._zod.check=n=>{Zl(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),$l=B(`$ZodCIDRv4`,(e,t)=>{t.pattern??=Rc,H.init(e,t)});function eu(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:Zl(n)}var tu=B(`$ZodCIDRv6`,(e,t)=>{t.pattern??=zc,H.init(e,t),e._zod.check=n=>{eu(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function nu(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var ru=/^[0-9a-zA-Z+/]*={0,2}$/,iu=B(`$ZodBase64`,(e,t)=>{t.pattern??=ru,H.init(e,t),e._zod.check=n=>{nu(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),au=/^[A-Za-z0-9_-]*$/;function ou(e){if(!au.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return nu(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var su=B(`$ZodBase64URL`,(e,t)=>{t.pattern??=au,H.init(e,t),e._zod.check=n=>{ou(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),cu=B(`$ZodE164`,(e,t)=>{t.pattern??=Uc,H.init(e,t)});function lu(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var uu=B(`$ZodJWT`,(e,t)=>{H.init(e,t),e._zod.check=n=>{lu(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),du=B(`$ZodNumber`,(e,t)=>{V.init(e,t),e._zod.pattern=$c,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:String(i):void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),fu=B(`$ZodNumberFormat`,(e,t)=>{ll.init(e,t),du.init(e,t)}),pu=B(`$ZodBoolean`,(e,t)=>{V.init(e,t),e._zod.pattern=el,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),mu=B(`$ZodUnknown`,(e,t)=>{V.init(e,t),e._zod.parse=e=>e}),hu=B(`$ZodNever`,(e,t)=>{V.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function gu(e,t,n){e.issues.length&&t.issues.push(...ys(n,e.issues)),t.value[n]=e.value}var _u=B(`$ZodArray`,(e,t)=>{V.init(e,t);let n=Ks.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;e<a.length;e++){let n=a[e],c=t.element._zod.run({value:n,issues:[]},i);if(c instanceof Promise)o.push(c.then(t=>gu(t,r,e)));else if(gu(c,r,e),s&&c.issues.length!==0&&_s(c))break}return o.length?Promise.all(o).then(()=>r):r}});function vu(e,t,n,r,i,a){let o=n in r,s=a===`optional`;if(o||!s||i!==`optional`){if(e.issues.length){if(i!==void 0&&s&&!o)return;t.issues.push(...ys(n,e.issues))}if(!o&&i===void 0){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?(o||i===`defaulted`&&!s)&&(t.value[n]=void 0):t.value[n]=e.value}}var yu=[];function bu(e){let t=Object.keys(e.shape),n=Object.getOwnPropertySymbols(e.shape),r=n.length?n:yu,i=r.length?[...t,...r]:t;for(let t of i)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let a=as(e.shape);return{...e,allKeys:i,symbolKeys:r,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(a)}}function xu(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(_s(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>vu(e,n,i,t,d,f))):vu(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var Su=B(`$ZodObject`,(e,t)=>{V.init(e,t);let n=Object.getOwnPropertyDescriptor(t,`shape`),r=n?.get?n.get.raw:t.shape??{};if(r){let e=()=>{let n={...r};return Object.defineProperty(t,"shape",{value:n}),e.raw=n,n};e.raw=r,Object.defineProperty(t,"shape",{get:e})}let i=Fo(()=>bu(t));z(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||zo(n,e,new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let a=Xo,o=t.catchall,s,c=Ks.memoizer;c?.attach(e),e._zod.parse=(t,n)=>{s??=i.value;let r=t.value;if(!a(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=c?c.alloc(e,t,{},n):{};let l=[],u=s.shape,d=n?.abortEarly,f=t.issues.length;for(let e of s.allKeys){if(d&&t.issues.length!==f){if(_s(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let i=u[e],a=i._zod.optin,o=i._zod.optout,s=i._zod.run({value:r[e],issues:[]},n);s instanceof Promise?l.push(s.then(n=>vu(n,t,e,r,a,o))):vu(s,t,e,r,a,o)}return o?xu(l,r,t,n,i.value,e,d===!0):l.length?Promise.all(l).then(()=>t):t}}),Cu=B(`$ZodObjectJIT`,(e,t)=>{Su.init(e,t);let n=e._zod.parse,r=Fo(()=>bu(t)),i=Ks.memoizer,a=t=>{let n=r.value,a=n.symbolKeys,o=new xl([`payload`,`ctx`],{shape:t,inst:e,memo:i,syms:a}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>`
|
|
7
7
|
let ${e}_ab = false;
|