PageSourceSearch

https://snailer.ai/static/js/415.81bb8acc.chunk.js

js snailer.ai collected 2026-10-05 14:40:27 UTC 282,327 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkgrpc_web_client=self.webpackChunkgrpc_web_client||[]).push([[415],{7(e,t,n){n.d(t,{A:()=>c});var i=n(9950),r=n(398),o=n(8797),a=n(4629),s=n(4414);function c(e){let{model:t,access:n,task:c,c:l,admin:d=!1,billing:u=!1}=e;const p=(0,r.v)(l),[h,m]=(0,i.useState)([]),[g,v]=(0,i.useState)(null),[f,x]=(0,i.useState)(""),[b,y]=(0,i.useState)("7"),[_,w]=(0,i.useState)(null),[E,N]=(0,i.useState)(!1),[S,A]=(0,i.useState)(0),T=d?"/admin/operations":u?"/billing/operations":"/projects/".concat((0,o.a)(t.id),"/operations"),I="".concat(T,"?days=").concat(b,"&status=").concat((0,o.a)(f)),k=(0,i.useRef)(0);(0,i.useEffect)(()=>{let e=!0;const t=++k.current;if(n)return m([]),v(null),w(null),N(!0),n.api.get(I).then(t=>{if(!Array.isArray(t.items))throw new o.zE("INVALID_RESPONSE");e&&(m(t.items),v(t.next_cursor||null))}).catch(t=>{e&&w(t.code||"unknown")}).finally(()=>{e&&N(!1)}),()=>{e=!1,k.current=t+1}},[n,I,S]);return(0,s.jsxs)("section",{className:"uxf-page uxf-activity",children:[(0,s.jsx)("h2",{children:p.operations}),(0,s.jsx)("p",{className:"uxf-muted",children:p.operationNote}),(0,s.jsxs)("div",{className:"uxf-filter-row",children:[(0,s.jsxs)("label",{className:"uxf-field",children:[p.period,(0,s.jsxs)("select",{value:b,onChange:e=>y(e.target.value),children:[(0,s.jsx)("option",{value:"7",children:p.last7}),(0,s.jsx)("option",{value:"30",children:p.last30})]})]}),(0,s.jsxs)("label",{className:"uxf-field",children:[p.status,(0,s.jsxs)("select",{value:f,onChange:e=>x(e.target.value),children:[(0,s.jsx)("option",{value:"",children:p.all}),Object.entries(l.operationStates).map(e=>{let[t,n]=e;return(0,s.jsx)("option",{value:t,children:n},t)})]})]}),n&&(0,s.jsx)("button",{className:"uxf-button",disabled:E,onClick:()=>A(e=>e+1),children:p.refresh})]}),(0,s.jsx)(a.Pf,{error:_,c:l}),E&&(0,s.jsx)("p",{role:"status",children:l.busy}),(0,s.jsx)("div",{className:"uxf-table-wrap",children:(0,s.jsxs)("table",{className:"uxf-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:p.operations}),(0,s.jsx)("th",{children:p.status}),d&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("th",{children:l.reserved}),(0,s.jsx)("th",{children:l.charged}),(0,s.jsx)("th",{children:p.costs})]}),c&&(0,s.jsx)("th",{children:p.open})]})}),(0,s.jsx)("tbody",{children:h.map(e=>{var t,n,i;return(0,s.jsxs)("tr",{children:[(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:e.id}),(0,s.jsxs)("small",{children:[e.type," \xb7 ",new Date(e.created_at).toLocaleString()]}),e.error_code&&(0,s.jsx)("small",{children:e.error_code})]}),(0,s.jsxs)("td",{children:[l.operationStates[e.status]||e.status,(0,s.jsx)("small",{children:null===(t=e.billing)||void 0===t?void 0:t.settlement_status}),e.external_result_pending&&(0,s.jsx)("small",{children:l.errors.EXTERNAL_RESULT_UNKNOWN})]}),d&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("td",{children:(0,o.I6)(null===(n=e.billing)||void 0===n?void 0:n.reserved_micros)}),(0,s.jsx)("td",{children:(0,o.I6)(null===(i=e.billing)||void 0===i?void 0:i.charged_micros)}),(0,s.jsx)("td",{children:(0,o.I6)(e.provider_cost_micros)})]}),c&&(0,s.jsx)("td",{children:(0,s.jsx)("button",{className:"uxf-button",disabled:!!c.pending||c.busy,onClick:()=>c.resume(e),children:p.open})})]},e.id)})})]})}),!h.length&&!E&&!_&&(0,s.jsx)("p",{children:n?l.noOperations:l.demoNotice}),g&&(0,s.jsx)("button",{className:"uxf-button",disabled:E,onClick:async()=>{if(E||!g)return;const e=k.current;N(!0),w(null);try{const t=await n.api.get("".concat(I,"&cursor=").concat((0,o.a)(g)));if(!Array.isArray(t.items))throw new o.zE("INVALID_RESPONSE");if(e!==k.current)return;m(e=>[...new Map([...e,...t.items].map(e=>[e.id,e])).values()]),v(t.next_cursor||null)}catch(t){e===k.current&&w(t.code||"unknown")}finally{e===k.current&&N(!1)}},children:l.loadMore})]})}},25(e,t,n){n.d(t,{e5:()=>L,Ay:()=>D});var i=n(2555),r=n(9950),o=n(2074),a=n(8429),s=n(6243),c=n(6987),l=n(4084),d=n(9585),u=n(5487),p=n(8440),h=n(915);const m=e=>"Design"===e.editor?{intro:"Connect your GitHub account and coding tools. You choose what to share and approve each generation or Draft PR.",githubNote:"Connect your GitHub account. If the App is not installed yet, GitHub will ask you to choose repositories.",mcpNote:"Start the connection in your IDE. Snailer will open a consent screen for you to review the client, permissions, and projects.",ready:"Ready to connect",pending:"Not ready yet",unreported:"Availability not confirmed",checking:"Checking connection availability\u2026",githubPending:"GitHub connection setup is not ready yet. You can check again later.",mcpPending:"MCP connection setup is not ready yet. You can check again later.",unknown:"Connection availability could not be confirmed. Refresh before starting a connection.",n
1oPermission:"This account cannot authorize new connections.",refresh:"Refresh connections",githubEmpty:"No GitHub account connected",githubEmptyNote:"Once connected, you can review changes and create a Draft PR in a selected repository.",mcpEmpty:"No IDE authorized",mcpEmptyNote:"A connection appears here after you approve the request opened by your IDE.",githubSteps:["Connect with GitHub","Choose repositories if installation is needed","Confirm in Snailer"],mcpSteps:["Start in your IDE","Review in Snailer","Allow the connection"],install:"Connect GitHub",mcpGuide:"How to connect your IDE",manageGithub:"Connected GitHub accounts",manageMcp:"Authorized IDEs",reauthentication_required:"Reconnection required",reconnect:"Reconnect GitHub",projectScope:"Allowed projects",selectProjects:"Choose 1\u2013100 projects to share with this IDE.",reviewProjects:"Review selected projects",noProjects:"No accessible projects yet. Create a project before allowing access.",loadMore:"Load more projects",selectionSaved:"Projects saved. Review the updated request before allowing access.",connected:"Connected",suspended:"Suspended",revoked:"Revoked",statusUnknown:"Status not reported",selected:"Selected repositories",all:"All repositories",singleApproval:"Connection is separate from approval",singleApprovalNote:"Connecting an IDE does not approve spending or a PR. Open its approval link, review the quote or changes, and click to approve that one operation.",disconnectTitle:"Disconnect GitHub account",disconnectNote:"This removes access through Snailer. It does not uninstall the GitHub App on GitHub.",revokeTitle:"Revoke IDE access",revokeNote:"This IDE will lose its current access. You will need to authorize it again to reconnect.",githubDone:"GitHub account disconnected.",mcpDone:"IDE access revoked.",callbackNote:"GitHub has returned your authorization. Confirm the account to finish connecting it to Snailer.",chooseInstallation:"Choose a GitHub account",chooseInstallationNote:"Select the account whose approved repositories you want to use in Snailer.",connectAccount:"Connect",githubCancelled:"GitHub connection was cancelled. You can start again from Connections.",githubExpired:"This GitHub connection request expired. Start again from Connections.",consentNote:"Review who is requesting access and which projects they can use before allowing this connection.",returnTo:"Return destination",back:"Back to connections",connectedDone:"GitHub connection confirmed.",allowedDone:"Access allowed. Return to your IDE to finish connecting.",deniedDone:"Access denied. No new grant was created.",continueIde:"Return to IDE",expired:"This request has expired. Start a new connection from your IDE.",scopes:{"uxforge:read":"Read projects and designs","uxforge:write":"Create and edit designs","uxforge:generate":"Request AI generation with your approval","uxforge:export":"Check quality and export code","uxforge:github_pr":"Request Draft PRs with your approval"}}:{intro:"GitHub \uacc4\uc815\uacfc \ucf54\ub529 \ub3c4\uad6c\ub97c \uc5f0\uacb0\ud558\uc138\uc694. \uacf5\uc720\ud560 \ubc94\uc704\ub97c \uc9c1\uc811 \uc815\ud558\uace0, \uc0dd\uc131\uacfc Draft PR\uc740 \uac74\ubcc4\ub85c \uc2b9\uc778\ud569\ub2c8\ub2e4.",githubNote:"GitHub \uacc4\uc815\uc744 \uc5f0\uacb0\ud558\uc138\uc694. App\uc774 \uc544\uc9c1 \uc5c6\ub2e4\uba74 GitHub\uc5d0\uc11c \uc811\uadfc\ud560 \uc800\uc7a5\uc18c\ub97c \uc120\ud0dd\ud558\uac8c \ub429\ub2c8\ub2e4.",mcpNote:"IDE\uc5d0\uc11c \uc5f0\uacb0\uc744 \uc2dc\uc791\ud558\uc138\uc694. Snailer\uc5d0\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8\xb7\uad8c\ud55c\xb7\ud504\ub85c\uc81d\ud2b8\ub97c \uac80\ud1a0\ud558\uace0 \ud5c8\uc6a9\ud558\uba74 \uc5f0\uacb0\ub429\ub2c8\ub2e4.",ready:"\uc5f0\uacb0 \uac00\ub2a5",pending:"\uc544\uc9c1 \uc900\ube44 \uc548 \ub428",unreported:"\uc900\ube44 \uc0c1\ud0dc \ubbf8\ud655\uc778",checking:"\uc5f0\uacb0 \uac00\ub2a5 \uc5ec\ubd80 \ud655\uc778 \uc911\u2026",githubPending:"GitHub \uc5f0\uacb0\uc744 \uc544\uc9c1 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \uc0c1\ud0dc\ub97c \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc138\uc694.",mcpPending:"MCP \uc5f0\uacb0\uc744 \uc544\uc9c1 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \uc0c1\ud0dc\ub97c \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc138\uc694.",unknown:"\uc5f0\uacb0 \uc900\ube44 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud6c4 \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc138\uc694.",noPermission:"\uc774 \uacc4\uc815\uc5d0\ub294 \uc0c8 \uc5f0\uacb0\uc744 \uc2b9\uc778\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",refresh:"\uc5f0\uacb0 \uc0c1\ud0dc \uc0c8\ub85c\uace0\uce68",githubEmpty:"\uc5f0\uacb0\ub41c GitHub \uacc4\uc815\uc774 \uc5c6\uc2b5\ub2c8\ub2e4",githubEmptyNote:"\uc5f0\uacb0\ud558\uba74 \uc120\ud0dd\ud55c \uc800\uc7a5\uc18c\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uac80\ud1a0\ud558\uace0 Draft PR\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",mcpEmpty:"\uc544\uc9c1 \ud5c8\uc6a9\ud55c IDE\uac00 \uc5c6\uc2b5\ub2c8\ub2e4",mcpEmptyNote:"IDE\uac00 \uc5f0 \uc694\uccad\uc744 \uc2b9\uc778\ud558\uba74 \uc774\uacf3\uc5d0\uc11c \uc5f0\uacb0\uc744 \ud655\uc778\ud558\uace0 \ud574\uc81c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",githubSteps:["GitHub \uacc4\uc815 \uc5f0\uacb0","\uc124\uce58\uac00 \ud544\uc694\ud55c \uacbd\uc6b0 \uc800\uc7a5\uc18c \uc120\ud0dd","Snailer\uc5d0\uc11c \uc5f0\uacb0 \ud655\uc778"],mcpSteps:["IDE\uc5d0\uc11c \uc5f0\uacb0 \uc2dc\uc791","Snailer\uc5d0\uc11c \uac80\ud1a0","\uc5f0\uacb0 \ud5c8\uc6a9"],install:"GitHub \uc5f0\uacb0",mcpGuide:"IDE \uc5f0\uacb0 \ubc29\ubc95",manageGithub:"\uc5f0\uacb0\ub41c GitHub \uacc4\uc815",manageMcp:"\ud5c8\uc6a9\ud55c IDE",reauthentication_required:"\uc7ac\uc5f0\uacb0 \ud544\uc694",reconnect:"GitHub \ub2e4\uc2dc \uc5f0\uacb0",projectScope:"\uc811\uadfc \uac00\ub2a5\ud55c \ud504\ub85c\uc81d\ud2b8",selectProjects:"\uc774 IDE\uc5d0 \uacf5\uc720\ud560 \ud504\ub85c\uc81d\ud2b8\ub97c 1\u2013100\uac1c \uc120\ud0dd\ud558\uc138\uc694.",reviewProjects:"\uc120\ud0dd\ud55c \ud504\ub85c\uc81d\ud2b8 \uac80\ud1a0",noProjects:"\uc811\uadfc \uac00\ub2a5\ud55c \ud504\ub85c\uc81d\ud2b8\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e0 \ub4a4 \uc811\uadfc\uc744 \ud5c8\uc6a9\ud558\uc138\uc694.",loadMore:"\ud504\ub85c\uc81d\ud2b8 \ub354 \ubcf4\uae30",selectionSaved:"\ud504\ub85c\uc81d\ud2b8\ub97c \uc800\uc7a5\ud588\uc2b5\ub2c8\ub2e4. \ubcc0\uacbd\ub41c \uc694\uccad\uc744 \uac80\ud1a0\ud55c \ub4a4 \uc811\uadfc\uc744 \ud5c8\uc6a9\ud558\uc138\uc694.",connected:"\uc5f0\uacb0\ub428",suspended:"\uc77c\uc2dc \uc911\uc9c0",revoked:"\ud574\uc81c\ub428",statusUnknown:"\uc0c1\ud0dc \ubbf8\uc81c\uacf5",selected:"\uc120\ud0dd\ud55c \uc800\uc7a5\uc18c",all:"\ubaa8\ub4e0 \uc800\uc7a5\uc18c",singleApproval:"\uc5f0\uacb0\ud55c \ub4a4\uc5d0\ub3c4 \uc791\uc5c5\uc740 \uc9c1\uc811 \uc2b9\uc778\ud569\ub2c8\ub2e4",singleApprovalNote:"IDE \uc5f0\uacb0\ub9cc\uc73c\ub85c \ud06c\ub808\ub527 \uc0ac\uc6a9\uc774\ub098 PR \uc791\uc131\uc744 \uc2b9\uc778\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. IDE\uac00 \uc81c\uacf5\ud55c \uc2b9\uc778 \ub9c1\ud06c\ub97c \uc5f4\uc5b4 \uacac\uc801 \ub610\ub294 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uac80\ud1a0\ud558\uace0 \ud574\ub2f9 \uc791\uc5c5\uc744 \ud55c \ubc88 \u
1c2b9\uc778\ud558\uc138\uc694.",disconnectTitle:"GitHub \uacc4\uc815 \uc5f0\uacb0 \ud574\uc81c",disconnectNote:"Snailer\ub97c \ud1b5\ud55c \uc811\uadfc \uad8c\ud55c\uc744 \ud574\uc81c\ud569\ub2c8\ub2e4. GitHub\uc5d0 \uc124\uce58\ud55c App \uc790\uccb4\ub97c \uc0ad\uc81c\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.",revokeTitle:"IDE \uc811\uadfc \uad8c\ud55c \ud574\uc81c",revokeNote:"\uc774 IDE\uc758 \uae30\uc874 \uc811\uadfc \uad8c\ud55c\uc744 \ud3d0\uae30\ud569\ub2c8\ub2e4. \ub2e4\uc2dc \uc5f0\uacb0\ud558\ub824\uba74 \uc0c8 \uc694\uccad\uc744 \uc2b9\uc778\ud574\uc57c \ud569\ub2c8\ub2e4.",githubDone:"GitHub \uacc4\uc815 \uc5f0\uacb0\uc744 \ud574\uc81c\ud588\uc2b5\ub2c8\ub2e4.",mcpDone:"IDE \uc811\uadfc \uad8c\ud55c\uc744 \ud574\uc81c\ud588\uc2b5\ub2c8\ub2e4.",callbackNote:"GitHub\uc5d0\uc11c \uc778\uc99d\uc744 \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uc5f0\uacb0\ud560 \uacc4\uc815\uc744 \ud655\uc778\ud574 Snailer\uc5d0 \uc5f0\uacb0\ud558\uc138\uc694.",chooseInstallation:"GitHub \uacc4\uc815 \uc120\ud0dd",chooseInstallationNote:"Snailer\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc800\uc7a5\uc18c\uc5d0 \uc811\uadfc \uac00\ub2a5\ud55c \uacc4\uc815\uc744 \uace0\ub974\uc138\uc694.",connectAccount:"\uc5f0\uacb0",githubCancelled:"GitHub \uc5f0\uacb0\uc744 \ucde8\uc18c\ud588\uc2b5\ub2c8\ub2e4. \uc5f0\uacb0 \uad00\ub9ac\uc5d0\uc11c \ub2e4\uc2dc \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",githubExpired:"GitHub \uc5f0\uacb0 \uc694\uccad\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc5f0\uacb0 \uad00\ub9ac\uc5d0\uc11c \ub2e4\uc2dc \uc2dc\uc791\ud558\uc138\uc694.",consentNote:"\uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud558\uae30 \uc804\uc5d0 \uc694\uccad\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc811\uadfc\ud560 \ud504\ub85c\uc81d\ud2b8\xb7\uad8c\ud55c\uc744 \ud655\uc778\ud558\uc138\uc694.",returnTo:"\uc2b9\uc778 \ud6c4 \ub3cc\uc544\uac08 \uc8fc\uc18c",back:"\uc5f0\uacb0 \uad00\ub9ac\ub85c \ub3cc\uc544\uac00\uae30",connectedDone:"GitHub \uc5f0\uacb0\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.",allowedDone:"\uc811\uadfc\uc744 \ud5c8\uc6a9\ud588\uc2b5\ub2c8\ub2e4. IDE\ub85c \ub3cc\uc544\uac00 \uc5f0\uacb0\uc744 \ub9c8\ubb34\ub9ac\ud558\uc138\uc694.",deniedDone:"\uc811\uadfc\uc744 \uac70\ubd80\ud588\uc2b5\ub2c8\ub2e4. \uc0c8 \uad8c\ud55c\uc744 \ubd80\uc5ec\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.",continueIde:"IDE\ub85c \ub3cc\uc544\uac00\uae30",expired:"\uc694\uccad\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. IDE\uc5d0\uc11c \uc5f0\uacb0\uc744 \ub2e4\uc2dc \uc2dc\uc791\ud574 \uc8fc\uc138\uc694.",scopes:{"uxforge:read":"\ud504\ub85c\uc81d\ud2b8\uc640 \ub514\uc790\uc778 \uc77d\uae30","uxforge:write":"\ub514\uc790\uc778 \uc0dd\uc131\xb7\ud3b8\uc9d1","uxforge:generate":"\uc0ac\uc6a9\uc790 \uc2b9\uc778 \ud6c4 AI \uc0dd\uc131 \uc694\uccad","uxforge:export":"\ud488\uc9c8 \uac80\uc0ac\xb7\ucf54\ub4dc \ub0b4\ubcf4\ub0b4\uae30","uxforge:github_pr":"\uc0ac\uc6a9\uc790 \uc2b9\uc778 \ud6c4 Draft PR \uc694\uccad"}};var g=n(398),v=n(8797),f=n(5122),x=n(8538);async function b(e){const t=await e.get("/integrations/status");if(!function(e){var t,n;return Array.isArray(null===e||void 0===e||null===(t=e.github)||void 0===t?void 0:t.connections)&&Array.isArray(null===e||void 0===e||null===(n=e.mcp)||void 0===n?void 0:n.grants)&&["github","mcp"].every(t=>void 0===e[t].available||"boolean"===typeof e[t].available)}(t))throw new v.zE("INVALID_RESPONSE");return t}function y(e){const[t,n]=(0,r.useState)({data:null,error:null,loading:!0}),[o,a]=(0,r.useState)(0),s=(0,r.useCallback)(()=>a(e=>e+1),[]);return(0,r.useEffect)(()=>{let t=!0;return n({data:null,error:null,loading:!0}),b(e).then(e=>{t&&n({data:e,error:null,loading:!1})}).catch(e=>{t&&n({data:null,error:e.code||"unknown",loading:!1})}),()=>{t=!1}},[e,o]),(0,i.A)((0,i.A)({},t),{},{refresh:s})}var _=n(7006),w=n(4629),E=n(424),N=n(4414);function S(e){let{api:t,request:n,c:i,disabled:a,onBusy:s,onSelected:c}=e;const l=m(i),d=(0,x.A)(t),u=(0,r.useRef)(!1),p=(0,r.useRef)(!1),[h,g]=(0,r.useState)([]),[f,y]=(0,r.useState)(null),[_,E]=(0,r.useState)([]),[S,A]=(0,r.useState)(!0),[T,I]=(0,r.useState)(!1),[k,C]=(0,r.useState)(null),j=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;A(!0),C(null);try{const n=await t.get("/projects?limit=25".concat(e?"&cursor=".concat(encodeURIComponent(e)):""));if(!Array.isArray(n.items)||!n.items.every(e=>"string"===typeof e.id&&e.id&&"string"===typeof e.name)||null!=n.next_cursor&&"string"!==typeof n.next_cursor)throw new v.zE("INVALID_RESPONSE");u.current&&(g(t=>Array.from(new Map([...e?t:[],...n.items].map(e=>
1[e.id,e])).values())),y(n.next_cursor||null))}catch(n){u.current&&C(n.code||"unknown")}finally{u.current&&A(!1)}},[t]);(0,r.useEffect)(()=>(u.current=!0,j(),()=>{u.current=!1}),[j]);return(0,N.jsxs)("div",{className:"uxf-project-selection",children:[(0,N.jsx)("p",{children:l.selectProjects}),(0,N.jsx)(w.Pf,{error:k,c:i}),!S&&!k&&!h.length&&(0,N.jsxs)("p",{children:[l.noProjects," ",(0,N.jsx)(o.N_,{to:"/design/projects",children:i.projects})]}),h.map(e=>(0,N.jsxs)("label",{className:"uxf-project-choice",children:[(0,N.jsx)("input",{type:"checkbox",checked:_.includes(e.id),disabled:a||T||!_.includes(e.id)&&_.length>=100,onChange:t=>E(n=>t.target.checked?[...n,e.id]:n.filter(t=>t!==e.id))}),(0,N.jsx)("span",{children:e.name})]},e.id)),S&&(0,N.jsx)("p",{role:"status",children:i.busy}),f&&(0,N.jsx)("button",{className:"uxf-button",disabled:S||T||a,onClick:()=>j(f),children:l.loadMore}),k&&(0,N.jsx)("button",{className:"uxf-button",disabled:S||T||a,onClick:()=>j(f),children:i.retry}),(0,N.jsxs)("p",{children:[_.length," / 100"]}),(0,N.jsx)("button",{className:"uxf-button primary",disabled:!_.length||S||T||a,onClick:async()=>{if(!(p.current||a||!_.length||_.length>100||Date.parse(n.expires_at)<=Date.now())){p.current=!0,I(!0),s(!0),C(null);try{if(!0!==(await b(t)).mcp.available)throw new v.zE("UNAVAILABLE");if(!u.current)return;const e=await d("post","/integrations/mcp/authorization-requests/".concat((0,v.a)(n.request_id),"/projects"),{project_ids:_,reviewed_hash:n.reviewed_hash});if(e.request_id!==n.request_id||"string"!==typeof e.reviewed_hash||!e.reviewed_hash||!Array.isArray(e.project_ids)||e.project_ids.length!==_.length||!_.every(t=>e.project_ids.includes(t)))throw new v.zE("INVALID_RESPONSE");u.current&&c()}catch(e){u.current&&C(e.code||"unknown")}finally{p.current=!1,u.current&&(I(!1),s(!1))}}},children:T?i.busy:l.reviewProjects})]})}function A(e){try{const t=new URL(e);if("https:"!==t.protocol||"github.com"!==t.hostname||t.username||t.password||t.hash)return null;if(/^\/apps\/[a-z0-9-]+\/installations\/new$/.test(t.pathname))return t.searchParams.has("state")?t.href:null;if("/login/oauth/authorize"===t.pathname){const e=new URL(t.searchParams.get("redirect_uri")||"",window.location.origin);return!t.searchParams.get("state")||!t.searchParams.get("client_id")||e.username||e.password||e.origin!==window.location.origin||!["/uxforge/integrations/github/callback","/design/integrations/github/callback"].includes(e.pathname)||e.search||e.hash?null:t.href}return null}catch(t){return null}}function T(e){return"select_installation"===(null===e||void 0===e?void 0:e.status)&&Array.isArray(e.installations)&&e.installations.length>0&&e.installations.every(e=>/^\d{1,30}$/.test(null===e||void 0===e?void 0:e.id)&&"string"===typeof e.account_name&&e.account_name.length>0)&&new Set(e.installations.map(e=>e.id)).size===e.installations.length&&Date.parse(e.expires_at)>Date.now()}const I=["uxforge:read","uxforge:write","uxforge:generate","uxforge:export","uxforge:github_pr"];function k(e){if("string"!==typeof e||e.length>2048||/[\s\\#]/.test(e)||[...e].some(e=>e.charCodeAt(0)<32||127===e.charCodeAt(0)))return null;try{const t=new URL(e);if(t.username||t.password)return null;const n=/^cursor:\/\/anysphere\.cursor-mcp\/oauth\/callback(?:\?[^#]*)?$/.test(e),i=/^http:\/\/(localhost|127\.0\.0\.1|\[::1\]):\d{1,5}(?:[/?]|$)/.test(e)&&Number(t.port)>=1&&Number(t.port)<=65535;return"https:"===t.protocol&&e.startsWith("https://")||"http:"===t.protocol&&i||"cursor:"===t.protocol&&n?t.href:null}catch(t){return null}}function C(e){var t,n;return e&&"string"===typeof e.request_id&&"string"===typeof(null===(t=e.client)||void 0===t?void 0:t.name)&&"string"===typeof(null===(n=e.client)||void 0===n?void 0:n.id)&&Array.isArray(e.scopes)&&e.scopes.length>0&&e.scopes.every(e=>I.includes(e))&&Array.isArray(e.projects)&&e.projects.length<=100&&e.projects.every(e=>"string"===typeof(null===e||void 0===e?void 0:e.id)&&!!e.id&&"string"===typeof e.name&&!!e.name)&&(void 0===e.project_selection_required?e.projects.length>0:e.project_selection_required===(0===e.projects.length))&&Number.isFinite(Date.parse(e.expires_at))&&Date.parse(e.expires_at)>Date.now()&&"string"===typeof e.reviewed_hash&&e.reviewed_hash.length>0&&k(e.redirect_uri)&&!0===e.single_use_approvals_required}function j(e){let{value:t,kind:n,s:i}=e;return(0,N.jsxs)("div",{className:"uxf-integration-availability",children:[(0,N.jsx)("span",{className:"uxf-integration-badge","data-ready":!0===t,role:"status",children:!0===t?i.ready:!1===t?i.pe
1nding:i.unreported}),!0!==t&&(0,N.jsx)("p",{children:!1===t?"github"===n?i.githubPending:i.mcpPending:i.unknown})]})}function R(e){let{s:t}=e;return(0,N.jsxs)("aside",{className:"uxf-approval-note",children:[(0,N.jsx)(s.A,{size:20,"aria-hidden":"true"}),(0,N.jsxs)("div",{children:[(0,N.jsx)("h3",{children:t.singleApproval}),(0,N.jsx)("p",{children:t.singleApprovalNote})]})]})}function D(e){let{c:t}=e;const n=(0,_.sV)(),a=(0,g.v)(t),s=m(t),p=y(n.api),{data:h}=p,f=(0,x.A)(n.api),S=(0,r.useRef)(!1),[T,I]=(0,r.useState)(null),[k,C]=(0,r.useState)(!1),[D,L]=(0,r.useState)(null),[O,U]=(0,r.useState)(null),P=n.can("uxforge.integrations.manage"),M=!0===(null===h||void 0===h?void 0:h.github.available)&&P,H=!0===(null===h||void 0===h?void 0:h.mcp.available)&&P,z=async e=>{if(!S.current){S.current=!0,C(!0),I(null),U(null);try{await e()}catch(t){I(t.code||"unknown")}finally{S.current=!1,C(!1)}}},G=()=>M&&z(async()=>{if(!0!==(await b(n.api)).github.available)return void p.refresh();const e=await f("post","/integrations/github/installations/start",{return_path:"/uxforge/integrations/github/callback",flow:"connect"}),t=A(e.authorization_url);if(!t||!(Date.parse(e.expires_at)>Date.now()))throw new v.zE("INVALID_RESPONSE");window.location.assign(t)});return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)("div",{className:"uxf-integration-toolbar",children:[(0,N.jsx)("p",{children:s.intro}),(0,N.jsxs)("button",{className:"uxf-button",disabled:k||p.loading||!!D,onClick:()=>{I(null),U(null),p.refresh()},children:[(0,N.jsx)(c.A,{size:14}),s.refresh]})]}),(0,N.jsx)(w.Pf,{error:p.error||!D&&T,c:t}),p.loading&&(0,N.jsx)("p",{role:"status",children:s.checking}),O&&(0,N.jsx)("p",{className:"uxf-notice",role:"status",children:O}),!P&&!p.loading&&(0,N.jsx)("p",{className:"uxf-notice",children:s.noPermission}),(0,N.jsxs)("div",{className:"uxf-integration-grid",children:[(0,N.jsxs)("section",{className:"uxf-delivery-card uxf-connect-card","aria-labelledby":"uxf-github-title",children:[(0,N.jsxs)("div",{className:"uxf-connect-title",children:[(0,N.jsx)(l.A,{size:25,"aria-hidden":"true"}),(0,N.jsx)("h2",{id:"uxf-github-title",children:"GitHub"})]}),(0,N.jsx)("p",{children:s.githubNote}),h&&(0,N.jsx)(j,{value:h.github.available,kind:"github",s:s}),(0,N.jsx)("ol",{className:"uxf-connect-steps",children:s.githubSteps.map(e=>(0,N.jsx)("li",{children:e},e))}),(0,N.jsxs)("button",{className:"uxf-button primary",disabled:k||!M,onClick:G,children:[s.install,(0,N.jsx)(d.A,{size:14})]}),h&&(0,N.jsxs)("div",{className:"uxf-connection-list",children:[(0,N.jsx)("h3",{children:s.manageGithub}),h.github.connections.length?h.github.connections.map(e=>(0,N.jsxs)("div",{className:"uxf-member",children:[(0,N.jsxs)("div",{children:[(0,N.jsx)("strong",{children:e.account_name}),(0,N.jsxs)("small",{children:["selected"===e.repository_selection?s.selected:"all"===e.repository_selection?s.all:s.statusUnknown," \xb7 ",s[e.status]||s.statusUnknown]}),"reauthentication_required"===e.status&&(0,N.jsx)("button",{className:"uxf-button",disabled:k||!M,onClick:G,children:s.reconnect})]}),(0,N.jsx)("button",{className:"uxf-button",disabled:k||!P,onClick:()=>{I(null),L((0,i.A)((0,i.A)({},e),{},{kind:"github"}))},children:a.disconnect})]},e.id)):(0,N.jsxs)("div",{className:"uxf-connection-empty",children:[(0,N.jsx)("strong",{children:s.githubEmpty}),(0,N.jsx)("p",{children:s.githubEmptyNote})]})]})]}),(0,N.jsxs)("section",{className:"uxf-delivery-card uxf-connect-card","aria-labelledby":"uxf-mcp-title",children:[(0,N.jsxs)("div",{className:"uxf-connect-title",children:[(0,N.jsx)(u.A,{size:25,"aria-hidden":"true"}),(0,N.jsx)("h2",{id:"uxf-mcp-title",children:"IDE \u2192 Snailer Design"})]}),(0,N.jsx)("p",{children:s.mcpNote}),h&&(0,N.jsx)(j,{value:h.mcp.available,kind:"mcp",s:s}),(0,N.jsx)("ol",{className:"uxf-connect-steps",children:s.mcpSteps.map(e=>(0,N.jsx)("li",{children:e},e))}),H?(0,N.jsxs)(o.N_,{className:"uxf-button primary",to:"/design/docs#connect-ide",children:[s.mcpGuide,(0,N.jsx)(d.A,{size:14})]}):(0,N.jsxs)("button",{className:"uxf-button primary",disabled:!0,children:[s.mcpGuide,(0,N.jsx)(d.A,{size:14})]}),h&&(0,N.jsxs)("div",{className:"uxf-connection-list",children:[(0,N.jsx)("h3",{children:s.manageMcp}),h.mcp.grants.length?h.mcp.grants.map(e=>{var t,n;return(0,N.jsxs)("div",{className:"uxf-member",children:[(0,N.jsxs)("div",{children:[(0,N.jsx)("strong",{children:e.client_name}),(0,N.jsx)("small",{children:null===(t=e.scopes)||void 0===t?void 0:t.map(e=>s.scopes[e]||e).join(" \xb7 ")}),(0,N.jsxs)("small",{children:[s.projectScope,": ",null!==(n=e.project_ids)&&void 0!==n&&n.length?e.project_ids.join(", "):s.statusUnknown]}),(0,N.jsxs)("small",{children:[a.expires,": ",new Date(e.expires_at).toLocaleStr
1ing()]})]}),(0,N.jsx)("button",{className:"uxf-button",disabled:k||!P,onClick:()=>{I(null),L((0,i.A)((0,i.A)({},e),{},{kind:"mcp"}))},children:a.revoke})]},e.id)}):(0,N.jsxs)("div",{className:"uxf-connection-empty",children:[(0,N.jsx)("strong",{children:s.mcpEmpty}),(0,N.jsx)("p",{children:s.mcpEmptyNote})]})]})]})]}),(0,N.jsx)(E.A,{access:n,c:t},n.owner),(0,N.jsx)(R,{s:s}),(0,N.jsxs)(o.N_,{className:"uxf-text-link",to:"/design/docs",children:[a.docs,(0,N.jsx)(d.A,{size:14})]}),D&&(0,N.jsxs)(w.lG,{title:"github"===D.kind?s.disconnectTitle:s.revokeTitle,c:t,onClose:()=>!k&&L(null),children:[(0,N.jsx)("p",{children:(0,N.jsx)("strong",{children:D.account_name||D.client_name})}),(0,N.jsx)("p",{children:"github"===D.kind?s.disconnectNote:s.revokeNote}),(0,N.jsx)(w.Pf,{error:T,c:t}),(0,N.jsxs)("div",{className:"uxf-actions",children:[(0,N.jsx)("button",{className:"uxf-button",disabled:k,onClick:()=>L(null),children:t.cancel}),(0,N.jsx)("button",{className:"uxf-button primary",disabled:k||!P,onClick:()=>D&&P&&z(async()=>{await f("delete","/integrations/".concat(D.kind,"/").concat("github"===D.kind?"connections":"grants","/").concat((0,v.a)(D.id)),{}),U("github"===D.kind?s.githubDone:s.mcpDone),L(null),p.refresh()}),children:"github"===D.kind?a.disconnect:a.revoke})]})]})]})}function L(e){let{mode:t}=e;const n=(0,a.zy)();return(0,N.jsx)(O,{mode:t,location:n},"".concat(t,":").concat(n.key))}function O(e){var t,n;let{mode:a,location:s}=e;const l=(0,_.sV)(),{language:u}=(0,p.ok)(),E=(0,h.M)(u),I=(0,g.v)(E),D=m(E),L=y(l.api),O=!0===(null===(t=L.data)||void 0===t?void 0:t[a].available),U=l.can("uxforge.integrations.manage"),[P,M]=(0,r.useState)(null),[H,z]=(0,r.useState)(null),[G,B]=(0,r.useState)(!1),[V,F]=(0,r.useState)(null),[q,Y]=(0,r.useState)(null),[K,Q]=(0,r.useState)(!1),[W,J]=(0,r.useState)(null),X=null===W||void 0===W?void 0:W.installations,[$,Z]=(0,r.useState)(0),[ee,te]=(0,r.useState)(!1),ne=(0,x.A)(l.api),ie=(0,r.useRef)(!1),[re]=(0,r.useState)(()=>(0,f.cO)(s)),oe=re.get("request_id"),ae=re.get("state"),se=re.get("installation_id"),ce=re.get("code"),le="github"===a&&re.get("error"),de="github"===a?!le&&!!ae&&ae.length<=128&&(!se||/^\d{1,30}$/.test(se))&&(!ce||ce.length<=512):/^[\w-]{1,120}$/.test(oe||"");(0,r.useEffect)(()=>{le&&((0,f.Je)(),window.history.replaceState(window.history.state,"",s.pathname))},[le,s.pathname]),(0,r.useEffect)(()=>{let e=!0;if("github"===a&&de&&!ce&&!se&&O&&U)return l.api.get("/integrations/github/installations/pending?state=".concat(encodeURIComponent(ae))).then(t=>{e&&(T(t)?J(t):"connected"===t.status&&t.connection_id?(F("connected"),(0,f.Je)()):z("INVALID_RESPONSE"))}).catch(t=>{e&&z(t.code||"unknown")}),()=>{e=!1}},[l.api,a,de,ce,se,O,U,ae]),(0,r.useEffect)(()=>{if("mcp"!==a)return;let e=!0;return M(null),z(null),Q(!1),de&&O&&U?(l.api.get("/integrations/mcp/authorization-requests/".concat((0,v.a)(oe))).then(t=>{if(Number.isFinite(Date.parse(t.expires_at))&&Date.parse(t.expires_at)<=Date.now())e&&Q(!0);else{if(!C(t)||t.request_id!==oe)throw new v.zE("INVALID_RESPONSE");e&&M(t)}}).catch(t=>{e&&z(t.code||"unknown")}),()=>{e=!1}):void 0},[l.api,a,oe,de,O,U,L.data,$]),(0,r.useEffect)(()=>{const e=P||W;if(!e)return;const t=setTimeout(()=>Q(!0),Math.min(Math.max(0,Date.parse(e.expires_at)-Date.now()),2147483647));return()=>clearTimeout(t)},[P,W]);const ue=async e=>{if(de&&!ie.current&&!ee&&!V&&O&&U&&!K&&("github"!==a||ce||se)&&("mcp"!==a||C(P)&&("approve"!==e||P.projects.length))){ie.current=!0,B(!0),z(null);try{if(!0!==(await b(l.api))[a].available)return void L.refresh();if("mcp"===a&&!C(P))return void Q(!0);const t="github"===a?await ne("post","/integrations/github/installations/complete",(0,i.A)((0,i.A)({state:ae},se?{installation_id:se}:{}),ce?{code:ce}:{})):await ne("post","/integrations/mcp/authorization-requests/".concat((0,v.a)(oe),"/decision"),{decision:e,reviewed_hash:P.reviewed_hash});if("github"===a&&("installation_required"===t.status||"authorization_required"===t.status)){const e=A(t.authorization_url);if(!e||!(Date.parse(t.expires_at)>Date.now()))throw new v.zE("INVALID_RESPONSE");return void window.location.assign(e)}if("github"===a&&"select_installation"===t.status){if(!T(t))throw new v.zE("INVALID_RESPONSE");
1if(!(0,f.o$)(ae,s.pathname))throw new v.zE("INVALID_RESPONSE");return J(t),void window.history.replaceState(window.history.state,"",s.pathname)}if("github"===a&&(!t.connection_id||"connected"!==t.status))throw new v.zE("INVALID_RESPONSE");if("mcp"===a){const e=k(t.redirect_url),n=new URL(P.redirect_uri),i=e&&new URL(e);if(!i||i.origin!==n.origin||i.pathname!==n.pathname)throw new v.zE("INVALID_RESPONSE");Y(e)}F("github"===a?"connected":e),(0,f.Je)(),window.history.replaceState(window.history.state,"",s.pathname)}catch(t){z(t.code||"unknown")}finally{ie.current=!1,B(!1)}}};return(0,N.jsxs)("main",{className:"uxf-page uxf-auth-page ph-no-capture ph-mask","data-clarity-mask":"true",children:[(0,N.jsx)("p",{className:"uxf-eyebrow",children:"SNAILER DESIGN / CONNECT"}),(0,N.jsx)("h1",{children:"github"===a?I.returnGithub:I.consent}),(0,N.jsx)("p",{className:"uxf-muted",children:"github"===a?D.callbackNote:D.consentNote}),!de&&!V&&(0,N.jsx)("p",{role:"alert",children:"access_denied"===le?D.githubCancelled:I.callbackError}),(0,N.jsx)(w.Pf,{error:L.error||H,c:E}),!V&&(0,N.jsxs)(N.Fragment,{children:[L.loading?(0,N.jsx)("p",{role:"status",children:D.checking}):(0,N.jsx)(j,{value:null===(n=L.data)||void 0===n?void 0:n[a].available,kind:a,s:D}),!U&&(0,N.jsx)("p",{className:"uxf-notice",children:D.noPermission}),(0,N.jsxs)("button",{className:"uxf-button",disabled:G||ee||L.loading,onClick:L.refresh,children:[(0,N.jsx)(c.A,{size:14}),D.refresh]})]}),K&&!V&&(0,N.jsx)("p",{className:"uxf-notice",role:"alert",children:"github"===a?D.githubExpired:D.expired}),"mcp"===a&&de&&O&&U&&!P&&!H&&!K&&!V&&(0,N.jsx)("p",{role:"status",children:E.busy}),"github"===a&&X&&!V&&(0,N.jsxs)("div",{className:"uxf-consent-review",children:[(0,N.jsx)("h2",{children:D.chooseInstallation}),(0,N.jsx)("p",{children:D.chooseInstallationNote}),(0,N.jsx)("div",{className:"uxf-actions",children:X.map(e=>(0,N.jsxs)("button",{className:"uxf-button",disabled:G||!O||!U||K,onClick:()=>(async e=>{if(T(W)&&null!==X&&void 0!==X&&X.some(t=>t.id===e)&&!ie.current&&O&&U&&!V&&!K){ie.current=!0,B(!0),z(null);try{if(!0!==(await b(l.api)).github.available)return void L.refresh();const t=await ne("post","/integrations/github/installations/select",{state:ae,installation_id:e});if(!t.connection_id||"connected"!==t.status)throw new v.zE("INVALID_RESPONSE");F("connected"),J(null),(0,f.Je)(),window.history.replaceState(window.history.state,"",s.pathname)}catch(t){z(t.code||"unknown")}finally{ie.current=!1,B(!1)}}})(e.id),children:[D.connectAccount," ",e.account_name]},e.id))})]}),P&&(0,N.jsxs)("div",{className:"uxf-consent-review",children:[(0,N.jsxs)("dl",{className:"uxf-facts",children:[(0,N.jsxs)("div",{children:[(0,N.jsx)("dt",{children:I.client}),(0,N.jsxs)("dd",{children:[P.client.name,(0,N.jsx)("small",{children:P.client.id})]})]}),(0,N.jsxs)("div",{children:[(0,N.jsx)("dt",{children:D.returnTo}),(0,N.jsx)("dd",{children:new URL(P.redirect_uri).origin})]}),(0,N.jsxs)("div",{children:[(0,N.jsx)("dt",{children:I.expires}),(0,N.jsx)("dd",{children:new Date(P.expires_at).toLocaleString()})]})]}),(0,N.jsx)("h2",{children:I.scopes}),(0,N.jsx)("ul",{children:P.scopes.map(e=>(0,N.jsx)("li",{children:D.scopes[e]},e))}),(0,N.jsx)("h2",{children:E.projects}),(0,N.jsx)("ul",{children:P.projects.map(e=>(0,N.jsx)("li",{children:e.name},e.id))}),P.project_selection_required&&!V&&O&&U&&(0,N.jsx)(S,{api:l.api,request:P,c:E,disabled:G||K,onBusy:te,onSelected:()=>{te(!1),M(null),Z(e=>e+1)}})]}),(0,N.jsx)(R,{s:D}),V?(0,N.jsxs)("div",{className:"uxf-actions",children:[(0,N.jsx)("p",{role:"status",children:"connected"===V?D.connectedDone:"approve"===V?D.allowedDone:D.deniedDone}),q&&(0,N.jsx)("a",{className:"uxf-button primary",href:q,rel:"noreferrer",children:D.continueIde})]}):!X&&(0,N.jsxs)("div",{className:"uxf-actions uxf-consent-actions",children:[(0,N.jsx)("button",{className:"uxf-button primary",disabled:!de||G||ee||!O||!U||K||"github"===a&&!ce&&!se||"mcp"===a&&(!P||!P.projects.length),onClick:()=>ue("approve"),children:"github"===a?I.complete:I.allow}),"mcp"===a&&(0,N.jsx)("button",{className:"uxf-button",disabled:!P||G||ee||!O||!U||K,onClick:()=>ue("deny"),children:I.deny})]}),(0,N.jsxs)(o.N_,{className:"uxf-text-link",to:"/account/integrations",children:[D.back,(0,N.jsx)(d.A,{size:14})]})]})}},398(e,t,n){n.d(t,{v:()=>i});const i=e=>"Design"===e.editor?{reference:{label:"Reference link (optional)",hint:"A public https page whose structure, tone and style should inspire this design. Wording, brand names and logos are never copied.",analyze:"Analyze",analyzing:"Analyzing\u2026",remove:"Remove reference",limit:"Up to 2 reference links.",sections:"sections",colors:"Colors",fonts:"Fonts",ctas:"Buttons",untitled:"Untitled page",frozen:"Reference links in this quote"},layout:{title:"Layout & conversion",note:"Layout options use the Snailer Design v3 registry. Saving one upgrades this 
1screen to it.",tone:"Section background",tones:{default:"Page background",muted:"Soft tint",accent:"Accent band",inverse:"Inverse (dark)"},align:"Alignment",aligns:{start:"Start",center:"Center"},size:"Section size",sizes:{compact:"Compact",regular:"Regular",large:"Large"},variant:"Layout style",variants:{Hero:{split:"Split (text + media)",centered:"Centered",spotlight:"Spotlight",minimal:"Minimal"},Button:{outline:"Outline",solid:"Solid",ghost:"Text link"},Grid:{cards:"Cards",features:"Feature list",pricing:"Pricing plans",faq:"FAQ",stats:"Stats",testimonials:"Testimonials",logos:"Logo row",steps:"Numbered steps"},Nav:{bar:"Bar",centered:"Centered",floating:"Floating pill"},Text:{default:"Default",statement:"Statement",split:"Split"},Footer:{default:"Default",centered:"Centered"}},columns:"Columns",columnsAuto:"Automatic",cta:"Button label",ctaHint:"A specific action, e.g. \u201cStart free trial\u201d",price:"Price",cadence:"Billing period",badge:"Badge (marks the recommended plan)",items:"Included items (one per line, up to 12)",cardCta:"Plan button label"},motion:"Scroll motion",motions:{none:"None","fade-up":"Fade up","fade-in":"Fade in","slide-left":"Slide left","slide-right":"Slide right","scale-in":"Scale in",parallax:"Parallax"},motionNote:"Motion plays once as the element scrolls into view. Visitors who prefer reduced motion always see the final layout.",model:"3D model",modelAlt:"Model description (required)",modelVariant:"Viewer behavior",modelVariants:{orbit:"Drag to orbit",spin:"Auto-rotate",scroll:"Rotate with scroll"},chooseModel:"Upload 3D model (.glb, up to 20 MB)",checkModel:"Check uploaded model",modelMissing:"Upload a GLB model to show the 3D viewer.",stepMedia:"Step media: upload an image or a GLB model.",customLabel:"Section label (read by screen readers)",customHtml:"HTML",customCss:"CSS (scoped to this section)",customNote:"Allowed: basic text, list, figure, link (#anchors), button and image (asset:<id>) elements with class, data-motion and aria attributes. CSS colors must use theme tokens: var(--accent), var(--text), var(--background), transparent, currentColor or color-mix(in srgb, A N%, B) of them. Other CSS variables and hex/rgb/named colors are rejected.",customErrorTitle:"Not saved. Fix these issues:",sanitize:{HTML_REQUIRED:"HTML is required.",HTML_TOO_LARGE:"HTML is longer than 20,000 characters.",HTML_SYNTAX:"HTML could not be parsed.",HTML_DECLARATION:"Doctype, CDATA and processing instructions are not allowed.",HTML_ELEMENT_NOT_ALLOWED:"This element is not allowed.",HTML_UNBALANCED:"Every opened element must be closed in order.",HTML_EVENT_HANDLER:"Event handler attributes (on\u2026) are not allowed.",HTML_STYLE_ATTRIBUTE:"Inline style attributes are not allowed. Use the CSS field.",HTML_DUPLICATE_ATTRIBUTE:"An attribute appears twice.",HTML_ATTRIBUTE_NOT_ALLOWED:"This attribute is not allowed here.",HTML_ATTRIBUTE_VALUE:"This attribute value is not allowed.",HTML_CLASS_INVALID:"Class names must be lowercase (a-z, 0-9, - and _), up to 20 per element.",HTML_MOTION_INVALID:"Unknown data-motion value.",HTML_IMAGE_SOURCE:'Images must use src="asset:<image asset id>" of an uploaded image.',HTML_IMAGE_ALT:'Images need a description (alt) unless aria-hidden="true".',HTML_LINK_INVALID:"Links may only point to # or an anchor on this page.",HTML_TOO_MANY_ELEMENTS:"More than 400 elements.",HTML_TOO_DEEP:"Elements are nested more than 12 levels deep.",CSS_SYNTAX:"CSS could not be parsed.",CSS_TOO_LARGE:"CSS is longer than 12,000 characters.",CSS_AT_RULE:"Only @media (min-width/max-width) and @keyframes are allowed.",CSS_SELECTOR:"Selector not allowed (no *, ids, attribute selectors, :not or :has).",CSS_PROPERTY:"This CSS property is not allowed.",CSS_VALUE:"This CSS value is not allowed.",CSS_FUNCTION:"This CSS function is not allowed here.",CSS_VARIABLE:"Only var(--accent), var(--text) and var(--background) can be used.",CSS_COLOR:"Colors must use theme tokens.",CSS_CONTENT:"content is only allowed as a short quoted string in ::before or ::after.",CSS_KEYFRAMES_NAME:"Keyframe names must be lowercase letters, digits and hyphens.",CSS_KEYFRAMES_SELECTOR:"Keyframe steps must be from, to or a percentage.",CSS_KEYFRAMES_UNKNOWN:"animation-name must reference a @keyframes defined in this section.",NODE_ID_INVALID:"This section id cannot be used for scoped CSS.",unknown:"This input is not allowed."}
1,unsavedNote:"These edits have not been saved. Save them before leaving or discard the draft.",discard:"Discard draft",plan:"Screen plan",planIntro:"Plan up to three screens. Saving a plan creates editable empty screens; AI generation is approved separately for each screen.",title:"Screen name",route:"Route",purpose:"Purpose",add:"Add screen",review:"Review screen plan",approve:"Save approved plan",planError:"Use 1\u20133 screens with unique lowercase routes, a name, and a purpose. Existing screens must stay in the plan.",planReason:"Screen plan saved",detail:"Supporting text",eyebrow:"Eyebrow",image:"Image",alt:"Image description",artwork:"Artwork",chooseImage:"Upload image",checkAsset:"Check uploaded image",imagePending:"Image uploaded. Check again after server scanning finishes.",themeSave:"Save theme",background:"Background",foreground:"Text color",font:"Typography",spacing:"Spacing (px)",radius:"Corner radius (px)",contrast:"Text contrast",contrastNote:"WCAG normal text target: 4.5:1. This checks the chosen text and background colors only.",compare:"Compare with current",before:"Selected version",after:"Current version",noDiff:"No changes between these versions.",scope:"Edit scope",frame:"Current screen",node:"Selected element",team:"Team & comments",members:"Project members",email:"Email address",role:"Role",viewer:"Viewer",editorRole:"Editor",invite:"Invite member",inviteNote:"An editor can change designs. Invitations never grant permission to use AI usage.",inviteReview:"Review invitation",revoke:"Revoke access",revokeNote:"This removes access to this project. Other project memberships stay as they are.",comments:"Comments",comment:"Comment",post:"Post comment",resolve:"Resolve",reopen:"Reopen",emptyComments:"No comments on this screen yet.",reply:"Reply",localComment:"Sample comments stay in this browser and are not sent to anyone.",anchor:"Anchor",all:"All",operations:"Activity",open:"Open result",period:"Period",status:"Status",last7:"Last 7 days",last30:"Last 30 days",summary:"Usage summary",connect:"Connect GitHub",disconnect:"Disconnect",connections:"Connections",grants:"Authorized MCP clients",noConnections:"No connections yet.",connectionNote:"Connect a GitHub App installation, then select its allowed repositories during handoff.",returnGithub:"Complete GitHub connection",complete:"Complete connection",consent:"Authorize MCP client",allow:"Authorize",deny:"Deny",scopes:"Requested permissions",expires:"Access expires",client:"Client",consentNote:"Generation and PR creation still require a separate, single-use approval. Never share your Snailer session token with an MCP client.",docs:"API & MCP guide",callbackError:"This callback is missing required fields. Start a new connection from settings.",danger:"Confirm removal",jobs:"Server operations",costs:"Provider cost",awaiting:"Awaiting settlement",quality:"Quality findings",noFindings:"No findings returned.",stub:"Backend work required",manifest:"Exported files",projectSettings:"Project settings",rename:"Save project name",deleteProject:"Delete project",deleteNote:"Delete this project and revoke its active links. Type the exact project name to confirm.",saved:"Saved",refresh:"Refresh",disconnected:"Connection removed",operationNote:"Reload an existing result without starting a new paid operation."}:{reference:{label:"\ucc38\uace0 \ub9c1\ud06c (\uc120\ud0dd)",hint:"\uad6c\uc870\xb7\ud1a4\xb7\uc2a4\ud0c0\uc77c\uc744 \ucc38\uace0\ud560 \uacf5\uac1c https \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4. \ubb38\uad6c, \ube0c\ub79c\ub4dc \uc774\ub984\uacfc \ub85c\uace0\ub294 \uadf8\ub300\ub85c \uac00\uc838\uc624\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",analyze:"\ubd84\uc11d",analyzing:"\ubd84\uc11d \uc911\u2026",remove:"\ucc38\uace0 \ub9c1\ud06c \uc0ad\uc81c",limit:"\ucc38\uace0 \ub9c1\ud06c\ub294 \ucd5c\ub300 2\uac1c\uae4c\uc9c0 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",sections:"\uac1c \uc139\uc158",colors:"\uc0c9\uc0c1",fonts:"\uae00\uaf34",ctas:"\ubc84\ud2bc",untitled:"\uc81c\ubaa9 \uc5c6\ub294 \ud398\uc774\uc9c0",frozen:"\uc774 \uacac\uc801\uc5d0 \ud3ec\ud568\ub41c \ucc38\uace0 \ub9c1\ud06c"},layout:{title:"\ub808\uc774\uc544\uc6c3 \xb7 \uc804\ud658",note:"\ub808\uc774\uc544\uc6c3 \uc635\uc158\uc740 Snailer Design v3 \ub808\uc9c0\uc2a4\ud2b8\ub9ac\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc800\uc7a5\ud558\uba74 \uc774 \ud654\uba74\uc774 v3\ub85c \uc804\ud658\ub429\ub2c8\ub2e4.",tone:"\uc139\uc158 \ubc30\uacbd",tones:{default:"\ud398\u
1c774\uc9c0 \ubc30\uacbd",muted:"\uc5f0\ud55c \uac15\uc870\uc0c9",accent:"\uac15\uc870\uc0c9 \ub760",inverse:"\ubc18\uc804 (\uc5b4\ub450\uc6b4 \ubc30\uacbd)"},align:"\uc815\ub82c",aligns:{start:"\uc67c\ucabd",center:"\uac00\uc6b4\ub370"},size:"\uc139\uc158 \ud06c\uae30",sizes:{compact:"\uc791\uac8c",regular:"\ubcf4\ud1b5",large:"\ud06c\uac8c"},variant:"\ub808\uc774\uc544\uc6c3 \uc2a4\ud0c0\uc77c",variants:{Hero:{split:"\ubd84\ud560 (\ubb38\uad6c + \ubbf8\ub514\uc5b4)",centered:"\uac00\uc6b4\ub370 \uc815\ub82c",spotlight:"\uc2a4\ud3ec\ud2b8\ub77c\uc774\ud2b8",minimal:"\ubbf8\ub2c8\uba40"},Button:{outline:"\uc678\uacfd\uc120",solid:"\ucc44\uc6c0",ghost:"\ud14d\uc2a4\ud2b8 \ub9c1\ud06c"},Grid:{cards:"\uce74\ub4dc",features:"\uae30\ub2a5 \ubaa9\ub85d",pricing:"\uc694\uae08\uc81c",faq:"\uc790\uc8fc \ubb3b\ub294 \uc9c8\ubb38",stats:"\uc22b\uc790 \uc9c0\ud45c",testimonials:"\uace0\uac1d \ud6c4\uae30",logos:"\ub85c\uace0 \ubaa9\ub85d",steps:"\ub2e8\uacc4\ubcc4 \uc548\ub0b4"},Nav:{bar:"\uae30\ubcf8 \ub9c9\ub300",centered:"\uac00\uc6b4\ub370 \uc815\ub82c",floating:"\ub5a0 \uc788\ub294 \ucea1\uc290"},Text:{default:"\uae30\ubcf8",statement:"\uac15\uc870 \ubb38\uc7a5",split:"\uc88c\uc6b0 \ubd84\ud560"},Footer:{default:"\uae30\ubcf8",centered:"\uac00\uc6b4\ub370 \uc815\ub82c"}},columns:"\uc5f4 \uac1c\uc218",columnsAuto:"\uc790\ub3d9",cta:"\ubc84\ud2bc \ubb38\uad6c",ctaHint:"\uad6c\uccb4\uc801\uc778 \ud589\ub3d9\uc73c\ub85c \uc801\uc73c\uc138\uc694. \uc608: \u201c\ubb34\ub8cc\ub85c \uc2dc\uc791\ud558\uae30\u201d",price:"\uac00\uaca9",cadence:"\uacb0\uc81c \uc8fc\uae30",badge:"\ubc30\uc9c0 (\ucd94\ucc9c \uc694\uae08\uc81c\ub85c \ud45c\uc2dc)",items:"\ud3ec\ud568 \ud56d\ubaa9 (\ud55c \uc904\uc5d0 \ud558\ub098, \ucd5c\ub300 12\uac1c)",cardCta:"\uc694\uae08\uc81c \ubc84\ud2bc \ubb38\uad6c"},motion:"\uc2a4\ud06c\ub864 \ubaa8\uc158",motions:{none:"\uc5c6\uc74c","fade-up":"\uc544\ub798\uc5d0\uc11c \ub098\ud0c0\ub098\uae30","fade-in":"\uc11c\uc11c\ud788 \ub098\ud0c0\ub098\uae30","slide-left":"\uc67c\ucabd\uc73c\ub85c \ubc00\ub824\uc624\uae30","slide-right":"\uc624\ub978\ucabd\uc73c\ub85c \ubc00\ub824\uc624\uae30","scale-in":"\ud655\ub300\ud558\uba70 \ub098\ud0c0\ub098\uae30",parallax:"\ud328\ub7f4\ub799\uc2a4"},motionNote:"\uc694\uc18c\uac00 \ud654\uba74\uc5d0 \ub4e4\uc5b4\uc62c \ub54c \ud55c \ubc88 \uc7ac\uc0dd\ub429\ub2c8\ub2e4. \ub3d9\uc791 \uc904\uc774\uae30\ub97c \uc124\uc815\ud55c \ubc29\ubb38\uc790\uc5d0\uac8c\ub294 \ud56d\uc0c1 \ucd5c\uc885 \ub808\uc774\uc544\uc6c3\ub9cc \ubcf4\uc785\ub2c8\ub2e4.",model:"3D \ubaa8\ub378",modelAlt:"\ubaa8\ub378 \uc124\uba85 (\ud544\uc218)",modelVariant:"\ubdf0\uc5b4 \ub3d9\uc791",modelVariants:{orbit:"\ub4dc\ub798\uadf8\ub85c \ub3cc\ub824\ubcf4\uae30",spin:"\uc790\ub3d9 \ud68c\uc804",scroll:"\uc2a4\ud06c\ub864\uc5d0 \ub530\ub77c \ud68c\uc804"},chooseModel:"3D \ubaa8\ub378 \uc5c5\ub85c\ub4dc (.glb, \ucd5c\ub300 20MB)",checkModel:"\uc5c5\ub85c\ub4dc\ud55c \ubaa8\ub378 \ud655\uc778",modelMissing:"GLB \ubaa8\ub378\uc744 \uc5c5\ub85c\ub4dc\ud558\uba74 3D \ubdf0\uc5b4\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.",stepMedia:"\ub2e8\uacc4 \ubbf8\ub514\uc5b4: \uc774\ubbf8\uc9c0\ub098 GLB \ubaa8\ub378\uc744 \uc5c5\ub85c\ub4dc\ud558\uc138\uc694.",customLabel:"\uc139\uc158 \uc774\ub984 (\uc2a4\ud06c\ub9b0 \ub9ac\ub354\uac00 \uc77d\uc74c)",customHtml:"HTML",customCss:"CSS (\uc774 \uc139\uc158\uc5d0\ub9cc \uc801\uc6a9)",customNote:"\uae30\ubcf8 \ud14d\uc2a4\ud2b8\xb7\ubaa9\ub85d\xb7\uadf8\ub9bc\xb7\ub9c1\ud06c(#\uc575\ucee4)\xb7\ubc84\ud2bc\xb7\uc774\ubbf8\uc9c0(asset:<id>) \uc694\uc18c\uc640 class, data-motion, aria \uc18d\uc131\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. CSS \uc0c9\uc0c1\uc740 \ud14c\ub9c8 \ud1a0\ud070\ub9cc \uc0ac\uc6a9\ud569\ub2c8\ub2e4: var(--accent), var(--text), var(--background), transparent, currentColor \ub610\ub294 \uc774\ub4e4\uc758 color-mix(in srgb, A N%, B). \ub2e4\ub978 CSS \ubcc0\uc218\uc640 hex\xb7rgb\xb7\uc774\ub984 \uc0c9\uc0c1\uc740 \uac70\ubd80\ub429\ub2c8\ub2e4.",customErrorTitle:"\uc800\uc7a5\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ubb38\uc81c\ub97c \uace0\uccd0 \uc8fc\uc138\uc694:",sanitize:{HTML_REQUIRED:"HTML\uc744 \uc785\ub825\ud558\uc138\uc694.",HTML_TOO_LARGE:"HTML\uc774 20,000\uc790\ub97c \ub118\uc2b5\ub2c8\ub2e4.",HTML_SYNTAX:"HTML\uc744 \ud574\uc11d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",HTML_DECLARATION:"doctype, CDATA, \ucc98\ub9ac \uba85\ub839\uc740 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",HTML_ELEMENT_NOT_ALLOWED:"\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc694\uc18c\uc785\ub2c8\ub2e4.",HTML_UNBALANCED:"\uc5f0 \uc694\uc18c\ub294 \uc21c\uc11c\ub300\ub85c \ubaa8\ub450 \ub2eb\uc544\uc57c \ud569\ub2c8\ub2e4.",HTML_EVENT_HANDLER:"\uc774\ubca4\ud2b8 \uc18d\uc131(on\u2026)\uc740 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",HTML_STYLE_ATTRIBUTE:"style \uc18d\uc131\uc740 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. CSS \uc785\ub825\ub780\uc744 \uc0ac\uc6a9\ud558\uc138\uc694.",HTML_DUPLICATE_ATTRIBUTE:"\uac19\uc740 \uc18d\uc131\uc774 \ub450 \ubc88 \u
1c788\uc2b5\ub2c8\ub2e4.",HTML_ATTRIBUTE_NOT_ALLOWED:"\uc774 \uc704\uce58\uc5d0 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc18d\uc131\uc785\ub2c8\ub2e4.",HTML_ATTRIBUTE_VALUE:"\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc18d\uc131 \uac12\uc785\ub2c8\ub2e4.",HTML_CLASS_INVALID:"class \uc774\ub984\uc740 \uc18c\ubb38\uc790(a-z, 0-9, -, _)\ub85c \uc694\uc18c\ub2f9 20\uac1c\uae4c\uc9c0 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",HTML_MOTION_INVALID:"\uc54c \uc218 \uc5c6\ub294 data-motion \uac12\uc785\ub2c8\ub2e4.",HTML_IMAGE_SOURCE:'\uc774\ubbf8\uc9c0\ub294 \uc5c5\ub85c\ub4dc\ud55c \uc774\ubbf8\uc9c0\uc758 src="asset:<\uc774\ubbf8\uc9c0 \uc5d0\uc14b ID>"\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.',HTML_IMAGE_ALT:'aria-hidden="true"\uac00 \uc544\ub2cc \uc774\ubbf8\uc9c0\uc5d0\ub294 \uc124\uba85(alt)\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.',HTML_LINK_INVALID:"\ub9c1\ud06c\ub294 # \ub610\ub294 \uc774 \ud398\uc774\uc9c0\uc758 \uc575\ucee4\ub9cc \uac00\ub9ac\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.",HTML_TOO_MANY_ELEMENTS:"\u
1c694\uc18c\uac00 400\uac1c\ub97c \ub118\uc2b5\ub2c8\ub2e4.",HTML_TOO_DEEP:"\uc694\uc18c\uac00 12\ub2e8\uacc4\ubcf4\ub2e4 \uae4a\uac8c \uc911\ucca9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",CSS_SYNTAX:"CSS\ub97c \ud574\uc11d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",CSS_TOO_LARGE:"CSS\uac00 12,000\uc790\ub97c \ub118\uc2b5\ub2c8\ub2e4.",CSS_AT_RULE:"@media(min-width/max-width)\uc640 @keyframes\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",CSS_SELECTOR:"\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc120\ud0dd\uc790\uc785\ub2c8\ub2e4(*, id, \uc18d\uc131 \uc120\ud0dd\uc790, :not, :has \ubd88\uac00).",CSS_PROPERTY:"\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 CSS \uc18d\uc131\uc785\ub2c8\ub2e4.",CSS_VALUE:"\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 CSS \uac12\uc785\ub2c8\ub2e4.",CSS_FUNCTION:"\uc774 \uc704\uce58\uc5d0 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 CSS \ud568\uc218\uc785\ub2c8\ub2e4.",CSS_VARIABLE:"var(--accent), var(--text), var(--background)\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",CSS_COLOR:"\uc0c9\uc0c1\uc740 \ud14c\ub9c8 \ud1a0\ud070\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",CSS_CONTENT:"content\ub294 ::before, ::after \uc548\uc5d0\uc11c \uc9e7\uc740 \ub530\uc634\ud45c \ubb38\uc790\uc5f4\ub85c\ub9cc \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",CSS_KEYFRAMES_NAME:"\ud0a4\ud504\ub808\uc784 \uc774\ub984\uc740 \uc18c\ubb38\uc790, \uc22b\uc790, \ud558\uc774\ud508\ub9cc \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",CSS_KEYFRAMES_SELECTOR:"\ud0a4\ud504\ub808\uc784 \ub2e8\uacc4\ub294 from, to \ub610\ub294 \ubc31\ubd84\uc728\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.",CSS_KEYFRAMES_UNKNOWN:"animation-name\uc740 \uc774 \uc139\uc158\uc5d0 \uc815\uc758\ud55c @keyframes\ub9cc \uac00\ub9ac\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.",NODE_ID_INVALID:"\uc774 \uc139\uc158 ID\ub85c\ub294 \ubc94\uc704 CSS\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",unknown:"\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc785\ub825\uc785\ub2c8\ub2e4."},unsavedNote:"\uc544\uc9c1 \uc800\uc7a5\ud558\uc9c0 \uc54a\uc740 \uc218\uc815 \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc800\uc7a5 \ud6c4 \uc774\ub3d9\ud558\uac70\ub098 \ucd08\uc548\uc744 \ubc84\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",discard:"\ucd08\uc548 \ubc84\ub9ac\uae30",plan:"\ud654\uba74 \uacc4\ud68d",planIntro:"\ucd5c\ub300 3\uac1c \ud654\uba74\uc744 \uacc4\ud68d\ud558\uc138\uc694. \uacc4\ud68d\uc744 \uc800\uc7a5\ud558\uba74 \ud3b8\uc9d1\ud560 \ube48 \ud654\uba74\uc774 \uc0dd\uae41\ub2c8\ub2e4. AI \uc0dd\uc131\uc740 \ud654\uba74\ubcc4\ub85c \ub530\ub85c \uc2b9\uc778\ud569\ub2c8\ub2e4.",title:"\ud654\uba74 \uc774\ub984",route:"\uacbd\ub85c",purpose:"\ud654\uba74 \ubaa9\uc801",add:"\ud654\uba74 \ucd94\uac00",review:"\ud654\uba74 \uacc4\ud68d \uac80\ud1a0",approve:"\uac80\ud1a0\ud55c \uacc4\ud68d \uc800\uc7a5",planError:"\uc774\ub984\xb7\ubaa9\uc801\uacfc \uc911\ubcf5 \uc5c6\ub294 \uc18c\ubb38\uc790 \uacbd\ub85c\ub97c \uac00\uc9c4 \ud654\uba74 1\u20133\uac1c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uae30\uc874 \ud654\uba74\uc740 \uacc4\ud68d\uc5d0 \uc720\uc9c0\ud558\uc138\uc694.",planReason:"\ud654\uba74 \uacc4\ud68d \uc800\uc7a5",detail:"\uc124\uba85 \ubb38\uad6c",eyebrow:"\uc0c1\ub2e8 \uc9e7\uc740 \ubb38\uad6c",image:"\uc774\ubbf8\uc9c0",alt:"\uc774\ubbf8\uc9c0 \uc124\uba85",artwork:"\ub3c4\ud615 \uc2a4\ud0c0\uc77c",chooseImage:"\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc",checkAsset:"\uc5c5\ub85c\ub4dc\ud55c \uc774\ubbf8\uc9c0 \ud655\uc778",imagePending:"\uc5c5\ub85c\ub4dc\ud588\uc2b5\ub2c8\ub2e4. \uc11c\ubc84 \uac80\uc0ac\uac00 \ub05d\ub09c \ub4a4 \ub2e4\uc2dc \ud655\uc778\ud558\uc138\uc694.",themeSave:"\ud14c\ub9c8 \uc800\uc7a5",background:"\ubc30\uacbd\uc0c9",foreground:"\ud14d\uc2a4\ud2b8 \uc0c9\uc0c1",font:"\uae00\uaf34 \uc2a4\ud0c0\uc77c",spacing:"\uac04\uaca9 (px)",radius:"\ubaa8\uc11c\ub9ac \ubc18\uacbd (px)",contrast:"\ud14d\uc2a4\ud2b8 \ub300\ube44",contrastNote:"\uc77c\ubc18 \ud14d\uc2a4\ud2b8 WCAG \uae30\uc900\uc740 4.5:1\uc785\ub2c8\ub2e4. \uc120\ud0dd\ud55c \ud14d\uc2a4\ud2b8\uc640 \ubc30\uacbd\uc0c9\ub9cc \ube44\uad50\ud569\ub2c8\ub2e4.",compare:"\ud604\uc7ac \ubc84\uc804\uacfc \ube44\uad50",before:"\uc120\ud0dd\ud55c \ubc84\uc804",after:"\ud604\uc7ac \ubc84\uc804",noDiff:"\ub450 \ubc84\uc804 \uc0ac\uc774\uc5d0 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",scope:"\uc218\uc815 \ubc94\uc704",frame:"\ud604\uc7ac \ud654\uba74",node:"\uc120\ud0dd\ud55c \uc694\uc18c",team:"\ud300 \xb7 \ub313\uae00",members:"\ud504\ub85c\uc81d\ud2b8 \uba64\ubc84",email:"\uc774\uba54\uc77c \uc8fc\uc18c",role:"\uad8c\ud55c",viewer:"\ubcf4\uae30",editorRole:"\ud3b8\uc9d1",invite:"\uba64\ubc84 \ucd08\ub300",inviteNote:"\ud3b8\uc9d1\uc790\ub294 \ub514\uc790\uc778\uc744 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd08\ub300\ub85c AI \uc0ac\uc6a9\ub7c9 \uc0ac\uc6a9 \uad8c\ud55c\uc774 \ubd80\uc5ec\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.",inviteReview:"\u
1cd08\ub300 \ub0b4\uc6a9 \ud655\uc778",revoke:"\uc811\uadfc \uad8c\ud55c \ucde8\uc18c",revokeNote:"\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uc811\uadfc \uad8c\ud55c\uc744 \ucde8\uc18c\ud569\ub2c8\ub2e4. \ub2e4\ub978 \ud504\ub85c\uc81d\ud2b8\uc758 \uba64\ubc84\uc2ed\uc740 \uc720\uc9c0\ub429\ub2c8\ub2e4.",comments:"\ub313\uae00",comment:"\ub313\uae00 \ub0b4\uc6a9",post:"\ub313\uae00 \ub0a8\uae30\uae30",resolve:"\ud574\uacb0\ub428\uc73c\ub85c \ud45c\uc2dc",reopen:"\ub2e4\uc2dc \uc5f4\uae30",emptyComments:"\uc774 \ud654\uba74\uc5d0\ub294 \uc544\uc9c1 \ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",reply:"\ub2f5\uae00",localComment:"\uc0d8\ud50c \ub313\uae00\uc740 \uc774 \ube0c\ub77c\uc6b0\uc800\uc5d0\ub9cc \uc800\uc7a5\ub418\uba70 \ub2e4\ub978 \uc0ac\ub78c\uc5d0\uac8c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",anchor:"\uc5f0\uacb0\ub41c \uc694\uc18c",all:"\uc804\uccb4",operations:"\uc791\uc5c5 \uae30\ub85d",open:"\uacb0\uacfc \uc5f4\uae30",period:"\uae30\uac04",status:"\uc0c1\ud0dc",last7:"\ucd5c\uadfc 7\uc77c",last30:"\ucd5c\uadfc 30\uc77c",summary:"\uc0ac\uc6a9\ub7c9 \uc694\uc57d",connect:"GitHub \uc5f0\uacb0\ud558\uae30",disconnect:"\uc5f0\uacb0 \ud574\uc81c",connections:"\uc5f0\uacb0\ub41c \uc11c\ube44\uc2a4",grants:"\ud5c8\uc6a9\ud55c MCP \ud074\ub77c\uc774\uc5b8\ud2b8",noConnections:"\uc544\uc9c1 \uc5f0\uacb0\ub41c \uc11c\ube44\uc2a4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",connectionNote:"GitHub App\uc744 \uc124\uce58\ud558\uace0 \ucf54\ub4dc \uc804\ub2ec \ub2e8\uacc4\uc5d0\uc11c \ud5c8\uc6a9\ud55c \uc800\uc7a5\uc18c\ub97c \uc120\ud0dd\ud558\uc138\uc694.",returnGithub:"GitHub \uc5f0\uacb0 \ub9c8\ubb34\ub9ac",complete:"\uc5f0\uacb0 \uc644\ub8cc",consent:"MCP \ud074\ub77c\uc774\uc5b8\ud2b8 \uad8c\ud55c \uc2b9\uc778",allow:"\uad8c\ud55c \uc2b9\uc778",deny:"\uac70\ubd80",scopes:"\uc694\uccad\ud55c \uad8c\ud55c",expires:"\uad8c\ud55c \ub9cc\ub8cc",client:"\ud074\ub77c\uc774\uc5b8\ud2b8",consentNote:"\uc0dd\uc131\uacfc PR \uc791\uc131\uc740 \ubcc4\ub3c4\uc758 \ub2e8\ud68c \uc2b9\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. Snailer \uc138\uc158 \ud1a0\ud070\uc744 MCP \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc81c\uacf5\ud558\uc9c0 \ub9c8\uc138\uc694.",docs:"API \xb7 MCP \uc548\ub0b4",callbackError:"\ud544\uc218 \ucf5c\ubc31 \uc815\ubcf4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \uc124\uc815\uc5d0\uc11c \uc5f0\uacb0\uc744 \ub2e4\uc2dc \uc2dc\uc791\ud558\uc138\uc694.",danger:"\uc0ad\uc81c \ud655\uc778",jobs:"\uc11c\ubc84 \uc791\uc5c5",costs:"\ubaa8\ub378 \uc6d0\uac00",awaiting:"\uc815\uc0b0 \ub300\uae30",quality:"\ud488\uc9c8 \uac80\uc0ac \uc0c1\uc138",noFindings:"\ubc18\ud658\ub41c \uac80\uc0ac \ud56d\ubaa9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",stub:"\ucd94\uac00 \ubc31\uc5d4\ub4dc \uad6c\ud604",manifest:"\ub0b4\ubcf4\ub0b8 \ud30c\uc77c",projectSettings:"\ud504\ub85c\uc81d\ud2b8 \uc124\uc815",rename:"\ud504\ub85c\uc81d\ud2b8 \uc774\ub984 \uc800\uc7a5",deleteProject:"\ud504\ub85c\uc81d\ud2b8 \uc0ad\uc81c",deleteNote:"\ud504\ub85c\uc81d\ud2b8\ub97c \uc0ad\uc81c\ud558\uace0 \ud65c\uc131 \ub9c1\ud06c\ub97c \ud3d0\uae30\ud569\ub2c8\ub2e4. \ud655\uc778\uc744 \uc704\ud574 \ud504\ub85c\uc81d\ud2b8 \uc774\ub984\uc744 \uc815\ud655\ud788 \uc785\ub825\ud558\uc138\uc694.",saved:"\uc800\uc7a5\ub428",refresh:"\uc0c8\ub85c\uace0\uce68",disconnected:"\uc5f0\uacb0 \ud574\uc81c\ub428",operationNote:"\uc0c8 \uc720\ub8cc \uc791\uc5c5\uc744 \uc2e4\ud589\ud558\uc9c0 \uc54a\uace0 \uae30\uc874 \uacb0\uacfc\ub97c \ub2e4\uc2dc \uc5fd\ub2c8\ub2e4."}},424(e,t,n){n.d(t,{R:()=>I,A:()=>k});var i=n(9950),r=n(3098),o=n(6987),a=n(9585),s=n(7096),c=n(3614),l=n(8797),d=n(8769),u=n(8538),p=n(4629),h=n(2074);const m=e=>"Design"===e.editor?{title:"Add an MCP server",intro:"Connect your own remote server, then choose which read tools each project may use.",unavailable:"Personal server registration is not available for this account yet.",url:"Server HTTPS URL",urlNote:"Use a public HTTPS Streamable HTTP endpoint on port 443. Localhost, stdio, redirects and tokens in URLs are not supported.",discover:"Check server",change:"Use a different URL",name:"Connection name",auth:"Authentication",choose:"Choose an option",oauth:"Sign in with OAuth",bearer:"My Bearer token",none:"No authentication",token:"Bearer token",expiry:"Connection expiry (optional)",expiryNote:"Defaults to 30 days. This does not extend your server token\u2019s lifetime.",privateNote:"Credentials are used only for this connection and kept out of browser storage and analytics.",manual:"Use my pre-registered OAuth client",manualRequired:"This server requires a pre-registered OAuth client. Register this exact redirect URI with its operator.",clientId:"Client ID",method:"Client authentication",secret:"Client secret",callback:"Redirect URI",issuer:"Authorization server",scopes:"Permissions to request",n
1oScopes:"No additional scopes requested.",registered:"This URL matches a supported provider. Continue with your own account; no client credentials are needed.",connect:"Connect server",continue:"Continue to sign in",consent:"Connecting lists available tools. You will review tools and allow projects separately.",pending:"Awaiting OAuth authorization",connected:"Server connected. Review its tools before allowing a project to use them.",review:"Review server tools",reviewNote:"Review the descriptions and input schemas from this server. A read-only hint is not a guarantee. Select only tools you trust to read data without running AI or charging you.",load:"Load tools for review",refresh:"Refresh tool preview",noTools:"This server returned no tools.",notReviewable:"Not eligible for approval",schema:"Input schema",annotations:"Server annotations",read:"I confirm the selected tools only read data and do not run AI or make changes.",free:"I confirm the selected tools do not charge for calls.",reset:"Saving this review clears this connection\u2019s existing project permissions and invalidates previously reviewed sources. Allow tools again in each project.",save:"Save reviewed tools",saved:"Review saved. Open a project\u2019s Sources tab and allow the tools there.",projects:"Open projects",expires:"Review expires",expired:"This review has expired. Check the server or load a new tool preview.",retry:"Retry the same request",uncertain:"The result is uncertain. The original request is held in memory for retry. Closing this dialog clears credentials; check the connection list before starting again.",list:"Close and check connections",working:"Working\u2026",errors:{INVALID_INPUT:"Check the name, authentication fields, scopes and expiry.",INVALID_SERVER_URL:"Enter a public HTTPS URL on port 443 without credentials, query or fragment.",INVALID_SERVER_METADATA:"This server\u2019s authentication metadata is unsupported or inconsistent.",CLIENT_REGISTRATION_REQUIRED:"Use a pre-registered OAuth client for this server.",PROVIDER_AUTHENTICATION_REQUIRED:"The external server rejected authentication. Update its credentials or reconnect. Your Snailer session is still active.",DISCOVERY_ALREADY_USED:"This server check was already used. Check existing connections before starting again.",TOOL_CATALOG_CHANGED:"The server\u2019s tools changed. Load and review the current tools, then restore project permissions.",NOT_FOUND:"This review is missing or expired. Check the server or load a new preview.",ACCESS_DENIED:"This account cannot manage personal MCP servers.",PROJECT_PERMISSION_REQUIRED:"Your project role does not allow this action.",CONNECTION_REVOKED:"This connection is expired or disconnected. Reconnect it.",RATE_LIMITED:"Too many requests. Wait a minute and try again.",UNAVAILABLE:"The server could not be reached. Retry the same request.",FEATURE_DISABLED:"Personal MCP connections are currently unavailable.",INVALID_RESPONSE:"The response could not be verified. Retry the same request or check existing connections.",unknown:"The result could not be confirmed. Retry the same request."}}:{title:"MCP \uc11c\ubc84 \ucd94\uac00",intro:"\uac1c\uc778 \uc6d0\uaca9 \uc11c\ubc84\ub97c \uc5f0\uacb0\ud558\uace0 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc77d\uae30 \ub3c4\uad6c\ub97c \uc9c1\uc811 \uc120\ud0dd\ud558\uc138\uc694.",unavailable:"\uc774 \uacc4\uc815\uc5d0\uc11c\ub294 \uc544\uc9c1 \uac1c\uc778 \uc11c\ubc84\ub97c \ub4f1\ub85d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",url:"\uc11c\ubc84 HTTPS \uc8fc\uc18c",urlNote:"\uacf5\uac1c HTTPS Streamable HTTP \uc8fc\uc18c(443 \ud3ec\ud2b8)\ub97c \uc0ac\uc6a9\ud558\uc138\uc694. localhost\xb7stdio\xb7\ub9ac\ub514\ub809\uc158\xb7\uc8fc\uc18c\uc5d0 \ub123\uc740 \ud1a0\ud070\uc740 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",discover:"\uc11c\ubc84 \ud655\uc778",change:"\ub2e4\ub978 \uc8fc\uc18c \uc785\ub825",name:"\uc5f0\uacb0 \uc774\ub984",auth:"\uc778\uc99d \ubc29\uc2dd",choose:"\uc120\ud0dd\ud558\uc138\uc694",oauth:"OAuth\ub85c \ub85c\uadf8\uc778",bearer:"\ub0b4 Bearer \ud1a0\ud070",none:"\uc778\uc99d \uc5c6\uc74c",token:"Bearer \ud1a0\ud070",expiry:"\uc5f0\uacb0 \ub9cc\ub8cc \uc2dc\uac01 (\uc120\ud0dd)",expiryNote:"\uc785\ub825\ud558\uc9c0 \uc54a\uc73c\uba74 30\uc77c\uc785\ub2c8\ub2e4. \uc11c\ubc84 \ud1a0\ud070\uc758 \uc2e4\uc81c \uc720\ud6a8\uae30\uac04\uc744 \uc5f0\uc7a5\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.",privateNote:"\uc778\uc99d \uc815\ubcf4\ub294 \uc774 \uc5f0\uacb0\uc5d0\ub9cc \uc0ac\uc6a9\ud558\uba70 \ube0c\ub77c\uc6b0\uc800 \uc800\uc7a5\uc18c\uc640 \ubd84\uc11d \ub3c4\uad6c\uc5d0 \ub0a8\uae30\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",manual:"\ubbf8\ub9ac \ub4f1\ub85d\ud55c \ub0b4 OAuth \ud074\ub77c\uc774\uc5b8\ud2b8 \uc0ac\uc6a9",manualRequired:"\uc774 \uc11c\ubc84\uc5d0\ub294 \uc0ac\uc804 \ub4f1\ub85d\ud55c OAuth \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc544\ub798 \uc815\ud655\ud55c \ub9ac\ub514\ub809\uc158 \uc8fc\uc18c\ub97c \uc11c\ubc84 \uc6b4\uc601\uc790\uc5d0\uac8c \ub4f1\ub85d\ud558\uc138\uc694.",clientId:"\ud074\ub77c\uc774\uc5b8\ud2b8 ID",method:"\ud074\ub77c\uc774\uc5b8\ud2b8 \uc778\uc99d \ubc29\uc2dd",secret:"\ud074\ub77c\uc774\uc5b8\ud2b8 \ube44\ubc00\ud0a4",callback:"\ub9ac\ub514\ub809\uc158 \uc8fc\uc18c",issuer:"\uc778\uc99d \uc11c\ubc84",scopes:"\uc694\uccad\ud560 \uad8c\ud55c",noScopes:"\ucd94\uac00 \uc694\uccad \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",registered:"\uc9c0\uc6d0\ud558\ub294 \uc81c\uacf5\uc790 \uc8fc\uc18c\uc785\ub2c8\ub2e4. \ubcc4\ub3c4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc815\ubcf4 \uc5c6\uc774 \ubcf8\uc778 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud558\uc138\uc694.",connect:"\uc11c\ubc84 \uc5f0\uacb0",continue:"\ub85c\uadf8\uc778 \uacc4\uc18d",consent:"\uc5f0\uacb0\ud558\uba74 \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ub3c4\uad6c \ubaa9\ub85d\uc744 \ud655\uc778\ud569\ub2c8\ub2e4. \ub3c4\uad6c \uac80\ud1a0\uc640 \ud504\ub85c\uc81d\ud2b8 \ud5c8\uc6a9\uc740 \ubcc4\ub3c4\ub85c \uc9c4\ud589\ud569\ub2c8\ub2e4.",pending:"OAuth \uc778\uc99d \ub300\uae30",connected:"\uc11c\ubc84\uac00 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc804\uc5d0 \ub3c4\uad6c\ub97c \uac80\ud1a0\ud558\uc138\uc694.",review:"\u
1c11c\ubc84 \ub3c4\uad6c \uac80\ud1a0",reviewNote:"\uc11c\ubc84\uac00 \uc81c\uacf5\ud55c \uc124\uba85\xb7\uc785\ub825 \uc2a4\ud0a4\ub9c8\ub97c \uac80\ud1a0\ud558\uc138\uc694. \uc77d\uae30 \uc804\uc6a9 \ud45c\uc2dc\ub294 \ubcf4\uc99d\uc774 \uc544\ub2d9\ub2c8\ub2e4. AI \uc2e4\ud589\xb7\ubcc0\uacbd\xb7\uacfc\uae08 \uc5c6\uc774 \uc790\ub8cc\ub9cc \uc77d\ub294\ub2e4\uace0 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \ub3c4\uad6c\ub9cc \uc120\ud0dd\ud558\uc138\uc694.",load:"\uac80\ud1a0\ud560 \ub3c4\uad6c \ubd88\ub7ec\uc624\uae30",refresh:"\ub3c4\uad6c \ubbf8\ub9ac\ubcf4\uae30 \uc0c8\ub85c\uace0\uce68",noTools:"\uc11c\ubc84\uc5d0\uc11c \ubc18\ud658\ud55c \ub3c4\uad6c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",notReviewable:"\ud5c8\uc6a9\ud560 \uc218 \uc5c6\ub294 \ub3c4\uad6c",schema:"\uc785\ub825 \uc2a4\ud0a4\ub9c8",annotations:"\uc11c\ubc84\uc758 \ub3c4\uad6c \uc124\uba85 \uc18d\uc131",read:"\uc120\ud0dd\ud55c \ub3c4\uad6c\ub294 AI \uc2e4\ud589\uc774\ub098 \ubcc0\uacbd \uc5c6\uc774 \uc790\ub8cc\ub9cc \uc77d\ub294 \uac83\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.",free:"\uc120\ud0dd\ud55c \ub3c4\uad6c\ub294 \ud638\ucd9c \ube44\uc6a9\uc774 \uc5c6\ub294 \uac83\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.",reset:"\uac80\ud1a0\ub97c \uc800\uc7a5\ud558\uba74 \uc774 \uc5f0\uacb0\uc758 \uae30\uc874 \ud504\ub85c\uc81d\ud2b8 \uad8c\ud55c\uacfc \uc790\ub8cc \ubbf8\ub9ac\ubcf4\uae30\uac00 \ubb34\ud6a8\ud654\ub429\ub2c8\ub2e4. \uac01 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub3c4\uad6c\ub97c \ub2e4\uc2dc \ud5c8\uc6a9\ud558\uc138\uc694.",save:"\uac80\ud1a0\ud55c \ub3c4\uad6c \uc800\uc7a5",saved:"\uac80\ud1a0\ub97c \uc800\uc7a5\ud588\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\uc758 \uc790\ub8cc \ud0ed\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub3c4\uad6c\ub97c \ud5c8\uc6a9\ud558\uc138\uc694.",projects:"\ud504\ub85c\uc81d\ud2b8 \uc5f4\uae30",expires:"\uac80\ud1a0 \ub9cc\ub8cc \uc2dc\uac01",expired:"\uac80\ud1a0\uac00 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc11c\ubc84\ub97c \ub2e4\uc2dc \ud655\uc778\ud558\uac70\ub098 \ub3c4\uad6c \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc0c8\ub85c \ubd88\ub7ec\uc624\uc138\uc694.",retry:"\uac19\uc740 \uc694\uccad \ub2e4\uc2dc \uc2dc\ub3c4",uncertain:"\uacb0\uacfc\ub97c \ud655\uc778\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc6d0\ub798 \uc694\uccad\uc744 \uba54\ubaa8\ub9ac\uc5d0 \ubcf4\uad00\ud574 \uc7ac\uc2dc\ub3c4\ud569\ub2c8\ub2e4. \ucc3d\uc744 \ub2eb\uc73c\uba74 \uc778\uc99d \uc815\ubcf4\uac00 \uc9c0\uc6cc\uc9c0\ubbc0\ub85c \uc0c8\ub85c \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uc5f0\uacb0 \ubaa9\ub85d\uc744 \ud655\uc778\ud558\uc138\uc694.",list:"\ub2eb\uace0 \uc5f0\uacb0 \ubaa9\ub85d \ud655\uc778",working:"\ucc98\ub9ac \uc911\u2026",errors:{INVALID_INPUT:"\uc774\ub984\xb7\uc778\uc99d \uc815\ubcf4\xb7\uad8c\ud55c\xb7\ub9cc\ub8cc \uc2dc\uac01\uc744 \ud655\uc778\ud558\uc138\uc694.",INVALID_SERVER_URL:"\uc778\uc99d \uc815\ubcf4\xb7\ucffc\ub9ac\xb7fragment \uc5c6\uc774 \uacf5\uac1c HTTPS \uc8fc\uc18c(443 \ud3ec\ud2b8)\ub97c \uc785\ub825\ud558\uc138\uc694.",INVALID_SERVER_METADATA:"\uc11c\ubc84\uc758 \uc778\uc99d \uc815\ubcf4 \ud615\uc2dd\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uac70\ub098 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",CLIENT_REGISTRATION_REQUIRED:"\uc774 \uc11c\ubc84\uc5d0 \ubbf8\ub9ac \ub4f1\ub85d\ud55c OAuth \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc138\uc694.",PROVIDER_AUTHENTICATION_REQUIRED:"\uc678\ubd80 \uc11c\ubc84 \uc778\uc99d\uc774 \uac70\uc808\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \uc778\uc99d \uc815\ubcf4\ub97c \uc218\uc815\ud558\uac70\ub098 \ub2e4\uc2dc \uc5f0\uacb0\ud558\uc138\uc694. Snailer \ub85c\uadf8\uc778\uc740 \uc720\uc9c0\ub429\ub2c8\ub2e4.",DISCOVERY_ALREADY_USED:"\uc774\ubbf8 \uc0ac\uc6a9\ud55c \uc11c\ubc84 \ud655\uc778 \uacb0\uacfc\uc785\ub2c8\ub2e4. \uc0c8\ub85c \uc5f0\uacb0\ud558\uae30 \uc804\uc5d0 \uae30\uc874 \uc5f0\uacb0 \ubaa9\ub85d\uc744 \ud655\uc778\ud558\uc138\uc694.",TOOL_CATALOG_CHANGED:"\uc11c\ubc84 \ub3c4\uad6c\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ubd88\ub7ec\uc640 \uac80\ud1a0\ud55c \ub4a4 \ud504\ub85c\uc81d\ud2b8 \uad8c\ud55c\uc744 \uc800\uc7a5\ud558\uc138\uc694.",NOT_FOUND:"\uac80\ud1a0 \uacb0\uacfc\uac00 \uc5c6\uac70\ub098 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc11c\ubc84\ub97c \ud655\uc778\ud558\uac70\ub098 \uc0c8 \ubbf8\ub9ac\ubcf4\uae30\ub97c \ubd88\ub7ec\uc624\uc138\uc694.",ACCESS_DENIED:"\uc774 \uacc4\uc815\uc740 \uac1c\uc778 MCP \uc11c\ubc84\ub97c \uad00\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",PROJECT_PERMISSION_REQUIRED:"\ud604\uc7ac \ud504\ub85c\uc81d\ud2b8 \uc5ed\ud560\ub85c\ub294 \uc774 \uc791\uc5c5\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",CONNECTION_REVOKED:"\ub9cc\ub8cc\ub418\uac70\ub098 \ud574\uc81c\ub41c \uc5f0\uacb0\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc5f0\uacb0\ud558\uc138\uc694.",RATE_LIMITED:"\u
1c694\uccad\uc774 \ub9ce\uc2b5\ub2c8\ub2e4. 1\ubd84 \ub4a4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",UNAVAILABLE:"\uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uac19\uc740 \uc694\uccad\uc744 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",FEATURE_DISABLED:"\ud604\uc7ac \uac1c\uc778 MCP \uc5f0\uacb0\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",INVALID_RESPONSE:"\uc751\ub2f5\uc744 \uac80\uc99d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uac19\uc740 \uc694\uccad\uc744 \uc7ac\uc2dc\ub3c4\ud558\uac70\ub098 \uae30\uc874 \uc5f0\uacb0\uc744 \ud655\uc778\ud558\uc138\uc694.",unknown:"\uacb0\uacfc\ub97c \ud655\uc778\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uac19\uc740 \uc694\uccad\uc744 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694."}};var g=n(2555);const v=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2048;return"string"===typeof e&&e.length>0&&e.length<=t},f=e=>Array.isArray(e)&&e.length<=100&&e.every(e=>v(e))&&new Set(e).size===e.length,x=e=>"string"===typeof e&&/^[a-f0-9]{64}$/.test(e),b=e=>e&&"object"===typeof e&&!Array.isArray(e),y=["none","client_secret_basic","client_secret_post"];function _(e){try{if("string"!==typeof e||e.length>2048||/[\s\\?#]/.test(e.trim()))throw new Error;const t=new URL(e.trim()),n=t.hostname.toLowerCase();if("https:"!==t.protocol||t.username||t.password||t.port||!n.includes(".")||/^[\d.]+$/.test(n)||n.includes(":")||/(^|\.)(localhost|local|internal)$/.test(n))throw new Error;return t.href}catch(t){throw new l.zE("INVALID_SERVER_URL")}}function w(e){const t=(0,i.useRef)(!0),n=(0,i.useRef)(!1),r=(0,i.useRef)(null),[o,a]=(0,i.useState)(!1),[s,c]=(0,i.useState)(null),[d,u]=(0,i.useState)(!1);(0,i.useEffect)(()=>(t.current=!0,()=>{t.current=!1,r.current=null}),[e]);const p=async i=>{if(!n.current){n.current=!0,a(!0),c(null);try{const n=await e[i.method](i.path,i.body,i.key);if(!t.current)return;await i.accept(n),r.current=null,u(!1)}catch(o){if(!t.current)return;const e=["unknown","unavailable","UNAVAILABLE","INVALID_RESPONSE"].includes(o.code)||o.status>=500;c(o.code||"unknown"),u(e),e||(r.current=null)}finally{n.current=!1,t.current&&a(!1)}}};return{busy:o,error:s,uncertain:d,clearError:()=>c(null),perform:(e,t,i,o)=>{if(n.current||r.current)return;const a={method:e,path:t,body:i,accept:o,key:(0,l.tu)()};return r.current=a,p(a)},retry:()=>r.current&&p(r.current)}}var E=n(4414);function N(e){const[t,n]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{if(n(!!e&&!(0,c.Cb)(e)),!e)return;const t=setTimeout(()=>n(!0),Math.max(0,Math.min(2147483647,Date.parse(e)-Date.now())));return()=>clearTimeout(t)},[e]),t}function S(e){let{request:t,s:n}=e;return(0,E.jsxs)(E.Fragment,{children:[t.error&&(0,E.jsx)("p",{role:"alert",className:"uxf-notice error",children:n.errors[t.error]||n.errors.unknown}),t.uncertain&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("p",{className:"uxf-notice",children:n.uncertain}),(0,E.jsx)("button",{className:"uxf-button primary",disabled:t.busy,onClick:t.retry,children:n.retry})]}),t.busy&&(0,E.jsx)("p",{role:"status",children:n.working})]})}function A(e){let{access:t,catalog:n,c:r,initialUrl:o="",onClose:a,onConnected:s}=e;const d=m(r),u=w(t.api),[h,x]=(0,i.useState)(o),[b,A]=(0,i.useState)(null),[T,I]=(0,i.useState)(""),[k,C]=(0,i.useState)(""),[j,R]=(0,i.useState)(!1),[D,L]=(0,i.useState)(""),[O,U]=(0,i.useState)(""),[P,M]=(0,i.useState)(""),[H,z]=(0,i.useState)(""),[G,B]=(0,i.useState)(""),[V,F]=(0,i.useState)([]),[q,Y]=(0,i.useState)(null),K=t.can("uxforge.external_mcp.register")&&!0===(null===n||void 0===n?void 0:n.custom_server_available),Q=N(null===b||void 0===b?void 0:b.expires_at),W=u.busy||u.uncertain||!K,J=null!==b&&void 0!==b&&b.registered_provider_id?n.items.find(e=>e.provider_id===b.registered_provider_id&&e.connect_available):null,X=()=>{z(""),M(""),L("")},$="client_credentials_required"===(null===b||void 0===b?void 0:b.oauth_registration)||"CLIENT_REGISTRATION_REQUIRED"===u.error;return(0,E.jsx)(p.lG,{title:d.title,c:r,onClose:()=>!u.busy&&a(),children:(0,E.jsxs)("div",{className:"uxf-personal-mcp ph-no-capture ph-mask","data-clarity-mask":"true",children:[(0,E.jsx)("p",{children:d.intro}),!K&&(0,E.jsx)("p",{className:"uxf-notice",children:d.unavailable}),b?(0,E.jsxs)("form",{onSubmit:e=>{if(e.preventDefault(),W||!b)return;if(Y(null),!(0,c.Cb)(b.expires_at))return void Y("NOT_FOUND");if(b.registered_provider_id)return J?void u.perform("post","".concat(c.be,"/connections/start"),{provider_id:J.provider_id,project_id:null,requested_scopes:J.requested_scopes},e=>{const t=(null===e||void 0===e?void 0:e.connection_id)&&(0,c.FQ)(e.authorization_url,e.connection_id);if(!t||!(0,c.Cb)(e.expires_at))throw new l.zE("INVALID_RESPONSE");X(),window.location.assign(t)}):void Y("FEATURE_DISABLED");let t;try{if(!T.trim()||!b.auth_types.includes(k))throw new l.zE("INVALID_INPUT");t=function(e){let t,{type:n,manual:i,clientId:r,method:o,secret:a,token:s,expiry:c}=e;if("oauth"===n){if(!i)return{type:n};if(!v(r.trim())||!y.includes(o)||"none"!==o&&!v(a,16e3))throw new l.zE("INVALID_INPUT");return(0,g.A)({type:n,client_id:r.trim(),token_endpoint_auth_method:o}
1,"none"===o?{}:{client_secret:a})}if(!["bearer","none"].includes(n)||"bearer"===n&&(!v(s,16e3)||/\s/.test(s)))throw new l.zE("INVALID_INPUT");if(c){const e=Date.parse(c);if(!(e>Date.now()&&e<=Date.now()+316224e5))throw new l.zE("INVALID_INPUT");t=new Date(e).toISOString()}return(0,g.A)((0,g.A)({type:n},"bearer"===n?{token:s}:{}),t?{expires_at:t}:{})}({type:k,manual:j||"CLIENT_REGISTRATION_REQUIRED"===u.error,clientId:D,method:O,secret:P,token:H,expiry:G})}catch(n){return void Y(n.code)}u.perform("post","".concat(c.be,"/connections/custom"),{discovery_id:b.discovery_id,display_name:T.trim(),requested_scopes:"oauth"===k?V:[],auth:t},e=>{(0,c.KD)(e,e=>function(e,t,n){try{return e.connection_id===t.discovery_id&&_(e.server_url)===_(t.server_url)&&e.auth_type===n&&(0,c.Cb)(e.expires_at)&&("oauth"===n?"pending"===e.status&&!!(0,c.FQ)(e.authorization_url,e.connection_id):"connected"===e.status&&null===e.authorization_url)}catch(i){return!1}}(e,b,k)),X(),"pending"===e.status?window.location.assign((0,c.FQ)(e.authorization_url,e.connection_id)):s(e)})},autoComplete:"off",children:[(0,E.jsx)("p",{className:"uxf-source-address",children:b.server_url}),(0,E.jsxs)("p",{children:[d.expires,": ",new Date(b.expires_at).toLocaleString()]}),Q&&(0,E.jsx)("p",{role:"status",className:"uxf-notice",children:d.expired}),b.registered_provider_id?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("p",{children:d.registered}),(0,E.jsx)("h3",{children:(null===J||void 0===J?void 0:J.name)||b.registered_provider_id}),(0,E.jsx)("p",{children:d.scopes}),(0,E.jsx)("ul",{children:null===J||void 0===J?void 0:J.requested_scopes.map(e=>(0,E.jsx)("li",{children:e},e))})]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)("label",{className:"uxf-field",children:[d.name,(0,E.jsx)("input",{required:!0,maxLength:200,disabled:W,value:T,onChange:e=>I(e.target.value)})]}),(0,E.jsxs)("label",{className:"uxf-field",children:[d.auth,(0,E.jsxs)("select",{disabled:W,value:k,onChange:e=>{X(),C(e.target.value),u.clearError()},children:[(0,E.jsx)("option",{value:"",children:d.choose}),b.auth_types.map(e=>(0,E.jsx)("option",{value:e,children:d[e]},e))]})]}),"oauth"===k&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)("p",{className:"uxf-source-address",children:[d.issuer,": ",b.issuer]}),(0,E.jsx)("p",{children:d.scopes}),!V.length&&!b.requested_scopes.length&&(0,E.jsx)("p",{children:d.noScopes}),b.requested_scopes.map(e=>(0,E.jsxs)("label",{className:"uxf-review-confirm",children:[(0,E.jsx)("input",{type:"checkbox",disabled:W,checked:V.includes(e),onChange:t=>F(n=>t.target.checked?[...n,e]:n.filter(t=>t!==e))}),e]},e)),(0,E.jsxs)("label",{className:"uxf-review-confirm",children:[(0,E.jsx)("input",{type:"checkbox",disabled:W||$,checked:j||$,onChange:e=>{X(),R(e.target.checked)}}),d.manual]}),(j||$)&&(0,E.jsxs)(E.Fragment,{children:[$&&(0,E.jsx)("p",{className:"uxf-notice",children:d.manualRequired}),(0,E.jsxs)("label",{className:"uxf-field",children:[d.callback,(0,E.jsx)("input",{readOnly:!0,value:b.redirect_uri})]}),(0,E.jsxs)("label",{className:"uxf-field",children:[d.clientId,(0,E.jsx)("input",{required:!0,autoComplete:"off",maxLength:2048,disabled:W,value:D,onChange:e=>L(e.target.value)})]}),(0,E.jsxs)("label",{className:"uxf-field",children:[d.method,(0,E.jsxs)("select",{required:!0,disabled:W,value:O,onChange:e=>{M(""),U(e.target.value)},children:[(0,E.jsx)("option",{value:"",children:d.choose}),b.token_endpoint_auth_methods.filter(e=>y.includes(e)).map(e=>(0,E.jsx)("option",{value:e,children:e},e))]})]}),O&&"none"!==O&&(0,E.jsxs)("label",{className:"uxf-field",children:[d.secret,(0,E.jsx)("input",{required:!0,type:"password",autoComplete:"new-password",maxLength:16e3,disabled:W,value:P,onChange:e=>M(e.target.value)})]})]})]}),"bearer"===k&&(0,E.jsxs)("label",{className:"uxf-field",children:[d.token,(0,E.jsx)("input",{required:!0,type:"password",autoComplete:"new-password",maxLength:16e3,disabled:W,value:H,onChange:e=>z(e.target.value)})]}),["bearer","none"].includes(k)&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)("label",{className:"uxf-field",children:[d.expiry,(0,E.jsx)("input",{type:"datetime-local",disabled:W,value:G,onChange:e=>B(e.target.value)})]}),(0,E.jsx)("p",{children:d.expiryNote})]}),k&&"none"!==k&&(0,E.jsx)("p",{children:d.privateNote})]}),(0,E.jsx)("p",{children:d.consent}),(0,E.jsxs)("div",{className:"uxf-actions",children:[(0,E.jsx)("button",{type:"button",className:"uxf-button",disabled:W,onClick:()=>{X(),A(null),C(""),R(!1),F([]),Y(null),u.clearError()},children:d.change}),(0,E.jsx)("button",{className:"uxf-button primary",disabled:W||Q||!k||!!b.registered_provider_id&&!J,children:"oauth"===k?d.continue:d.connect})]})]}):(0,E.jsxs)("form",{onSubmit:e=>{if(e.preventDefault(),W)return;let t;Y(null);try{t=_(h)}catch(n){return void Y(n.code)}u.perform("post","".concat(c.be,"/servers/discover"),{server_url:t},e=>{(0,c.KD)(e,e=>function(e,t){try{const n=new URL(e.redirect_uri,window.location.origin);return v(e.discovery_id,200)&&_(e.server_url)===t&&(0,c.Cb)(e.expires_at)&&f(e.auth_types)&&e.auth_types.length>0&&e.auth_types.every(e=>["oauth","bearer","none"].includes(e))&&["automatic","client_credentials_required","registered_provider","not_required"].includes(e.oauth_registration)&&(null===e.issuer||_(e.issuer))&&f(e.requested_scopes)&&f(e.token_endpoint_auth_methods)&&(null===e.registered_provider_id||v(e.registered_provider_id,200))&&"registered_provider"===e.oauth_registration===(null!==e.registered_provider_id)&&(!e.auth_types.includes("oauth")||!!e.issuer)&&n.origin===window.location.origin&&!n.username&&!n.password&&!n.search&&!n.hash&&n.pathname==="/api/uxforge/oauth/external/callback/custom-".concat(encodeURIComponent(e.discovery_id))}catch(n){return!1}}(e,t)),A(e),x(e.server_url),F(e.requested_scopes),R("client_credentials_required"===e.oauth_registration),U(e.token_endpoint_auth_methods.find(e=>y.includes(e))||""),C(e.registered_provider_id?"oauth":"")}
1)},children:[(0,E.jsxs)("label",{className:"uxf-field",children:[d.url,(0,E.jsx)("input",{type:"url",required:!0,maxLength:2048,autoComplete:"off",placeholder:"https://mcp.example.com/mcp",disabled:W,value:h,onChange:e=>x(e.target.value)})]}),(0,E.jsx)("p",{children:d.urlNote}),(0,E.jsx)("button",{className:"uxf-button primary",disabled:W||!h.trim(),children:d.discover})]}),q&&(0,E.jsx)("p",{role:"alert",className:"uxf-notice error",children:d.errors[q]||d.errors.unknown}),(0,E.jsx)(S,{request:u,s:d}),(u.uncertain||"DISCOVERY_ALREADY_USED"===u.error)&&(0,E.jsx)("button",{className:"uxf-button",disabled:u.busy,onClick:a,children:d.list})]})})}function T(e){let{access:t,connection:n,c:r,onClose:o,onSaved:a}=e;const s=m(r),d=w(t.api),[u,g]=(0,i.useState)(null),[f,y]=(0,i.useState)([]),[_,A]=(0,i.useState)(!1),[T,I]=(0,i.useState)(!1),[k,C]=(0,i.useState)(!1),j=N(null===u||void 0===u?void 0:u.expires_at),R=t.can("uxforge.external_mcp.register"),D=d.busy||d.uncertain||!R,L="".concat(c.be,"/connections/").concat((0,l.a)(n.id)),O=j||["TOOL_CATALOG_CHANGED","NOT_FOUND"].includes(d.error);return(0,E.jsx)(p.lG,{title:s.review,c:r,onClose:()=>!d.busy&&o(),children:(0,E.jsxs)("div",{className:"uxf-personal-mcp ph-no-capture ph-mask","data-clarity-mask":"true",children:[(0,E.jsx)("h3",{children:n.display_name}),(0,E.jsx)("p",{className:"uxf-source-address",children:n.server_url}),(0,E.jsx)("p",{children:s.reviewNote}),k?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("p",{role:"status",children:s.saved}),(0,E.jsx)(h.N_,{className:"uxf-button",to:"/design/projects",children:s.projects})]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("button",{className:"uxf-button",disabled:D,onClick:()=>{D||(g(null),y([]),A(!1),I(!1),C(!1),d.perform("post","".concat(L,"/tool-previews"),{},e=>g((0,c.KD)(e,e=>((e,t)=>(null===e||void 0===e?void 0:e.connection_id)===t&&v(e.preview_id,200)&&x(e.catalog_hash)&&(0,c.Cb)(e.expires_at)&&Array.isArray(e.items)&&e.items.length<=100&&new Set(e.items.map(e=>null===e||void 0===e?void 0:e.name)).size===e.items.length&&e.items.every(e=>{var t,n,i;return v(null===e||void 0===e?void 0:e.name,200)&&"string"===typeof e.description&&e.description.length<=256e3&&(null===e.input_schema||b(e.input_schema))&&(null===e.annotations||b(e.annotations))&&x(e.fingerprint)&&"boolean"===typeof e.reviewable&&(!e.reviewable||"object"===(null===(t=e.input_schema)||void 0===t?void 0:t.type)&&!1!==(null===(n=e.annotations)||void 0===n?void 0:n.readOnlyHint)&&!0!==(null===(i=e.annotations)||void 0===i?void 0:i.destructiveHint))}))(e,n.id)))))},children:u?s.refresh:s.load}),u&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)("p",{children:[s.expires,": ",new Date(u.expires_at).toLocaleString()]}),j&&(0,E.jsx)("p",{role:"status",children:s.expired}),!u.items.length&&(0,E.jsx)("p",{children:s.noTools}),u.items.map(e=>(0,E.jsxs)("article",{className:"uxf-personal-tool",children:[(0,E.jsxs)("label",{className:"uxf-tool-choice",children:[(0,E.jsx)("input",{type:"checkbox",disabled:D||O||!e.reviewable,checked:f.includes(e.name),onChange:t=>y(n=>t.target.checked?[...n,e.name]:n.filter(t=>t!==e.name))}),(0,E.jsxs)("span",{children:[(0,E.jsx)("strong",{children:e.name}),(0,E.jsx)("small",{children:e.description})]})]}),!e.reviewable&&(0,E.jsx)("p",{children:s.notReviewable}),(0,E.jsxs)("details",{children:[(0,E.jsx)("summary",{children:s.schema}),(0,E.jsx)("pre",{children:JSON.stringify(e.input_schema,null,2)})]}),(0,E.jsxs)("details",{children:[(0,E.jsx)("summary",{children:s.annotations}),(0,E.jsx)("pre",{children:JSON.stringify(e.annotations||{},null,2)})]})]},e.name)),(0,E.jsx)("p",{className:"uxf-notice",children:s.reset}),(0,E.jsxs)("label",{className:"uxf-review-confirm",children:[(0,E.jsx)("input",{type:"checkbox",disabled:D||O,checked:_,onChange:e=>A(e.target.checked)}),s.read]}),(0,E.jsxs)("label",{className:"uxf-review-confirm",children:[(0,E.jsx)("input",{type:"checkbox",disabled:D||O,checked:T,onChange:e=>I(e.target.checked)}),s.free]}),(0,E.jsx)("button",{className:"uxf-button primary",disabled:D||O||!_||!T,onClick:()=>{!D&&_&&T&&u&&(0,c.Cb)(u.expires_at)&&d.perform("put","".concat(L,"/reviewed-tools"),{preview_id:u.preview_id,catalog_hash:u.catalog_hash,tool_names:f,confirm_read_only:!0,confirm_no_charge:!0},e=>{(0,c.KD)(e,e=>((e,t,n)=>(null===e||void 0===e?void 0:e.connection_id)===t&&v(e.tools_version)&&!0===e.project_grants_reset&&Array.isArray(e.items)&&e.items.length===n.length&&new Set(e.items.map(e=>null===e||void 0===e?void 0:e.name)).size===e.items.length&&e.items.every(e=>{var t;return n.includes(null===e||void 0===e?void 0:e.name)&&!0===e.read_only&&"string"===typeof e.description&&"object"===(null===(t=e.input_schema)||void 0===t?void 0:t.type)}))(e,n.id,f)),C(!0),g(null),a()})},children:s.save})]})]}),(0,E.jsx)(S,{request:d,s:s})]})})}function I(e){let{error:t,c:n}=e;const i=(0,s.X8)(n);return t?(0,E.jsx)("p",{className:"uxf-notice error",role:"alert",children:i.errors[t]||n.errors[t]||i.errors.unknown}):null}function k(e){var t,n,h,g;let{access:v,c:f}=e;const x=(0,s.X8)(f),b=m(f),y=(0,d.A)(v.api),[_,w]=(0,i.useState)(null),[N,S]=(0,i.useState)(null),[k,C]=(0,i.useState)(!1),[j,R]=(0,i.useState)(""),[D,L]=(0,i.useState)(null),[O,U]=(0,i.useState)([]),[P,M]=(0,i.useState)(void 0),H=(0,i.useRef)(!1),z=(0,i.useRef)(!0),G=(0,u.A)(v.api),B=v.can("uxforge.integrations.manage"),V=v.can("uxforge.external_mcp.register")&&!0===(null===(t=y.catalog)||void 0===t?void 0:t.custom_server_available);(0,i.useEffect)(()=>(z.current=!0,()=>{z.current=!1}),[]),(0,i.useEffect)(()=>{U([]),M(void 0),w(null)},[y.attempt]);const F=async e=>{if(!H.current){H.current=!0,C(!0),S(null);try{await e()}catch(t){z.current&&S(t.code||"unknown")}finally{H.current=!1,z.current&&C(!1)}}},q=void 0===P?null===(n=y.connections)||void 0===n?void 0:n.next_cursor:P,Y=[...new Map([...(null===(h=y.connections)||void 0===h?void 0:h.items)||[],...O].map(e=>[e.id,e])).values()];return(0,E.jsxs)("section",{className:"uxf-external-section ph-no-capture ph-mask","data-clarity-mask":"true","aria-labelledby":"external-tools-title",children:[(0,E.jsxs)("div",{className:"uxf-integration-toolbar",children:[(0,E.jsxs)("div",{children:[(0,E.jsx)("p",{className:"uxf-eyebrow",children:x.direction}),(0,E.jsxs)("h2",{id:"external-tools-title",children:[(0,E.jsx)(r.A,{size:22})," ",x.title]}),(0,E.jsx)("p",{children:x.intro})]}),(0,E.jsxs)("button",{className:"uxf-button",disabled:k||y.loading,onClick:()=>{S(null),R(""),y.refresh()},children:[(0,E.jsx)(o.A,{size:14}),x.retry]})]}),y.loading&&(0,E.jsx)("p",{role:"status",children:x.loading}),y.pending&&(0,E.jsx)("p",{className:"uxf-notice",role:"status",children:x.pending}),(0,E.jsx)(I,{c:f,error:y.error||!_&&N}),j&&(0,E.jsx)("p",{role:"status",children:j}),!B&&(0,E.jsx)("p",{children:x.noPermission}),(0,E.jsxs)("div",{className:"uxf-integration-grid",children:[y.catalog?y.catalog.items.map(e=>(0,E.jsxs)("article",{className:"uxf-delivery-card",children:[(0,E.jsx)("p",{className:"uxf-eyebrow",children:"figma_rest"===e.kind?x.rest:x.mcp}),(0,E.jsx)("h3",{children:e.name}),(0,E.jsx)("p",{children:e.connect_available?x.consent:x.reasons[e.reason_code]||x.future}),(0,E.jsxs)("button",{className:"uxf-button primary",disabled:k||!B||!e.connect_available,onClick:()=>{S(null),w({provider:e})},children:[x.connect,(0,E.jsx)(a.A,{size:14})]})]},e.provider_id)):!y.loading&&(0,E.jsx)(E.Fragment,{children:[x.figmaMcp,x.figmaRest,x.mcp].map(e=>(0,E.jsxs)("article",{className:"uxf-delivery-card",children:[(0,E.jsx)("h3",{children:e}),(0,E.jsx)("p",{children:x.future}),(0,E.jsx)("button",{className:"uxf-button",disabled:!0,children:x.connect})]},e))}),0===(null===(g=y.catalog)||void 0===g?void 0:g.items.length)&&(0,E.jsx)("p",{children:x.catalogEmpty})]}),(0,E.jsxs)("article",{className:"uxf-delivery-card uxf-personal-card",children:[(0,E.jsx)("h3",{children:b.title}),(0,E.jsx)("p",{children:b.intro}),!V&&(0,E.jsx)("p",{children:b.unavailable}),(0,E.jsx)("button",{className:"uxf-button primary",disabled:k||!V,onClick:()=>L({register:!0}),children:b.title})]}
1),y.connections&&(0,E.jsxs)("div",{className:"uxf-connection-list",children:[!Y.length&&(0,E.jsx)("p",{children:x.empty}),Y.map(e=>{var t;return(0,E.jsxs)("div",{className:"uxf-member",children:[(0,E.jsxs)("div",{children:[(0,E.jsx)("strong",{children:e.display_name}),!0===e.personal&&(0,E.jsx)("small",{className:"uxf-source-address",children:e.server_url}),(0,E.jsxs)("small",{children:[e.provider_id," \xb7 ",x["pending"===(0,c.J1)(e)?"pendingStatus":(0,c.J1)(e)]]}),e.expires_at&&(0,E.jsxs)("small",{children:[x.expires,": ",new Date(e.expires_at).toLocaleString()]}),(0,E.jsxs)("small",{children:[x.projects,": ",e.project_ids.length]}),!0===e.personal&&"connected"===(0,c.J1)(e)&&(0,E.jsx)("button",{className:"uxf-button",disabled:k||!v.can("uxforge.external_mcp.register"),onClick:()=>L({connection:e}),children:b.review}),!0===e.personal&&["expired","revoked","suspended"].includes((0,c.J1)(e))&&(0,E.jsx)("button",{className:"uxf-button",disabled:k||!V,onClick:()=>L({register:!0,url:e.server_url}),children:x.reconnect}),!0!==e.personal&&["expired","revoked","suspended"].includes((0,c.J1)(e))&&(0,E.jsx)("button",{className:"uxf-button",disabled:k||!B||!(null!==(t=y.catalog)&&void 0!==t&&t.items.some(t=>t.provider_id===e.provider_id&&t.connect_available)),onClick:()=>{S(null),w({provider:y.catalog.items.find(t=>t.provider_id===e.provider_id)})},children:x.reconnect})]}),(0,E.jsx)("button",{className:"uxf-button",disabled:k||!B||"revoked"===e.status,onClick:()=>{S(null),w({connection:e})},children:x.revoke})]},e.id)}),q&&(0,E.jsx)("button",{className:"uxf-button",disabled:k,onClick:()=>q&&F(async()=>{const e=(0,c.KD)(await v.api.get("".concat(c.be,"/connections?cursor=").concat(encodeURIComponent(q))),c.EG);z.current&&(U(t=>[...t,...e.items]),M(e.next_cursor))}),children:x.more})]}),(null===D||void 0===D?void 0:D.register)&&(0,E.jsx)(A,{access:v,catalog:y.catalog,c:f,initialUrl:D.url,onClose:()=>{L(null),y.refresh()},onConnected:e=>{R(b.connected),L(null),y.refresh()}},"".concat(v.owner,":register")),(null===D||void 0===D?void 0:D.connection)&&(0,E.jsx)(T,{access:v,connection:D.connection,c:f,onClose:()=>L(null),onSaved:y.refresh},"".concat(v.owner,":").concat(D.connection.id)),_&&(0,E.jsxs)(p.lG,{title:_.provider?x.review:x.revokeTitle,c:f,onClose:()=>!k&&w(null),children:[_.provider?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("h3",{children:_.provider.name}),(0,E.jsx)("p",{children:x.scopes}),(0,E.jsx)("ul",{children:_.provider.requested_scopes.map(e=>(0,E.jsx)("li",{children:(0,E.jsx)("code",{children:e})},e))}),(0,E.jsx)("p",{children:x.consent})]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("h3",{children:_.connection.display_name}),(0,E.jsx)("p",{children:x.revokeNote}),"figma-rest"===_.connection.provider_id&&(0,E.jsx)("p",{className:"uxf-notice",children:x.figmaDisconnect})]}),(0,E.jsx)(I,{c:f,error:N}),(0,E.jsxs)("div",{className:"uxf-actions",children:[(0,E.jsx)("button",{className:"uxf-button",disabled:k,onClick:()=>w(null),children:f.cancel}),(0,E.jsx)("button",{className:"uxf-button primary",disabled:k||!B,onClick:_.provider?()=>B&&(null===_||void 0===_?void 0:_.provider)&&F(async()=>{const e=(0,c.KD)(await v.api.get("".concat(c.be,"/catalog")),c.Ok).items.find(e=>e.provider_id===_.provider.provider_id);if(null===e||void 0===e||!e.connect_available||JSON.stringify(e.requested_scopes)!==JSON.stringify(_.provider.requested_scopes))return w(null),void y.refresh();const t=await G("post","".concat(c.be,"/connections/start"),{provider_id:e.provider_id,project_id:null,requested_scopes:e.requested_scopes}),n=(null===t||void 0===t?void 0:t.connection_id)&&(0,c.FQ)(t.authorization_url,t.connection_id);if(!n||!(0,c.Cb)(t.expires_at))throw new l.zE("INVALID_RESPONSE");z.current&&window.location.assign(n)}):()=>B&&(null===_||void 0===_?void 0:_.connection)&&F(async()=>{await G("delete","".concat(c.be,"/connections/").concat((0,l.a)(_.connection.id)),{}),z.current&&(w(null),R(x.done),y.refresh())}),children:_.provider?x.continue:x.revoke})]})]})]})}},915(e,t,n){n.d(t,{M:()=>a});var i=n(2555);const r={label:"Design, with a way forward.",eyebrow:"SNAILER DESIGN",title:["An idea worth building.","A design you can work with."],intro:"Shape an interface, refine the details, and carry the evidence into your codebase. One workspace, from the first screen to the handoff.",tryDemo:"Explore the workspace",projects:"Your projects",start:"Start a project",previewLabel:"INTERACTIVE PRODUCT PREVIEW",previewNote:"A sample project. Edit it in your browser, without an account.",flow:["Describe","Design","Inspect","Hand off"],features:[["01 / MAKE IT YOURS","Every detail has a place.","Edit text, images, typography, spacing, and shared colors. Keep every screen and its history in one workspace."],["02 / SEE THE EVIDENCE","Know 
1what is ready.","Keep checks attached to the version they examined. See what passed, what changed, and what still needs attention."],["03 / KEEP GOING","A handoff with context.","Review the files, assets, and unfinished integrations before taking the design into a Next.js project."]],early:"Snailer Design",earlyNote:"Sign in to generate a design, run server quality checks, and export a Next.js bundle. Connect GitHub and review the diff before creating a Draft PR.",footerTitle:"Give your next idea a little structure.",back:"Back",open:"Open workspace",demo:"Sample workspace",demoNotice:"Local sample \xb7 Changes stay in this browser. No AI calls or charges.",live:"Connected workspace",editor:"Design",history:"History",handoff:"Handoff",pages:"SCREENS",layers:"LAYERS",properties:"Properties",assistant:"Create with AI",canvas:"Design preview",viewport:"Preview width",desktop:"Desktop",tablet:"Tablet",mobile:"Mobile",selected:"SELECTED ELEMENT",content:"Text content",apply:"Save changes",saved:"Saved",unsaved:"Not saved",saving:"Saving\u2026",theme:"PROJECT THEME",accent:"Accent color",reset:"Reset sample",resetTitle:"Reset this sample?",resetNote:"This removes your local edits and sample version history. Your server projects are not affected.",cancel:"Cancel",confirm:"Confirm",close:"Close",name:"Project name",newProject:"New project",workspace:"Workspace",prompt:"What would you like to build?",promptHint:"Describe a screen, its audience, and the key action.",screenshot:"Reference screenshot",uploadHint:"PNG, JPEG or WebP \xb7 up to 5 MB",remove:"Remove",referenceLocal:"Reference stays on this device in the sample. It is not sent to an AI.",getQuote:"Review estimated cost",quoteTitle:"Before you generate",sampleQuote:"Illustrative quote \xb7 not a price or a charge",maxCost:"Maximum charge",funding:"Funding source",expires:"Quote expires",generate:"Approve and generate",costPolicy:"Usage is held while the operation runs. Failed checks or cancellation before finalization deduct nothing. A completed result remains available even if you do not apply it.",sampleAction:"Return to editing",sampleGeneration:"Continue your prompt in a server project after sign-in. AI runs only after you review and approve a real quote.",runChecks:"Inspect design",checks:"Design checks",localChecks:"Local structure checks",checkNote:"These checks inspect the sample structure, labels, and color references. They do not run a browser accessibility audit or a code build.",unchecked:"Not checked",stale:"Design changed \xb7 inspect again",passed:"Passed",failed:"Needs attention",rules:{structure:"Recognized components",labels:"Text and button labels",tokens:"Defined design tokens"},reportWaiting:"Run an inspection to see evidence for this version.",version:"Version",historyTitle:"A record of the decisions.",historyIntro:"Revisit a saved design. Restoring creates a new version and keeps the original history.",current:"Current",restore:"Restore version",restoreTitle:"Restore this version?",restoreNote:"Your current design will be replaced with this saved version. The current version remains in history.",noHistory:"No saved versions yet.",original:"Starting sample",editReason:"Content updated",themeReason:"Theme updated",restoreReason:"Restored version",handoffTitle:"Take the work forward.",handoffIntro:"Keep the design, its checks, and the implementation work in view.",snapshot:"DESIGN SNAPSHOT",deliverables:"CODE BUNDLE",codeStatus:"Code has not been built or verified",bundleDescription:"The server will generate the Next.js application, vendor assets, and run installation, type, lint, build, and route checks.",downloadDesign:"Download design JSON",exportCode:"Build code bundle",downloadCode:"Download verified bundle",refreshDownload:"Refresh download link",designOnly:"The JSON contains the editable sample design. It is not generated application code.",pr:"GitHub Draft PR",prIntro:"Choose an installed repository, inspect the exact changes, then approve a draft pull request.",repository:"Repository",baseBranch:"Base branch",prTitle:"Pull request title",reviewPr:"Review changes",approvePr:"Create Draft PR",prReview:"Review the handoff",files:"Files",stubNote:"Connect the exported interface to your application data and authentication. Review the handoff notes before integrating it. A Draft PR still requires your review before merge.",integrations:"Integrations",connectGithub:"GitHub connection",mcp:"MCP access",integrationNote:"Connect GitHub and your IDE, review the requested access, and approve each generation or Draft PR.",preparingTitle:"Snailer Design is getting ready",preparingNote:"The service is not available yet. Your Snailer login is unchanged. You can try the local editor while setup is completed.",checking:"Checking service access\u2026",unavailableTitle:"The workspace is unavailable.",unavailable:"We could not connect to Snailer Design. Try again, or explore the local editor while the service is unavailable.",signInTitle:"Bring your projects with you.",signInNote:"Sign in with your Snailer account to access server projects.",signIn:"Sign in",denied:"This account does not have access to this Snailer Design feature.",retry:"Check again",emptyTitle:"A clear space for your next idea.",emptyNote:"Create a project to collect screens, refine a direction, and prepare a handoff.",search:"Search projects",noResults:"No projects match your search.",updated:"Updated",loadMore:"Load more",busy:"Working\u2026",pendingTitle:"Work in progress",refreshStatus:"Check status",cancelOperation:"Request cancellation",unknown:"The outcome is not yet confirmed. Check the original operation before starting another.",resultReady:"The server returned a result.",applyResult:"Apply generated design",viewPr:"Open pull request",operationStates:{reserving:"Reserving budget",queued:"Queued",running:"Working",validating:"Checking design",finalizing:"Finalizing result and billing",succeeded:"Completed",failed:"Failed",cancel_requested:"Cancellation requested",cancelled:"Cancelled"},billing:"Snailer Design usage",billingIntro:"Server-confirmed AI usage this month for this product.",available:"Available",reserved:"Reserved",charged:"Charged",admin:"Snailer Design operations",adminNote:"Server-reported jobs and billing reconciliation. Access requires the administrator capability.",noOperations:"No operations to show.",serviceRequired:"Requires the Snailer Design service",previewOnly:"Preview",invali
1dFile:"Choose a PNG, JPEG or WebP image smaller than 5 MB.",unsupported:"This screen uses a design format this editor does not support yet.",errors:{REFERENCE_UNREACHABLE:"We could not open that page. Check that the link is public and loads over https, then try again.",REFERENCE_NOT_HTML:"That link is not a web page we can read. Use the address of a regular HTML page.",REFERENCE_BLOCKED:"That link cannot be used as a reference. Private, local or non-https addresses are not allowed.",REFERENCE_EXPIRED:"The reference analysis expired. Analyze the link again, then review a new quote.",REFERENCE_URL_INVALID:"Enter a full https:// address, for example https://example.com.",MODEL_DECLINED:"The AI model declined this request. Nothing was applied and no usage was deducted. Rephrase the prompt or choose another model in settings.",MODEL_UNAVAILABLE:"The selected AI model is not available right now. Choose another model in settings or try again shortly.",MODEL_OUTPUT_LIMIT:"The model response ended before the design was complete. Nothing was applied and no usage was deducted. Review a new quote after the output limit is corrected.",MODEL_INPUT_LIMIT:"This request is too large for the model input limit. Reduce references or narrow the screen scope, then review a new quote.",TRIAL_IN_PROGRESS:"Your free generation is already in progress. Open its original operation to check the result.",TRIAL_UNAVAILABLE:"This quote cannot use the free generation. Review a new quote.",TRIAL_BUDGET_EXHAUSTED:"The remaining free model budget cannot cover this request. Existing results remain available.",REVIEW_NOT_PASSED:"The generated design did not pass review. No usage was deducted. Refine the prompt and review a new quote.",INVALID_MODEL_RESPONSE:"The model returned an unusable design. No design was applied and no usage was deducted. Review a new quote to try again.",RESULT_UNRECOVERABLE:"The original result could not be recovered. The operation is closed and its held usage was released. Review a new quote to try again.",INSUFFICIENT_CREDITS:"Not enough available Snailer Design usage.",SUBSCRIPTION_REQUIRED:"An active Snailer Design subscription is required.",BILLING_REVIEW_REQUIRED:"Billing needs review. Check your subscription before paying again.",BILLING_UNAVAILABLE:"Subscription billing is being prepared.",BILLING_RESULT_PENDING:"The billing result is not confirmed. Check the original checkout.",BILLING_SYNC_PENDING:"Subscription status is being synchronized. Check again shortly.",SUBSCRIPTION_EXISTS:"You already have a subscription. Manage it in Snailer Design billing.",CHECKOUT_EXISTS:"Another checkout exists. Check the original checkout before choosing another plan.",CATALOG_CHANGED:"Prices or terms changed. Review the current plan again.",QUOTE_STALE:"The quote is no longer current. Request and review a new quote.",GENERATION_UNAVAILABLE:"AI generation is not available for this account yet.",EDGE_BLOCKED:"The site security layer blocked this request. Your Snailer login is unchanged. Try again in this browser.",REQUEST_ABORTED:"The request was stopped because the session changed.",GITHUB_REAUTHENTICATION_REQUIRED:"Reconnect your GitHub account in Connections before continuing.",INSTALLATION_NOT_ACCESSIBLE:"This GitHub installation is not available to your account. Ask an organization owner for access or choose another installation.",INSTALLATION_SELECTION_CONFLICT:"A different GitHub account was already connected for this request. Start a new connection to change it.",REPOSITORY_LIMIT:"There are too many repositories. Select fewer repositories in the GitHub App settings.",UNAVAILABLE:"The service is temporarily unavailable. Try again shortly.",NOT_FOUND:"This item is unavailable or you no longer have access. A missing operation does not confirm that it never ran.",SPEND_NOT_ALLOWED:"This account cannot use AI usage on this project.",APPROVAL_REQUIRED:"Review the current estimate or changes again before approving.",QUOTA_EXCEEDED:"The operation limit has been reached. Try again later.",CONCURRENCY_LIMIT:"Another operation is still in progress. Check its result first.",BASE_CHANGED:"The design or repository changed. Refresh and review the latest version.",EXTERNAL_RESULT_UNKNOWN:"The external result is not confirmed. Check the original operation before starting another one.",CANCELLATION_TOO_LATE:"This operation can no longer be cancelled. Check its final result.",OPERATION_NOT_COMMITTED:"The server confirmed that this attempt did n
1ot run. You can review and start a new operation.",UNSUPPORTED_COMPONENT:"This design format is not supported by this editor yet.",LOCAL_STORAGE_UNAVAILABLE:"Changes are only in memory. Keep this page open to retain them.",ASSET_NOT_READY:"The image is still being checked. Try again shortly.",ASSET_REJECTED:"The image could not pass validation. Choose another image.",INVALID_INPUT:"Check the supplied fields and try again.",INVALID_CUSTOM_SECTION:"The custom section contains markup or CSS that is not allowed. Nothing was saved.",ASSET_KIND_MISMATCH:"This file type cannot be used here. Use an image for images and a GLB model for 3D.",MODEL_REJECTED:"The 3D model could not pass validation. Use a self-contained binary glTF (.glb) file.",AUTHENTICATION_REQUIRED:"Your session expired. Sign in again.",ACCESS_DENIED:"Access was denied. No project data is available.",REVISION_CONFLICT:"This design changed elsewhere. Reload the latest version before saving.",QUOTE_EXPIRED:"This quote expired. Request a new estimate.",INSUFFICIENT_CREDIT:"Not enough AI usage remains for this generation.",BUDGET_EXCEEDED:"This exceeds the allowed project budget.",IDEMPOTENCY_CONFLICT:"This operation key belongs to another request. Check its existing result.",STORAGE_UNAVAILABLE:"Browser storage is unavailable. A recoverable operation cannot be started.",INVALID_RESPONSE:"The service returned an unsupported response.",unavailable:"The Snailer Design service could not be reached.",unknown:"The result is not confirmed. Check the original operation.",invalid:"Check the required fields and try again."}},o=(0,i.A)((0,i.A)({},r),{},{label:"\ub2e4\uc74c \ub2e8\uacc4\uac00 \uc788\ub294 \ub514\uc790\uc778.",title:["\ub9cc\ub4e4\uace0 \uc2f6\uc740 \uc544\uc774\ub514\uc5b4.","\uacc4\uc18d \uc791\uc5c5\ud560 \uc218 \uc788\ub294 \ub514\uc790\uc778."],intro:"\ud654\uba74\uc744 \ub9cc\ub4e4\uace0, \ub514\ud14c\uc77c\uc744 \ub2e4\ub4ec\uace0, \uac80\uc99d \uadfc\uac70\uc640 \ud568\uaed8 \ucf54\ub4dc\ub85c \uc774\uc5b4\uac00\uc138\uc694. \uccab \ud654\uba74\ubd80\ud130 \uac1c\ubc1c \uc778\uacc4\uae4c\uc9c0, \ud558\ub098\uc758 \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c.",tryDemo:"\uc791\uc5c5 \uacf5\uac04 \uccb4\ud5d8\ud558\uae30",projects:"\ub0b4 \ud504\ub85c\uc81d\ud2b8",start:"\ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791",previewLabel:"\uc9c1\uc811 \ud3b8\uc9d1\ud560 \uc218 \uc788\ub294 \uc81c\ud488 \ubbf8\ub9ac\ubcf4\uae30",previewNote:"\uacc4\uc815 \uc5c6\uc774 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ud3b8\uc9d1\ud558\ub294 \uc0d8\ud50c \ud504\ub85c\uc81d\ud2b8\uc785\ub2c8\ub2e4.",flow:["\uc544\uc774\ub514\uc5b4","\ub514\uc790\uc778","\uac80\ud1a0","\ucf54\ub4dc \uc804\ub2ec"],features:[["01 / MAKE IT YOURS","\ub514\ud14c\uc77c\ub9c8\ub2e4, \uc81c\uc790\ub9ac\uac00 \uc788\ub3c4\ub85d.","\ubb38\uad6c\xb7\uc774\ubbf8\uc9c0\xb7\uae00\uaf34\xb7\uac04\uaca9\xb7\uacf5\ud1b5 \uc0c9\uc0c1\uc744 \uc9c1\uc811 \ub2e4\ub4ec\uc73c\uc138\uc694. \uc5ec\ub7ec \ud654\uba74\uacfc \ubcc0\uacbd \uae30\ub85d\uc744 \ud558\ub098\uc758 \uc791\uc5c5 \uacf5\uac04\uc5d0 \ub2f4\uc2b5\ub2c8\ub2e4."],["02 / SEE THE EVIDENCE","\uc900\ube44\ub41c \ub9cc\ud07c, \uc815\ud655\ud558\uac8c.","\uac80\uc0ac \uacb0\uacfc\ub294 \uac80\uc0ac\ud55c \ubc84\uc804\uc5d0 \uc5f0\uacb0\ub429\ub2c8\ub2e4. \ud1b5\uacfc\ud55c \ud56d\ubaa9, \ubc14\ub010 \ubd80\ubd84, \ub354 \uc0b4\ud3b4\ubcfc \uc77c\uc744 \uad6c\ubd84\ud558\uc138\uc694."],["03 / KEEP GOING","\ub9e5\ub77d\uc744 \uc783\uc9c0 \uc54a\ub294 \uc778\uacc4.","\ud30c\uc77c\uacfc \uc5d0\uc14b, \uc544\uc9c1 \uc5f0\uacb0\ud558\uc9c0 \uc54a\uc740 \uae30\ub2a5\uc744 \ud655\uc778\ud558\uace0 Next.js \ud504\ub85c\uc81d\ud2b8\ub85c \uc791\uc5c5\uc744 \uc774\uc5b4\uac11\ub2c8\ub2e4."]],early:"Snailer Design",earlyNote:"\ub85c\uadf8\uc778 \ud6c4 \ub514\uc790\uc778 \uc0dd\uc131, \uc11c\ubc84 \ud488\uc9c8 \uac80\uc0ac, Next.js \ucf54\ub4dc \ubc88\ub4e4\uc744 \uc774\uc6a9\ud558\uc138\uc694. GitHub \uc5f0\uacb0\uacfc \ubcc0\uacbd \uc0ac\ud56d \uc2b9\uc778 \ud6c4 Draft PR\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",footerTitle:"\ub2e4\uc74c \uc544\uc774\ub514\uc5b4\uc5d0, \uad6c\uc870\ub97c \ub354\ud574\ubcf4\uc138\uc694.",back:"\ub4a4\ub85c",open:"\u
1c791\uc5c5 \uacf5\uac04 \uc5f4\uae30",demo:"\uc0d8\ud50c \uc791\uc5c5 \uacf5\uac04",demoNotice:"\ub85c\uceec \uc0d8\ud50c \xb7 \ubcc0\uacbd\uc740 \uc774 \ube0c\ub77c\uc6b0\uc800\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4. AI \ud638\ucd9c\uc774\ub098 \uacfc\uae08\uc740 \uc5c6\uc2b5\ub2c8\ub2e4.",live:"\uc5f0\uacb0\ub41c \uc791\uc5c5 \uacf5\uac04",editor:"\ub514\uc790\uc778",history:"\ubc84\uc804 \uae30\ub85d",handoff:"\ucf54\ub4dc \uc804\ub2ec",pages:"\ud654\uba74",layers:"\uc694\uc18c",properties:"\uc18d\uc131",assistant:"AI\ub85c \ub9cc\ub4e4\uae30",canvas:"\ub514\uc790\uc778 \ubbf8\ub9ac\ubcf4\uae30",viewport:"\ubbf8\ub9ac\ubcf4\uae30 \ub108\ube44",desktop:"\ub370\uc2a4\ud06c\ud1b1",tablet:"\ud0dc\ube14\ub9bf",mobile:"\ubaa8\ubc14\uc77c",selected:"\uc120\ud0dd\ud55c \uc694\uc18c",content:"\ud14d\uc2a4\ud2b8 \ub0b4\uc6a9",apply:"\ubcc0\uacbd \uc800\uc7a5",saved:"\uc800\uc7a5\ub428",unsaved:"\uc800\uc7a5 \uc804",saving:"\uc800\uc7a5 \uc911\u2026",theme:"\ud504\ub85c\uc81d\ud2b8 \ud14c\ub9c8",accent:"\uac15\uc870 \uc0c9\uc0c1",reset:"\uc0d8\ud50c \ucd08\uae30\ud654",resetTitle:"\uc0d8\ud50c\uc744 \ucd08\uae30\ud654\ud560\uae4c\uc694?",resetNote:"\ub85c\uceec \ud3b8\uc9d1 \ub0b4\uc6a9\uacfc \uc0d8\ud50c \ubc84\uc804 \uae30\ub85d\uc744 \uc9c0\uc6c1\ub2c8\ub2e4. \uc11c\ubc84 \ud504\ub85c\uc81d\ud2b8\uc5d0\ub294 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",cancel:"\ucde8\uc18c",confirm:"\ud655\uc778",close:"\ub2eb\uae30",name:"\ud504\ub85c\uc81d\ud2b8 \uc774\ub984",newProject:"\uc0c8 \ud504\ub85c\uc81d\ud2b8",workspace:"\uc791\uc5c5 \uacf5\uac04",prompt:"\uc5b4\ub5a4 \ud654\uba74\uc744 \ub9cc\ub4e4\uae4c\uc694?",promptHint:"\ub9cc\ub4e4 \ud654\uba74, \uc0ac\uc6a9\ud560 \uc0ac\ub78c, \uac00\uc7a5 \uc911\uc694\ud55c \ud589\ub3d9\uc744 \uc124\uba85\ud574 \uc8fc\uc138\uc694.",screenshot:"\ucc38\uace0 \uc2a4\ud06c\ub9b0\uc0f7",uploadHint:"PNG, JPEG \ub610\ub294 WebP \xb7 \ucd5c\ub300 5 MB",remove:"\uc81c\uac70",referenceLocal:"\uc0d8\ud50c\uc758 \ucc38\uace0 \uc774\ubbf8\uc9c0\ub294 \uc774 \uae30\uae30\uc5d0\ub9cc \uba38\ubb3c\uba70 AI\ub85c \uc804\uc1a1\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",getQuote:"\uc608\uc0c1 \ube44\uc6a9 \ud655\uc778",quoteTitle:"\uc0dd\uc131\uc744 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0",sampleQuote:"\uacac\uc801 \ud654\uba74 \uc608\uc2dc \xb7 \uc2e4\uc81c \uac00\uaca9\uc774\ub098 \uacb0\uc81c\uac00 \uc544\ub2d9\ub2c8\ub2e4",maxCost:"\ucd5c\ub300 \uccad\uad6c \uae08\uc561",funding:"\uc0ac\uc6a9\ud560 \uc608\uc0b0",expires:"\uacac\uc801 \ub9cc\ub8cc",generate:"\uc2b9\uc778\ud558\uace0 \uc0dd\uc131",costPolicy:"\uc2e4\ud589\ud558\ub294 \ub3d9\uc548 \ud544\uc694\ud55c \uc0ac\uc6a9\ub7c9\uc744 \uc7a0\uc2dc \ud655\ubcf4\ud569\ub2c8\ub2e4. \uac80\uc0ac \uc2e4\ud328 \ub610\ub294 \uacb0\uacfc \ud655\uc815 \uc804 \ucde8\uc18c \uc2dc\uc5d0\ub294 \ucc28\uac10\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc644\ub8cc\ub41c \uacb0\uacfc\ub294 \ub514\uc790\uc778\uc5d0 \uc801\uc6a9\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub2e4\uc2dc \uc5f4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",sampleAction:"\ud3b8\uc9d1\uc73c\ub85c \ub3cc\uc544\uac00\uae30",sampleGeneration:"\uc785\ub825\ud55c \ud504\ub86c\ud504\ud2b8\ub294 \ub85c\uadf8\uc778 \ud6c4 \uc11c\ubc84 \ud504\ub85c\uc81d\ud2b8\ub85c \uc774\uc5b4\uc9d1\ub2c8\ub2e4. \uc2e4\uc81c \uacac\uc801\uc744 \ud655\uc778\ud558\uace0 \uc2b9\uc778\ud574\uc57c AI\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4.",runChecks:"\ub514\uc790\uc778 \uc810\uac80",checks:"\ub514\uc790\uc778 \uac80\uc0ac",localChecks:"\ub85c\uceec \uad6c\uc870 \uc810\uac80",checkNote:"\uc0d8\ud50c\uc758 \uad6c\uc870\xb7\ub808\uc774\ube14\xb7\uc0c9\uc0c1 \ucc38\uc870\ub97c \uc810\uac80\ud569\ub2c8\ub2e4. \ube0c\ub77c\uc6b0\uc800 \uc811\uadfc\uc131 \uac10\uc0ac\ub098 \ucf54\ub4dc \ube4c\ub4dc\ub97c \uc2e4\ud589\ud558\ub294 \uac80\uc0ac\ub294 \uc544\ub2d9\ub2c8\ub2e4.",unchecked:"\uac80\uc0ac \uc804",stale:"\ub514\uc790\uc778 \ubcc0\uacbd\ub428 \xb7 \ub2e4\uc2dc \uc810\uac80\ud558\uc138\uc694",passed:"\ud1b5\uacfc",failed:"\ud655\uc778 \ud544\uc694",rules:{structure:"\uc9c0\uc6d0\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8",labels:"\ud14d\uc2a4\ud2b8\uc640 \ubc84\ud2bc \ub808\uc774\ube14",tokens:"\uc815\uc758\ub41c \ub514\uc790\uc778 \ud1a0\ud070"},reportWaiting:"\uc810\uac80\uc744 \uc2e4\ud589\ud558\uba74 \uc774 \ubc84\uc804\uc758 \uacb0\uacfc\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.",version:"\ubc84\uc804",historyTitle:"\uacb0\uc815\uc758 \uacfc\uc815\uc744 \ub0a8\uae41\ub2c8\ub2e4.",historyIntro:"\uc800\uc7a5\ud55c \ub514\uc790\uc778\uc744 \ub2e4\uc2dc \uc0b4\ud3b4\ubcf4\uc138\uc694. \ubcf5\uc6d0\ud574\ub3c4 \uc6d0\ubcf8 \uae30\ub85d\uc740 \ub0a8\uace0 \uc0c8 \ubc84\uc804\uc774 \ub9cc\ub4e4\uc5b4\uc9d1\ub2c8\ub2e4.",current:"\ud604\uc7ac",restore:"\uc774 \ubc84\uc804 \ubcf5\uc6d0",restoreTitle:"\uc774 \ubc84\uc804\uc73c\ub85c \ubcf5\uc6d0\ud560\uae4c\uc694?",restoreNote:"\ud604\uc7ac \ub514\uc790\uc778\uc744 \uc120\ud0dd\ud55c \ubc84\uc804\uc73c\ub85c \ubc14\uafc9\ub2c8\ub2e4. \uc9c0\uae08 \ub514\uc790\uc778\ub3c4 \uae30\ub85d\uc5d0\uc11c \ub2e4\uc2dc \uc5f4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",noHistory:"\uc800\uc7a5\ub41c \ubc84\uc804\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",original:"\uc2dc\uc791 \uc0d8\ud50c",editReason:"\ub0b4\uc6a9 \uc218\uc815",themeReason:"\ud14c\ub9c8 \uc218\uc815",restoreReason:"\ubc84\uc804 \ubcf5\uc6d0",handoffTitle:"\ub2e4\uc74c \uc791\uc5c5\uc73c\ub85c \uc774\uc5b4\uac00\uc138\uc694.",handoffIntro:"\ub514\uc790\uc778\uacfc \uac80\uc0ac \uacb0\uacfc, \uac1c\ubc1c\uc5d0 \ud544\uc694\ud55c \uc791\uc5c5\uc744 \ud568\uaed8 \ud655\uc778\ud558\uc138\uc694.",snapshot:"\ub514\uc790\uc778 \uc2a4\ub0c5\uc0f7",deliverables:"\ucf54\ub4dc \ubc88\ub4e4 \uad6c\uc131",codeStatus:"\ucf54\ub4dc \ube4c\ub4dc\xb7\uac80\uc99d \uc804",bundleDescription:"\uc11c\ubc84\uc5d0\uc11c Next.js \uc571\uacfc \uc5d0\uc14b\uc744 \ub9cc\ub4e4\uace0 \uc124\uce58\xb7\ud0c0\uc785\xb7\ub9b0\ud2b8\xb7\ube4c\ub4dc\xb7\uacbd\ub85c \uac80\uc0ac\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.",downloadDesign:"\ub514\uc790\uc778 JSON \ub2e4\uc6b4\ub85c\ub4dc",exportCode:"\ucf54\ub4dc \ubc88\ub4e4 \ub9cc\ub4e4\uae30",downloadCode:"\uac80\uc99d\ub41c \ubc88\ub4e4 \ub2e4\uc6b4\ub85c\ub4dc",refreshDownload:"\ub2e4\uc6b4\ub85c\ub4dc \ub9c1\ud06c \uac31\uc2e0",designOnly:"JSON\uc5d0\ub294 \ud3b8\uc9d1\ud55c \uc0d8\ud50c \ub514\uc790\uc778\uc774 \ub2f4\uae41\ub2c8\ub2e4. \uc0dd\uc131\ub41c \uc571 \ucf54\ub4dc\ub294 \uc544\ub2d9\ub2c8\ub2e4.",pr:"GitHub Draft PR",prIntro:"\uc5f0\uacb0\ud55c \uc800\uc7a5\uc18c\ub97c \uc120\ud0dd\ud558\uace0 \ubcc0\uacbd \ud30c\uc77c\uc744 \uac80\ud1a0\ud55c \ub4a4 Draft PR \uc0dd\uc131\uc744 \uc2b9\uc778\ud569\ub2c8\ub2e4.",repository:"\uc800\uc7a5\uc18c",baseBranch:"\uae30\uc900 \ube0c\ub79c\uce58",prTitle:"PR \uc81c\ubaa9",reviewPr:"\ubcc0\uacbd \ub0b4\uc6a9 \uac80\ud1a0",approvePr:"Draft PR \uc0dd\uc131",prReview:"\u
1cf54\ub4dc \uc804\ub2ec \uac80\ud1a0",files:"\ud30c\uc77c",stubNote:"\ub0b4\ubcf4\ub0b8 \ud654\uba74\uc5d0 \uc11c\ube44\uc2a4\uc758 \ub370\uc774\ud130\uc640 \uc778\uc99d\uc744 \uc5f0\uacb0\ud558\uc138\uc694. \uc778\uacc4 \uba54\ubaa8\ub97c \ud655\uc778\ud558\uace0, Draft PR\uc740 \uac80\ud1a0 \ud6c4 \uc9c1\uc811 \ubcd1\ud569\ud558\uc138\uc694.",integrations:"\uc678\ubd80 \uc11c\ube44\uc2a4 \uc5f0\uacb0",connectGithub:"GitHub \uc5f0\uacb0",mcp:"MCP \uc5f0\uacb0",integrationNote:"GitHub\uc640 IDE\ub97c \uc5f0\uacb0\ud558\uace0 \uc694\uccad\ud55c \uc811\uadfc \ubc94\uc704\ub97c \uac80\ud1a0\ud558\uc138\uc694. \uc0dd\uc131\uacfc Draft PR\uc740 \uac74\ubcc4\ub85c \uc9c1\uc811 \uc2b9\uc778\ud569\ub2c8\ub2e4.",preparingTitle:"Snailer Design \uc5f0\uacb0 \uc900\ube44 \uc911",preparingNote:"\uc544\uc9c1 \uc11c\ube44\uc2a4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. Snailer \ub85c\uadf8\uc778\uc740 \uc720\uc9c0\ub429\ub2c8\ub2e4. \uc900\ube44\uac00 \ub05d\ub0a0 \ub54c\uae4c\uc9c0 \ub85c\uceec \ud3b8\uc9d1\uae30\ub97c \uccb4\ud5d8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",checking:"\uc11c\ube44\uc2a4 \uc811\uadfc \uad8c\ud55c\uc744 \ud655\uc778\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4\u2026",unavailableTitle:"\uc791\uc5c5 \uacf5\uac04\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc5b4\uc694.",unavailable:"Snailer Design \uc11c\ube44\uc2a4\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ud655\uc778\ud558\uac70\ub098 \ub85c\uceec \ud3b8\uc9d1\uae30\ub97c \uccb4\ud5d8\ud574 \ubcf4\uc138\uc694.",signInTitle:"\ud504\ub85c\uc81d\ud2b8\ub97c \uc774\uc5b4\uc11c \uc791\uc5c5\ud558\uc138\uc694.",signInNote:"\uc11c\ubc84 \ud504\ub85c\uc81d\ud2b8\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 Snailer \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud558\uc138\uc694.",signIn:"\ub85c\uadf8\uc778",denied:"\uc774 \uacc4\uc815\uc5d0\ub294 \ud574\ub2f9 Snailer Design \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",retry:"\ub2e4\uc2dc \ud655\uc778",emptyTitle:"\ub2e4\uc74c \uc544\uc774\ub514\uc5b4\ub97c \uc704\ud55c \ube48 \uacf5\uac04.",emptyNote:"\ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uc5b4 \ud654\uba74\uc744 \ubaa8\uc73c\uace0, \ubc29\ud5a5\uc744 \ub2e4\ub4ec\uace0, \uac1c\ubc1c \uc778\uacc4\ub97c \uc900\ube44\ud558\uc138\uc694.",search:"\ud504\ub85c\uc81d\ud2b8 \uac80\uc0c9",noResults:"\uac80\uc0c9 \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",updated:"\uc218\uc815",loadMore:"\ub354 \ubcf4\uae30",busy:"\ucc98\ub9ac \uc911\u2026",pendingTitle:"\uc791\uc5c5 \uc9c4\ud589 \uc0c1\ud669",refreshStatus:"\uc0c1\ud0dc \ud655\uc778",cancelOperation:"\ucde8\uc18c \uc694\uccad",unknown:"\uacb0\uacfc\uac00 \uc544\uc9c1 \ud655\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc0c8 \uc791\uc5c5 \uc804\uc5d0 \uae30\uc874 \uc791\uc5c5\uc758 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uc138\uc694.",resultReady:"\uc11c\ubc84\uc5d0\uc11c \uacb0\uacfc\ub97c \ubc1b\uc558\uc2b5\ub2c8\ub2e4.",applyResult:"\uc0dd\uc131\ub41c \ub514\uc790\uc778 \uc801\uc6a9",viewPr:"PR \uc5f4\uae30",operationStates:{reserving:"\uc608\uc0b0 \uc608\uc57d \uc911",queued:"\ub300\uae30 \uc911",running:"\uc791\uc5c5 \ucc98\ub9ac \uc911",validating:"\ub514\uc790\uc778 \uac80\uc0ac \uc911",finalizing:"\uacb0\uacfc\xb7\uacfc\uae08 \ud655\uc815 \uc911",succeeded:"\uc644\ub8cc",failed:"\uc2e4\ud328",cancel_requested:"\ucde8\uc18c \uc694\uccad\ub428",cancelled:"\ucde8\uc18c\ub428"},billing:"Snailer Design \uc0ac\uc6a9\ub7c9",billingIntro:"\uc774\ubc88 \ub2ec AI \uc0ac\uc6a9\ub960\uc744 \uc11c\ubc84 \uae30\uc900\uc73c\ub85c \ud45c\uc2dc\ud569\ub2c8\ub2e4.",available:"\uc0ac\uc6a9 \uac00\ub2a5",reserved:"\uc608\uc57d \uc911",charged:"\uccad\uad6c\ub428",admin:"Snailer Design \uc6b4\uc601",adminNote:"\uc11c\ubc84 \uc791\uc5c5\uacfc \uc815\uc0b0 \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4. \uad00\ub9ac\uc790 capability\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.",noOperations:"\ud45c\uc2dc\ud560 \uc791\uc5c5\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",serviceRequired:"Snailer Design \uc11c\ube44\uc2a4 \uc5f0\uacb0 \ud544\uc694",previewOnly:"\ubbf8\ub9ac\ubcf4\uae30",invali
1dFile:"5 MB \uc774\ud558\uc758 PNG, JPEG \ub610\ub294 WebP \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud558\uc138\uc694.",unsupported:"\uc774 \ud654\uba74\uc740 \uc544\uc9c1 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ub514\uc790\uc778 \ud615\uc2dd\uc785\ub2c8\ub2e4.",errors:{REFERENCE_UNREACHABLE:"\ud398\uc774\uc9c0\ub97c \uc5f4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uacf5\uac1c\ub41c https \ub9c1\ud06c\uc778\uc9c0 \ud655\uc778\ud55c \ub4a4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",REFERENCE_NOT_HTML:"\uc77d\uc744 \uc218 \uc788\ub294 \uc6f9 \ud398\uc774\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uc77c\ubc18 HTML \ud398\uc774\uc9c0 \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694.",REFERENCE_BLOCKED:"\uc774 \ub9c1\ud06c\ub294 \ucc38\uace0 \uc790\ub8cc\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ube44\uacf5\uac1c\xb7\ub85c\uceec \uc8fc\uc18c\ub098 https\uac00 \uc544\ub2cc \uc8fc\uc18c\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",REFERENCE_EXPIRED:"\ucc38\uace0 \ub9c1\ud06c \ubd84\uc11d\uc774 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4. \ub9c1\ud06c\ub97c \ub2e4\uc2dc \ubd84\uc11d\ud55c \ub4a4 \uc0c8 \uacac\uc801\uc744 \ud655\uc778\ud558\uc138\uc694.",REFERENCE_URL_INVALID:"https://\ub85c \uc2dc\uc791\ud558\ub294 \uc804\uccb4 \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694. \uc608: https://example.com",MODEL_DECLINED:"AI \ubaa8\ub378\uc774 \uc774 \uc694\uccad\uc744 \uac70\uc808\ud588\uc2b5\ub2c8\ub2e4. \uc801\uc6a9\uc774\ub098 \uc0ac\uc6a9\ub7c9 \ucc28\uac10\uc740 \uc5c6\uc2b5\ub2c8\ub2e4. \uc694\uccad \ubb38\uad6c\ub97c \ubc14\uafb8\uac70\ub098 \uc124\uc815\uc5d0\uc11c \ub2e4\ub978 \ubaa8\ub378\uc744 \uc120\ud0dd\ud558\uc138\uc694.",MODEL_UNAVAILABLE:"\uc120\ud0dd\ud55c AI \ubaa8\ub378\uc744 \uc9c0\uae08 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc124\uc815\uc5d0\uc11c \ub2e4\ub978 \ubaa8\ub378\uc744 \uace0\ub974\uac70\ub098 \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",MODEL_OUTPUT_LIMIT:"\ub514\uc790\uc778\uc774 \uc644\uc131\ub418\uae30 \uc804\uc5d0 \ubaa8\ub378 \uc751\ub2f5 \ud55c\ub3c4\uc5d0 \ub3c4\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \uc801\uc6a9\uc774\ub098 \uc0ac\uc6a9\ub7c9 \ucc28\uac10\uc740 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4. \uc751\ub2f5 \ud55c\ub3c4\uac00 \uc870\uc815\ub41c \ub4a4 \uc0c8 \uacac\uc801\uc744 \uac80\ud1a0\ud558\uc138\uc694.",MODEL_INPUT_LIMIT:"\ubaa8\ub378 \uc785\ub825 \ud55c\ub3c4\ub97c \ub118\ub294 \uc694\uccad\uc785\ub2c8\ub2e4. \ucc38\uace0 \uc790\ub8cc\ub97c \uc904\uc774\uac70\ub098 \ud654\uba74 \ubc94\uc704\ub97c \uc881\ud78c \ub4a4 \uc0c8 \uacac\uc801\uc744 \uac80\ud1a0\ud558\uc138\uc694.",INVALID_MODEL_RESPONSE:"\ubaa8\ub378\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \ub514\uc790\uc778\uc744 \ubc18\ud658\ud588\uc2b5\ub2c8\ub2e4. \ub514\uc790\uc778\uc740 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc558\uace0 \uc0ac\uc6a9\ub7c9\ub3c4 \ucc28\uac10\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc0c8 \uacac\uc801\uc744 \uac80\ud1a0\ud574 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",RESULT_UNRECOVERABLE:"\uc6d0\ub798 \uacb0\uacfc\ub97c \ubcf5\uad6c\ud560 \uc218 \uc5c6\uc5b4 \uc791\uc5c5\uc744 \uc885\ub8cc\ud558\uace0 \ud655\ubcf4\ud55c \uc0ac\uc6a9\ub7c9\uc744 \ub3cc\ub824\ub193\uc558\uc2b5\ub2c8\ub2e4. \uc0c8 \uacac\uc801\uc744 \uac80\ud1a0\ud574 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",TRIAL_IN_PROGRESS:"\ubb34\ub8cc \uc0dd\uc131\uc774 \uc9c4\ud589 \uc911\uc785\ub2c8\ub2e4. \uae30\uc874 \uc791\uc5c5 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc138\uc694.",TRIAL_UNAVAILABLE:"\uc774 \uacac\uc801\uc5d0 \ubb34\ub8cc \uc0dd\uc131\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc0c8 \uacac\uc801\uc744 \ud655\uc778\ud558\uc138\uc694.",TRIAL_BUDGET_EXHAUSTED:"\ub0a8\uc740 \ubb34\ub8cc \uc608\uc0b0\uc73c\ub85c \uc774 \uc694\uccad\uc744 \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uae30\uc874 \uacb0\uacfc\ub294 \uacc4\uc18d \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",REVIEW_NOT_PASSED:"\uc0dd\uc131 \uacb0\uacfc\uac00 \uac80\ud1a0 \uae30\uc900\uc5d0 \ubbf8\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\ub7c9\uc740 \uccad\uad6c\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ud504\ub86c\ud
1504\ud2b8\ub97c \uad6c\uccb4\ud654\ud558\uace0 \uc0c8 \uacac\uc801\uc744 \ud655\uc778\ud558\uc138\uc694.",INSUFFICIENT_CREDITS:"\uc0ac\uc6a9 \uac00\ub2a5\ud55c Snailer Design \uc794\uc561\uc774 \ubd80\uc871\ud569\ub2c8\ub2e4.",SUBSCRIPTION_REQUIRED:"\uc720\ud6a8\ud55c Snailer Design \uad6c\ub3c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",BILLING_REVIEW_REQUIRED:"\uacb0\uc81c \ud655\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub2e4\uc2dc \uacb0\uc81c\ud558\uae30 \uc804\uc5d0 \uad6c\ub3c5 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uc138\uc694.",BILLING_UNAVAILABLE:"\ud604\uc7ac \uad6c\ub3c5 \uacb0\uc81c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc138\uc694.",BILLING_RESULT_PENDING:"\uacb0\uc81c \uacb0\uacfc\uac00 \uc544\uc9c1 \ud655\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc6d0\ub798 \uacb0\uc81c\ub97c \ud655\uc778\ud558\uc138\uc694.",BILLING_SYNC_PENDING:"\uad6c\ub3c5 \uc0c1\ud0dc\ub97c \ub3d9\uae30\ud654 \uc911\uc785\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \ud655\uc778\ud558\uc138\uc694.",SUBSCRIPTION_EXISTS:"\uc774\ubbf8 \uad6c\ub3c5 \uc911\uc785\ub2c8\ub2e4. Snailer Design \uad6c\ub3c5 \uad00\ub9ac\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694.",CHECKOUT_EXISTS:"\uc9c4\ud589 \uc911\uc778 \uacb0\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \ud50c\ub79c\uc744 \uc120\ud0dd\ud558\uae30 \uc804\uc5d0 \uc6d0\ub798 \uacb0\uc81c\ub97c \ud655\uc778\ud558\uc138\uc694.",CATALOG_CHANGED:"\uc694\uae08 \ub610\ub294 \uc870\uac74\uc774 \ubcc0\uacbd\ub410\uc2b5\ub2c8\ub2e4. \ucd5c\uc2e0 \ub0b4\uc6a9\uc744 \ub2e4\uc2dc \uac80\ud1a0\ud558\uc138\uc694.",QUOTE_STALE:"\uc774 \uacac\uc801\uc740 \ub354 \uc774\uc0c1 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc0c8 \uacac\uc801\uc744 \uac80\ud1a0\ud558\uc138\uc694.",GENERATION_UNAVAILABLE:"\uc774 \uacc4\uc815\uc5d0\uc11c\ub294 \uc544\uc9c1 AI \uc0dd\uc131\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",EDGE_BLOCKED:"\uc0ac\uc774\ud2b8 \ubcf4\uc548 \uacc4\uce35\uc5d0\uc11c \uc694\uccad\uc744 \ucc28\ub2e8\ud588\uc2b5\ub2c8\ub2e4. Snailer \ub85c\uadf8\uc778\uc740 \uc720\uc9c0\ub429\ub2c8\ub2e4. \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc138\uc694.",REQUEST_ABORTED:"\uc138\uc158\uc774 \ubcc0\uacbd\ub418\uc5b4 \uc774\uc804 \uc694\uccad\uc744 \uc911\ub2e8\ud588\uc2b5\ub2c8\ub2e4.",GITHUB_REAUTHENTICATION_REQUIRED:"\uc5f0\uacb0 \uad00\ub9ac\uc5d0\uc11c GitHub \uacc4\uc815\uc744 \ub2e4\uc2dc \uc5f0\uacb0\ud55c \ub4a4 \uc9c4\ud589\ud558\uc138\uc694.",INSTALLATION_NOT_ACCESSIBLE:"\uc774 GitHub \uc124\uce58\uc5d0 \uc811\uadfc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc870\uc9c1 \uad00\ub9ac\uc790\uc5d0\uac8c \uad8c\ud55c\uc744 \uc694\uccad\ud558\uac70\ub098 \ub2e4\ub978 \uc124\uce58\ub97c \uc120\ud0dd\ud558\uc138\uc694.",INSTALLATION_SELECTION_CONFLICT:"\uc774 \uc694\uccad\uc740 \uc774\ubbf8 \ub2e4\ub978 GitHub \uacc4\uc815 \uc5f0\uacb0\uc5d0 \uc0ac\uc6a9\ub410\uc2b5\ub2c8\ub2e4. \uacc4\uc815\uc744 \ubc14\uafb8\ub824\uba74 \uc0c8 \uc5f0\uacb0\uc744 \uc2dc\uc791\ud558\uc138\uc694.",REPOSITORY_LIMIT:"\uc800\uc7a5\uc18c \uc218\uac00 \ud55c\ub3c4\ub97c \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4. GitHub App \uc124\uc815\uc5d0\uc11c \uc120\ud0dd\ud55c \uc800\uc7a5\uc18c \uc218\ub97c \uc904\uc5ec \uc8fc\uc138\uc694.",UNAVAILABLE:"\uc11c\ube44\uc2a4\ub97c \uc77c\uc2dc\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \ud655\uc778\ud558\uc138\uc694.",NOT_FOUND:"\ud56d\ubaa9\uc774 \uc5c6\uac70\ub098 \uc811\uadfc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc791\uc5c5\uc744 \ucc3e\uc9c0 \ubabb\ud588\ub2e4\ub294 \uc751\ub2f5\ub9cc\uc73c\ub85c \ubbf8\uc2e4\ud589\uc774 \ud655\uc778\ub418\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.",SPEND_NOT_ALLOWED:"\uc774 \uacc4\uc815\uc740 \uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c AI \uc0ac\uc6a9\ub7c9\uc744 \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",APPROVAL_REQUIRED:"\ud604\uc7ac \uacac\uc801 \ub610\ub294 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ub2e4\uc2dc \uac80\ud1a0\ud55c \ub4a4 \uc2b9\uc778\ud558\uc138\uc694.",QUOTA_EXCEEDED:"\uc791\uc5c5 \ud55c\ub3c4\uc5d0 \ub3c4\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",CONCURRENCY_LIMIT:"\ub2e4\ub978 \uc791\uc5c5\uc774 \uc9c4\ud589 \uc911\uc785\ub2c8\ub2e4. \uae30\uc874 \uacb0\uacfc\ub97c \uba3c\uc800 \ud655\uc778\ud558\uc138\uc694.",BASE_CHANGED:"\ub514\uc790\uc778 \ub610\ub294 \uc800\uc7a5\uc18c\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ucd5c\uc2e0 \ubc84\uc804\uc744 \ubd88\ub7ec\uc640 \ub2e4\uc2dc \uac80\ud1a0\ud558\uc138\uc694.",EXTERNAL_RESULT_UNKNOWN:"\uc678\ubd80 \uc791\uc5c5\uc758 \uacb0\uacfc\uac00 \uc544\uc9c1 \ud655\uc778\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc0c8 \uc791\uc5c5\uc744 \uc2dc\uc791\ud558\uc9c0 \ub9d0\uace0 \uae30\uc874 \uc791\uc5c5\uc744 \uc870\ud68c\ud558\uc138\uc694.",CANCELLATION_TOO_LATE:"\ucde8\uc18c\ud560 \uc218 \uc788\ub294 \uc2dc\uc810\uc774 \uc9c0\ub0ac\uc2b5\ub2c8\ub2e4. \ucd5c\uc885 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc138\uc694.",OPERATION_NOT_COMMITTED:"\uc11c\ubc84\uac00 \uc774 \uc694\uccad\uc758 \ubbf8\uc2e4\ud589\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4. \uac80\ud1a0 \ud6c4 \uc0c8 \uc791\uc5c5\uc744 \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",UNSUPPORTED_COMPONENT:"\uc544\uc9c1 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ub514\uc790\uc778 \ud615\uc2dd\uc785\ub2c8\ub2e4.",LOCAL_STORAGE_UNAVAILABLE:"\ubcc0\uacbd \ub0b4\uc6a9\uc774 \uba54\ubaa8\ub9ac\uc5d0\ub9cc \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\u
1c774\uc9c0\ub97c \ub2eb\uc73c\uba74 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4.",ASSET_NOT_READY:"\uc774\ubbf8\uc9c0\ub97c \uac80\uc0ac\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",ASSET_REJECTED:"\uc774\ubbf8\uc9c0\uac00 \uac80\uc0ac\ub97c \ud1b5\uacfc\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud558\uc138\uc694.",INVALID_INPUT:"\uc785\ub825\ud55c \uac12\uc744 \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc138\uc694.",INVALID_CUSTOM_SECTION:"\ucee4\uc2a4\ud140 \uc139\uc158\uc5d0 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \ub9c8\ud06c\uc5c5\uc774\ub098 CSS\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc800\uc7a5\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.",ASSET_KIND_MISMATCH:"\uc774 \uc704\uce58\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \ud30c\uc77c \ud615\uc2dd\uc785\ub2c8\ub2e4. \uc774\ubbf8\uc9c0 \uc790\ub9ac\uc5d0\ub294 \uc774\ubbf8\uc9c0\ub97c, 3D \uc790\ub9ac\uc5d0\ub294 GLB \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc138\uc694.",MODEL_REJECTED:"3D \ubaa8\ub378\uc774 \uac80\uc0ac\ub97c \ud1b5\uacfc\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc678\ubd80 \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc9c0 \uc54a\ub294 \ubc14\uc774\ub108\ub9ac glTF(.glb) \ud30c\uc77c\uc744 \uc0ac\uc6a9\ud558\uc138\uc694.",AUTHENTICATION_REQUIRED:"\uc138\uc158\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ub85c\uadf8\uc778\ud558\uc138\uc694.",ACCESS_DENIED:"\uc811\uadfc \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8 \uc815\ubcf4\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",REVISION_CONFLICT:"\ub2e4\ub978 \uacf3\uc5d0\uc11c \ub514\uc790\uc778\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ucd5c\uc2e0 \ubc84\uc804\uc744 \ubd88\ub7ec\uc628 \ub4a4 \uc800\uc7a5\ud558\uc138\uc694.",QUOTE_EXPIRED:"\uacac\uc801\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ube44\uc6a9\uc744 \ub2e4\uc2dc \ud655\uc778\ud558\uc138\uc694.",INSUFFICIENT_CREDIT:"\ub0a8\uc740 AI \uc0ac\uc6a9\ub7c9\uc774 \ubd80\uc871\ud569\ub2c8\ub2e4.",BUDGET_EXCEEDED:"\ud504\ub85c\uc81d\ud2b8 \uc9c0\ucd9c \ud55c\ub3c4\ub97c \ucd08\uacfc\ud569\ub2c8\ub2e4.",IDEMPOTENCY_CONFLICT:"\uc774 \uc791\uc5c5 \ud0a4\ub294 \ub2e4\ub978 \uc694\uccad\uc5d0 \uc0ac\uc6a9\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uae30\uc874 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc138\uc694.",STORAGE_UNAVAILABLE:"\ube0c\ub77c\uc6b0\uc800 \uc800\uc7a5\uc18c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc5b4 \ubcf5\uad6c \uac00\ub2a5\ud55c \uc791\uc5c5\uc744 \uc2dc\uc791\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",INVALID_RESPONSE:"\uc11c\ube44\uc2a4 \uc751\ub2f5 \ud615\uc2dd\uc744 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",unavailable:"Snailer Design \uc11c\ube44\uc2a4\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",unknown:"\uacb0\uacfc\uac00 \ud655\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uae30\uc874 \uc791\uc5c5\uc744 \ud655\uc778\ud558\uc138\uc694.",invalid:"\ud544\uc218 \uc785\ub825\uc744 \ud655\uc778\ud574 \uc8fc\uc138\uc694."}}),a=e=>"ko"===e?o:r},1379(){},1453(){},1529(e,t,n){n.d(t,{$u:()=>u,Cu:()=>r,EF:()=>p,KO:()=>o,Kn:()=>c,WD:()=>l,dd:()=>d,lJ:()=>s,sN:()=>a});var i=n(2555);const r="uxforge.sample.v1",o=["#a54b2a","#385e54","#55599c","#8b4a66"],a=e=>JSON.parse(JSON.stringify(e));function s(){const e={schema_version:1,registry_version:"uxf-registry-2",nodes:[{node_id:"navigation",component:"Nav",props:{text:"form.",detail:"DESIGNED TO DO MORE."}},{node_id:"hero",component:"Hero",props:{eyebrow:"MEET FORM ONE",text:"Less, but\neverything.",detail:"A smaller footprint. A bigger possibility. Thoughtful in every dimension.",color_token:"accent"}},{node_id:"cta",component:"Button",props:{text:"Explore Form One",color_token:"accent"}},{node_id:"section",component:"Text",props:{text:"Every detail. Intentional.",detail:"One idea, considered from every angle."}},{node_id:"collection",component:"Grid",props:{text:"THOUGHTFULLY PUT TOGETHER"},children:[{node_id:"card-focus",component:"Card",props:{eyebrow:"01 / FORM",text:"Space to think.",detail:"A quiet presence on your desk. More room for your next idea.",color_token:"accent"}}
1,{node_id:"card-together",component:"Card",props:{eyebrow:"02 / CONNECTION",text:"Everything, together.",detail:"The connections you need, right where you need them.",color_token:"accent"}},{node_id:"card-start",component:"Card",props:{eyebrow:"03 / INTENTION",text:"Built with purpose.",detail:"Considered materials. Refined edges. Nothing without a reason.",color_token:"accent"}}]},{node_id:"footer",component:"Footer",props:{text:"form.",detail:"An authored Snailer Design sample."}}]},t={id:"sample-rev-1",created_at:(new Date).toISOString(),reason:"original",ir:e,theme:{accent:"#556579",background:"#f5f5f7",text:"#1d1d1f",font:"sans",radius:16,spacing:24}};return{id:"sample",name:"Form One \u2014 a product study",frame_id:"sample-frame",current_revision_id:t.id,ir:e,theme:t.theme,versions:[a(t)]}}function c(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).flatMap(e=>[e,...c(e.children||[])])}function l(e,t){let{ir:n=e.ir,theme:r=e.theme,reason:o="editReason"}=t;const s={id:"sample-rev-".concat(crypto.randomUUID()),created_at:(new Date).toISOString(),reason:o,ir:a(n),theme:(0,i.A)({},r)};return d((0,i.A)((0,i.A)({},e),{},{ir:s.ir,theme:s.theme,current_revision_id:s.id,versions:[s,...e.versions].slice(0,30)}))}function d(e){const t=e.frames||[{id:e.frame_id,title:"Homepage",route:"/"}];return(0,i.A)((0,i.A)({},e),{},{frames:t.map(t=>t.id===e.frame_id?(0,i.A)((0,i.A)({},t),{},{ir:e.ir,current_revision_id:e.current_revision_id,versions:e.versions}):t)})}function u(e,t){const n=d(e),r=n.frames.find(e=>e.id===t);return r?(0,i.A)((0,i.A)({},n),{},{frame_id:r.id,ir:r.ir,versions:r.versions,current_revision_id:r.current_revision_id}):n}function p(e,t){const n=d(e),r=t.map(e=>{const t=n.frames.find(t=>t.id===e.frame_id);if(t)return(0,i.A)((0,i.A)({},t),{},{title:e.title,route:e.route});const r={schema_version:1,registry_version:"uxf-registry-2",nodes:[{node_id:"hero",component:"Hero",props:{text:e.title,detail:e.purpose,eyebrow:"LOCAL SCREEN PLAN"}}]},o={id:"sample-rev-".concat(crypto.randomUUID()),ir:r,theme:n.theme,reason:"planReason",created_at:(new Date).toISOString()};return{id:"sample-frame-".concat(crypto.randomUUID()),title:e.title,route:e.route,ir:r,versions:[o],current_revision_id:o.id}}
1),o={revision_id:"sample-plan-".concat(crypto.randomUUID()),screens:t.map((e,t)=>(0,i.A)((0,i.A)({},e),{},{frame_id:r[t].id}))},a=r.find(e=>e.id===n.frame_id)||r[0];return(0,i.A)((0,i.A)({},n),{},{frames:r,plan:o,frame_id:a.id,ir:a.ir,versions:a.versions,current_revision_id:a.current_revision_id})}},2843(e,t,n){n.d(t,{A:()=>f,U:()=>b});var i=n(9950),r=n(2074),o=n(8429),a=n(8440),s=n(915),c=n(4362),l=n(7006),d=n(4629),u=n(8797),p=n(5546),h=n(5122),m=n(3762),g=n(8538),v=n(4414);function f(){const{language:e}=(0,a.ok)(),t=(0,s.M)(e),n=(0,c.x)(t);return(0,v.jsxs)("main",{className:"uxf-page uxf-billing-page ph-no-capture ph-mask","data-clarity-mask":"true",children:[(0,v.jsx)("h1",{children:n.title}),(0,v.jsx)(l.Wp,{children:(0,v.jsx)(l.Pq,{capability:null,children:(0,v.jsx)(x,{c:t})})})]})}function x(e){let{c:t}=e;const n=(0,l.sV)();return(0,v.jsx)(b,{access:n,c:t},n.owner)}function b(e){var t,n;let{access:a,c:s}=e;const{api:l,owner:f}=a,x=(0,c.x)(s),b=(0,o.zy)(),y=(0,m.A)(),[_,w]=(0,i.useState)(null),[E,N]=(0,i.useState)(null),[S,A]=(0,i.useState)(!1),[T,I]=(0,i.useState)(()=>(0,p.Iw)(f)),k=(0,i.useRef)(T),[C,j]=(0,i.useState)(null),[R,D]=(0,i.useState)(null),[L,O]=(0,i.useState)(!1),[U,P]=(0,i.useState)(null),M=(0,i.useRef)(!1),H=(0,i.useRef)(!0),z=(0,g.A)(l),G="uxforge.checkout.v1:".concat(f),B=/\/billing\/return\/?$/.test(b.pathname),[V]=(0,i.useState)(()=>{const e=(0,h.cO)(b).getAll("session_id");return B&&1===e.length&&e[0].length<=200&&e[0]?e[0]:null}),F=new URLSearchParams(b.search).get("plan"),q="1"===new URLSearchParams(b.search).get("start"),[Y,K]=(0,i.useState)(null),Q=(0,i.useRef)(!1),W=(0,i.useRef)(!1),[J,X]=(0,i.useState)(Object.hasOwn(p.Bo,F)?F:"pro"),$=(0,i.useCallback)(async()=>{const e=await l.get("/billing/subscription");if(!(0,p.i8)(e,f))throw new u.zE("INVALID_RESPONSE");H.current&&w(e)},[l,f]),Z=(0,i.useCallback)(async e=>{const t=k.current;if(!e&&!t)return;const n=await l.get(e?"/billing/checkout-sessions/".concat((0,u.a)(e)):"/billing/checkout-sessions/by-key/".concat((0,u.a)(t.key)));if(!(0,p.BU)(n,t)||e&&n.id!==e)throw new u.zE("INVALID_RESPONSE");H.current&&(j(n),("expired"===n.status||"paid"===n.status&&"granted"===n.credit_grant_status)&&(sessionStorage.removeItem(G),k.current=null,I(null)),await $())},[l,G,$]);(0,i.useEffect)(()=>(H.current=!0,$().catch(e=>{H.current&&N(e.code||"unknown")}),l.get("/trial").then(e=>{H.current&&K(e)}).catch(()=>{}),(V||k.current)&&Z(V).catch(e=>{H.current&&N(e.code||"unknown")}),()=>{H.current=!1}),[$,Z,V]);const ee=async e=>{if(!M.current){M.current=!0,A(!0),N(null);try{await e()}catch(t){H.current&&N(t.code||"unknown")}finally{M.current=!1,H.current&&A(!1)}}},te=e=>ee(async()=>{let t=k.current;if(!e){if(!_||t||!R||!L||!(0,p.uS)(y.catalog)||null!==_&&void 0!==_&&_.subscription&&"canceled"!==_.subscription.status)return;if(R.catalog_version!==y.catalog.catalog_version||R.terms_version!==y.catalog.terms_version)throw new u.zE("CATALOG_CHANGED");t={key:(0,u.tu)(),body:{plan_id:R.plan.id,catalog_version:R.catalog_version,terms_version:R.terms_version},price:R.plan.monthly_price_micros,included:R.plan.included_credit_micros};try{sessionStorage.setItem(G,JSON.stringify(t))}catch(n){throw new u.zE("STORAGE_UNAVAILABLE")}k.current=t,I(t),j(null),D(null)}if(t)try{const n=await l.post("/billing/checkout-sessions",t.body,t.key);if(!(0,p.BU)(n,t))throw new u.zE("INVALID_RESPONSE");W.current=!e,await Z(n.id)}catch(i){throw H.current&&["CATALOG_CHANGED","INVALID_INPUT","SUBSCRIPTION_EXISTS","CHECKOUT_EXISTS"].includes(i.code)&&(sessionStorage.removeItem(G),k.current=null,I(null),D(null),y.refresh(),await $()),i}}),ne=null===(t=y.catalog)||void 0===t?void 0:t.plans.find(e=>e.id===J),ie=!(null===_||void 0===_||!_.subscription)&&"canceled"!==_.subscription.status,re=!!_&&!ie&&!T&&"paid"!==(null===C||void 0===C?void 0:C.status)&&!B&&(0,p.uS)(y.catalog),oe="open"===(null===C||void 0===C?void 0:C.status)&&Date.parse(C.expires_at)>Date.now()?(0,p.sJ)(C.checkout_url,"checkout"):null;(0,i.useEffect)(()=>{q&&re&&ne&&!Q.current&&(Q.current=!0,O(!1),D({plan:ne,catalog_version:y.catalog.catalog_version,terms_version:y.catalog.terms_version}))},[q,re,ne,y.catalog]),(0,i.useEffect)(()=>
1{if(W.current&&oe){W.current=!1;try{window.location.assign(oe)}catch(e){}}},[oe]);const ae="available"===(null===Y||void 0===Y?void 0:Y.status)&&!ie,se=(e,t)=>{Date.parse(t)>Date.now()||(e.preventDefault(),N("QUOTE_EXPIRED"))};return(0,v.jsxs)("section",{className:"uxf-subscription",children:[(0,v.jsx)("p",{className:"uxf-muted",children:x.separate}),(0,v.jsx)(d.Pf,{error:E,c:s}),!_&&!E&&(0,v.jsx)("p",{role:"status",children:s.busy}),_&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)("article",{className:"uxf-delivery-card",children:[(0,v.jsx)("h2",{children:_.subscription?p.Bo[_.subscription.plan_id]:x.none}),_.subscription&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)("dl",{className:"uxf-facts",children:[(0,v.jsxs)("div",{children:[(0,v.jsx)("dt",{children:x.status}),(0,v.jsx)("dd",{children:x.statuses[_.subscription.status]||x.unknownStatus})]}),(0,v.jsxs)("div",{children:[(0,v.jsx)("dt",{children:x.price}),(0,v.jsx)("dd",{children:(0,u.I6)(_.subscription.monthly_price_micros)})]})]}),(0,v.jsx)("p",{children:["canceled","incomplete_expired"].includes(_.subscription.status)?x.ended:"internal"===_.subscription.billing_source?x.internal:_.subscription.cancel_at_period_end?x.cancel:x.renew})]}),"internal"===(null===(n=_.subscription)||void 0===n?void 0:n.billing_source)&&_.has_paid_subscription&&(0,v.jsx)("p",{className:"uxf-fine-print",children:x.separatePaid}),ae?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("p",{children:x.trialReady}),(0,v.jsx)("div",{className:"uxf-actions",children:(0,v.jsx)(r.N_,{className:"uxf-button primary",to:"/design/projects",children:x.trialStart})})]}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("p",{children:_.entitlements.can_start_generation?x.ready:x.noGeneration}),_.entitlements.reason_codes.map(e=>(0,v.jsx)("p",{className:"uxf-fine-print",children:s.errors[e]||s.errors.unknown},e))]}),(0,v.jsxs)("div",{className:"uxf-actions",children:[_.entitlements.can_manage_subscription&&(0,v.jsx)("button",{className:"uxf-button",disabled:S,onClick:()=>ee(async()=>{if(null===_||void 0===_||!_.entitlements.can_manage_subscription)return;const e=await z("post","/billing/portal-sessions",{});if("uxforge"!==(null===e||void 0===e?void 0:e.product)||!(0,p.sJ)(e.url,"portal")||!(Date.parse(e.expires_at)>Date.now()))throw new u.zE("INVALID_RESPONSE");H.current&&P(e)}),children:x.manage}),U&&Date.parse(U.expires_at)>Date.now()&&(0,v.jsx)("a",{className:"uxf-button primary",href:(0,p.sJ)(U.url,"portal"),referrerPolicy:"no-referrer",onClick:e=>se(e,U.expires_at),children:x.portal}),(0,v.jsx)("button",{className:"uxf-text-link",disabled:S,onClick:()=>ee($),children:x.refresh})]})]}),_.wallet&&_.subscription&&(()=>{const e=BigInt(_.subscription.included_credit_micros||0),t=BigInt(_.wallet.available_micros||0);return(0,v.jsx)(d.Hi,{percent:(0,d.T9)(e>t?e-t:0n,e),label:x.usage,note:x.usageNote})})()]}),(B||T||C)&&(0,v.jsxs)("article",{className:"uxf-delivery-card","aria-live":"polite",children:[(0,v.jsx)("h2",{children:x.returnTitle}),!B||V||T?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("p",{children:C?"paid"===C.status?"granted"===C.credit_grant_status?x.granted:"failed"===C.credit_grant_status?x.grantFailed:x.grantPending:"expired"===C.status?x.expired:x.open:x.pending}),T&&(0,v.jsxs)("p",{children:[p.Bo[T.body.plan_id]," \xb7 ",(0,u.I6)(T.price)," / ","Design"===s.editor?"month":"\uc6d4"]}),(0,v.jsxs)("div",{className:"uxf-actions",children:[oe&&(0,v.jsx)("a",{className:"uxf-button primary",href:oe,referrerPolicy:"no-referrer",onClick:e=>se(e,C.expires_at),children:x.checkout}),(0,v.jsx)("button",{className:"uxf-button",disabled:S,onClick:()=>ee(()=>Z((null===C||void 0===C?void 0:C.id)||V)),children:x.check}),T&&!C&&(0,v.jsx)("button",{className:"uxf-button",disabled:S,onClick:()=>te(!0),children:x.retry})]})]}):(0,v.jsx)("p",{children:x.invalidReturn}),(0,v.jsx)(r.N_,{className:"uxf-text-link",to:"/design/billing",children:x.back})]}),!ie&&!B&&!T&&"paid"!==(null===C||void 0===C?void 0:C.status)&&(0,v.jsxs)("article",{className:"uxf-delivery-card",children:[(0,v.jsx)("h2",{children:x.select}),re?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)("label",{className:"uxf-field",children:[x.plan,(0,v.jsx)("select",{value:J,onChange:e=>X(e.target.value),children:y.catalog.plans.map(e=>(0,v.jsxs)("option",{value:e.id,children:[p.Bo[e.id]," \xb7 ",(0,u.I6)(e.monthly_price_micros)]},e.id))})]}),(0,v.jsxs)("div",{className:"uxf-actions",children:[(0,v.jsx)("button",{className:"uxf-button".concat(ae?"":" primary"),disabled:S||!ne,onClick:()=>{O(!1),D({plan:ne,catalog_version:y.catalog.catalog_version,terms_version:y.catalog.terms_version})},children:x.select}),(0,v.jsx)(r.N_,{className:"uxf-text-link",to:"/design/pricing",children:x.browse})]})]}):(0,v.jsx)("p",{children:x.preparing}),!re&&(0,v.jsx)(r.N_,{className:"uxf-text-link",to:"/design/pricing",children:x.browse})]}),R&&(0,v.jsxs)(d.lG,{title:x.review,c:s,onClose:()=>D(null),children:[(0,v.jsxs)("h3",{children:[p.Bo[R.plan.id]," \xb7 ",(0,u.I6)(R.plan.monthly_price_micros)," / ","Design"===s.editor?"month":"\uc6d4"]}),(0,v.jsx)("p",{children:x.terms}),(0,v.jsxs)("label",{className:"uxf-review-confirm",children:[(0,v.jsx)("input",{type:"checkbox",checked:L,onChange:e=>O(e.target.checked)}),x.agree]}),(0,v.jsx)("button",{className:"uxf-button primary",disabled:S||!L||!(0,p.uS)(y.catalog),onClick:()=>te(!1),children:S?x.redirecting:x.confirm})]})]})}},3614(e,t,n){n.d(t,{Cb:()=>u,EG:()=>v,FQ:()=>f,J1:()=>E,Jg:()=>N,KD:()=>p,Ok:()=>m,Ux:()=>S,be:()=>a,ei:()=>
1w,g2:()=>x,jV:()=>_,oo:()=>b,q8:()=>y});var i=n(8797),r=n(8430),o=n(7812);const a="/integrations/external-mcp",s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return"string"===typeof e&&e.length>0&&e.length<=t},c=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;return Array.isArray(e)&&e.length<=t&&e.every(e=>s(e))&&new Set(e).size===e.length},l=e=>"string"===typeof e&&Number.isFinite(Date.parse(e)),d=e=>"string"===typeof e&&/^[a-f0-9]{64}$/.test(e),u=e=>l(e)&&Date.parse(e)>Date.now();function p(e,t){if(!t(e))throw new i.zE("INVALID_RESPONSE");return e}const h=e=>s(null===e||void 0===e?void 0:e.provider_id)&&s(e.name)&&["mcp","figma_rest"].includes(e.kind)&&e.transport===("mcp"===e.kind?"streamable_http":"rest")&&"boolean"===typeof e.connect_available&&(null===e.reason_code||s(e.reason_code))&&c(e.capabilities)&&c(e.requested_scopes),m=e=>1===(null===e||void 0===e?void 0:e.schema_version)&&(void 0===e.custom_server_available||"boolean"===typeof e.custom_server_available)&&Array.isArray(e.items)&&e.items.length<=100&&e.items.every(h)&&new Set(e.items.map(e=>e.provider_id)).size===e.items.length,g=e=>s(null===e||void 0===e?void 0:e.id)&&s(e.provider_id)&&s(e.display_name)&&["connected","expired","revoked","pending","suspended"].includes(e.status)&&(null===e.expires_at||l(e.expires_at))&&c(e.project_ids)&&(void 0===e.personal||!1===e.personal||!0===e.personal&&s(e.server_url,2048)&&["oauth","bearer","none"].includes(e.auth_type)),v=e=>Array.isArray(null===e||void 0===e?void 0:e.items)&&e.items.length<=100&&e.items.every(g)&&new Set(e.items.map(e=>e.id)).size===e.items.length&&(null===e.next_cursor||s(e.next_cursor,2048));function f(e,t){if("string"!==typeof e||/[\\\s#]/.test(e))return null;try{const n=new URL(e,window.location.origin);return n.origin!==window.location.origin||n.username||n.password||n.pathname!=="/api/uxforge/oauth/external/".concat(encodeURIComponent(t),"/start")||n.search||n.hash?null:n.href}catch(n){return null}}const x=(e,t,n)=>(null===e||void 0===e?void 0:e.connection_id)===t&&e.project_id===n&&s(e.tools_version)&&Array.isArray(e.items)&&e.items.length<=100&&e.items.every(e=>{var t;return s(null===e||void 0===e?void 0:e.name)&&"string"===typeof e.description&&e.description.length<=8192&&!0===e.read_only&&"object"===(null===(t=e.input_schema)||void 0===t?void 0:t.type)})&&new Set(e.items.map(e=>e.name)).size===e.items.length&&c(e.allowed_tool_names)&&e.allowed_tool_names.every(t=>e.items.some(e=>e.name===t));function b(e){if("string"!==typeof e||e.length>16e3)throw new i.zE("INVALID_INPUT");try{const t=JSON.parse(e),n=JSON.stringify(t).replace(/[<>&\u2028\u2029]/g,e=>"\\u".concat(e.charCodeAt(0).toString(16).padStart(4,"0")));if(t&&"object"===typeof t&&!Array.isArray(t)&&new Blob([n]).size<=16e3)return t}catch(t){}throw new i.zE("INVALID_INPUT")}const y=(e,t,n)=>{var i,r;return(null===e||void 0===e?void 0:e.project_id)===t&&e.connection_id===n&&s(e.context_ref)&&d(e.content_hash)&&s(null===(i=e.source)||void 0===i?void 0:i.label,500)&&s(null===(r=e.source)||void 0===r?void 0:r.provider_id)&&"string"===typeof e.preview_text&&e.preview_text.length<=32e3&&u(e.expires_at)};function _(e){try{const t=new URL(e),n=t.pathname.match(/^\/(?:design|file)\/([A-Za-z0-9_-]{1,200})(?:\/|$)/),i=t.searchParams.get("node-id");if("https:"===t.protocol&&["figma.com","www.figma.com"].includes(t.hostname)&&!t.port&&!t.username&&!t.password&&n&&/^\d{1,30}[-:]\d{1,30}$/.test(i||""))return{file_key:n[1],node_id:i.replace("-",":")}}catch(t){}throw new i.zE("INVALID_INPUT")}const w=function(e,t,n){var i,a;let c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.current_revision_id||null;return(null===e||void 0===e?void 0:e.project_id)===t.id&&e.connection_id===n&&s(e.preview_id)&&d(e.reviewed_hash)&&e.base_revision_id===c&&s(null===(i=e.source)||void 0===i?void 0:i.file_key)&&s(null===(a=e.source)||void 0===a?void 0:a.node_id)&&u(e.expires_at)&&"boolean"===typeof e.importable&&(0,r.ih)(e.ir)&&(0,o.Bl)(e.theme)&&Array.isArray(e.mapping)&&e.mapping.length<=1e3&&e.mapping.every(e=>s(null===e||void 0===e?void 0:e.source_node_id)&&s(e.component))&&["unsupported_nodes","missing_assets"].every(t=>Array.isArray(e[t])&&e[t].length<=1e3&&e[t].every(e=>s(null===e||void 0===e?void 0:e.id)&&s(e.message,1e3)&&"boolean"===typeof e.blocking))&&(!e.importable||![...e.unsupported_nodes,...e.missing_assets].some(e=>e.blocking))},E=e=>"connected"===e.status&&e.expires_at&&!u(e.expires_at)?"expired":e.status,N=e=>404===(null===e||void 0===e?void 0:e.status)||["NOT_FOUND","UNAVAILABLE","FEATURE_DISABLED","unavailable"].includes(null===e||void 0===e?void 0:e.code),S=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>{var i,r;return(null===e||void 0===e?void 0:e.context_ref)===(null===(i=t[n])||void 0===i?void 0:i.context_ref)&&(null===e||void 0===e?void 0:e.content_hash)===(null===(r=t[n])||void 0===r?void 0:r.content_hash)})},3762(e,t,n){n.d(t,{A:()=>
1o});var i=n(9950),r=n(5546);function o(){const[e,t]=(0,i.useState)(null),[n,o]=(0,i.useState)(null),[a,s]=(0,i.useState)(0),c=(0,i.useCallback)(()=>s(e=>e+1),[]);return(0,i.useEffect)(()=>{const e=new AbortController,n=setTimeout(()=>e.abort(),15e3);let i=!0;return t(null),o(null),(0,r.kZ)(e.signal).then(e=>{i&&t(e)}).catch(e=>{i&&o(e.code||"BILLING_UNAVAILABLE")}).finally(()=>clearTimeout(n)),()=>{i=!1,clearTimeout(n),e.abort()}},[a]),{catalog:e,error:n,refresh:c}}},4362(e,t,n){n.d(t,{x:()=>i});const i=e=>"Design"===e.editor?{statuses:{active:"Active",canceled:"Canceled",past_due:"Payment overdue",unpaid:"Unpaid",incomplete:"Payment incomplete",incomplete_expired:"Payment expired",trialing:"Trial",paused:"Paused"},unknownStatus:"Status needs confirmation",title:"Snailer Design subscription",none:"No Snailer Design subscription",preparing:"Checkout is currently unavailable. Refresh to check the latest status.",separate:"This subscription and monthly balance are separate from your Snailer coding agent plan.",plan:"Plan",status:"Subscription status",renew:"Renews monthly",ended:"Subscription ended \xb7 no future renewals",cancel:"Ends at the current billing period",internal:"Internal account \xb7 complimentary monthly usage",separatePaid:"A separate paid Stripe subscription is still active. You can manage it using the link below.",price:"Monthly price",manage:"Create subscription management link",portal:"Open Stripe subscription settings",select:"Subscribe",review:"Review your monthly subscription",confirm:"Pay with Stripe",redirecting:"Opening Stripe checkout\u2026",trialReady:"Your first AI generation is free. Create a design now \u2014 no subscription needed.",trialStart:"Create your first design free",agree:"I reviewed the monthly renewal price and the subscription terms.",terms:"USD per account, tax excluded. Renews monthly until canceled. Monthly included usage expires without rollover; no automatic overages. Cancel at the end of the paid period in subscription settings.",termsVersion:"Terms version",catalogVersion:"Price version",current:"Current plan",refresh:"Refresh subscription",available:"Available usage",usage:"AI usage this month",usageNote:"Share of your plan\u2019s included AI usage. It renews each billing period; there are no automatic overage charges.",ready:"Generation is available subject to project permissions and quote approval.",noGeneration:"New generation is currently unavailable.",pending:"Confirm the original checkout before starting another. A missing or delayed response is not proof that it never ran.",check:"Check original checkout",retry:"Retry original request",checkout:"Open secure Stripe checkout",paid:"Payment confirmed",grantPending:"Payment is confirmed; included usage is still being provisioned.",granted:"Payment and included usage confirmed",grantFailed:"Payment confirmed; usage provisioning needs attention. Do not pay again.",expired:"Checkout expired. Refresh the subscription before starting again.",open:"Checkout ready \xb7 payment not confirmed",timedOut:"This link has expired. Check the latest server status.",returnTitle:"Check subscription payment",invalidReturn:"A valid checkout reference is required. Open subscription management to check your account.",browse:"Explore plans",back:"Subscription management",live:"Monthly subscriptions",paused:"Checkout temporarily unavailable",liveNote:"Review the selected monthly plan before continuing to secure Stripe checkout.",pausedNote:"Current server prices are shown. New checkout is unavailable; existing subscribers can check their account.",subscribe:"Subscribe",included:"Monthly usage included"}:{statuses:{active:"\uc774\uc6a9 \uc911",canceled:"\ucde8\uc18c\ub428",past_due:"\uacb0\uc81c \uc9c0\uc5f0",unpaid:"\ubbf8\ub0a9",incomplete:"\uacb0\uc81c \ubbf8\uc644\ub8cc",incomplete_expired:"\uacb0\uc81c \ub9cc\ub8cc",trialing:"\uccb4\ud5d8 \uc911",paused:"\uc77c\uc2dc \uc911\uc9c0"},unknownStatus:"\uc0c1\ud0dc \ud655\uc778 \ud544\uc694",title:"Snailer Design \uad6c\ub3c5",none:"Snailer Design \uad6c\ub3c5 \uc5c6\uc74c",preparing:"\ud604\uc7ac \uacb0\uc81c\ub97c \uc9c4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68\ud558\uc5ec \ucd5c\uc2e0 \uc0c1\ud0dc\ub97c \ud655\uc778\ud574 \uc8fc\uc138\uc694.",separate:"Snailer \ucf54\ub529 \u
1c5d0\uc774\uc804\ud2b8 \ud50c\ub79c\uacfc \ubcc4\ub3c4\uc778 \uad6c\ub3c5\xb7\uc6d4\uac04 \uc794\uc561\uc785\ub2c8\ub2e4.",plan:"\ud50c\ub79c",status:"\uad6c\ub3c5 \uc0c1\ud0dc",renew:"\ub9e4\uc6d4 \uac31\uc2e0",ended:"\uad6c\ub3c5 \uc885\ub8cc \xb7 \ucd94\uac00 \uac31\uc2e0 \uc5c6\uc74c",cancel:"\ud604\uc7ac \uacb0\uc81c \uae30\uac04 \uc885\ub8cc \uc2dc \ucde8\uc18c",internal:"\ub0b4\ubd80 \uacc4\uc815 \xb7 \ub9e4\uc6d4 \uc0ac\uc6a9\ub7c9 \ubb34\ub8cc \uc81c\uacf5",separatePaid:"\ubcc4\ub3c4\uc758 Stripe \uc720\ub8cc \uad6c\ub3c5\uc774 \uc720\uc9c0 \uc911\uc785\ub2c8\ub2e4. \uc544\ub798 \uad6c\ub3c5 \uad00\ub9ac\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",price:"\uc6d4 \uad6c\ub3c5\ub8cc",manage:"\uad6c\ub3c5 \uad00\ub9ac \ub9c1\ud06c \ub9cc\ub4e4\uae30",portal:"Stripe \uad6c\ub3c5 \uc124\uc815 \uc5f4\uae30",select:"\uad6c\ub3c5\ud558\uae30",review:"\uc6d4 \uad6c\ub3c5 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694",confirm:"Stripe\uc5d0\uc11c \uacb0\uc81c\ud558\uae30",redirecting:"Stripe \uacb0\uc81c \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4\u2026",trialReady:"\uccab AI \uc0dd\uc131 1\ud68c\ub294 \ubb34\ub8cc\uc785\ub2c8\ub2e4. \uad6c\ub3c5 \uc5c6\uc774 \ubc14\ub85c \ub514\uc790\uc778\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uc138\uc694.",trialStart:"\ubb34\ub8cc\ub85c \uccab \ub514\uc790\uc778 \ub9cc\ub4e4\uae30",agree:"\uc6d4 \uac31\uc2e0 \uae08\uc561\uacfc \uad6c\ub3c5 \uc870\uac74\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.",terms:"\uacc4\uc815\ub2f9 USD, \uc138\uae08 \ubcc4\ub3c4\uc785\ub2c8\ub2e4. \ucde8\uc18c \uc804\uae4c\uc9c0 \ub9e4\uc6d4 \uac31\uc2e0\ud558\uba70 \ud3ec\ud568 \uc0ac\uc6a9\ub7c9\uc740 \uc774\uc6d4\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc790\ub3d9 \ucd08\uacfc \uacb0\uc81c\ub294 \uc5c6\uc2b5\ub2c8\ub2e4. \uad6c\ub3c5 \uc124\uc815\uc5d0\uc11c \ud604\uc7ac \uacb0\uc81c \uae30\uac04 \uc885\ub8cc \uc2dc \ucde8\uc18c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",termsVersion:"\uad6c\ub3c5 \uc870\uac74 \ubc84\uc804",catalogVersion:"\uc694\uae08 \ubc84\uc804",current:"\ud604\uc7ac \ud50c\ub79c",refresh:"\uad6c\ub3c5 \uc0c1\ud0dc \uc0c8\ub85c\uace0\uce68",available:"\uc0ac\uc6a9 \uac00\ub2a5\ud55c \uc0ac\uc6a9\ub7c9",usage:"\uc774\ubc88 \ub2ec AI \uc0ac\uc6a9\ub7c9",usageNote:"\ud50c\ub79c\uc5d0 \ud3ec\ud568\ub41c AI \uc0ac\uc6a9\ub7c9 \uc911 \uc0ac\uc6a9\ud55c \ube44\uc728\uc785\ub2c8\ub2e4. \uacb0\uc81c \uc8fc\uae30\ub9c8\ub2e4 \uc0c8\ub85c \uc81c\uacf5\ub418\uba70 \uc790\ub3d9 \ucd08\uacfc \uacb0\uc81c\ub294 \uc5c6\uc2b5\ub2c8\ub2e4.",ready:"\ud504\ub85c\uc81d\ud2b8 \uad8c\ud55c\uacfc \uacac\uc801 \uc2b9\uc778 \ud6c4 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",noGeneration:"\ud604\uc7ac \uc0c8 AI \uc0dd\uc131\uc744 \uc2dc\uc791\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",pending:"\uc0c8 \uacb0\uc81c\ub97c \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uc6d0\ub798 \uacb0\uc81c\ub97c \ud655\uc778\ud558\uc138\uc694. \uc751\ub2f5\uc774 \uc5c6\uac70\ub098 \uc9c0\uc5f0\ub410\ub2e4\ub294 \uc774\uc720\ub9cc\uc73c\ub85c \ubbf8\uc2e4\ud589\uc73c\ub85c \ud310\ub2e8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",check:"\uc6d0\ub798 \uacb0\uc81c \ud655\uc778",retry:"\uc6d0\ub798 \uc694\uccad \uc7ac\uc2dc\ub3c4",checkout:"Stripe \uc548\uc804 \uacb0\uc81c \uc5f4\uae30",paid:"\uacb0\uc81c \ud655\uc778\ub428",grantPending:"\uacb0\uc81c\ub294 \ud655\uc778\ub410\uc73c\uba70 \ud3ec\ud568 \uc0ac\uc6a9\ub7c9\uc744 \uc9c0\uae09\ud558\ub294 \uc911\uc785\ub2c8\ub2e4.",granted:"\uacb0\uc81c\xb7\ud3ec\ud568 \uc0ac\uc6a9\ub7c9 \uc9c0\uae09 \ud655\uc778\ub428",grantFailed:"\uacb0\uc81c\ub294 \ud655\uc778\ub410\uc9c0\ub9cc \uc0ac\uc6a9\ub7c9 \uc9c0\uae09 \ud655\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub2e4\uc2dc \uacb0\uc81c\ud558\uc9c0 \ub9c8\uc138\uc694.",expired:"\uacb0\uc81c \uc138\uc158\uc774 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4. \uad6c\ub3c5 \uc0c1\ud0dc\ub97c \uc0c8\ub85c \ud655\uc778\ud55c \ub4a4 \uc9c4\ud589\ud558\uc138\uc694.",open:"\uacb0\uc81c \ud654\uba74 \uc900\ube44\ub428 \xb7 \uacb0\uc81c \ubbf8\ud655\uc778",timedOut:"\uc774 \ub9c1\ud06c\ub294 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4. \uc11c\ubc84\uc758 \ucd5c\uc2e0 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uc138\uc694.",returnTitle:"\uad6c\ub3c5 \uacb0\uc81c \ud655\uc778",invalidReturn:"\uc720\ud6a8\ud55c \uacb0\uc81c \ucc38\uc870\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uad6c\ub3c5 \uad00\ub9ac\uc5d0\uc11c \uacc4\uc815 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uc138\uc694.",browse:"\uc694\uae08\uc81c \uc0b4\ud3b4\ubcf4\uae30",back:"\uad6c\ub3c5 \uad00\ub9ac",live:"\uc6d4 \uad6c\ub3c5 \uc694\uae08",paused:"\uc2e0\uaddc \uacb0\uc81c \uc77c\uc2dc \uc911\ub2e8",liveNote:"\uc120\ud0dd\ud55c \uc6d4 \uad6c\ub3c5 \uc870\uac74\uc744 \ud655\uc778\ud55c \ub4a4 Stripe \uc548\uc804 \uacb0\uc81c\ub85c \uc774\uc5b4\uac11\ub2c8\ub2e4.",pausedNote:"\uc11c\ubc84\uc758 \ud604\uc7ac \uc694\uae08\uc785\ub2c8\ub2e4. \uc0c8 \uacb0\uc81c\ub294 \uc9c4\ud589\ud560 \uc218 \uc5c6\uc73c\uba70 \uae30\uc874 \uad6c\ub3c5\uc740 \uacc4\uc815\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",subscribe:"\uad6c\ub3c5\ud558\uae30",included:"\ub9e4\uc6d4 \uc0ac\uc6a9\ub7c9 \ud3ec\ud568"}},4629(e,t,n){n.d(t,{Hi:()=>_,Pf:()=>g,T9:()=>y,eS:()=>E,lG:()=>v,pQ:()=>b,sR:()=>w});var i=n(9950),r=n(6598),o=n(2828),a=n(2989),s=n(6311),c=n(5675),l=n(6479),d=n(6426),u=n(5610),p=(n(8797),n(8430)),h=n(7089),m=n(4414);function g(e){let{error:t,c:n}=e;return t?(0,m.jsxs)("div",{className:"uxf-notice error",role:"alert",children:[(0,m.jsx)(o.A,{size:16}),(0,m.jsx)("span",{children:n.errors[t]||n.errors.unknown})]}):null}function v(e){let{title:t,children:n,onClose:r,c:o}=e;const a=(0,i.useRef)(null),s=(0,i.useRef)(r);return s.current=r,(0,i.useEffect)(()=>{var e;const t=document.activeElement,n=()=>{var e;return Array.from((null===(e=a.current)||void 0===e?void 0:e.querySelectorAll('button:not(:disabled),input,select,textarea,a[href],[tabindex="0"]'))||[])};null===(e=n()[0])||void 0===e||e.focus();const i=document.body.style.overflow;document.body.style.overflow="hidden";const r=e=>{if("Escape"===e.key&&(e.preventDefault(),s.current()),"Tab"===e.key){const t=n(),i=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===i?(e.preventDefault(),null===r||void 0===r||r.focus()):e.shiftKey||document.activeElement!==r||(e.preventDefault(),null===i||void 0===i||i.focus())}};return document.addEventListener("keydown",r),()=>{document.body.style.overflow=i,document.removeEventListener("keydown",r),null===t||void 0===t||t.focus()}},[]),(0,m.jsx)("div",{className:"uxf-modal-backdrop",onMouseDown:e=>{e.target===e.currentTarget&&r()},children:(0,m.jsxs)("section",{ref:a,className:"uxf-modal",role:"dialog","aria-modal":"true","aria-label":t,children:[(0,m.jsxs)("header",{children:[(0,m.jsx)("h2",{children:t}),(0,m.jsx)("button",{className:"uxf-icon-button",onClick:r,"aria-label":o.close,children:(0,m.jsx)(l.A,{size:18})})]}),n]})})}const f="uxfNonceSlot0000000000";function x(){return"undefined"===typeof window?900:window.innerHeight||900}
1function b(e){let{ir:t,theme:n,assets:o=[],viewport:a=1440,title:s,decorative:c=!1,highlightedNodeId:l=null,loadingLabel:d="Rendering design\u2026",fit:u=!1}=e;const g=(0,i.useRef)(null),[v,b]=(0,i.useState)(850),[y,_]=(0,i.useState)(x);(0,i.useEffect)(()=>{if(!u)return;const e=()=>_(x());return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[u]),(0,i.useEffect)(()=>{if(!g.current)return;const e=()=>{var e;return b((null===(e=g.current)||void 0===e?void 0:e.clientWidth)||850)};if(e(),"undefined"===typeof ResizeObserver)return;const t=new ResizeObserver(e);return t.observe(g.current),()=>t.disconnect()},[]);const w=(0,i.useMemo)(()=>(0,p.Nf)(t,n,o,l,{nonce:f,motion:!c,modelViewerSrc:(0,h.$1)()}),[t,n,o,l,c]),E=(0,i.useMemo)(()=>w.includes(f)?function(){var e;const t=new Uint8Array(18);if(null!==(e=window.crypto)&&void 0!==e&&e.getRandomValues)window.crypto.getRandomValues(t);else for(let n=0;n<t.length;n+=1)t[n]=Math.floor(256*Math.random());return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_")}():"",[w]),N=(0,i.useMemo)(()=>E?w.split("'nonce-".concat(f,"'")).join("'nonce-".concat(E,"'")).split('nonce="'.concat(f,'"')).join('nonce="'.concat(E,'"')):w,[w,E]),[S,A]=(0,i.useState)(0),[T,I]=(0,i.useState)(null),k="".concat((e=>{let t=5381;for(let n=0;n<e.length;n+=1)t=(33*t^e.charCodeAt(n))>>>0;return t.toString(36)})(N),":").concat(S),C=T===k;(0,i.useEffect)(()=>{A(0)},[N]),(0,i.useEffect)(()=>{if(c||C)return;const e=()=>{document.hidden||A(e=>e<3?e+1:e)},t=setTimeout(e,5e3),n=()=>{document.hidden||e()};return document.addEventListener("visibilitychange",n),()=>{clearTimeout(t),document.removeEventListener("visibilitychange",n)}},[c,C,k]);const j=Math.min(1,Math.max(200,v-(c?0:48))/a),R=u?Math.round(Math.max(480,y-186)/j):390===a?1530:980;return(0,m.jsx)("div",{ref:g,className:"uxf-canvas ".concat(c?"decorative":""),children:(0,m.jsxs)("div",{className:"uxf-preview-paper","aria-busy":!c&&!C,style:{width:a*j,height:R*j},children:[(0,m.jsx)("iframe",{title:s,sandbox:"allow-scripts",tabIndex:c?-1:0,loading:c?"lazy":"eager",srcDoc:N,onLoad:()=>I(k),style:{width:a,height:R,transform:"scale(".concat(j,")"),transformOrigin:"top left",pointerEvents:c?"none":"auto"}},k),!c&&!C&&(0,m.jsxs)("div",{className:"uxf-preview-loading","aria-hidden":"true",children:[(0,m.jsx)(r.A,{activity:"render",size:32,theme:"light"}),(0,m.jsx)("span",{children:d})]})]})})}function y(e,t){try{const n=BigInt(e||0),i=BigInt(t||0);if(i<=0n||n<0n)return null;const r=Number(100n*n/i);return Math.min(100,r)}catch(n){return null}}function _(e){let{percent:t,label:n,note:i}=e;return null==t?null:(0,m.jsxs)("div",{className:"uxf-usage",children:[(0,m.jsxs)("div",{className:"uxf-usage-head",children:[(0,m.jsx)("span",{children:n}),(0,m.jsxs)("strong",{children:[t,"%"]})]}),(0,m.jsx)("div",{className:"uxf-usage-bar",role:"progressbar","aria-label":n,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":t,children:(0,m.jsx)("i",{style:{width:"".concat(t,"%")}})}),i&&(0,m.jsx)("p",{className:"uxf-fine-print",children:i})]})}function w(e){let{report:t,stale:n,c:i}=e;return(0,m.jsxs)("section",{className:"uxf-checks",children:[(0,m.jsxs)("div",{className:"uxf-section-heading",children:[(0,m.jsx)("h3",{children:i.localChecks}),(0,m.jsx)("span",{children:n?i.stale:t?i.version:i.unchecked})]}),(0,m.jsx)("p",{children:i.checkNote}),t?(0,m.jsx)("ul",{children:Object.entries(t).map(e=>{let[t,r]=e;return(0,m.jsxs)("li",{children:[r?(0,m.jsx)(s.A,{size:14}):(0,m.jsx)(o.A,{size:14}),(0,m.jsx)("span",{children:i.rules[t]}),(0,m.jsx)("b",{children:n?i.unchecked:r?i.passed:i.failed})]},t)})}):(0,m.jsxs)("div",{className:"uxf-check-empty",children:[(0,m.jsx)(c.A,{size:14}),i.reportWaiting]})]})}function E(e){let{task:t,c:n}=e;if((null===t||void 0===t||!t.pending)&&(null===t||void 0===t||!t.operation)&&(null===t||void 0===t||!t.error))return null;const i=t.operation,o=(0,u.z)(n),s=(0,d.B)(n);return(0,m.jsxs)("section",{className:"uxf-operation","aria-live":"polite",children:[(0,m.jsxs)("div",{children:[t.pending?(0,m.jsx)(r.A,{activity:(null===i||void 0===i?void 0:i.type)||"generation",size:20}):(0,m.jsx)(a.A,{size:16}),(0,m.jsx)("strong",{children:i?i.external_result_pending?n.pendingTitle:n.operationStates[i.status]||i.status:n.pendingTitle})]}),i&&(0,m.jsxs)("p",{children:[o.operationTypes[i.type]||i.type," \xb7 ",(0,m.jsx)("code",{children:i.id})]}),(0,m.jsx)(g,{error:t.error||(null!==i&&void 0!==i&&i.external_result_pending?"EXTERNAL_RESULT_UNKNOWN":null===i||void 0===i?void 0:i.error_code),c:n}),(null===i||void 0===i?void 0:i.billing)&&(0,m.jsx)("p",{children:s.settle[i.billing.settlement_status]||s.settle.pending}),t.pending&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("p",{children:i?o.knownOperation:n.unknown}),(0,m.jsxs)("div",{className:"uxf-actions",children:[(0,m.jsx)("button",{className:"uxf-button",disabled:t.busy,onClick:t.check,children:n.refreshStatus}),(null===i||void 0===i?void 0:i.cancellable)&&(0,m.jsx)("button",{className:"uxf-button",disabled:t.busy,onClick:t.cancel,children:n.cancelOperation})]})]})]})}},5122(e,t,n){n.d(t,{Je:()=>o,cO:()=>r,o$:()=>a});const i="uxforge.callback.v1";function r(e){if(e.search||e.hash)return new URLSearchParams(e.search||e.hash.slice(1));try{const t=JSON.parse(sessionStorage.getItem(i)||"null");if((null===t||void 0===t?void 0:t.path)===e.pathname&&"number"===typeof t.at&&Date.now()>=t.at&&Date.now()-t.at<6e5)return new URLSearchParams(t.search||(t.hash||"").slice(1))}catch(t){}return new URLSearchParams}
1function o(){try{sessionStorage.removeItem(i)}catch(e){}}function a(e,t){if(!["/uxforge/integrations/github/callback","/design/integrations/github/callback"].includes(t)||"string"!==typeof e||!/^[A-Za-z0-9_-]{16,128}$/.test(e))return!1;try{return sessionStorage.setItem(i,JSON.stringify({path:t,search:"?state=".concat(encodeURIComponent(e)),at:Date.now()})),!0}catch(n){return!1}}},5546(e,t,n){n.d(t,{BU:()=>h,Bo:()=>r,D3:()=>u,Iw:()=>g,i8:()=>m,kZ:()=>d,sJ:()=>p,uS:()=>l});var i=n(8797);const r={starter:"Starter",pro:"Pro",studio:"Studio"},o=e=>"string"===typeof e&&e.length>0&&e.length<=200,a=e=>"string"===typeof e&&/^(0|[1-9]\d{0,18})$/.test(e)&&BigInt(e)<=9223372036854775807n,s=e=>"string"===typeof e&&Number.isFinite(Date.parse(e));function c(e){return 1===(null===e||void 0===e?void 0:e.schema_version)&&"uxforge"===e.product&&o(e.catalog_version)&&o(e.terms_version)&&["active","coming_soon","paused"].includes(e.status)&&"boolean"===typeof e.checkout_available&&"USD"===e.currency&&"month"===e.billing_interval&&"account"===e.billing_unit&&"exclusive"===e.tax_behavior&&!1===e.included_credit_rollover&&!1===e.automatic_overage&&Array.isArray(e.plans)&&3===e.plans.length&&3===new Set(e.plans.map(e=>null===e||void 0===e?void 0:e.id)).size&&e.plans.every(e=>Object.hasOwn(r,null===e||void 0===e?void 0:e.id)&&a(e.monthly_price_micros)&&BigInt(e.monthly_price_micros)>0n&&BigInt(e.monthly_price_micros)%10000n===0n&&a(e.included_credit_micros)&&BigInt(e.included_credit_micros)>0n)}const l=e=>!!c(e)&&"active"===e.status&&!0===e.checkout_available&&!e.catalog_version.includes("proposal");async function d(e){try{var t;const n=await fetch("/api/design/v1/billing/catalog",{credentials:"omit",cache:"no-store",redirect:"error",headers:{Accept:"application/json"},signal:e});if(200!==n.status||null===(t=n.headers.get("content-type"))||void 0===t||!t.includes("application/json"))throw new i.zE("BILLING_UNAVAILABLE");const r=await n.json();if(!c(r))throw new i.zE("INVALID_RESPONSE");return r}catch(n){if(n instanceof i.zE||null!==e&&void 0!==e&&e.aborted)throw n;throw new i.zE("BILLING_UNAVAILABLE")}}function u(e,t){if(!a(e)||!a(t)||0n===BigInt(t))return null;const n=BigInt(e),i=BigInt(t);return n%i!==0n?null:(n/i).toString()}function p(e,t){if("string"!==typeof e)return null;try{const n=new URL(e);return"https:"!==n.protocol||n.host!==("portal"===t?"billing.stripe.com":"checkout.stripe.com")||n.username||n.password?null:n.href}catch(n){return null}}function h(e,t){return"uxforge"===(null===e||void 0===e?void 0:e.product)&&o(e.id)&&Object.hasOwn(r,e.plan_id)&&o(e.catalog_version)&&["open","paid","expired"].includes(e.status)&&["not_started","pending","granted","failed"].includes(e.credit_grant_status)&&a(e.monthly_price_micros)&&a(e.included_credit_micros)&&s(e.expires_at)&&(null===e.subscription_id||o(e.subscription_id))&&("open"!==e.status||!!p(e.checkout_url,"checkout"))&&(!t||e.plan_id===t.body.plan_id&&e.catalog_version===t.body.catalog_version&&e.monthly_price_micros===t.price&&e.included_credit_micros===t.included)}function m(e,t){var n,i;if(1!==(null===e||void 0===e?void 0:e.schema_version)||"uxforge"!==e.product||e.principal_user_id!==t||!s(e.as_of)||"boolean"!==typeof(null===(n=e.entitlements)||void 0===n?void 0:n.can_start_generation)||"boolean"!==typeof(null===(i=e.entitlements)||void 0===i?void 0:i.can_manage_subscription)||!Array.isArray(e.entitlements.reason_codes)||!e.entitlements.reason_codes.every(o))return!1;const c=e.subscription,l=e.wallet;return null===c?null===l&&!e.entitlements.can_manage_subscription&&!e.entitlements.can_start_generation:!!c&&o(c.id)&&Object.hasOwn(r,c.plan_id)&&o(c.catalog_version)&&o(c.status)&&s(c.period_start)&&s(c.period_end)&&"boolean"===typeof c.cancel_at_period_end&&a(c.monthly_price_micros)&&a(c.included_credit_micros)&&!!l&&"uxforge_subscription"===l.funding_source&&s(l.expires_at)&&["available_micros","reserved_micros","period_granted_micros","period_charged_micros"].every(e=>null===l[e]||a(l[e]))}function g(e){try{var t;const n=JSON.parse(sessionStorage.getItem("uxforge.checkout.v1:".concat(e))||"null");return/^[A-Za-z0-9_-]{16,128}$/.test((null===n||void 0===n?void 0:n.key)||"")&&Object.hasOwn(r,null===(t=n.body)||void 0===t?void 0:t.plan_id)&&o(n.body.catalog_version)&&o(n.body.terms_version)&&3===Object.keys(n.body).length&&a(n.price)&&a(n.included)?n:null}catch(n){return null}}},5610(e,t,n){n.d(t,{Q:()=>r,z:()=>i});const i=e=>"Design"===e.editor?{available:"Available",restricted:"Not available for this account",features:"Available features",featureNote:"Availability reflects this account and project. Generation requires a separate cost approval.",storage:"Project editing",assets:"Image uploads",generate:"AI generation",export:"Quality checks & code bundles",github:"GitHub PRs",unavailable:"This feature is not available for this account yet.",planFirst:"Save a screen plan before requesting generation.",readiness:"Production readiness",readinessNote:"Read-only service checks. These checks do not enable features or change budgets.",pendingApi:"The readiness endpoint is not connected yet. No production checks are marked as passed.",ready:"Ready",blocked:"Needs setup",disabled:"Disabled",unknown:"Not verified",stale:"This report is over five minutes old. Refresh before relying on it.",asOf:"Report generated at",evidenceAt:"Evidence recorded at",refresh:"Refresh status",checks:"Service checks",noChecks:"No checks were returned.",checkNames:{api:"API",database:"Database",storage:"Private storage",assets:"Image scanning",generation:"Model & pricing",worker:"Job worker",runner:"Isolated build runner",github:"GitHub App",mcp:"MCP clients",mail:"Invitation delivery"},reasons:{NOT_CONFIGURED:"Configuration is incomplete.",NOT_VERIFIED:"Live verification is still required.",STALE_HEARTBEAT:"No recent worker heartbeat.",DISABLED:"Disabled by the service.",DEPENDENCY_UNAVAILABLE:"A required service is unavailable."},execution:"Execution policy",primaryModel:"Primary model",reviewModel:"Review model",maxRepairs:"Maximum repairs",maxCalls:"Maximum model calls",policy:"Approved generation policy",model:"Generation model",price:"Price revision",max:"Maximum charge per operation",projectBudget:"Daily project budget",userBudget:"Daily user budget",funding:"Funding source",promo:"Snailer Design promotional usage",shared:"Snailer credit balance",subscription:"Snailer Design monthly included usage",unreported:"Not reported",heartbeat:"Last worker heartbeat",image:"Runner image digest",quotePolicy:"Server pricing policy",knownOperation:"Track this operation to completion. Checking its status does not start a new charge.",operationTypes:{generation:"AI generation",quality:"Quality inspection",export:"Code export",github_pr:"GitHub PR"}}:{available:"\uc0ac\uc6a9 \uac00\ub2a5",restricted:"\uc774 \uacc4\uc815\uc5d0\uc11c \uc0ac\uc6a9 \ubd88\uac00",features:"\uc0ac\uc6a9 \uac00\ub2a5\ud55c \uae30\ub2a5",featureNote:"\uacc4\uc815\uacfc \ud504\ub85c\uc81d\ud2b8\uc5d0 \ud5c8\uc6a9\ub41c \uae30\ub2a5\uc785\ub2c8\ub2e4. \uc0dd\uc131 \ube44\uc6a9\uc740 \uc2e4\ud589 \uc804\uc5d0 \ubcc4\ub3c4\ub85c \uc2b9\uc778\ud569\ub2c8\ub2e4.",storage:"\ud504\ub85c\uc81d\ud2b8 \ud3b8\uc9d1",assets:"\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc",generate:"AI \uc0dd\uc131",export:"\ud488\uc9c8 \uac80\uc0ac \xb7 \ucf54\ub4dc \ubc88\ub4e4",github:"GitHub PR",unavailable:"\uc774 \uacc4\uc815\uc5d0\uc11c\ub294 \uc544\uc9c1 \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",planFirst:"\ud654\uba74 \uacc4\ud68d\uc744 \uc800\uc7a5\ud55c \ub4a4 \uc0dd\uc131\uc744 \uc694\uccad\ud558\uc138\uc694.",readiness:"\uc6b4\uc601 \uc900\ube44 \uc0c1\ud0dc",readinessNote:"\uc11c\ube44\uc2a4 \uc810\uac80 \uacb0\uacfc\ub97c \uc870\ud68c\ud569\ub2c8\ub2e4. \uae30\ub2a5 \ud65c\uc131\ud654\ub098 \uc608\uc0b0 \ubcc0\uacbd\uc740 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",pendingApi:"\uc6b4\uc601 \uc900\ube44 \uc810\uac80 API\uac00 \uc544\uc9c1 \uc5f0\uacb0\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ud655\uc778\ud558\uc9c0 \uc54a\uc740 \uc810\uac80\uc744 \ud1b5\uacfc\ub85c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",ready:"\uc900\ube44 \uc644\ub8cc",blocked:"\uc124\uc815 \ud544\uc694",disabled:"\ube44\ud65c\uc131",unknown:"\ubbf8\ud655\uc778",stale:"5\ubd84 \uc774\uc0c1 \uc9c0\ub09c \uc810\uac80 \uacb0\uacfc\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \ud655\uc778\ud55c \ub4a4 \ucc38\uace0\ud558\uc138\uc694.",asOf:"\ubcf4\uace0\uc11c \uc0dd\uc131 \uc2dc\uac01",evidenceAt:"\uac80\uc99d \uadfc\uac70 \uae30\ub85d \uc2dc\uac01",refresh:"\uc0c1\ud0dc \uc0c8\ub85c\uace0\uce68",checks:"\uc11c\ube44\uc2a4 \uc810\uac80",noChecks:"\ubc18\ud658\ub41c \uc810\uac80 \ud56d\ubaa9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",checkNames:{api:"API",database:"\ub370\uc774\ud130\ubca0\uc774\uc2a4",storage:"\ube44\uacf5\uac1c \uc800\uc7a5\uc18c",assets:"\uc774\ubbf8\uc9c0 \uac80\uc0ac",generation:"\ubaa8\ub378 \xb7 \uac00\uaca9",worker:"\uc791\uc5c5 \uc6cc\ucee4",runner:"\uaca9\ub9ac \ube4c\ub4dc \uc2e4\ud589\uae30",github:"GitHub App",mcp:"MCP \ud074\ub77c\uc774\uc5b8\ud2b8",mail:"\ucd08\ub300 \uba54\uc77c"},reasons:{NOT_CONFIGURED:"\uc124\uc815\uc774 \uc644\ub8cc\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.",NOT_VERIFIED:"\uc2e4\uc81c \uc11c\ube44\uc2a4 \uac80\uc99d\uc774 \ub0a8\uc558\uc2b5\ub2c8\ub2e4.",STALE_HEARTBEAT:"\uc6cc\ucee4\uc758 \ucd5c\uadfc \ub3d9\uc791 \uc2e0\ud638\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",DISABLED:"\uc11c\ube44\uc2a4\uc5d0\uc11c \ube44\ud65c\uc131\ud654\ud588\uc2b5\ub2c8\ub2e4.",DEPENDENCY_UNAVAILABLE:"\ud544\uc694\ud55c \uc11c\ube44\uc2a4\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."},execution:"\uc2e4\ud589 \uc815\ucc45",primaryModel:"\uc8fc \uc0dd\uc131 \ubaa8\ub378",reviewModel:"\uac80\ud1a0 \ubaa8\ub378",maxRepairs:"\ucd5c\ub300 \ubcf5\uad6c \ud69f\uc218",maxCalls:"\ucd5c\ub300 \ubaa8\ub378 \ud638\ucd9c \uc218",policy:"\uc2b9\uc778\ub41c \uc0dd\uc131 \uc815\ucc45",model:"\uc0dd\uc131 \ubaa8\ub378",price:"\uac00\uaca9 \uc815\ucc45 \ubc84\uc804",max:"\uc791\uc5c5\ubcc4 \ucd5c\ub300 \uccad\uad6c\uc561",projectBudget:"\ud504\ub85c\uc81d\ud2b8 \uc77c\uc77c \uc608\uc0b0",userBudget:"\uc0ac\uc6a9\uc790 \uc77c\uc77c \uc608\uc0b0",funding:"\uacb0\uc81c \uc7ac\uc6d0",promo:"Snailer Design \ud504\ub85c\ubaa8\uc158 \uc0ac\uc6a9\ub7c9",shared:"Snailer \ubcf4\uc720 \ud06c\ub808\ub527",subscription:"Snailer Design \uc6d4 \ud3ec\ud568 \uc0ac\uc6a9\ub7c9",unreported:"\ubbf8\uc81c\uacf5",heartbeat:"\uc6cc\ucee4 \ub9c8\uc9c0\ub9c9 \ub3d9\uc791 \uc2dc\uac01",image:"\uc2e4\ud589\uae30 \uc774\ubbf8\uc9c0 \ud574\uc2dc",quotePolicy:"\uc11c\ubc84 \uac00\uaca9 \uc815\ucc45",knownOperation:"\uae30\uc874 \uc791\uc5c5\uc758 \uc644\ub8cc\ub97c \ud655\uc778\ud558\uc138\uc694. \uc0c1\ud0dc \uc870\ud68c\ub294 \uc0c8 \uacfc\uae08\uc744 \uc2dc\uc791\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",operationTypes:{generation:"AI \uc0dd\uc131",quality:"\ud488\uc9c8 \uac80\uc0ac",export:"\ucf54\ub4dc \ub0b4\ubcf4\ub0b4\uae30",github_pr:"GitHub PR"}};function r(e,t){const n=i(t);return"design_first_generation"===e?"Design"===t.editor?"Free first generation":"\ubb34\ub8cc \uccab \uc0dd\uc131":"uxforge_subscription"===e?n.subscription:"shared_credits"===e?n.shared:"uxforge_promo"===e?n.promo:e||n.unreported}},6416(e,t,n){n.d(t,{To:()=>a,VR:()=>o,UA:()=>r,kf:()=>X});const i=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756
1734187,3204031479,3329325298];const r=["none","fade-up","fade-in","slide-left","slide-right","scale-in","parallax"],o=2e4,a=12e3,s=new Set(["section","div","header","footer","article","aside","nav","h1","h2","h3","h4","h5","h6","p","span","strong","em","b","i","small","br","hr","ul","ol","li","figure","figcaption","img","a","button","blockquote","dl","dt","dd"]),c=new Set(["br","hr","img"]),l=["class","data-motion","aria-label","aria-hidden","role","alt","src","href","type"],d=["presentation","list","listitem","group","region","img"],u=/^[a-z][a-z0-9_-]{0,40}$/,p=/^#(?:[a-z0-9_-]{1,60})?$/,h=/^[A-Za-z0-9_:.-]{1,120}$/,m=/^[A-Za-z0-9_-]{1,120}$/,g=/^[a-z][a-z0-9-]{0,40}$/,v=/^\(\s*(min|max)-width\s*:\s*([0-9]{1,5})px\s*\)$/,f=/\s+and\s+/,x=/^(?:from|to|(?:100(?:\.0+)?|[0-9]{1,2}(?:\.[0-9]+)?)%)$/,b=/^(?:odd|even|[+-]?[0-9]*n(?:[+-][0-9]+)?|[+-]?[0-9]+)$/,y=/^[+-]?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)(?:%|[a-zA-Z]+)?/,_=/^[0-9]+$/,w=/^(?:100(?:\.0+)?|[0-9]{1,2}(?:\.[0-9]+)?)%$/,E="display grid grid-template-columns grid-template-rows grid-column grid-row grid-area grid-auto-flow flex flex-direction flex-wrap flex-grow flex-shrink flex-basis gap row-gap column-gap align-items align-content align-self justify-content justify-items justify-self place-items place-content order position top right bottom left inset z-index width height min-width min-height max-width max-height margin margin-top margin-right margin-bottom margin-left padding padding-top padding-right padding-bottom padding-left box-sizing overflow overflow-x overflow-y aspect-ratio object-fit object-position font-size font-weight font-style line-height letter-spacing text-align text-transform text-decoration text-underline-offset white-space word-break overflow-wrap color background background-color background-image border border-top border-right border-bottom border-left border-color border-width border-style border-radius outline outline-offset box-shadow opacity transform transform-origin transition transition-property transition-duration transition-timing-function transition-delay animation animation-name animation-duration animation-timing-function animation-delay animation-iteration-count animation-direction animation-fill-mode filter backdrop-filter mix-blend-mode clip-path perspective transform-style backface-visibility cursor pointer-events visibility list-style content will-change".split(" "),N=new Set(E),S=new Set(["var","calc","min","max","clamp","color-mix","linear-gradient","radial-gradient","repeat","minmax","fit-content","translate","translatex","translatey","translatez","translate3d","scale","scalex","scaley","scale3d","rotate","rotatex","rotatey","rotatez","skew","skewx","skewy","perspective","cubic-bezier","steps","blur","brightness","contrast","grayscale","saturate","sepia","hue-rotate","invert","drop-shadow","inset","circle","ellipse","polygon"]),A=new Set(["--accent","--text","--background"]),T=new Set("aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkgrey darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray green greenyellow grey honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightslategrey lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue slateblue slategray slategrey snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen accentcolor accentcolortext activetext buttonborder buttonface buttontext canvas canvastext field fieldtext graytext highlight highlighttext linktext mark marktext selecteditem selecteditemtext visitedtext activeborder activecaption appworkspace background buttonhighlight buttonshadow captiontext inactiveborder inactivecaption inactivecaptiontext infobackground infotext menu menutext scrollbar threeddarkshadow threedface threedhighlight threedlightshadow threedshadow window windowframe windowtext".split(" ")),I=new Set(["none","initial","inherit","unset","revert","ease","ease-in","ease-out","ease-in-out","linear","step-start","step-end","infinite","normal","reverse","alternate","alternate-reverse","forwards","backwards","both","running","paused"]);
1class k extends Error{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";super(e),this.code=e,this.detail=t}}const C=function(e){throw new k(e,String(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").slice(0,60))},j=e=>Array.from(e).length,R=e=>" "===e||"\t"===e||"\n"===e||"\f"===e,D=e=>e>="a"&&e<="z"||e>="A"&&e<="Z",L=e=>e>="0"&&e<="9",O=(e,t,n)=>{const i=j(e);return i>=t&&i<=n&&!e.includes("\0")},U=e=>(null===e||void 0===e?void 0:e.kind)||("model/gltf-binary"===(null===e||void 0===e?void 0:e.mime)?"model":"image");function P(e,t,n){"string"!==typeof e&&C("".concat(n,"_SYNTAX"),"not text"),/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/.test(e)&&C("".concat(n,"_SYNTAX"),"invalid text"),j(e)>t&&C("".concat(n,"_TOO_LARGE"),String(j(e)));const i=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return/[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/.test(i)&&C("".concat(n,"_SYNTAX"),"control character"),i}const M=e=>e.replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e])),H={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:"\xa0"};function z(e,t){const n=e.indexOf(";",t),i=n<0?-1:n-t;if(i>1&&i<=10){const n=e.slice(t+1,t+i);if(Object.hasOwn(H,n))return[H[n],t+i+1];if("#"===n[0]&&n.length>1){let e=n.slice(1),r=10;if("x"!==e[0]&&"X"!==e[0]||(e=e.slice(1),r=16),e.length>0&&e.length<=7&&(16===r?/^[0-9a-fA-F]+$/:/^[0-9]+$/).test(e)){const o=parseInt(e,r);return(!(o>0)||o>1114111||o>=55296&&o<=57343||o<32&&9!==o&&10!==o||o>=127&&o<=159)&&C("HTML_SYNTAX","&".concat(n,";")),[String.fromCodePoint(o),t+i+1]}}}return["&",t+1]}function G(e){if(!e.includes("&"))return e;let t="";for(let n=0;n<e.length;){if("&"!==e[n]){t+=e[n],n+=1;continue}const[i,r]=z(e,n);t+=i,n=r}return t}function B(e,t,n){for(const[o,a]of t)switch(o){case"class":{const e=a.split(/[ \t\n\f\r]+/).filter(Boolean);(0===e.length||e.length>20||!e.every(e=>u.test(e)))&&C("HTML_CLASS_INVALID",a),t.set(o,e.join(" "));break}case"data-motion":r.includes(a)||C("HTML_MOTION_INVALID",a);break;case"aria-label":O(a,1,500)||C("HTML_ATTRIBUTE_VALUE",o);break;case"aria-hidden":"true"!==a&&"false"!==a&&C("HTML_ATTRIBUTE_VALUE","".concat(o,"=").concat(a));break;case"role":d.includes(a)||C("HTML_ATTRIBUTE_VALUE","role=".concat(a));break;case"alt":"img"!==e&&C("HTML_ATTRIBUTE_NOT_ALLOWED","".concat(e," alt")),O(a,0,500)||C("HTML_ATTRIBUTE_VALUE",o);break;case"src":if("img"!==e&&C("HTML_ATTRIBUTE_NOT_ALLOWED","".concat(e," src")),a.startsWith("asset:")&&m.test(a.slice(6))||C("HTML_IMAGE_SOURCE",a),Array.isArray(n)){const e=n.find(e=>(null===e||void 0===e?void 0:e.id)===a.slice(6));e&&"image"===U(e)||C("HTML_IMAGE_SOURCE",a)}break;case"href":"a"!==e&&C("HTML_ATTRIBUTE_NOT_ALLOWED","".concat(e," href")),p.test(a)||C("HTML_LINK_INVALID",a);break;case"type":"button"!==e&&C("HTML_ATTRIBUTE_NOT_ALLOWED","".concat(e," type")),"button"!==a&&C("HTML_ATTRIBUTE_VALUE","type=".concat(a));break;default:o.startsWith("on")&&C("HTML_EVENT_HANDLER",o),"style"===o&&C("HTML_STYLE_ATTRIBUTE",e),C("HTML_ATTRIBUTE_NOT_ALLOWED","".concat(e," ").concat(o))}"img"===e&&(t.has("src")||C("HTML_IMAGE_SOURCE","missing"),(t.get("alt")||"").trim()||"true"===t.get("aria-hidden")||C("HTML_IMAGE_ALT"));let i="<".concat(e);for(const r of l)t.has(r)&&(i+=" ".concat(r,'="').concat(M(t.get(r)),'"'));return"".concat(i,">")}class V{constructor(e,t,n){this.s=e,this.i=0,this.scope=t,this.prefix=n}skip(){const{s:e}=this;for(;this.i<e.length;){if(!R(e[this.i])){if(e.startsWith("/*",this.i)){const t=e.indexOf("*/",this.i+2);t<0&&C("CSS_SYNTAX","unterminated comment"),this.i=t+2;continue}break}this.i+=1}}readUntil(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"CSS_SYNTAX";const{s:n}=this;let i="";for(;this.i<n.length;){const t=n[this.i];if(n.startsWith("/*",this.i)){const e=n.indexOf("*/",this.i+2);e<0&&C("CSS_SYNTAX","unterminated comment"),i+=" ",this.i=e+2}else if('"'===t||"'"===t){let e=this.i+1;for(;e<n.length&&n[e]!==t&&"\n"!==n[e];)e+=1;(e>=n.length||n[e]!==t)&&C("CSS_SYNTAX","unterminated string"),i+=n.slice(this.i,e+1),this.i=e+1}else{if(e.includes(t))return i;i+=t,this.i+=1}}return C(t,i.trim().slice(0,40))}decls(){const{s:e}=this;"{"!==e[this.i]&&C("CSS_SYNTAX","expected {"),this.i+=1;const t=[];for(;;){if(this.skip(),this.i>=e.length&&C("CSS_SYNTAX","unbalanced {"),"}"===e[this.i]){this.i+=1;break}const n=this.i;for(;this.i<e.length&&(D(e[this.i])||"-"===e[this.i]);)this.i+=1;const i=e.slice(n,this.i).toLowerCase();this.skip(),(!i||this.i>=e.length||":"!==e[this.i])&&C("CSS_SYNTAX",e.slice(n,n+40)),this.i+=1;const r=this.readUntil(";}");";"===e[this.i]&&(this.i+=1),t.push({prop:i,value:r})}return t.length||C("CSS_SYNTAX","empty rule"),t}rule(){const e=this.readUntil("{};");"{"!==this.s[this.i]&&C("CSS_SYNTAX",e.trim().slice(0,40));const{selectors:t,pseudo:n}=function(e,t){let n=!0;const i=e.split(",").map(e=>{let i=e.trim();i.startsWith(t)&&i.length>t.length&&R(i[t.length])&&(i=i.slice(t.length).trim());const{text:r,pseudoElement:o}=function(e,t){const n=()=>C("CSS_SELECTOR",t.trim());e||n();let i="",r=0,o=!1;for(;;){const t=i.length;if(r<e.length&&D(e[r])){const t=r;for(;r<e.length&&(D(e[r])||L(e[r]));)r+=1;const o=e.slice(t,r).toLowerCase();s.has(o)||n(),i+=o}for(;r<e.length&&!o;){if("."===e[r]){const t=r+1;for(r=t;r<e.length&&(D(e[r])||L(e[r])||"_"===e[r]||"-"===e[r]);)r+=1;u.test(e.slice(t,r))||n(),i+=".".concat(e.slice(t,r));continue}if(e.startsWith("::",r)){const t=r+2;for(r=t;r<e.length&&(D(e[r])||"-"===e[r]);)r+=1;const a=e.slice(t,r).toLowerCase();"before"!==a&&"after"!==a&&n(),i+="::".concat(a),o=!0;continue}if(":"===e[r]){const t=r+1;for(r=t;r<e.length&&(D(e[r])||"-"===e[r]);)r+=1;const o=e.slice(t,r).toLowerCase();if(["hover","focus-visible","first-child","last-child"].includes(o))i+=":".concat(o);else if("nth-child"===o){(r>=e.length||"("!==e[r])&&n();const t=e.indexOf(")",r);t<0&&n();const o=e.slice(r+1,t).split(/[ \t\n\f\r\v]+/).join("").toLowerCase();b.test(o)||n(),i+=":nth-child(".concat(o,")"),r=t+1}else n();continue}break}i.length===t&&n();const a=r;for(;r<e.length&&R(e[r]);)r+=1;if(r>=e.length)return{text:i,pseudoElement:o};o&&n();const c=e[r];if(">"===c||"+"===c||"~"===c)for(i+=" ".concat(c," "),r+=1;r<e.length&&R(e[r]);)r+=1;else r>a?i+=" ":n()}}(i,e);return n=n&&o,"".concat(t," ").concat(r)});return{selectors:i,pseudo:n}}(e,this.scope);return{selectors:t,pseudo:n,decls:this.decls()}}sheet(){const{s:e}=this,t=[];for(;;){if(this.skip(),this.i>=e.length)return t;if("}"===e[this.i]&&C("CSS_SYNTAX","unexpected }"),"@"!==e[this.i]){t.push({kind:"rule",rule:this.rule()});continue}this.i+=1;const n=this.i;for(;this.i<e.length&&(D(e[this.i])||"-"===e[this.i]);)this.i+=1;const i=e.slice(n,this.i),r=this.readUntil("{};","CSS_AT_RULE");if("{"!==e[this.i]&&C("CSS_AT_RULE","@".concat(i)),this.i+=1,"media"===i){const n=F(r),i=[];for(;;){if(this.skip(),this.i>=e.length&&C("CSS_SYNTAX","unbalanced {"),"@"===e[this.i]&&C("CSS_AT_RULE","nested at-rule"),"}"===e[this.i]){this.i+=1;break}i.push(this.rule())}i.length||C("CSS_SYNTAX","empty @media"),t.push({kind:"media",cond:n,rules:i})}else if("keyframes"===i){let n=r.trim();n.startsWith(this.prefix)&&(n=n.slice(this.prefix.length)),g.test(n)&&!I.has(n)||C("CSS_KEYFRAMES_NAME",n);const i=[];for(;;){if(this.skip(),this.i>=e.length&&C("CSS_SYNTAX","unbalanced {"),"}"===e[this.i]){this.i+=1;break}const t=this.readUntil("{};");"{"!==e[this.i]&&C("CSS_SYNTAX",t.trim().slice(0,40));const n=t.split(",").map(e=>{const t=e.trim().toLowerCase();return x.test(t)||C("CSS_KEYFRAMES_SELECTOR",e.trim()),t});i.push({selector:n.join(", "),decls:this.decls()})}i.length||C("CSS_SYNTAX","empty @keyframes"),t.push({kind:"keyframes",name:n,stops:i})}else C("CSS_AT_RULE","@".concat(i))}}}function F(e){return e.trim().split(f).map(t=>{const n=v.exec(t);return(!n||Number(n[2])>1e4)&&C("CSS_AT_RULE","@media ".concat(e.trim())),"(".concat(n[1],"-width: ").concat(Number(n[2]),"px)")}).join(" and ")}function q(e,t){return t<e.length&&"ident"===e[t].kind&&("transparent"===e[t].text||"currentcolor"===e[t].text)?1:t+2<e.length&&"func"===e[t].kind&&"var"===e[t].text&&"ident"===e[t+1].kind&&A.has(e[t+1].text)&&")"===e[t+2].kind?3:0}function Y(e,t,n){const i=()=>C("CSS_COLOR","".concat(n,": color-mix"));let r=t+1;(r+2>=e.length||"ident"!==e[r].kind||"in"!==e[r].text||"ident"!==e[r+1].kind||"srgb"!==e[r+1].text||","!==e[r+2].kind)&&i(),r+=3;let o=q(e,r);0===o&&i(),r+=o,(r+1>=e.length||"number"!==e[r].kind||!w.test(e[r].text)||","!==e[r+1].kind)&&i(),r+=2,o=q(e,r),(0===o||r+o>=e.length||")"!==e[r+o].kind)&&i()}function K(e,t,n,i,r){const o=t.toLowerCase();for(const d of["url(","expression","javascript".concat(":"),"@","\\","<","{","}","!",";"])o.includes(d)&&C("CSS_VALUE","".concat(e,": ").concat(d));const a=function(e,t){const n=[];for(let i=0;i<e.length;){const r=e[i],o=e[i+1];if(R(r))i+=1;else{if('"'===r||"'"===r){const o=e.indexOf(r,i+1);o<0&&C("CSS_VALUE","".concat(t,": string"));const a=e.slice(i+1,o);(a.includes('"')||a.includes("\n"))&&C("CSS_VALUE","".concat(t,": string")),n.push({kind:"string",text:a}),i=o+1;continue}if(L(r)||"."===r&&void 0!==o&&L(o)||("+"===r||"-"===r)&&void 0!==o&&(L(o)||"."===o)){const r=y.exec(e.slice(i));r||C("CSS_VALUE",t),n.push({kind:"number",text:r[0].toLowerCase()}),i+=r[0].length;continue}
1if(D(r)||"_"===r||"-"===r&&void 0!==o&&(D(o)||"-"===o||"_"===o)){const t=i;for(;i<e.length&&(D(e[i])||L(e[i])||"-"===e[i]||"_"===e[i]);)i+=1;let r=e.slice(t,i);r.startsWith("--")||(r=r.toLowerCase()),"("===e[i]?(n.push({kind:"func",text:r}),i+=1):n.push({kind:"ident",text:r});continue}"("!==r&&")"!==r&&","!==r&&"/"!==r?"+"!==r&&"-"!==r&&"*"!==r?C("#"===r?"CSS_COLOR":"CSS_VALUE","".concat(t,": ").concat(r)):(n.push({kind:"op",text:r}),i+=1):(n.push({kind:r,text:r}),i+=1)}}return n}(t,e);a.length||C("CSS_VALUE",e);const s=(e=>"color"===e||e.startsWith("background")||e.startsWith("border")||e.startsWith("outline")||"box-shadow"===e||"text-decoration"===e||"filter"===e||"backdrop-filter"===e)(e);let c=0;for(let d=0;d<a.length;d+=1){const t=a[d];var l;if("func"===t.kind)S.has(t.text)||C(/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)$/.test(t.text)?"CSS_COLOR":"CSS_FUNCTION",t.text),"linear-gradient"!==t.text&&"radial-gradient"!==t.text||"background"===e||"background-image"===e||C("CSS_FUNCTION","".concat(e,": ").concat(t.text)),"var"===t.text&&0===q(a,d)&&C("CSS_VARIABLE","".concat(e,": var(").concat((null===(l=a[d+1])||void 0===l?void 0:l.text)||"",")")),"color-mix"===t.text&&Y(a,d,e),c+=1;else"("===t.kind?c+=1:")"===t.kind?(c-=1,c<0&&C("CSS_VALUE",e)):"string"===t.kind?"content"!==e&&C("CSS_VALUE","".concat(e,": string")):"ident"===t.kind&&(s&&T.has(t.text)&&C("CSS_COLOR","".concat(e,": ").concat(t.text)),!t.text.startsWith("--")||d>0&&"func"===a[d-1].kind&&"var"===a[d-1].text||C("CSS_VARIABLE",t.text),"animation"===e&&r.has(t.text)&&(t.text=r.get(t.text)))}return 0!==c&&C("CSS_VALUE",e),"position"!==e||1===a.length&&"ident"===a[0].kind&&["static","relative","absolute","sticky"].includes(a[0].text)||C("CSS_VALUE","position: ".concat(t.trim())),"z-index"!==e||1===a.length&&"number"===a[0].kind&&_.test(a[0].text)&&Number(a[0].text)<=10||C("CSS_VALUE","z-index: ".concat(t.trim())),"content"===e&&(!n||i||1!==a.length||"string"!==a[0].kind||j(a[0].text)>80)&&C("CSS_CONTENT",t.trim()),"animation-name"===e&&(a.forEach((e,t)=>{t%2!==1?("ident"!==e.kind&&C("CSS_VALUE","animation-name"),"none"!==e.text&&(r.has(e.text)||C("CSS_KEYFRAMES_UNKNOWN",e.text),e.text=r.get(e.text))):","!==e.kind&&C("CSS_VALUE","animation-name")}),a.length%2===0&&C("CSS_VALUE","animation-name")),i&&(e.startsWith("animation")||e.startsWith("transition"))&&C("CSS_PROPERTY","".concat(e," in @keyframes")),function(e){let t="";return e.forEach((n,i)=>{if(i>0){const r=e[i-1];"func"!==r.kind&&"("!==r.kind&&")"!==n.kind&&","!==n.kind&&(t+=" ")}t+="func"===n.kind?"".concat(n.text,"("):"string"===n.kind?'"'.concat(n.text,'"'):n.text}),t}(a)}function Q(e,t,n,i){return"{ ".concat(e.map(e=>(N.has(e.prop)||C("CSS_PROPERTY",e.prop),"".concat(e.prop,": ").concat(K(e.prop,e.value,t,n,i),";"))).join(" ")," }")}const W=e=>"c-".concat(function(e){const t=Array.from(unescape(encodeURIComponent(String(e))),e=>e.charCodeAt(0)),n=8*t.length;for(t.push(128);t.length%64!==56;)t.push(0);for(let i=7;i>=0;i-=1)t.push(i>=4?0:n>>>8*i&255);const r=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],o=new Array(64),a=(e,t)=>e>>>t|e<<32-t;for(let s=0;s<t.length;s+=64){for(let i=0;i<16;i+=1)o[i]=t[s+4*i]<<24|t[s+4*i+1]<<16|t[s+4*i+2]<<8|t[s+4*i+3];for(let t=16;t<64;t+=1){const e=a(o[t-15],7)^a(o[t-15],18)^o[t-15]>>>3,n=a(o[t-2],17)^a(o[t-2],19)^o[t-2]>>>10;o[t]=o[t-16]+e+o[t-7]+n|0}let[e,n,c,l,d,u,p,h]=r;for(let t=0;t<64;t+=1){const r=h+(a(d,6)^a(d,11)^a(d,25))+(d&u^~d&p)+i[t]+o[t]|0,s=(a(e,2)^a(e,13)^a(e,22))+(e&n^e&c^n&c)|0;h=p,p=u,u=d,d=l+r|0,l=c,c=n,n=e,e=r+s|0}[e,n,c,l,d,u,p,h].forEach((e,t)=>{r[t]=r[t]+e|0})}return r.map(e=>(e>>>0).toString(16).padStart(8,"0")).join("")}(e).slice(0,8),"-");function J(e,t){const n=P(t,24e3,"CSS"),i=W(e),r=new V(n,'[data-node-id="'.concat(e,'"]'),i).sheet(),o=new Map;for(const a of r)"keyframes"===a.kind&&(o.has(a.name)&&C("CSS_KEYFRAMES_NAME","duplicate ".concat(a.name)),o.set(a.name,i+a.name),o.set(i+a.name,i+a.name));const s=[],c=e=>s.push("".concat(e.selectors.join(", ")," ").concat(Q(e.decls,e.pseudo,!1,o)));for(const a of r)if("rule"===a.kind)c(a.rule);else if("media"===a.kind)s.push("@media ".concat(a.cond," {")),a.rules.forEac
1h(c),s.push("}");else{s.push("@keyframes ".concat(o.get(a.name)," {"));for(const e of a.stops)s.push("".concat(e.selector," ").concat(Q(e.decls,!1,!0,o)));s.push("}")}const l=s.join("\n");return j(l)>a&&C("CSS_TOO_LARGE",String(j(l))),l}function X(){let{nodeId:e,html:t,css:n,assets:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{"string"===typeof e&&h.test(e)||C("NODE_ID_INVALID",String(e)),"string"!==typeof t&&C("HTML_REQUIRED");const r=function(e,t){const n=P(e,4e4,"HTML");let i="";const r=[],a=[];let l=0;for(let o=0;o<n.length;){const e=n[o];if("&"===e){const[e,t]=z(n,o);i+=M(e),o=t;continue}if("<"!==e){let e=o;for(;e<n.length&&"<"!==n[e]&&"&"!==n[e];)e+=1;i+=M(n.slice(o,e)),o=e;continue}const d=n.slice(o);if(d.startsWith("\x3c!--")){const e=d.indexOf("--\x3e",4);e<0&&C("HTML_SYNTAX","unterminated comment"),o+=e+3;continue}if((d.startsWith("<!")||d.startsWith("<?"))&&C("HTML_DECLARATION",d.slice(0,12)),d.startsWith("</")){let e=o+2;for(;e<n.length&&(D(n[e])||L(n[e]));)e+=1;const t=n.slice(o+2,e).toLowerCase();for(;e<n.length&&R(n[e]);)e+=1;if(t&&e<n.length&&">"===n[e]&&c.has(t)){o=e+1;continue}t&&!s.has(t)&&C("HTML_ELEMENT_NOT_ALLOWED",t),(!t||e>=n.length||">"!==n[e]||!r.length||r[r.length-1]!==t)&&C("HTML_UNBALANCED",t||d.slice(0,12)),r.pop(),i+="</".concat(t,">"),o=e+1;continue}d.length>1&&D(d[1])||C("HTML_SYNTAX",d.slice(0,12));let u=o+1;for(;u<n.length&&(D(n[u])||L(n[u]));)u+=1;const p=n.slice(o+1,u).toLowerCase();s.has(p)||C("HTML_ELEMENT_NOT_ALLOWED",p);const h=new Map;for(;;){let e=u;for(;u<n.length&&R(n[u]);)u+=1;const t=u>e;if(u>=n.length&&C("HTML_SYNTAX","<".concat(p)),">"===n[u]){u+=1;break}if("/"===n[u]){(!c.has(p)||u+1>=n.length||">"!==n[u+1])&&C("HTML_SYNTAX","<".concat(p,"/")),u+=2;break}for(t&&D(n[u])||C("HTML_SYNTAX","<".concat(p)),e=u;u<n.length&&(D(n[u])||L(n[u])||"-"===n[u]);)u+=1;const i=n.slice(e,u).toLowerCase();for(;u<n.length&&R(n[u]);)u+=1;let r="";if(u<n.length&&"="===n[u]){for(u+=1;u<n.length&&R(n[u]);)u+=1;u>=n.length&&C("HTML_SYNTAX",i);const t=n[u];if('"'===t||"'"===t){const e=n.indexOf(t,u+1);e<0&&C("HTML_SYNTAX",i),r=n.slice(u+1,e),u=e+1}else{for(e=u;u<n.length&&!R(n[u])&&!"\"'=<>`".includes(n[u]);)u+=1;u===e&&C("HTML_SYNTAX",i),r=n.slice(e,u)}}const o=G(r);h.has(i)&&C("HTML_DUPLICATE_ATTRIBUTE",i),h.set(i,o)}const m=B(p,h,t);if("img"===p){const e=h.get("src").slice(6);a.includes(e)||a.push(e)}l+=1,l>400&&C("HTML_TOO_MANY_ELEMENTS",String(l)),i+=m,c.has(p)?r.length+1>12&&C("HTML_TOO_DEEP",String(r.length+1)):(r.push(p),r.length>12&&C("HTML_TOO_DEEP",String(r.length))),o=u}return r.length&&C("HTML_UNBALANCED",r[r.length-1]),j(i)>o&&C("HTML_TOO_LARGE",String(j(i))),{html:i,assets:a}}(t,i);return{ok:!0,html:r.html,css:J(e,null!==n&&void 0!==n?n:""),assets:r.assets}}catch(r){return r instanceof k?{ok:!1,errors:[{code:r.code,detail:r.detail}]}:{ok:!1,errors:[{code:"CSS_SYNTAX",detail:String((null===r||void 0===r?void 0:r.message)||"").slice(0,60)}]}}}},6426(e,t,n){n.d(t,{B:()=>i});const i=e=>"Design"===e.editor?{title:"Evidence",intro:"Evidence for this exact design. A local hint is not a server verification.",states:{missing:"No server evidence",stale:"Design changed \xb7 run checks again",incomplete:"Evidence is incomplete",failed:"Changes required",passed:"Design evidence passed"},reasons:{missing:"Run server checks before building a code bundle.",stale:"This report belongs to another snapshot and cannot authorize this design.",incomplete:"Required checks, measurements, or provenance are missing. Export remains blocked.",failed:"Resolve the findings and run checks again before exporting.",passed:"This snapshot meets the design gate. Code still needs to pass all build checks."},snapshot:"Current snapshot",reportSnapshot:"Inspected snapshot",report:"Report ID",hash:"Evidence hash",generated:"Checked at",runner:"Runner digest",policy:"Policy",unknown:"Not collected",metrics:"Measured results",critical:"Critical a11y issues",serious:"Serious a11y issues",tokens:"Token compliance",overflow:"Overflow findings",tokenTarget:"Target \u2265 90%",zeroTarget:"Required: 0",checks:{schema:"IR schema",a11y:"Accessibility",layout:"Viewport layout",install:"Dependency install",typecheck:"Type check",lint:"Lint",build:"Next.js build",routes:"Planned routes",assets:"Vendored assets"},viewports:"Checked viewports",findings:"Findings",focus:"Show element",unavailableNode:"No current element to highlight",noFindings:"No findings returned. The complete evidence gate still applies.",local:"Local sample only",localNote:"The sample can inspect structure, labels, and tokens. It cannot establish browser accessibility, layout, build, or server evidence.",inspect:"Run server checks",code:"Code evidence",evidenceLink:"Review evidence",missingChain:"A current evidence report, all planned snapshots, and a verified bundle must be linked before PR review.",chain:"Design \u2192 evidence \u2192 bundle \u2192 reviewed Draft PR",steps:["Design","Evidence","Next.js bundle","Draft PR review"],ready:"Ready",waiting:"Not verified",highlights:"Highlighted finding",severity:{error:"Error",critical:"Critical",serious:"Serious",warning:"Warning",info:"Info"},examples:"Try a starting point",prompts:["A Korean SaaS dashboard with usage, recent projects, and one clear next action.","A founder landing page with a clear value proposition, product evidence, and pricing.","Improve the selected element\u2019s labels and spacing while keeping the current design tokens."],hold:"After approval, the usage it needs is held. A successful generation deducts only actual usage and releases the rest; an unconfirmed result stays held until resolved.",settle:{reserved:"Reserved",settled:"Settled",released:"Released",pending:"Settlement pending"},manualEdit:"Manual editing does not call AI or use your AI usage."}:{title:"\uac80\uc99d \uadfc\uac70",intro:"\uc9c0\uae08 \ub514\uc790\uc778\uc5d0 \uc5f0\uacb0\ub41c \uadfc\uac70\ub97c \ud655\uc778\ud558\uc138\uc694. \ub85c\ucee
1c \ud78c\ud2b8\ub294 \uc11c\ubc84 \uac80\uc99d \uacb0\uacfc\uac00 \uc544\ub2d9\ub2c8\ub2e4.",states:{missing:"\uc11c\ubc84 \uac80\uc99d \uadfc\uac70 \uc5c6\uc74c",stale:"\ub514\uc790\uc778 \ubcc0\uacbd\ub428 \xb7 \uc7ac\uac80\uc0ac \ud544\uc694",incomplete:"\uac80\uc99d \uadfc\uac70 \ubcf4\uc644 \ud544\uc694",failed:"\uc218\uc815 \ud544\uc694",passed:"\ub514\uc790\uc778 \uac80\uc99d \ud1b5\uacfc"},reasons:{missing:"\ucf54\ub4dc \ubc88\ub4e4\uc744 \ub9cc\ub4e4\uae30 \uc804\uc5d0 \uc11c\ubc84 \uac80\uc0ac\ub97c \uc2e4\ud589\ud558\uc138\uc694.",stale:"\ub2e4\ub978 \uc2a4\ub0c5\uc0f7\uc758 \ub9ac\ud3ec\ud2b8\uc785\ub2c8\ub2e4. \ud604\uc7ac \ub514\uc790\uc778\uc744 \uac80\uc99d\ud55c \uadfc\uac70\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",incomplete:"\ud544\uc218 \uac80\uc0ac\xb7\uce21\uc815\uac12\xb7\ucd9c\ucc98\uac00 \uc77c\ubd80 \uc5c6\uc2b5\ub2c8\ub2e4. \uadfc\uac70\uac00 \ucc44\uc6cc\uc9c8 \ub54c\uae4c\uc9c0 \ub0b4\ubcf4\ub0b4\uae30\ub97c \ucc28\ub2e8\ud569\ub2c8\ub2e4.",failed:"\uc9c0\uc801\ub41c \ud56d\ubaa9\uc744 \uc218\uc815\ud558\uace0 \ub2e4\uc2dc \uac80\uc0ac\ud55c \ub4a4 \ub0b4\ubcf4\ub0b4\uc138\uc694.",passed:"\uc774 \uc2a4\ub0c5\uc0f7\uc774 \ub514\uc790\uc778 \uae30\uc900\uc744 \ud1b5\uacfc\ud588\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc \ube4c\ub4dc \uac80\uc0ac\ub294 \ubcc4\ub3c4\ub85c \ud544\uc694\ud569\ub2c8\ub2e4."},snapshot:"\ud604\uc7ac \uc2a4\ub0c5\uc0f7",reportSnapshot:"\uac80\uc0ac\ud55c \uc2a4\ub0c5\uc0f7",report:"\ub9ac\ud3ec\ud2b8 ID",hash:"\uac80\uc99d \ub9ac\ud3ec\ud2b8 \ud574\uc2dc",generated:"\uac80\uc0ac \uc2dc\uac01",runner:"\uac80\uc0ac \uc2e4\ud589\uae30 \ud574\uc2dc",policy:"\uac80\uc99d \uc815\ucc45",unknown:"\ubbf8\uc218\uc9d1",metrics:"\uce21\uc815 \uacb0\uacfc",critical:"\uce58\uba85\uc801 \uc811\uadfc\uc131 \ubb38\uc81c",serious:"\uc2ec\uac01\ud55c \uc811\uadfc\uc131 \ubb38\uc81c",tokens:"\ud1a0\ud070 \uc900\uc218\uc728",overflow:"\ud654\uba74 \ub118\uce68 \ubb38\uc81c",tokenTarget:"\uae30\uc900 \u2265 90%",zeroTarget:"\ud1b5\uacfc \uae30\uc900: 0\uac74",checks:{schema:"IR \uad6c\uc870",a11y:"\uc811\uadfc\uc131",layout:"\ubdf0\ud3ec\ud2b8 \ub808\uc774\uc544\uc6c3",install:"\uc758\uc874\uc131 \uc124\uce58",typecheck:"\ud0c0\uc785 \uac80\uc0ac",lint:"\ub9b0\ud2b8 \uac80\uc0ac",build:"Next.js \ube4c\ub4dc",routes:"\uacc4\ud68d\ud55c \uacbd\ub85c",assets:"\ud3ec\ud568\ub41c \uc5d0\uc14b"},viewports:"\uac80\uc0ac\ud55c \ud654\uba74 \ud06c\uae30",findings:"\uc218\uc815\ud560 \ud56d\ubaa9",focus:"\uc694\uc18c \ubcf4\uae30",unavailableNode:"\ud604\uc7ac \ud654\uba74\uc5d0\uc11c \ud45c\uc2dc\ud560 \uc694\uc18c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",noFindings:"\ubc18\ud658\ub41c \uc9c0\uc801 \uc0ac\ud56d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \uc804\uccb4 \uac80\uc99d \uadfc\uac70\uc758 \ud1b5\uacfc \uc5ec\ubd80\ub294 \ubcc4\ub3c4\ub85c \ud655\uc778\ud569\ub2c8\ub2e4.",local:"\ub85c\uceec \uc0d8\ud50c",localNote:"\uc0d8\ud50c\uc5d0\uc11c\ub294 \uad6c\uc870\xb7\ub77c\ubca8\xb7\ud1a0\ud070\ub9cc \uc810\uac80\ud569\ub2c8\ub2e4. \ube0c\ub77c\uc6b0\uc800 \uc811\uadfc\uc131\xb7\ub808\uc774\uc544\uc6c3\xb7\ucf54\ub4dc \ube4c\ub4dc\xb7\uc11c\ubc84 \uac80\uc99d \uadfc\uac70\ub294 \ub9cc\ub4e4\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",inspect:"\uc11c\ubc84 \uac80\uc0ac \uc2e4\ud589",code:"\ucf54\ub4dc \uac80\uc99d \uadfc\uac70",evidenceLink:"\uac80\uc99d \uadfc\uac70 \ud655\uc778",missingChain:"\ud604\uc7ac \uac80\uc99d \ub9ac\ud3ec\ud2b8\uc640 \uacc4\ud68d\ud55c \ubaa8\ub4e0 \ud654\uba74\uc758 \uc2a4\ub0c5\uc0f7, \uac80\uc0ac\ud55c \ucf54\ub4dc \ubc88\ub4e4\uc774 \uc5f0\uacb0\ub418\uc5b4\uc57c PR\uc744 \uac80\ud1a0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",chain:"\ub514\uc790\uc778 \u2192 \uac80\uc99d \uadfc\uac70 \u2192 \ucf54\ub4dc \ubc88\ub4e4 \u2192 Draft PR \uac80\ud1a0",steps:["\ub514\uc790\uc778","\uac80\uc99d \uadfc\uac70","Next.js \ubc88\ub4e4","Draft PR \uac80\ud1a0"],ready:"\uc900\ube44\ub428",waiting:"\ubbf8\uac80\uc99d",highlights:"\uc9c0\uc801\ub41c \uc694\uc18c \ud45c\uc2dc \uc911",severity:{error:"\uc624\ub958",critical:"\uce58\uba85\uc801",serious:"\uc2ec\uac01",warning:"\uacbd\uace0",info:"\uc548\ub0b4"},examples:"\uc774\ub7f0 \uc694\uccad\uc73c\ub85c \uc2dc\uc791\ud574 \ubcf4\uc138\uc694",prompts:["\uc0ac\uc6a9\ub7c9, \ucd5c\uadfc \ud504\ub85c\uc81d\ud2b8, \ub2e4\uc74c \ud560 \uc77c\uc774 \uba85\ud655\ud55c \ud55c\uad6d\uc5b4 SaaS \ub300\uc2dc\ubcf4\ub4dc\ub97c \ub9cc\ub4e4\uc5b4 \uc8fc\uc138\uc694.","\uac00\uce58 \uc81c\uc548, \uc81c\ud488 \uadfc\uac70, \uc694\uae08\uc774 \uc798 \ub4dc\ub7ec\ub098\ub294 \uc778\ub514 \ud30c\uc6b4\ub354\uc6a9 \ub79c\ub529\ud398\u
1c774\uc9c0\ub97c \ub9cc\ub4e4\uc5b4 \uc8fc\uc138\uc694.","\ud604\uc7ac \ub514\uc790\uc778 \ud1a0\ud070\uc744 \uc720\uc9c0\ud558\uba74\uc11c \uc120\ud0dd\ud55c \uc694\uc18c\uc758 \ub77c\ubca8\uacfc \uac04\uaca9\uc744 \uac1c\uc120\ud574 \uc8fc\uc138\uc694."],hold:"\uc2b9\uc778\ud558\uba74 \ud544\uc694\ud55c \uc0ac\uc6a9\ub7c9\uc744 \uc7a0\uc2dc \ud655\ubcf4\ud569\ub2c8\ub2e4. \uc0dd\uc131\uc5d0 \uc131\uacf5\ud558\uba74 \uc2e4\uc81c \uc0ac\uc6a9\ubd84\ub9cc \ucc28\uac10\ud558\uace0 \ub098\uba38\uc9c0\ub294 \ub3cc\ub824\ub193\uc2b5\ub2c8\ub2e4. \uacb0\uacfc\uac00 \ubbf8\ud655\uc815\uc774\uba74 \ud655\uc778\uc774 \ub05d\ub0a0 \ub54c\uae4c\uc9c0 \ud655\ubcf4 \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4.",settle:{reserved:"\uc608\uc57d\ub428",settled:"\uc815\uc0b0 \uc644\ub8cc",released:"\uc608\uc57d \ud574\uc81c",pending:"\uc815\uc0b0 \ud655\uc778 \uc911"},manualEdit:"\uc9c1\uc811 \ud3b8\uc9d1\ud560 \ub54c\ub294 AI\ub97c \ud638\ucd9c\ud558\uac70\ub098 AI \uc0ac\uc6a9\ub7c9\uc744 \uc4f0\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."}},6449(e,t,n){n.d(t,{f:()=>r,y:()=>o});const i={"gpt-6-astra":{name:"OpenAI GPT-6 Astra",ko:"\ube60\ub974\uace0 \uade0\ud615 \uc7a1\ud78c \uae30\ubcf8 \ubaa8\ub378",en:"Balanced default model"},"claude-fable-5-1":{name:"Claude Fable 5.1",ko:"\uac00\uc7a5 \ub6f0\uc5b4\ub09c \ub514\uc790\uc778 \ud488\uc9c8\uacfc \ucd94\ub860",en:"Most capable design quality and reasoning"},"claude-opus-5-5":{name:"Claude Opus 5.5",ko:"\ub192\uc740 \ud488\uc9c8\uc744 \ub354 \uc801\uc740 \uc0ac\uc6a9\ub7c9\uc73c\ub85c",en:"High quality with lower usage"}};function r(e){var t;return(null===(t=i[e])||void 0===t?void 0:t.name)||e}function o(e,t){const n=i[e];return n?t?n.ko:n.en:""}},6598(e,t,n){n.d(t,{A:()=>l});var i=n(9950),r=n(2693),o=n(4414);const a={generation:"composing",quote:"solving",render:"shaping",quality:"searching",export:"weaving",github_pr:"connecting"};function s(e){return a[e]||"working"}class c extends i.Component{constructor(e){super(e),this.state={failed:!1}}static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(){}render(){return this.state.failed?null:this.props.children}}function l(e){let{activity:t,size:n=20,theme:i="auto",className:a=""}=e;return(0,o.jsx)(c,{children:(0,o.jsx)(r.KV,{state:s(t),size:n,theme:i,className:"uxf-orb ".concat(a).trim(),role:"presentation","aria-hidden":"true","aria-label":void 0})})}},7006(e,t,n){n.d(t,{Pq:()=>x,Wp:()=>f,sV:()=>v});var i=n(2555),r=n(9950),o=n(2074),a=n(8429),s=n(6805),c=n(2257),l=n(6987),d=n(8797),u=n(8628),p=n(8440),h=n(915),m=n(4414);const g=(0,r.createContext)(null),v=()=>(0,r.useContext)(g);function f(e){var t;let{children:n}=e;const o=(0,r.useMemo)(()=>(0,d.Fe)(),[]),[a,s]=(0,r.useState)({status:"loading",caps:null}),[c,l]=(0,r.useState)(0),p=(0,r.useRef)(0);return(0,r.useEffect)(()=>{let e,t=!1;const n=async()=>{e=JSON.stringify((0,u.S0)());const n=++p.current;s({status:"loading",caps:null});try{const e=await o.connect();t||n!==p.current||s({status:"ready",caps:e})}catch(i){t||n!==p.current||s({status:"AUTHENTICATION_REQUIRED"===i.code?"signin":"ACCESS_DENIED"===i.code?"denied":"UNAVAILABLE"===i.code?"preparing":"unavailable",error:i.code,caps:null})}};o.onDenied(e=>{p.current++,s({status:401===e?"signin":"denied",caps:null})});const i=e=>{e.key&&"snailer_login"!==e.key||n()},r=()=>{e!==JSON.stringify((0,u.S0)())&&n()};return n(),window.addEventListener("storage",i),window.addEventListener("focus",r),()=>{t=!0,window.removeEventListener("storage",i),window.removeEventListener("focus",r),o.onDenied(()=>{}),o.reset()}},[o,c]),(0,m.jsx)(g.Provider,{value:(0,i.A)((0,i.A)({},a),{},{api:o,retry:()=>l(e=>e+1),can:e=>{var t;return"ready"===a.status&&(null===(t=a.caps)||void 0===t?void 0:t.capabilities.includes(e))},owner:null===(t=(0,u.S0)())||void 0===t?void 0:t.userId}),children:n})}function x(e){let{children:t,capability:n="uxforge.projects.read",compact:i=!1}=e;const r=v(),{language:d}=(0,p.ok)(),u=(0,h.M)(d),g=(0,a.zy)();if("ready"===r.status&&(!n||r.can(n)))return t;const f="signin"===r.status,x="loading"===r.status,b="preparing"===r.status,y="denied"===r.status||"ready"===r.status;return(0,m.jsxs)("div",{className:"uxf-state ".concat(i?"compact":""),"aria-live":"polite",children:[(0,m.jsx)("div",{className:"uxf-state-icon",children:(0,m.jsx)(s.A,{size:25})}),(0,m.jsx)("p",{className:"uxf-eyebrow",children:"SNAILER DESIGN"}),(0,m.jsx)("h2",{children:x?u.checking:f?u.signInTitle:y?u.denied:b?u.preparingTitle:u.unavailableTitle}),!x&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("p",{children:f?u.signInNote:y?u.denied:b?u.preparingNote:"EDGE_BLOCKED"===r.error?u.errors.EDGE_BLOCKED:u.unavailable}),(0,m.jsxs)("div",{className:"uxf-actions",children:[f?(0,m.jsxs)(o.N_,{className:"uxf-button primary",to:"/login?returnTo=".concat(encodeURIComponent(g.pathname+g.search+g.hash)),children:[u.signIn,(0,m.jsx)(c.A,{size:15})]}):(0,m.jsxs)("button",{className:"uxf-button",onClick:r.retry,children:[(0,m.jsx)(l.A,{size:14}),u.retry]}),(0,m.jsxs)(o.N_,{className:"uxf-button".concat(f?"":" primary"),to:"/design/demo",children:[u.tryDemo,(0,m.jsx)(c.A,{size:15})]})]})]})]})}},7089(e,t,n){n.d(t,{$1:()=>a,BN:()=>i,t7:()=>o});const i='(function(){var w=window,d=document,h=d.documentElement;if(h.getAttribute("data-sd-motion-ready")||!w.matchMedia||w.matchMedia("(prefers-reduced-motion: reduce)").matches||!("IntersectionObserver"in w))return;h.setAttribute("data-sd-motion-ready","1");h.classList.add("sd-motion");var q=function(s){return[].slice.call(d.querySelectorAll(s))};
1var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting&&(e.intersectionRatio>=.15||e.boundingClientRect.height*.15>w.innerHeight)){e.target.classList.add("is-in");io.unobserve(e.target)}})},{threshold:[0,.15]});q("[data-motion]:not([data-motion=parallax]):not([data-motion=none])").forEach(function(el){io.observe(el)});var par=q("[data-motion=parallax]"),st=q(".story"),orb=q(".model3d[data-variant=scroll]"),busy=0;function pr(el){var r=el.getBoundingClientRect(),v=w.innerHeight||1;return Math.max(0,Math.min(1,(v-r.top)/(v+r.height)))}function run(){busy=0;var c=(w.innerHeight||0)/2;par.forEach(function(el){el.style.setProperty("--sd-progress",pr(el).toFixed(4))});st.forEach(function(s){var b=null,bd=1/0,ss=[].slice.call(s.querySelectorAll(".story-step"));ss.forEach(function(x){var t=x.querySelector(".story-step-copy")||x,r=t.getBoundingClientRect(),k=Math.abs(r.top+r.height/2-c);if(k<bd){bd=k;b=x}});var fr=s.querySelectorAll(".story-frame");ss.forEach(function(x,i){var a=x===b?"true":"false";[x,fr[i]].forEach(function(e){if(e&&e.getAttribute("data-active")!==a)e.setAttribute("data-active",a)})})});orb.forEach(function(s){var m=s.querySelector("model-viewer");if(m)m.setAttribute("camera-orbit",Math.round(pr(s)*360)+"deg 75deg 105%")})}function tick(){if(!busy){busy=1;(w.requestAnimationFrame||setTimeout)(run)}}if(par.length||st.length||orb.length){w.addEventListener("scroll",tick,{passive:true});w.addEventListener("resize",tick);run()}})();',r="/vendor/model-viewer-".concat("4.3.1",".min.js"),o="".concat("https://snailer.ai").concat(r);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"!==typeof window?window.location.origin:"";try{const t=new URL(e);if("http:"===t.protocol&&["localhost","127.0.0.1","[::1]"].includes(t.hostname))return"".concat(t.origin).concat(r)}catch(t){}return o}},7096(e,t,n){n.d(t,{X8:()=>i,pT:()=>a,vI:()=>r});const i=e=>"Design"===e.editor?{title:"External tools",intro:"Bring Figma and other connected tools into Snailer Design. Each connection has its own permissions.",direction:"Snailer Design \u2192 external tools",ideDirection:"IDE \u2192 Snailer Design",loading:"Checking external connections\u2026",pending:"External connections are being prepared. No connection has been confirmed.",retry:"Refresh external connections",empty:"No external tools connected.",catalogEmpty:"No providers are available yet.",figmaMcp:"Figma MCP",figmaRest:"Figma file import",mcp:"Remote MCP",rest:"Figma REST OAuth",connect:"Review connection",continue:"Continue to provider",review:"Connect an external tool",scopes:"Requested permissions",consent:"Review these permissions before continuing. Connecting a tool does not approve generation charges or publishing.",noPermission:"You do not have permission to manage connections.",connected:"Connected",expired:"Expired",revoked:"Disconnected",pendingStatus:"Awaiting authorization",suspended:"Suspended",revoke:"Disconnect",revokeTitle:"Disconnect external tool",revokeNote:"This revokes this connection and its project access. Other connections remain available.",reconnect:"Reconnect",figmaDisconnect:"This removes access through Snailer. To remove the Figma app permission too, open your Figma account settings.",done:"Connection disconnected.",more:"Load more connections",projects:"Allowed projects",projectTitle:"Project sources",projectIntro:"Choose which read tools this project may use. Tools are disabled until you explicitly allow them.",accountLink:"Manage account connections",choose:"Connection",tools:"Read tools",noTools:"No approved read tools are available.",save:"Save allowed tools",saved:"Project tool permissions saved.",readOnly:"Only reviewed read tools are supported.",tool:"Tool",arguments:"Tool arguments (JSON)",fetch:"Preview source",preview:"Source preview",use:"Use for generation",remove:"Remove source",source:"Source",hash:"Content hash",expires:"Expires",selected:"Selected for the next quote",contextNote:"External content is reference material. Review it before including it in a generation quote.",figmaTitle:"Import a Figma frame",figmaNote:"Paste a Figma design URL with a selected frame. Review mapping and missing assets before importing.",importMode:"Import destination",addFrame:"Add a new screen",replaceFrame:"Replace the current screen",replaceNote:"This replaces the selected screen with the reviewed Figma structure and text. Run new quality checks afterward.",importConfirm:"I reviewed the destination, mapped design, and diagnostics.",figmaScope:"Imports structure and text using the project theme. Images and unsupported node types block 
1import; Figma styling is not reproduced exactly.",blocking:"Blocks import",advisory:"Review note",noMappedFrame:"No supported frame can be previewed. Review the diagnostics below.",figmaUrl:"Figma frame URL",figmaPreview:"Preview import",import:"Import reviewed frame",importReview:"Review Figma import",unsupported:"Unsupported elements",missingAssets:"Missing assets",mapping:"Component mapping",imported:"Frame imported. Run a new quality check before exporting.",importBlocked:"Resolve blocking mapping or asset issues before importing.",local:"Connect tools from a signed-in project. The local sample does not call external services.",future:"Connection is not ready yet.",reasons:{CLIENT_APPROVAL_REQUIRED:"Figma must approve Snailer as a supported MCP client before this connection can open.",NOT_CONFIGURED:"This provider is not configured yet.",FEATURE_DISABLED:"This connection is paused by the service.",NOT_VERIFIED:"Live connection verification is still pending.",ACCESS_DENIED:"This account cannot connect this provider."},errors:{INVALID_INPUT:"Enter a valid Figma frame URL or JSON object.",INVALID_RESPONSE:"The service returned an unsupported response. Refresh and try again.",CONTEXT_EXPIRED:"This source preview has expired. Fetch and review it again.",REVISION_CONFLICT:"The design changed. Reload it and review a new import preview.",TOOL_CATALOG_CHANGED:"The available tools changed. Refresh and review permissions again.",CONNECTION_REVOKED:"This connection is no longer active. Reconnect it from account connections.",PROJECT_PERMISSION_REQUIRED:"Your project role does not allow this action.",RATE_LIMITED:"Too many requests. Wait a minute, then retry the same action.",unknown:"The result could not be confirmed. Retry the same action to recover it."}}:{title:"\uc678\ubd80 \ub3c4\uad6c",intro:"Figma\uc640 \uc5ec\ub7ec \uc678\ubd80 \ub3c4\uad6c\ub97c Snailer Design\uc5d0 \uc5f0\uacb0\ud569\ub2c8\ub2e4. \uc5f0\uacb0\ub9c8\ub2e4 \uc811\uadfc \uad8c\ud55c\uc744 \ub530\ub85c \uad00\ub9ac\ud569\ub2c8\ub2e4.",direction:"Snailer Design \u2192 \uc678\ubd80 \ub3c4\uad6c",ideDirection:"IDE \u2192 Snailer Design",loading:"\uc678\ubd80 \uc5f0\uacb0 \ud655\uc778 \uc911\u2026",pending:"\uc678\ubd80 \ub3c4\uad6c \uc5f0\uacb0\uc744 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4. \uc544\uc9c1 \uc5f0\uacb0\uc774 \ud655\uc778\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.",retry:"\uc678\ubd80 \uc5f0\uacb0 \uc0c8\ub85c\uace0\uce68",empty:"\uc5f0\uacb0\ub41c \uc678\ubd80 \ub3c4\uad6c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",catalogEmpty:"\uc544\uc9c1 \uc5f0\uacb0 \uac00\ub2a5\ud55c \uc81c\uacf5\uc790\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",figmaMcp:"Figma MCP",figmaRest:"Figma \ud30c\uc77c \uac00\uc838\uc624\uae30",mcp:"\uc6d0\uaca9 MCP",rest:"Figma REST OAuth",connect:"\uc5f0\uacb0 \uac80\ud1a0",continue:"\uc81c\uacf5\uc790\uc5d0\uc11c \uacc4\uc18d",review:"\uc678\ubd80 \ub3c4\uad6c \uc5f0\uacb0",scopes:"\uc694\uccad \uad8c\ud55c",consent:"\uad8c\ud55c\uc744 \ud655\uc778\ud558\uace0 \uc81c\uacf5\uc790 \ub3d9\uc758 \ud654\uba74\uc73c\ub85c \uc774\ub3d9\ud558\uc138\uc694. \uc5f0\uacb0\ub9cc\uc73c\ub85c \uc0dd\uc131 \ube44\uc6a9\uc774\ub098 \ubc1c\ud589\uc744 \uc2b9\uc778\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",noPermission:"\uc5f0\uacb0\uc744 \uad00\ub9ac\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",connected:"\uc5f0\uacb0\ub428",expired:"\ub9cc\ub8cc\ub428",revoked:"\ud574\uc81c\ub428",pendingStatus:"\uc778\uc99d \ub300\uae30",suspended:"\uc77c\uc2dc \uc911\uc9c0",revoke:"\uc5f0\uacb0 \ud574\uc81c",revokeTitle:"\uc678\ubd80 \ub3c4\uad6c \uc5f0\uacb0 \ud574\uc81c",revokeNote:"\uc774 \uc5f0\uacb0\uacfc \ud504\ub85c\uc81d\ud2b8 \uc811\uadfc \uad8c\ud55c\uc744 \ud3d0\uae30\ud569\ub2c8\ub2e4. \ub2e4\ub978 \uc5f0\uacb0\uc740 \uacc4\uc18d \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",reconnect:"\ub2e4\uc2dc \uc5f0\uacb0",figmaDisconnect:"Snailer\ub97c \ud1b5\ud55c \uc811\uadfc\uc744 \ud574\uc81c\ud569\ub2c8\ub2e4. Figma \uc571 \uad8c\ud55c\ub3c4 \uc0ad\uc81c\ud558\ub824\uba74 Figma \uacc4\uc815 \uc124\uc815\uc5d0\uc11c \uc9c1\uc811 \ud574\uc81c\ud558\uc138\uc694.",done:"\uc5f0\uacb0\uc744 \ud574\uc81c\ud588\uc2b5\ub2c8\ub2e4.",more:"\uc5f0\uacb0 \ub354 \ubcf4\uae30",projects:"\ud5c8\uc6a9\ub41c \ud504\ub85c\uc81d\ud2b8",projectTitle:"\ud504\ub85c\uc81d\ud2b8 \uc790\ub8cc",projectIntro:"\uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc77d\uae30 \ub3c4\uad6c\ub97c \uc120\ud0dd\ud558\uc138\uc694. \uc9c1\uc811 \ud5c8\uc6a9\ud558\uae30 \uc804\uc5d0\ub294 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",accountLink:"\uacc4\uc815 \uc5f0\uacb0 \uad00\ub9ac",choose:"\uc5f0\uacb0",tools:"\uc77d\uae30 \ub3c4\uad6c",noTools:"\uc2b9\uc778\ub41c \uc77d\uae30 \ub3c4\uad6c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",save:"\ud5c8\uc6a9 \ub3c4\uad6c \uc800\uc7a5",saved:"\ud504\ub85c\uc81d\ud2b8 \ub3c4\uad6c \uad8c\ud55c\uc744 \uc800\uc7a5\ud588\uc2b5\ub2c8\ub2e4.",readOnly:"\uac80\ud1a0\ub41c \uc77d\uae30 \ub3c4\uad6c\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4.",tool:"\ub3c4\uad6c",arguments:"\ub3c4\uad6c \uc778\uc218 (JSON)",fetch:"\uc790\ub8cc \ubbf8\ub9ac\ubcf4\uae30",preview:"\u
1c790\ub8cc \ubbf8\ub9ac\ubcf4\uae30",use:"\uc0dd\uc131\uc5d0 \uc0ac\uc6a9",remove:"\uc790\ub8cc \uc81c\uac70",source:"\ucd9c\ucc98",hash:"\ucf58\ud150\uce20 \ud574\uc2dc",expires:"\ub9cc\ub8cc \uc2dc\uac01",selected:"\ub2e4\uc74c \uacac\uc801\uc5d0 \ud3ec\ud568\ud560 \uc790\ub8cc",contextNote:"\uc678\ubd80 \uc790\ub8cc\ub294 \ucc38\uace0 \uc815\ubcf4\uc785\ub2c8\ub2e4. \ub0b4\uc6a9\uc744 \uac80\ud1a0\ud55c \ub4a4 \uc0dd\uc131 \uacac\uc801\uc5d0 \ud3ec\ud568\ud558\uc138\uc694.",figmaTitle:"Figma \ud504\ub808\uc784 \uac00\uc838\uc624\uae30",figmaNote:"\ud504\ub808\uc784\uc744 \uc120\ud0dd\ud55c Figma \ub514\uc790\uc778 \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694. \ub9e4\ud551 \uacb0\uacfc\uc640 \ub204\ub77d\ub41c \uc5d0\uc14b\uc744 \uac80\ud1a0\ud55c \ub4a4 \uac00\uc838\uc635\ub2c8\ub2e4.",importMode:"\uac00\uc838\uc62c \uc704\uce58",addFrame:"\uc0c8 \ud654\uba74 \ucd94\uac00",replaceFrame:"\ud604\uc7ac \ud654\uba74 \uad50\uccb4",replaceNote:"\uc120\ud0dd\ud55c \ud654\uba74\uc744 \uac80\ud1a0\ud55c Figma \uad6c\uc870\xb7\ud14d\uc2a4\ud2b8\ub85c \uad50\uccb4\ud569\ub2c8\ub2e4. \uc774\ud6c4 \uc0c8 \ud488\uc9c8 \uac80\uc0ac\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.",importConfirm:"\uac00\uc838\uc62c \uc704\uce58\xb7\ub9e4\ud551\ub41c \ub514\uc790\uc778\xb7\uc9c4\ub2e8 \ub0b4\uc6a9\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.",figmaScope:"\ud504\ub85c\uc81d\ud2b8 \ud14c\ub9c8\ub85c \uad6c\uc870\xb7\ud14d\uc2a4\ud2b8\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. \uc774\ubbf8\uc9c0\uc640 \ubbf8\uc9c0\uc6d0 \ub178\ub4dc\ub294 \uac00\uc838\uc624\uae30\ub97c \ucc28\ub2e8\ud558\uba70 Figma \uc2a4\ud0c0\uc77c\uc744 \uadf8\ub300\ub85c \uc7ac\ud604\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",blocking:"\uac00\uc838\uc624\uae30 \ucc28\ub2e8",advisory:"\uac80\ud1a0 \ucc38\uace0",noMappedFrame:"\ubbf8\ub9ac\ubcfc \uc218 \uc788\ub294 \uc9c0\uc6d0 \ud504\ub808\uc784\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \uc544\ub798 \uc9c4\ub2e8 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694.",figmaUrl:"Figma \ud504\ub808\uc784 \uc8fc\uc18c",figmaPreview:"\uac00\uc838\uc624\uae30 \ubbf8\ub9ac\ubcf4\uae30",import:"\uac80\ud1a0\ud55c \ud504\ub808\uc784 \uac00\uc838\uc624\uae30",importReview:"Figma \uac00\uc838\uc624\uae30 \uac80\ud1a0",unsupported:"\uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc694\uc18c",missingAssets:"\ub204\ub77d\ub41c \uc5d0\uc14b",mapping:"\ucef4\ud3ec\ub10c\ud2b8 \ub9e4\ud551",imported:"\ud504\ub808\uc784\uc744 \uac00\uc838\uc654\uc2b5\ub2c8\ub2e4. \ub0b4\ubcf4\ub0b4\uae30 \uc804\uc5d0 \uc0c8 \ud488\uc9c8 \uac80\uc0ac\ub97c \uc2e4\ud589\ud558\uc138\uc694.",importBlocked:"\uac00\uc838\uc624\uae30\ub97c \ucc28\ub2e8\ud558\ub294 \ub9e4\ud551\xb7\uc5d0\uc14b \ubb38\uc81c\ub97c \uba3c\uc800 \ud574\uacb0\ud558\uc138\uc694.",local:"\ub85c\uadf8\uc778\ud55c \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub3c4\uad6c\ub97c \uc5f0\uacb0\ud558\uc138\uc694. \ub85c\uceec \uc0d8\ud50c\uc740 \uc678\ubd80 \uc11c\ube44\uc2a4\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",future:"\uc544\uc9c1 \uc5f0\uacb0\uc744 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4.",reasons:{CLIENT_APPROVAL_REQUIRED:"Figma\uc758 \uc9c0\uc6d0 MCP \ud074\ub77c\uc774\uc5b8\ud2b8 \uc2b9\uc778\uc774 \uc644\ub8cc\ub418\uba74 \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",NOT_CONFIGURED:"\uc774 \uc81c\uacf5\uc790\uc758 \uc5f0\uacb0 \uc124\uc815\uc744 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4.",FEATURE_DISABLED:"\uc11c\ube44\uc2a4\uc5d0\uc11c \uc774 \uc5f0\uacb0\uc744 \uc77c\uc2dc \uc911\uc9c0\ud588\uc2b5\ub2c8\ub2e4.",NOT_VERIFIED:"\uc2e4\uc81c \uc5f0\uacb0 \uac80\uc99d\uc774 \ub0a8\uc544 \uc788\uc2b5\ub2c8\ub2e4.",ACCESS_DENIED:"\uc774 \uacc4\uc815\uc740 \uc774 \uc81c\uacf5\uc790\ub97c \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."},errors:{INVALID_INPUT:"\uc62c\ubc14\ub978 Figma \ud504\ub808\uc784 \uc8fc\uc18c \ub610\ub294 JSON \uac1d\uccb4\ub97c \uc785\ub825\ud558\uc138\uc694.",INVALID_RESPONSE:"\uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc751\ub2f5\uc785\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud6c4 \ub2e4\uc2dc \ud655\uc778\ud558\uc138\uc694.",CONTEXT_EXPIRED:"\uc790\ub8cc \ubbf8\ub9ac\ubcf4\uae30\uac00 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uac00\uc838\uc640 \uac80\ud1a0\ud558\uc138\uc694.",REVISION_CONFLICT:"\ub514\uc790\uc778\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68\ud558\uace0 \uc0c8 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uac80\ud1a0\ud558\uc138\uc694.",TOOL_CATALOG_CHANGED:"\ub3c4\uad6c \ubaa9\ub85d\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud6c4 \uad8c\ud55c\uc744 \ub2e4\uc2dc \uac80\ud1a0\ud558\uc138\uc694.",CONNECTION_REVOKED:"\uc774 \uc5f0\uacb0\uc740 \ub354 \uc774\uc0c1 \ud65c\uc131 \uc0c1\ud0dc\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uacc4\uc815 \uc5f0\uacb0 \uad00\ub9ac\uc5d0\uc11c \ub2e4\uc2dc \uc5f0\uacb0\ud558\uc138\uc694.",PROJECT_PERMISSION_REQUIRED:"\ud604\uc7ac \ud504\ub85c\uc81d\ud2b8 \uc5ed\ud560\ub85c\ub294 \uc774 \uc791\uc5c5\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",RATE_LIMITED:"\u
1c694\uccad\uc774 \ub9ce\uc2b5\ub2c8\ub2e4. 1\ubd84 \ub4a4 \uac19\uc740 \uc791\uc5c5\uc744 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",unknown:"\uacb0\uacfc\ub97c \ud655\uc778\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uac19\uc740 \uc791\uc5c5\uc744 \uc7ac\uc2dc\ub3c4\ud574 \uae30\uc874 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc138\uc694."}},r=e=>"Design"===e.editor?{title:"Before you start",unknown:"The service has not reported a specific reason. Refresh or check your account.",noFrameComments:"Create a screen before adding comments.",membersUnavailable:"Invitations are unavailable for this project. Project permission and invitation delivery must both be enabled.",commentsUnavailable:"Comments are unavailable for this project.",plan:"Open screen plan",billing:"View subscription",evidence:"View evidence",refresh:"Refresh status",reasons:{SCREEN_PLAN_REQUIRED:"Save a screen plan first.",SUBSCRIPTION_REQUIRED:"An active Snailer Design subscription is required.",FEATURE_DISABLED:"The service has paused this feature.",WORKER_UNAVAILABLE:"The execution service is unavailable. Try again after service recovery.",RUNNER_UNAVAILABLE:"The build service is unavailable.",SNAPSHOT_REQUIRED:"Save a design snapshot before running quality checks.",PROJECT_PERMISSION_REQUIRED:"Your project role does not allow this action.",EVIDENCE_REQUIRED:"Pass quality checks for the current snapshot first.",BUNDLE_REQUIRED:"Build a verified bundle for the current design first.",INSUFFICIENT_CREDITS:"There is not enough available usage for this operation.",MAIL_UNAVAILABLE:"Invitation delivery is not ready.",GITHUB_CONNECTION_REQUIRED:"Connect a GitHub account with repository access."}}:{title:"\uc791\uc5c5 \uc2dc\uc791 \uc804 \ud655\uc778",unknown:"\uc11c\ube44\uc2a4\uc5d0\uc11c \uad6c\uccb4\uc801\uc778 \uc0ac\uc720\ub97c \uc81c\uacf5\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68\ud558\uac70\ub098 \uacc4\uc815 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uc138\uc694.",noFrameComments:"\ud654\uba74\uc744 \ub9cc\ub4e0 \ub4a4 \ub313\uae00\uc744 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",membersUnavailable:"\uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \ucd08\ub300\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8 \uad8c\ud55c\uacfc \ucd08\ub300 \uba54\uc77c \uc11c\ube44\uc2a4\uac00 \ubaa8\ub450 \ud544\uc694\ud569\ub2c8\ub2e4.",commentsUnavailable:"\uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \ub313\uae00\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",plan:"\ud654\uba74 \uacc4\ud68d \uc5f4\uae30",billing:"\uad6c\ub3c5 \ud655\uc778",evidence:"\uac80\uc99d \uadfc\uac70 \ubcf4\uae30",refresh:"\uc0c1\ud0dc \uc0c8\ub85c\uace0\uce68",reasons:{SCREEN_PLAN_REQUIRED:"\ud654\uba74 \uacc4\ud68d\uc744 \uba3c\uc800 \uc800\uc7a5\ud558\uc138\uc694.",SUBSCRIPTION_REQUIRED:"\ud65c\uc131 Snailer Design \uad6c\ub3c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",FEATURE_DISABLED:"\uc11c\ube44\uc2a4\uc5d0\uc11c \uc774 \uae30\ub2a5\uc744 \uc77c\uc2dc \uc911\uc9c0\ud588\uc2b5\ub2c8\ub2e4.",WORKER_UNAVAILABLE:"\uc791\uc5c5 \uc2e4\ud589 \uc11c\ube44\uc2a4\uac00 \uc900\ube44\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ubcf5\uad6c \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.",RUNNER_UNAVAILABLE:"\ube4c\ub4dc \uc2e4\ud589 \uc11c\ube44\uc2a4\uac00 \uc900\ube44\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.",SNAPSHOT_REQUIRED:"\ub514\uc790\uc778 \uc2a4\ub0c5\uc0f7\uc744 \uc800\uc7a5\ud55c \ub4a4 \ud488\uc9c8 \uac80\uc0ac\ub97c \uc2e4\ud589\ud558\uc138\uc694.",PROJECT_PERMISSION_REQUIRED:"\ud604\uc7ac \ud504\ub85c\uc81d\ud2b8 \uc5ed\ud560\ub85c\ub294 \uc774 \uc791\uc5c5\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",EVIDENCE_REQUIRED:"\ud604\uc7ac \uc2a4\ub0c5\uc0f7\uc758 \ud488\uc9c8 \uac80\uc0ac\ub97c \uba3c\uc800 \ud1b5\uacfc\ud558\uc138\uc694.",BUNDLE_REQUIRED:"\ud604\uc7ac \ub514\uc790\uc778\uc758 \uac80\uc99d\ub41c \ubc88\ub4e4\uc744 \uba3c\uc800 \ub9cc\ub4dc\uc138\uc694.",INSUFFICIENT_CREDITS:"\uc774 \uc791\uc5c5\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc0ac\uc6a9\ub7c9\uc774 \ubd80\uc871\ud569\ub2c8\ub2e4.",MAIL_UNAVAILABLE:"\ucd08\ub300 \uba54\uc77c \ubc1c\uc1a1\uc744 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4.",GITHUB_CONNECTION_REQUIRED:"\uc800\uc7a5\uc18c \uc811\uadfc \uad8c\ud55c\uc774 \uc788\ub294 GitHub \uacc4\uc815\uc744 \uc5f0\uacb0\ud558\uc138\uc694."}},o={"The source exceeds the supported node or depth limit.":"\uc9c0\uc6d0\ud558\ub294 \ub178\ub4dc \uc218 \ub610\ub294 \uc911\ucca9 \uae4a\uc774\ub97c \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4.","This image needs private asset import before this frame can be imported.":"\uc774 \ud504\ub808\uc784\uc758 \uc774\ubbf8\uc9c0\ub294 \uc544\uc9c1 \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ubbf8\uc9c0 \uc5c6\ub294 \ud504\ub808\uc784\uc744 \uc120\ud0dd\ud558\uac70\ub098 \uc774\ubbf8\uc9c0 \uac00\uc838\uc624\uae30 \uc9c0\uc6d0\uc744 \uae30\ub2e4\ub9ac\uc138\uc694.","Text exceeds the supported length.":"\ud14d\uc2a4\ud2b8\uac00 \uc9c0\uc6d0\ud558\ub294 \uae38\uc774\ub97c \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4.","This node type has no reviewed component mapping.":"\uc774 \ub178\ub4dc \uc720\ud615\uc5d0 \ub300\uc751\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc544\uc9c1 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.","Select a FRAME node.":"Figma\uc5d0\uc11c FRAME \ub178\ub4dc\ub97c \uc120\ud0dd\ud558\uc138\uc694.","Typography, colors and layout use the current project theme and Grid/Text components. Review the mapped design before importing.":"\uae00\uaf34\xb7\uc0c9\uc0c1\xb7\ubc30\uce58\ub294 \ud604\uc7ac \ud504\ub85c\uc81d\ud2b8 \ud14c\ub9c8\uc640 Grid/Text \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uac00\uc838\uc624\uae30 \uc804\uc5d0 \ub9e4\ud551\ub41c \ub514\uc790\uc778\uc744 \ud655\uc778\ud558\uc138\uc694.","The mapped frame is outside the supported IR limits.":"\ub9e4\ud551\ub41c \ud504\ub808\uc784\uc774 \uc9c0\uc6d0\ud558\ub294 \ub514\uc790\uc778 \uad6c\uc870\uc758 \ud55c\ub3c4\ub97c \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4."},a=(e,t)=>"Design"===t.editor?e:o[e]||e},7812(e,t,n){n.d(t,{Am:()=>v,Bl:()=>d,Dr:()=>g,Ph:()=>w,SJ:()=>y,mU:()=>h,nD:()=>c,pQ:()=>l,tY:()=>_,yl:()=>f,zE:()=>x});var i=n(2555),r=n(1529),o=n(8797),a=n(6416),s=n(8430);const c={accent:"#a54b2a",background:"#f4f1e9",text:"#242820",font:"editorial",spacing:24,radiu
1s:0},l=["editorial","sans","mono"];function d(e){return e&&Object.keys(e).every(e=>Object.hasOwn(c,e))&&["accent","background","text"].every(t=>{return void 0===e[t]||"string"===typeof(n=e[t])&&/^#[a-f0-9]{6}$/i.test(n);var n})&&(void 0===e.font||l.includes(e.font))&&["spacing","radius"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0&&e[t]<=("spacing"===t?64:40))}const u=["motion","html","css"],p=["Story","Model3D","Custom"];function h(e,t,n){const i=(0,r.sN)(e),c=(0,r.Kn)(i.nodes).find(e=>e.node_id===t);if(!c||!n||!Object.keys(n).length)throw new o.zE("INVALID_INPUT");const l="Custom"===c.component,d={Story:["text","eyebrow","detail","color_token","motion"],Model3D:["text","alt","asset_id","detail","eyebrow","variant","color_token","motion"],Custom:["text","html","css","motion"]}[c.component];for(const[r,u]of Object.entries(n)){var h;if(s.FH.includes(r)){if(null===u){delete c.props[r];continue}if(!(0,s.Bz)(c.component,r,u)||d&&!["tone","align","size"].includes(r))throw new o.zE("INVALID_INPUT");c.props[r]=u;continue}if(!(!(d&&!d.includes(r))&&(["text","detail","eyebrow","alt"].includes(r)?"string"===typeof u&&u.length<=2e3&&!("alt"===r&&"Model3D"===c.component&&!u.trim()):"color_token"===r?["text","accent","background"].includes(u):"motion"===r?a.UA.includes(u):"variant"===r?"Card"===c.component&&["arch","circles","steps"].includes(u)||"Model3D"===c.component&&s.zl.includes(u)||"string"===typeof u&&!(null===(h=s.hm[c.component])||void 0===h||!h.includes(u)):"html"===r||"css"===r?l&&("string"===typeof u||"css"===r&&null===u):"asset_id"===r&&(["Hero","Card"].includes(c.component)&&(null===u||"string"===typeof u&&/^[\w-]{1,120}$/.test(u))||"Model3D"===c.component&&"string"===typeof u&&/^[\w-]{1,120}$/.test(u)))))throw new o.zE("INVALID_INPUT");c.props[r]=u}if(l&&(Object.hasOwn(n,"html")||Object.hasOwn(n,"css"))){const e=(0,a.kf)({nodeId:c.node_id,html:c.props.html,css:c.props.css});if(!e.ok)throw Object.assign(new o.zE("INVALID_CUSTOM_SECTION"),{details:e.errors});c.props.html=e.html,e.css?c.props.css=e.css:delete c.props.css}return i.registry_version===s.KN&&(Object.keys(n).some(e=>u.includes(e))||p.includes(c.component))&&(i.registry_version=s.Rp),i.registry_version!==s.K8&&(0,s.nT)(i)&&(i.registry_version=s.K8),i}const m="model/gltf-binary";function g(e){return"model"===(null===e||void 0===e?void 0:e.kind)||"image"===(null===e||void 0===e?void 0:e.kind)?e.kind:(null===e||void 0===e?void 0:e.mime)===m||/^data:model\/gltf-binary;/.test((null===e||void 0===e?void 0:e.preview_url)||"")?"model":"image"}function v(e){return!!e&&/\.glb$/i.test(e.name||"")&&["",m,"application/octet-stream"].includes(e.type||"")&&e.size>0&&e.size<=20971520}function f(e){return Array.isArray(e)&&e.length>=1&&e.length<=3&&e.every(e=>"string"===typeof e.title&&e.title.trim().length>0&&e.title.length<=80&&"string"===typeof e.purpose&&e.purpose.trim().length>0&&e.purpose.length<=500&&"string"===typeof e.route&&/^\/(?:[a-z0-9-]+(?:\/[a-z0-9-]+)*)?$/.test(e.route)&&e.route.length<=120)&&new Set(e.map(e=>e.route)).size===e.length}function x(e,t){var n,i,o,a;const s=new Map((0,r.Kn)(null===(n=e.ir)||void 0===n?void 0:n.nodes).map(e=>[e.node_id,e])),c=new Map((0,r.Kn)(null===(i=t.ir)||void 0===i?void 0:i.nodes).map(e=>[e.node_id,e])),l=[];for(const r of new Set([...s.keys(),...c.keys()])){const e=s.get(r),t=c.get(r);if(!e||!t){l.push({node:r,prop:"node",before:null===e||void 0===e?void 0:e.component,after:null===t||void 0===t?void 0:t.component});continue}for(const o of new Set(["component",...Object.keys(e.props),...Object.keys(t.props)])){const n="component"===o?e.component:e.props[o],i="component"===o?t.component:t.props[o];JSON.stringify(n)!==JSON.stringify(i)&&l.push({node:r,prop:o,before:n,after:i})}const n=(e.children||[]).map(e=>e.node_id).join(", "),i=(t.children||[]).map(e=>e.node_id).join(", ");n!==i&&l.push({node:r,prop:"children",before:n,after:i})}const d=e=>{var t;return((null===(t=e.ir)||void 0===t?void 0:t.nodes)||[]).map(e=>e.node_id).join(", ")};d(e)!==d(t)&&l.push({node:"frame",prop:"order",before:d(e),after:d(t)});const u=(null===(o=e.theme)||void 0===o?void 0:o.tokens)||e.theme||{},p=(null===(a=t.theme)||void 0===a?void 0:a.tokens)||t.theme||{};for(const r of new Set([...Object.keys(u),...Object.keys(p)]))u[r]!==p[r]&&l.push({node:"theme",prop:r,before:u[r],after:p[r]});return l}function b(e){return e&&["image/png","image/jpeg","image/webp"].includes(e.type)&&e.size>0&&e.size<=5242880}async function y(e,t,n,i,r){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"image";if(!("model"===a?v(n):b(n))||!i)throw new o.zE("INVALID_INPUT");const s="model"===a?m:n.type,c=()=>
1{if(null!==r&&void 0!==r&&r.aborted)throw new o.zE("REQUEST_ABORTED")};c();const l=await crypto.subtle.digest("SHA-256",await n.arrayBuffer());c();const d=Array.from(new Uint8Array(l),e=>e.toString(16).padStart(2,"0")).join("");if(i.sha256===d&&i.projectId===t||Object.assign(i,{sha256:d,projectId:t,id:null,sent:!1,completed:!1}),!i.id){const r=await e("post","/projects/".concat((0,o.a)(t),"/assets/uploads"),{filename:n.name,mime:s,bytes:n.size,sha256:d});c();const a=(0,o.bS)(r.upload_url);if(!a||!r.asset_id)throw new o.zE("INVALID_RESPONSE");Object.assign(i,{id:r.asset_id,url:a})}if(!i.sent){const e=await fetch(i.url,{method:"PUT",credentials:"omit",signal:r,headers:{"Content-Type":s},body:n});if(c(),!e.ok)throw new o.zE("unavailable");i.sent=!0}return i.completed||(await e("post","/assets/".concat((0,o.a)(i.id),"/complete"),{sha256:d}),c(),i.completed=!0),i.id}function _(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image";return("model"===t?v(e):b(e))?new Promise((n,r)=>{const a=new FileReader;a.onerror=()=>r(new o.zE("INVALID_INPUT")),a.onload=()=>{const r="model"===t?String(a.result).replace(/^data:[^;,]*;base64,/,"data:model/gltf-binary;base64,"):a.result;n((0,i.A)({id:"sample-asset-".concat(crypto.randomUUID()),status:"ready",preview_url:r,filename:e.name},"model"===t?{kind:"model",mime:m}:{}))},a.readAsDataURL(e)}):Promise.reject(new o.zE("INVALID_INPUT"))}function w(e){var t;return"ready"!==(null===e||void 0===e?void 0:e.status)?"":null!==(t=e.id)&&void 0!==t&&t.startsWith("sample-asset-")&&/^data:(?:image\/(png|jpeg|webp)|model\/gltf-binary);base64,[a-z0-9+/=]+$/i.test(e.preview_url||"")?e.preview_url:(0,o.bS)(e.preview_url)||""}},8125(e,t,n){n.d(t,{A:()=>a});n(9950);var i=n(2074),r=n(7096),o=n(4414);function a(e){let{access:t,model:n,capability:a,prerequisites:s=[],c:c}=e;const l=(0,r.vI)(c),d=function(e,t,n){if(!e)return[];const i=[...arguments.length>3&&void 0!==arguments[3]?arguments[3]:[]];if(!e.can(n)){var r;const e=null===t||void 0===t||null===(r=t.capability_reasons)||void 0===r?void 0:r[n];Array.isArray(e)&&e.length&&e.every(e=>"string"===typeof e)?i.push(...e):i.push("UNKNOWN")}return[...new Set(i)]}(t,n,a,s);if(!d.length)return null;const u="/design/projects/".concat(encodeURIComponent(n.id));return(0,o.jsx)("ul",{className:"uxf-action-requirements",children:d.map(e=>(0,o.jsxs)("li",{children:[(0,o.jsx)("span",{children:l.reasons[e]||l.unknown}),"SCREEN_PLAN_REQUIRED"===e&&(0,o.jsx)(i.N_,{to:"".concat(u,"/plan"),children:l.plan}),"SUBSCRIPTION_REQUIRED"===e&&(0,o.jsx)(i.N_,{to:"/account/design",children:l.billing}),["EVIDENCE_REQUIRED","BUNDLE_REQUIRED"].includes(e)&&(0,o.jsx)(i.N_,{to:"".concat(u,"/evidence"),children:l.evidence}),"GITHUB_CONNECTION_REQUIRED"===e&&(0,o.jsx)(i.N_,{to:"/account/integrations",children:c.integrations})]},e))})}},8430(e,t,n){n.d(t,{Bz:()=>E,F0:()=>x,FH:()=>_,K8:()=>d,KN:()=>c,Ml:()=>I,Nf:()=>j,Rp:()=>l,Sj:()=>v,ZG:()=>b,dJ:()=>f,hm:()=>y,ih:()=>A,nT:()=>T,zl:()=>m});var i=n(2555),r=n(1529),o=n(7812),a=n(6416),s=n(7089);const c="uxf-registry-1",l="uxf-registry-2",d="uxf-registry-3",u=[c,l,d],p=new Set(["Nav","Hero","Button","Text","Grid","Card","Footer"]),h={Story:["text","eyebrow","detail","color_token","motion"],Model3D:["text","alt","asset_id","detail","eyebrow","variant","color_token","motion"],Custom:["text","html","css","motion"]},m=["orbit","spin","scroll"],g=/^[\w-]{1,120}$/,v=["default","muted","accent","inverse"],f=["start","center"],x=["compact","regular","large"],b=["2","3","4"],y={Hero:["split","centered","spotlight","minimal"],Button:["outline","solid","ghost"],Grid:["cards","features","pricing","faq","stats","testimonials","logos","steps"],Nav:["bar","centered","floating"],Text:["default","statement","split"],Footer:["default","centered"]},_=["tone","align","size","columns","price","cadence","badge","items","cta"],w=function(){return String(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("\n").map(e=>e.trim()).filter(Boolean)};function E(e,t,n){if("string"!==typeof n)return!1;switch(t){case"tone":return v.includes(n);case"align":return"Custom"!==e&&f.includes(n);case"size":return"Custom"!==e&&x.includes(n);case"columns":return"Grid"===e&&b.includes(n);case"price":case"cadence":case"badge":return"Card"===e&&n.length<=40;case"items":return"Card"===e&&n.length<=2e3&&w(n).length<=12;
1case"cta":return["Hero","Nav","Card"].includes(e)&&n.length<=80;default:return!1}}const N=(e,t)=>Object.keys(e.props).filter(e=>_.includes(e)).every(n=>t&&E(e.component,n,e.props[n])),S=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2e3;return void 0===e||"string"===typeof e&&e.length<=t};function A(e){const t=(null===e||void 0===e?void 0:e.registry_version)===d,n=(null===e||void 0===e?void 0:e.registry_version)===l||t;let i=0;const o=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Array.isArray(e)&&e.length<=100&&r<=8&&e.every(e=>{var s;return i+=1,!!(i<=300&&e&&"string"===typeof e.node_id&&e.node_id.length>0&&e.node_id.length<=120&&Object.keys(e).every(e=>["node_id","component","props","children"].includes(e))&&e.props&&"object"===typeof e.props)&&(n&&Object.hasOwn(h,e.component)?((e,n)=>{const i=e.props,r=h[e.component];return Object.keys(i).every(e=>r.includes(e)||t&&_.includes(e))&&N(e,t)&&"string"===typeof i.text&&i.text.length<=2e3&&S(i.detail)&&S(i.eyebrow)&&(void 0===i.color_token||["accent","background","text"].includes(i.color_token))&&(void 0===i.motion||a.UA.includes(i.motion))&&("Model3D"!==e.component||"string"===typeof i.alt&&i.alt.trim().length>0&&i.alt.length<=2e3&&"string"===typeof i.asset_id&&g.test(i.asset_id)&&(void 0===i.variant||m.includes(i.variant)))&&("Custom"!==e.component||"string"===typeof i.html&&i.html.length<=a.VR&&(null==i.css||"string"===typeof i.css&&i.css.length<=a.To))&&("Story"===e.component?Array.isArray(e.children)&&e.children.length>=2&&e.children.length<=6&&e.children.every(e=>"Card"===(null===e||void 0===e?void 0:e.component))&&o(e.children,n+1):void 0===e.children)})(e,r):p.has(e.component)&&Object.keys(e.props).every(e=>["text","detail","eyebrow","alt","variant","asset_id","color_token",...n?["motion"]:[],...t?_:[]].includes(e))&&N(e,t)&&(void 0===e.props.color_token||["accent","background","text"].includes(e.props.color_token))&&"string"===typeof e.props.text&&e.props.text.length<=2e3&&["detail","eyebrow","alt"].every(t=>void 0===e.props[t]||"string"===typeof e.props[t]&&e.props[t].length<=2e3)&&(null==e.props.asset_id||["Hero","Card"].includes(e.component)&&"string"===typeof e.props.asset_id&&g.test(e.props.asset_id))&&(void 0===e.props.variant||"Card"===e.component&&["arch","circles","steps"].includes(e.props.variant)||t&&"string"===typeof e.props.variant&&!(null===(s=y[e.component])||void 0===s||!s.includes(e.props.variant)))&&(void 0===e.props.motion||a.UA.includes(e.props.motion))&&(void 0===e.children||"Grid"===e.component&&o(e.children,r+1)))})};if(1!==(null===e||void 0===e?void 0:e.schema_version)||Object.keys(e).some(e=>!["schema_version","registry_version","nodes"].includes(e))||!u.includes(e.registry_version)||!o(e.nodes))return!1;const s=(0,r.Kn)(e.nodes).map(e=>e.node_id);return new Set(s).size===s.length}function T(e){return(0,r.Kn)((null===e||void 0===e?void 0:e.nodes)||[]).some(e=>{var t,n;return Object.keys(e.props||{}).some(e=>_.includes(e))||"string"===typeof(null===(t=e.props)||void 0===t?void 0:t.variant)&&!(null===(n=y[e.component])||void 0===n||!n.includes(e.props.variant))})}function I(e,t){const n=A(e),i=n?(0,r.Kn)(e.nodes):[];return{structure:n,labels:n&&i.every(e=>e.props.text.trim().length>0),tokens:n&&i.filter(e=>e.props.color_token).every(e=>/^#[0-9a-f]{6}$/i.test((null===t||void 0===t?void 0:t[e.props.color_token])||""))}}const k=function(){return String(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e]))};const C=e=>{try{const t=new URL(e);return["https:","http:"].includes(t.protocol)?t.origin:""}catch(t){return""}};function j(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if(!A(e))return"<!doctype html><html><body>Unsupported design</body></html>";const p=e.registry_version===d,h=e.registry_version===l||p,g=(0,i.A)((0,i.A)({},o.nD),(0,o.Bl)(t)?t:{}),v='-apple-system,BlinkMacSystemFont,"Segoe UI","Apple SD Gothic Neo","Noto Sans KR",sans-serif',f=(0,r.Kn)(e.nodes).some(e=>/[\uac00-\ud7a3]/.test(e.props.text+(e.props.detail||""))),x="mono"===g.font?"ui-monospace,monospace":"editorial"!==g.font||f?v:"Georgia,serif",b=new Map(n.filter(e=>"model"!==(0,o.Dr)(e)).map(e=>[e.id,(0,o.Ph)(e)])),_=new Map(n.filter(e=>"model"===(0,o.Dr)(e)).map(e=>[e.id,(0,o.Ph)(e)]).filter(e=>{let[,t]=e;return t}
1)),E=new Set,N=(e,t,n)=>{const i=_.get(e);return i?(E.add(i),'<model-viewer src="'.concat(k(i),'" alt="').concat(k(t),'" camera-orbit="').concat("0deg 75deg 105%",'" camera-controls touch-action="pan-y" interaction-prompt="none" shadow-intensity="1" loading="eager"').concat(n,"></model-viewer>")):""},S=(e,t)=>{const n=e.props;return N(n.asset_id,n.alt||n.text," disable-zoom")||R(n)||(n.variant?'<div class="card-art '.concat(n.variant,'" aria-hidden="true"><i></i><b></b></div>'):'<div class="story-art" aria-hidden="true"><span>'.concat(String(t+1).padStart(2,"0"),"</span></div>"))},T=e=>e.eyebrow?'<p class="eyebrow">'.concat(k(e.eyebrow),"</p>"):"",I=e=>{return'data-node-id="'.concat(k(e.node_id),'"').concat(e.props.color_token?' style="color:var(--'.concat(e.props.color_token,')"'):"").concat((t=e.props,h&&t.motion&&"none"!==t.motion?' data-motion="'.concat(k(t.motion),'"'):"")).concat((e=>{if(!p)return"";const t=e.props;return"".concat(t.tone&&"default"!==t.tone?' data-tone="'.concat(k(t.tone),'"'):"").concat("center"===t.align?' data-align="center"':"").concat(t.size&&"regular"!==t.size?' data-size="'.concat(k(t.size),'"'):"").concat(t.variant&&y[e.component]?' data-variant="'.concat(k(t.variant),'"'):"").concat("Grid"===e.component&&t.columns?' data-columns="'.concat(k(t.columns),'"'):"")})(e)).concat(e.node_id===c?' data-uxf-highlight="true"':"");var t},j=[],R=e=>b.get(e.asset_id)?'<img class="asset-image" src="'.concat(k(b.get(e.asset_id)),'" alt="').concat(k(e.alt||""),'" referrerpolicy="no-referrer" crossorigin="anonymous">'):"",D=e=>{const t=e.props,n=k(t.text).replace(/\n/g,"<br>"),i=t.detail?'<p class="detail">'.concat(k(t.detail),"</p>"):"",r=R(t);let o="";switch(e.component){case"Nav":o='<header class="navigation"><strong>'.concat(n,"</strong>").concat(i).concat(p&&t.cta?'<button type="button" class="nav-cta">'.concat(k(t.cta),"</button>"):"","</header>");break;case"Hero":o='<section class="hero'.concat(r?" has-media":"",'"><div class="hero-copy">').concat(t.eyebrow?'<p class="eyebrow">'.concat(k(t.eyebrow),"</p>"):"","<h1>").concat(n,"</h1>").concat(i).concat(p&&t.cta?'<div class="hero-actions"><button type="button" class="hero-cta">'.concat(k(t.cta),"</button></div>"):"","</div>").concat(r,"</section>");break;case"Button":o='<div class="cta"><button type="button"'.concat(t.color_token?' style="color:var(--'.concat(t.color_token,')"'):"",">").concat(n,"</button>").concat(i,"</div>");break;case"Text":o='<section class="text-section"><h2>'.concat(n,"</h2>").concat(i,"</section>");break;case"Grid":{var s;const n=!(null===(s=e.children)||void 0===s||!s.length)&&e.children.every(e=>"Card"===e.component);o='<section class="collection '.concat(n?"card-collection":"flow-collection",'" aria-label="').concat(k(t.text),'"><div class="').concat(n?"card-grid":"flow",'">').concat((e.children||[]).map(D).join(""),"</div></section>");break}case"Card":{const e=r||(t.variant?'<div class="card-art '.concat(t.variant,'" aria-hidden="true"><i></i><b></b></div>'):""),a=t.eyebrow?'<p class="eyebrow">'.concat(k(t.eyebrow),"</p>"):"";if(!p){o='<article class="card">'.concat(e,'<div class="card-copy">').concat(a,"<h3>").concat(n,"</h3>").concat(i,"</div></article>");break}const s=w(t.items);o='<article class="card"'.concat(t.badge?' data-featured="true"':"",">").concat(e,'<div class="card-copy">').concat(t.badge?'<p class="card-badge">'.concat(k(t.badge),"</p>"):"").concat(a,"<h3>").concat(n,"</h3>").concat(t.price?'<p class="card-price"><strong>'.concat(k(t.price),"</strong>").concat(t.cadence?"<span>".concat(k(t.cadence),"</span>"):"","</p>"):"").concat(i).concat(s.length?'<ul class="card-items">'.concat(s.map(e=>"<li>".concat(k(e),"</li>")).join(""),"</ul>"):"").concat(t.cta?'<div class="card-cta"><button type="button">'.concat(k(t.cta),"</button></div>"):"","</div></article>");break}case"Footer":o="<footer><strong>".concat(n,"</strong>").concat(i,"</footer>");break;case"Story":{const r=e.children||[],a=r.map((e,t)=>'<div class="story-frame"'.concat(0===t?' data-active="true"':"",">").concat(S(e,t),"</div>")).join(""),s=r.map((e,t)=>'<article class="story-step" '.concat(I(e)).concat(0===t?' data-active="true"':"",'><div class="story-media">').concat(S(e,t),'</div><div class="story-step-copy"><p class="story-index">').concat(String(t+1).padStart(2,"0"),"</p>").concat(T(e.props),"<h3>").concat(k(e.props.text).replace(/\n/g,"<br>"),"</h3>").concat(e.props.detail?'<p class="detail">'.concat(k(e.props.detail),"</p>"):"","</div></article>")).join("");o='<section class="story"><header class="story-head">'.concat(T(t),"<h2>").concat(n,"</h2>").concat(i,'</header><div class="story-body"><div class="story-stage" aria-hidden="true"><div class="story-stage-inner">').concat(a,'</div></div><div class="story-steps">').concat(s,"</div></div></section>");break}case"Model3D":{const e=m.includes(t.variant)?t.variant:"orbit",r=N(t.asset_id,t.alt,"spin"===e?' auto-rotate auto-rotate-delay="0" rotation-per-second="18deg"':"")||'<div class="model3d-placeholder" role="img" aria-label="'.concat(k(t.alt),'"><span>3D</span></div>');o='<section class="model3d" data-variant="'.concat(e,'"><div class="model3d-copy">').concat(T(t),"<h2>").concat(n,"</h2>").concat(i,'</div><div class="model3d-stage">').concat(r,"</div></section>");break}
1case"Custom":{const n=(0,a.kf)({nodeId:e.node_id,html:t.html,css:t.css}),i=n.ok?n.html.replace(/<img((?: [a-z-]+="[^"]*")*) src="asset:([\w-]{1,120})"((?: [a-z-]+="[^"]*")*)>/g,(e,t,n,i)=>b.get(n)?"<img".concat(t,' src="').concat(k(b.get(n)),'"').concat(i,' referrerpolicy="no-referrer" crossorigin="anonymous">'):""):"";n.ok&&n.css&&j.push(n.css),o='<section class="custom-section" aria-label="'.concat(k(t.text),'"').concat(n.ok?"":' data-sd-invalid="true"',">").concat(i,"</section>");break}default:return""}return h?o.replace(/^<([a-z][a-z0-9-]*)(?=[ >])/,"<$1 ".concat(I(e))):o.replace(/^<([a-z][a-z0-9-]*)(?=[ >])/,'<$1 data-node-id="'.concat(k(e.node_id),'"').concat(t.color_token?' style="color:var(--'.concat(t.color_token,')"'):"").concat(e.node_id===c?' data-uxf-highlight="true"':""))},L=e.nodes.map(D).join(""),O=h&&!1!==u.motion&&/^[A-Za-z0-9+/_-]{16,64}={0,2}$/.test(u.nonce||"")?u.nonce:"",U=C(u.modelViewerSrc||s.t7)&&u.modelViewerSrc||s.t7,P=E.size>0,M=["https://grpc.snailer.ai",...new Set([...E].map(C).filter(e=>e&&"https://grpc.snailer.ai"!==e))].join(" "),H=h?"default-src 'none'; style-src 'unsafe-inline'; img-src data: blob: https: http://127.0.0.1:4173; script-src".concat(O?" 'nonce-".concat(O,"'"):""," ").concat(C(U),"/vendor/; connect-src ").concat(M," blob: data:; worker-src blob:; form-action 'none'; base-uri 'none'"):"default-src 'none'; style-src 'unsafe-inline'; img-src data: https: http://127.0.0.1:4173; form-action 'none'; base-uri 'none'",z=h&&P?'<script src="'.concat(k(U),'" defer><\/script>'):"",G=O?'<script nonce="'.concat(O,'">').concat(s.BN,"<\/script>"):"",B=h?"".concat(function(e){const t='-apple-system,BlinkMacSystemFont,"Segoe UI","Apple SD Gothic Neo","Noto Sans KR",sans-serif',n="cubic-bezier(.16,1,.3,1)";return"\n.story{margin:clamp(96px,13vw,176px) 0;min-width:0}.story-head{max-width:820px;margin:0 auto clamp(56px,8vw,112px);text-align:center}.story-head .eyebrow{color:var(--accent);margin-bottom:20px}.story-head h2{font:600 clamp(36px,5.4vw,72px)/1.06 ".concat(e,";letter-spacing:-.045em}.story-head .detail{margin:24px auto 0;font-size:clamp(17px,1.7vw,22px);line-height:1.55;max-width:44ch}\n.story-steps{display:flex;flex-direction:column;gap:clamp(80px,11vw,160px)}.story-step{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);align-items:center;gap:clamp(32px,6vw,104px);min-width:0}.story-step:nth-child(even)>.story-media{order:2}.story-step-copy{min-width:0;max-width:30em}.story-index{font:600 13px/1 ").concat(t,";letter-spacing:.16em;font-variant-numeric:tabular-nums;color:var(--accent);margin-bottom:22px}.story-step-copy .eyebrow{margin-bottom:14px}.story-step h3{font:600 clamp(28px,3.4vw,44px)/1.12 ").concat(e,";letter-spacing:-.038em}.story-step .detail{margin-top:18px;font-size:clamp(16px,1.45vw,19px);line-height:1.6}\n.story-media,.story-frame{position:relative;aspect-ratio:4/3;width:100%;overflow:hidden;border-radius:calc(var(--radius) * 1.5);background:color-mix(in srgb,var(--accent) 7%,var(--background))}.story-media>.asset-image,.story-frame>.asset-image{width:100%;height:100%;aspect-ratio:auto;object-fit:cover;border-radius:0}.story-media>.card-art,.story-frame>.card-art{height:100%}.story-media>model-viewer,.story-frame>model-viewer{display:block;width:100%;height:100%;--poster-color:transparent;background:transparent}.story-art{display:grid;place-items:center;width:100%;height:100%;background:color-mix(in srgb,var(--accent) 14%,var(--background))}.story-art span{font:600 clamp(80px,12vw,168px)/1 ").concat(e,";letter-spacing:-.06em;color:var(--accent);opacity:.88}.story-stage{display:none}\n.model3d{margin:clamp(96px,13vw,176px) 0;display:grid;gap:clamp(36px,5vw,72px);min-width:0}.model3d-copy{max-width:820px;margin:0 auto;text-align:center}.model3d-copy .eyebrow{color:var(--accent);margin-bottom:20px}.model3d-copy h2{font:600 clamp(36px,5.4vw,72px)/1.06 ").concat(e,";letter-spacing:-.045em}.model3d-copy .detail{margin:24px auto 0;font-size:clamp(17px,1.7vw,22px);line-height:1.55;max-width:46ch}.model3d-stage{position:relative;width:100%;aspect-ratio:16/10;max-height:80vh;overflow:hidden;border-radius:calc(var(--radius) * 1.5);background:radial-gradient(120% 90% at 50% 18%,color-mix(in srgb,var(--accent) 12%,var(--background)) 0%,var(--background) 72%)}.model3d-stage>model-viewer{position:absolute;inset:0;display:block;width:100%;height:100%;--poster-color:transparent;background:transparent}.model3d-placeholder{position:absolute;inset:0;display:grid;place-items:center;font:600 13px/1 ").concat(t,";letter-spacing:.24em;color:var(--accent)}\n.custom-section{margin:clamp(56px,8vw,112px) 0;min-width:0}.custom-section img{display:block;max-width:100%;height:auto}\n@media(max-width:680px){.story-step{grid-template-columns:minmax(0,1fr);gap:28px}.story-step:nth-child(even)>.story-media{order:0}.story-steps{gap:88px}.model3d-stage{aspect-ratio:4/5}}\n@media(prefers-reduced-motion:no-preference){html.sd-motion [data-motion]{transition:opacity .9s ").concat(n,",transform .9s ").concat(n,'}html.sd-motion [data-motion="fade-up"]:not(.is-in){opacity:0;transform:translate3d(0,40px,0)}html.sd-motion [data-motion="fade-in"]:not(.is-in){opacity:0}
1html.sd-motion [data-motion="slide-left"]:not(.is-in){opacity:0;transform:translate3d(56px,0,0)}html.sd-motion [data-motion="slide-right"]:not(.is-in){opacity:0;transform:translate3d(-56px,0,0)}html.sd-motion [data-motion="scale-in"]:not(.is-in){opacity:0;transform:scale(.94)}html.sd-motion [data-motion="parallax"]{transition:none;transform:translate3d(0,calc(var(--sd-progress, 0) * -48px),0);will-change:transform}}\n@media(prefers-reduced-motion:no-preference) and (min-width:900px){html.sd-motion .story-body{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);gap:clamp(48px,6vw,104px);align-items:start}html.sd-motion .story-stage{display:block;position:sticky;top:12vh;height:76vh}html.sd-motion .story-stage-inner{position:relative;width:100%;height:100%}html.sd-motion .story-frame{position:absolute;inset:0;aspect-ratio:auto;opacity:0;transform:scale(.965);transition:opacity .7s ease,transform 1s ').concat(n,'}html.sd-motion .story-frame[data-active="true"]{opacity:1;transform:none}html.sd-motion .story-steps{gap:0}html.sd-motion .story-step{display:flex;align-items:center;min-height:76vh}html.sd-motion .story-step>.story-media{display:none}html.sd-motion .story-step-copy{transition:opacity .6s ease}html.sd-motion .story-step:not([data-active="true"]) .story-step-copy{opacity:.28}}\n')}(x)).concat(p?function(e){return'\n:root{--sd-accent:var(--accent);--sd-bg:var(--background);--sd-text:var(--text)}\n[data-tone]{position:relative;background:var(--background);color:var(--text);box-shadow:0 0 0 100vmax var(--background);clip-path:inset(0 -100vmax);margin-block:0;padding-block:clamp(56px,7vw,104px)}\n[data-tone="muted"]{--background:color-mix(in srgb,var(--sd-accent) 8%,var(--sd-bg))}[data-tone="accent"]{--background:var(--sd-accent);--text:var(--sd-bg);--accent:var(--sd-bg)}[data-tone="inverse"]{--background:var(--sd-text);--text:var(--sd-bg);--accent:var(--sd-bg)}\n[data-size="compact"][data-tone]{padding-block:clamp(36px,4.5vw,64px)}[data-size="large"][data-tone]{padding-block:clamp(80px,10vw,152px)}\n[data-align="center"]{text-align:center}[data-align="center"] .hero-copy,[data-align="center"] h1,[data-align="center"] h2,[data-align="center"] .detail{margin-inline:auto}[data-align="center"] .hero-actions,.cta[data-align="center"]{justify-content:center}.flow>.cta[data-align="center"]{align-self:center}\n.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}.hero-cta,.nav-cta,.card-cta button,.cta[data-variant="solid"] button{background:var(--accent);color:var(--background);border:1px solid var(--accent);border-radius:var(--radius);padding:14px 26px;font-weight:600;line-height:1.5;min-height:48px;max-width:100%}.hero-cta:hover,.nav-cta:hover,.card-cta button:hover{opacity:.9}.hero-cta:focus-visible,.nav-cta:focus-visible,.card-cta button:focus-visible{outline:3px solid var(--text);outline-offset:3px}\n.cta[data-variant="ghost"] button{border-color:transparent;background:transparent;padding-inline:4px;text-decoration:underline;text-underline-offset:6px}\n.hero[data-size="large"] h1{font-size:clamp(46px,7.2vw,108px);max-width:16ch}.hero[data-size="compact"]{padding-top:clamp(32px,5vw,64px)}.hero[data-size="compact"] h1{font-size:clamp(30px,3.8vw,52px)}.text-section[data-size="large"] h2,.story[data-size="large"] .story-head h2,.model3d[data-size="large"] .model3d-copy h2{font-size:clamp(34px,5.2vw,68px)}.text-section[data-size="compact"] h2{font-size:clamp(22px,2.4vw,30px)}\n.hero[data-variant="centered"]{text-align:center;padding:clamp(72px,10vw,152px) 0 clamp(24px,4vw,48px)}.hero[data-variant="centered"] .hero-copy{margin-inline:auto;max-width:900px}.hero[data-variant="centered"] h1,.hero[data-variant="centered"] .detail{margin-inline:auto}.hero[data-variant="centered"] .hero-actions{justify-content:center}.hero[data-variant="centered"].has-media{grid-template-columns:minmax(0,1fr);gap:clamp(40px,6vw,72px)}\n.hero[data-variant="spotlight"]{text-align:center;min-height:min(86vh,820px);
1display:grid;align-content:center;padding:clamp(80px,12vw,176px) 0;background:color-mix(in srgb,var(--accent) 8%,var(--background))}.hero[data-variant="spotlight"] .hero-copy{margin-inline:auto;max-width:980px}.hero[data-variant="spotlight"] h1{font-size:clamp(46px,7.6vw,116px);line-height:1.02;letter-spacing:-.055em;margin-inline:auto;max-width:15ch}.hero[data-variant="spotlight"] .detail{margin-inline:auto;font-size:clamp(17px,1.7vw,22px)}.hero[data-variant="spotlight"] .hero-actions{justify-content:center}.hero[data-variant="spotlight"].has-media{grid-template-columns:minmax(0,1fr);gap:clamp(40px,6vw,80px)}\n.hero[data-variant="minimal"]{padding:clamp(40px,6vw,80px) 0 clamp(24px,3vw,40px);border-bottom:1px solid color-mix(in srgb,var(--text) 14%,transparent)}.hero[data-variant="minimal"] h1{font-size:clamp(32px,4.2vw,58px);max-width:22ch}\n.nav-cta{padding:10px 18px;min-height:40px;font-size:14px}.navigation[data-variant="centered"]{flex-direction:column;justify-content:center;gap:8px;padding-block:20px;text-align:center}.navigation[data-variant="centered"] .detail{text-align:center}.navigation[data-variant="floating"]{position:sticky;top:12px;z-index:5;margin-top:16px;min-height:64px;padding:0 12px 0 24px;border:1px solid color-mix(in srgb,var(--text) 14%,transparent);border-radius:999px;background:var(--background);box-shadow:0 8px 30px color-mix(in srgb,var(--text) 8%,transparent)}\n.text-section[data-variant="statement"]{text-align:center}.text-section[data-variant="statement"]:not([data-tone]){margin-block:clamp(72px,10vw,144px)}.text-section[data-variant="statement"] h2{font-size:clamp(28px,4.2vw,56px);line-height:1.18;max-width:24ch;margin-inline:auto}.text-section[data-variant="statement"] .detail{margin-inline:auto}.text-section[data-variant="split"]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,5vw,80px);align-items:start}.text-section[data-variant="split"] .detail{margin-top:0}\nfooter[data-variant="centered"]{flex-direction:column;justify-content:center;text-align:center}footer[data-variant="centered"] .detail{text-align:center}\n[data-columns="2"] .card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}[data-columns="3"] .card-grid{grid-template-columns:repeat(3,minmax(0,1fr))}[data-columns="4"] .card-grid{grid-template-columns:repeat(4,minmax(0,1fr))}\n.card[data-featured="true"]{border:2px solid var(--accent)}.card-badge{display:inline-block;font-size:12px;font-weight:600;letter-spacing:.04em;padding:4px 10px;border-radius:999px;background:var(--accent);color:var(--background);margin-bottom:14px}.card-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;margin-top:14px}.card-price strong{font:600 clamp(30px,3.2vw,44px)/1.1 '.concat(e,';letter-spacing:-.03em}.card-price span{font-size:14px}.card-items{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:10px;font-size:15px}.card-items li{display:flex;gap:10px;align-items:baseline}.card-items li::before{content:"";flex:0 0 7px;height:7px;border-radius:50%;background:var(--accent);transform:translateY(-2px)}.card-cta{margin-top:24px}.card-cta button{width:100%}.card:not([data-featured]) .card-cta button{background:transparent;color:var(--text);border-color:var(--text)}\n.collection[data-variant="features"] .card{border:0;border-radius:0;border-top:2px solid var(--accent)}.collection[data-variant="features"] .card-copy{padding:24px 0 0}\n.collection[data-variant="pricing"] .card{display:flex;flex-direction:column}.collection[data-variant="pricing"] .card-copy{padding:32px;display:flex;flex-direction:column;flex:1}.collection[data-variant="pricing"] .card-cta{margin-top:auto;padding-top:24px}\n.collection[data-variant="faq"] .card-grid{grid-template-columns:minmax(0,1fr);gap:0;max-width:880px;margin-inline:auto}.collection[data-variant="faq"] .card{border:0;border-radius:0;border-bottom:1px solid color-mix(in srgb,var(--text) 14%,transparent)}.collection[data-variant="faq"] .card-copy{padding:24px 0}.collection[data-variant="faq"] .card h3{font-size:18px}\n.collection[data-variant="stats"] .card{border:0}.collection[data-variant="stats"] .card-copy{padding:8px 0}.collection[data-variant="stats"] .card h3{font:600 clamp(40px,5vw,68px)/1.05 ').concat(e,';letter-spacing:-.04em;color:var(--accent)}.collection[data-variant="stats"] .card .detail{margin-top:8px}\n.collection[data-variant="testimonials"] .card{border:0;background:color-mix(in srgb,var(--accent) 6%,var(--background))}.collection[data-variant="testimonials"] .card-copy{padding:32px}
1.collection[data-variant="testimonials"] .card h3{font:500 clamp(18px,1.6vw,22px)/1.5 ').concat(e,';letter-spacing:-.01em}.collection[data-variant="testimonials"] .card h3::before{content:"\\201C";display:block;font-size:48px;line-height:1;color:var(--accent);margin-bottom:8px}.collection[data-variant="testimonials"] .card .detail{margin-top:20px;font-size:14px;font-weight:600}\n.collection[data-variant="logos"] .card-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr));gap:12px 32px;align-items:center}.collection[data-variant="logos"] .card{border:0;text-align:center}.collection[data-variant="logos"] .card-copy{padding:12px 0}.collection[data-variant="logos"] .card h3{font-size:18px;letter-spacing:.02em}\n.collection[data-variant="steps"] .card-grid{counter-reset:sd-step}.collection[data-variant="steps"] .card{border:0;counter-increment:sd-step}.collection[data-variant="steps"] .card-copy{padding:0}.collection[data-variant="steps"] .card-copy::before{content:counter(sd-step,decimal-leading-zero);display:block;font:600 14px/1 ui-monospace,monospace;color:var(--accent);margin-bottom:16px}\n.card-badge{align-self:flex-start}footer[data-variant="centered"]{align-items:center}footer[data-tone]{border-top:0}.cta[data-align="center"] .detail{margin-inline:0}[data-tone] .detail{opacity:1}.collection+.collection:not([data-tone]){margin-top:clamp(56px,8vw,112px)}.collection:not([data-tone])+[data-tone]{margin-top:clamp(56px,8vw,112px)}[data-tone="muted"]+[data-tone="muted"],[data-tone="accent"]+[data-tone="accent"],[data-tone="inverse"]+[data-tone="inverse"]{padding-top:0}\n@media(max-width:900px){[data-columns="3"] .card-grid,[data-columns="4"] .card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}\n@media(max-width:680px){[data-columns] .card-grid{grid-template-columns:minmax(0,1fr)}.text-section[data-variant="split"]{grid-template-columns:minmax(0,1fr)}.hero[data-variant="spotlight"]{min-height:0}.navigation[data-variant="floating"]{border-radius:24px;padding:12px 16px}.nav-cta{display:none}}\n')}(x):"").concat(j.join("\n"),"\n"):"";return'<!doctype html><html lang="'.concat(f?"ko":"en",'"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="Content-Security-Policy" content="').concat(H,'">').concat(z,"<style>\n:root{--accent:").concat(g.accent,";--background:").concat(g.background,";--text:").concat(g.text,";--space:").concat(g.spacing,"px;--radius:").concat(g.radius,"px}\n*{box-sizing:border-box}html{color-scheme:light}body{margin:0;background:var(--background);color:var(--text);font:16px/1.65 ").concat(v,";-webkit-font-smoothing:antialiased}main{width:min(100%,1240px);margin:auto;padding:0 clamp(24px,6vw,80px) 64px}h1,h2,h3,p{margin:0}h1,h2,h3{word-break:keep-all;overflow-wrap:anywhere;text-wrap:balance}p{word-break:keep-all;overflow-wrap:anywhere}button{font:inherit;cursor:pointer}img{max-width:100%}.detail{max-width:58ch;white-space:pre-line;color:var(--text);opacity:.75}.navigation{min-height:84px;display:flex;align-items:center;justify-content:space-between;gap:24px;border-bottom:1px solid color-mix(in srgb,var(--text) 15%,transparent)}.navigation strong{font-size:22px;letter-spacing:-.04em}.navigation .detail{font-size:13px;text-align:right}\n.hero{padding:clamp(48px,8vw,112px) 0 0}.hero.has-media{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:center;gap:").concat(g.spacing,"px}.hero-copy{min-width:0}.eyebrow{font-size:12px;letter-spacing:.12em;font-weight:600;margin-bottom:24px}.hero h1{font-family:").concat(x,";font-size:clamp(38px,5.4vw,76px);font-weight:600;line-height:1.12;letter-spacing:-.045em;max-width:18ch}.hero .detail{font-size:clamp(16px,1.55vw,20px);line-height:1.65;margin-top:26px;max-width:48ch}html:lang(ko) .hero h1{max-width:14em;letter-spacing:-.045em}.asset-image{display:block;width:100%;height:auto;object-fit:cover;border-radius:").concat(g.radius,"px}.hero>.asset-image{aspect-ratio:1.08;max-height:560px}.cta{display:flex;align-items:center;flex-wrap:wrap;gap:16px;margin:28px 0 0}.cta button{border:1px solid var(--text);background:var(--background);color:var(--text);padding:14px 26px;border-radius:").concat(g.radius,"px;font-weight:600;line-height:1.5;min-height:48px;max-width:100%;overflow-wrap:anywhere}.cta .detail{font-size:14px}.cta button:hover{opacity:.86}button:focus-visible{outline:3px solid var(--accent);outline-offset:4px}\n.text-section{margin:clamp(56px,8vw,112px) 0 28px}.text-section h2{font:600 clamp(26px,3.5vw,44px)/1.2 ").concat(x,";letter-spacing:-.035em}.text-section .detail{margin-top:16px}.collection{min-width:0}.flow{display:flex;flex-direction:column;align-items:stretch}.flow>.hero{width:100%}.flow>.cta{align-self:flex-start}.flow>.collection{margin-top:48px}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:").concat(g.spacing,"px}.card{min-width:0;border:1px solid color-mix(in srgb,var(--text) 14%,transparent);border-radius:").concat(g.radius,"px;overflow:hidden}.card-copy{padding:24px}.card h3{font-size:20px;line-height:1.3;letter-spacing:-.025em}.card .detail{font-size:15px;margin-top:12px}.card>.asset-image{aspect-ratio:1.5;object-fit:cover}.card-art{height:220px;position:relative;background:color-mix(in srgb,var(--accent) 12%,var(--background));overflow:hidden}.card-art i,.card-art b{position:absolute;display:block;background:var(--accent)}.card-art.arch i{width:40%;height:78%;border-radius:100px 100px 0 0;bottom:0;left:30%}.card-art.circles i,.card-art.circles b{width:120px;height:120px;border-radius:50%;top:48px;left:20%}.card-art.circles b{left:45%;opacity:.5}.card-art.steps i{width:38%;height:48%;bottom:0;left:14%}.card-art.steps b{width:38%;height:76%;bottom:0;left:46%;opacity:.65}footer{margin-top:80px;padding:28px 0;border-top:1px solid color-mix(in srgb,var(--text) 15%,transparent);display:flex;align-items:center;justify-content:space-between;gap:24px;font-size:14px}footer .detail{text-align:right}\n@media(max-width:680px){main{padding-inline:24px}.navigation{min-height:72px}.navigation .detail{max-width:18ch}.hero.has-media{grid-template-columns:minmax(0,1fr)}.hero>.asset-image{margin-top:16px;max-height:400px}.hero h1{font-size:clamp(36px,9.5vw,56px)}.hero .detail{font-size:17px}.card-grid{grid-template-columns:minmax(0,1fr)}.card-art{height:220px}footer{align-items:flex-start;flex-direction:column}footer .detail{text-align:left}}\n").concat(B,'[data-uxf-highlight="true"]{outline:4px solid #d94b35;outline-offset:-4px;box-shadow:inset 0 0 0 8px #d94b3522}\n</style></head><body><main>').concat(L,"</main>").concat(G,"</body></html>")}},8479(e,t,n){n.d(t,{A:()=>c});n(9950);var i=n(6311),r=n(9992),o=n(8125),a=n(5610),s=n(4414);function c(e){let{access:t,model:n,c:c}=e;const l=(0,a.z)(c);return(0,s.jsxs)("details",{className:"uxf-availability",children:[(0,s.jsx)("summary",{children:l.features}),(0,s.jsx)("p",{children:l.featureNote}),(0,s.jsx)("ul",{children:[["storage","uxforge.projects.write"],["assets","uxforge.assets.write"],["generate","uxforge.generate"],["export","uxforge.export"],["github","uxforge.github_pr"]].map(e=>{let[a,d]=e;return(0,s.jsxs)("li",{children:[t.can(d)?(0,s.jsx)(i.A,{size:14,"aria-hidden":"true"}):(0,s.jsx)(r.A,{size:14,"aria-hidden":"true"}),(0,s.jsx)("span",{children:l[a]}),(0,s.jsx)("strong",{children:t.can(d)?l.available:l.restricted}),n&&(0,s.jsx)(o.A,{access:t,model:n,capability:d,c:c,prerequisites:"uxforge.export"!==d||n.snapshot_id?[]:["SNAPSHOT_REQUIRED"]})]},d)})})]})}},8538(e,t,n){n.d(t,{A:()=>
1o});var i=n(9950),r=n(8797);function o(e){const t=(0,i.useRef)(new Map),n=(0,i.useRef)(!1);return(0,i.useCallback)(async function(i,o){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(n.current)return null;const s=JSON.stringify([i,o,a]),c=t.current.get(s)||(0,r.tu)();t.current.set(s,c),n.current=!0;try{const n=await e[i](o,a,c);return t.current.delete(s),n}finally{n.current=!1}},[e])}},8659(){},8769(e,t,n){n.d(t,{A:()=>a});var i=n(2555),r=n(9950),o=n(3614);function a(e){const[t,n]=(0,r.useState)(0),[a,s]=(0,r.useState)({catalog:null,connections:null,loading:!0,error:null,pending:!1}),c=(0,r.useCallback)(()=>n(e=>e+1),[]);return(0,r.useEffect)(()=>{let t=!0;if(s({catalog:null,connections:null,loading:!0,error:null,pending:!1}),e)return Promise.allSettled([e.get("".concat(o.be,"/catalog")).then(e=>(0,o.KD)(e,o.Ok)),e.get("".concat(o.be,"/connections")).then(e=>(0,o.KD)(e,o.EG))]).then(e=>{var n;let[i,r]=e;if(!t)return;const a=[i,r].filter(e=>"rejected"===e.status).map(e=>e.reason);s({catalog:"fulfilled"===i.status?i.value:null,connections:"fulfilled"===r.status?r.value:null,loading:!1,pending:a.some(o.Jg),error:(null===(n=a.find(e=>!(0,o.Jg)(e)))||void 0===n?void 0:n.code)||null})}),()=>{t=!1};s({catalog:null,connections:null,loading:!1,error:null,pending:!0})},[e,t]),(0,i.A)((0,i.A)({},a),{},{refresh:c,attempt:t})}},8797(e,t,n){n.d(t,{Fe:()=>u,I6:()=>c,NP:()=>d,a:()=>a,bS:()=>l,tu:()=>s,zE:()=>o});var i=n(2555),r=n(8628);class o extends Error{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;super(e),this.code=e,this.status=t}}const a=e=>encodeURIComponent(String(e)),s=()=>crypto.randomUUID();function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en";if("string"!==typeof e||!/^\d{1,19}$/.test(e)||BigInt(e)>9223372036854775807n)return"\u2014";const n=BigInt(e),i=(n%1000000n).toString().padStart(6,"0"),r=i.slice(2).replace(/0+$/,"")?i.replace(/0+$/,""):i.slice(0,2);return"$".concat((n/1000000n).toLocaleString(t),".").concat(r)}function l(e){if("string"!==typeof e||!e.trim())return null;try{const t=new URL(e,window.location.origin);return"https:"!==t.protocol&&(t.origin!==window.location.origin||"http:"!==t.protocol)||t.username||t.password?null:t.href}catch(t){return null}}function d(e){try{const t=new URL(e);return"https:"!==t.protocol||"github.com"!==t.hostname||t.username||t.password||!/^\/[^/]+\/[^/]+\/pull\/\d+$/.test(t.pathname)?null:t.href}catch(t){return null}}function u(){let{identity:e=r.S0,fetcher:t=function(){return fetch(...arguments)},timeoutMs:n=15e3}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a="",s=null,c=0,l=0,d=()=>{};const u=new Set,p=()=>{l++,a="",s=null,c=0,u.forEach(e=>e.abort()),u.clear()},h=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:401;throw p(),d(e),new o(401===e?"AUTHENTICATION_REQUIRED":"ACCESS_DENIED",e)},m=async function(r){var d,p;let{method:m="GET",body:g,key:v,exchange:f=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const x=null===(d=e())||void 0===d?void 0:d.sessionToken,b=null===(p=e())||void 0===p?void 0:p.userId,y=l;if(x&&(f||s&&s.token===x&&s.id===b&&!(c<=Date.now()))||h(),!r.startsWith("/")||r.startsWith("//"))throw new o("INVALID_INPUT");if("GET"!==m&&(!g||"object"!==typeof g||Array.isArray(g)||!f&&("string"!==typeof v||!/^[A-Za-z0-9_-]{16,128}$/.test(v))))throw new o("INVALID_INPUT");const _=()=>{var t,n;if(y!==l)throw new o("REQUEST_ABORTED");x===(null===(t=e())||void 0===t?void 0:t.sessionToken)&&b===(null===(n=e())||void 0===n?void 0:n.userId)||h()},w=new AbortController;u.add(w);const E=setTimeout(()=>w.abort(),n);try{var N;const e=await t("/api/design/v1"+r,(0,i.A)({method:m,credentials:"same-origin",cache:"no-store",signal:w.signal,headers:(0,i.A)((0,i.A)((0,i.A)({Accept:"application/json"},void 0!==g?{"Content-Type":"application/json"}:{}),f?{Authorization:"Bearer ".concat(x)}:"GET"!==m?{"X-CSRF-Token":a}:{}),v?{"Idempotency-Key":v}:{})},void 0!==g?{body:JSON.stringify(g)}:{}));_();const n=null===(N=e.headers.get("content-type"))||void 0===N?void 0:N.includes("application/json");if(![200,201,202,204].includes(e.status)){var S,A;let t;if(n)try{t=await e.json()}catch(T){}_();const i="string"===typeof(null===(S=t)||void 0===S||null===(A=S.error)||void 0===A?void 0:A.code)?t.error.code:null;if(401===e.status&&"AUTHENTICATION_REQUIRED"===i&&h(401),403===e.status&&"ACCESS_DENIED"===i&&h(403),[401,403].includes(e.status)&&!i)throw new o("EDGE_BLOCKED",e.status);throw new o(i||(e.status>=500||404===e.status?"unavailable":"invalid"),e.status)}if(204===e.status)return{};if(!n)throw new o("unavailable");const s=await e.json();if(_(),!s||"object"!==typeof s||Array.isArray(s))throw new o("INVALID_RESPONSE");return s}
1catch(I){if(I instanceof o)throw I;if(y!==l)throw new o("REQUEST_ABORTED");throw new o("GET"===m||f?"unavailable":"unknown")}finally{clearTimeout(E),u.delete(w)}};return{onDenied:e=>{d=e},reset:p,connect:async()=>{p();const t=l,n=(0,i.A)({},e());if(!n.sessionToken||!n.userId)throw new o("AUTHENTICATION_REQUIRED",401);try{var r;const e=await m("/sessions/exchange",{method:"POST",body:{},exchange:!0});if((null===(r=e.principal)||void 0===r?void 0:r.user_id)!==n.userId||"string"!==typeof e.csrf_token||!e.csrf_token||!Number.isFinite(Date.parse(e.expires_at))||Date.parse(e.expires_at)<=Date.now())throw new o("INVALID_RESPONSE");a=e.csrf_token,c=Date.parse(e.expires_at),s={token:n.sessionToken,id:n.userId};const t=await m("/capabilities");if(1!==t.schema_version||t.principal_user_id!==n.userId||!Array.isArray(t.capabilities)||!Array.isArray(t.workspaces))throw new o("INVALID_RESPONSE");return t}catch(d){throw t===l&&p(),d}},get:e=>m(e),post:(e,t,n)=>m(e,{method:"POST",body:t,key:n}),patch:(e,t,n)=>m(e,{method:"PATCH",body:t,key:n}),delete:(e,t,n)=>m(e,{method:"DELETE",body:t,key:n}),put:(e,t,n)=>m(e,{method:"PUT",body:t,key:n})}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.