{"context":{"domain":"demo"},"layers":{"ApplicationLayer":{"reference":"ApplicationLayer","availableInstances":[{"reference":"ComponentsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"SystemsDataSet","params":{"filter":{"domain":"data2"},"pagination":{"size":1},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSource"}}}},{"reference":"ExternalComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"SystemsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5e3b796d6228227ca637d0f4","name":"data2","domain":"data2","organization":"62292184611f480b3191c37c","visibility":"public","updatedAt":"2026-07-27T14:19:36.810Z"}]}},{"reference":"OrganizationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"DataComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"OneFileComponentInstancesDataSet","params":{"pagination":{"size":1},"master":{"dataset":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSet"}},"localField":"system","masterField":"_id"},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"FileComponentInstancesDataSource"}}}},{"reference":"ApplicationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ServiceComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@Data2TableDataSource","reference":"FileComponentInstancesDataSource","params":{"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}}]}},{"component":"data2-core@MemoryDataSource","reference":"EmptyDataSource","params":{"initialData":[]}},{"reference":"ComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"UserComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"DataComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ServiceComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ExternalComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ApplicationsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}}],"processesParams":{}},"HostApplicationLayer":{"reference":"HostApplicationLayer","availableInstances":[{"_id":"5f15ff190528b92601890f71","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"SystemsTableDataSource"}},"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"domain"}}},"pk":"_id","fields":[{"component":"data2-core-types@FieldReference","params":{"key":"_id"}},{"component":"data2-core-types@FieldReference","params":{"key":"name"}},{"component":"data2-core-types@FieldReference","params":{"key":"domain"}},{"component":"data2-core-types@FieldReference","params":{"key":"visibility"}},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization._id"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.name"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.billingStatus"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.publicTrial.active"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"settings.defaultAccessPolicy"}}},"break":true}],"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"staticPagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"policies":[{"component":"data2-core-auth@Policy","params":{"allow":{"params":{"actions":[{"params":{"components":[{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"_id"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"domain"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"}]},"component":"data2-core-logical-operators@Or"}]},"component":"data2-core-flow@Series"}}}]},"reference":"SystemsDataSet","updatedAt":"2026-08-07T21:51:24.037Z","createdAt":"2020-07-20T20:31:21.838Z"},{"_id":"5f1601ce0528b92601890f7c","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":1000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"sort":{"params.package":1,"params.component":1},"pk":"_id","autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"staticFilter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}},"filter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}}},"reference":"ComponentsDataSet","updatedAt":"2025-11-05T19:37:01.935Z","createdAt":"2020-07-20T20:42:54.898Z"},{"_id":"5f9041dbc8da12be8b94aea4","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":2000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"UserComponentsDataSet","updatedAt":"2025-11-06T21:06:58.095Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"65d8c4fabc9dbb8f94de8d53","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ExternalComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ExternalComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:23.742Z","createdAt":"2024-02-23T16:17:01.816Z"},{"reference":"SystemsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"63d98929ddb46b0635033b23","name":"demo","domain":"demo","visibility":"private","settings":{"defaultAccessPolicy":"private"},"updatedAt":"2026-08-14T20:00:20.536Z","createdAt":"2023-01-31T21:33:29.545Z"}]}},{"reference":"ComponentsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5f52a278a575399a45d239b4","component":"data2-core-types@Component","params":{"package":"data2-core-primitives","component":"Router","interactions":{"component":"data2-core-types@FieldSet","params":{"fields":{"goBack":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.goBack","args":[]}}}},"icon":{"component":"data2-core-primitives@String","params":{"content":"arrow-left"}},"visibility":"public"}},"goTo":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.push","args":[{"component":"data2-core-types@Reference","params":{"reference":"url"}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"preserveQuery"}}}}]}},"parameters":[{"component":"data2-core-primitives@String","params":{"content":"url"}},{"component":"data2-core-primitives@String","params":{"content":"preserveQuery"}}]},"break":true},"icon":{"component":"data2-core-primitives@String","params":{"content":"share"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Path to route"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Path to redirect user"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Boolean"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Preserve Query"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Preserve query string parameters  preserve query parameters on navigating."}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"}]}},"open":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.push","args":[{"pathname":{"component":"data2-core-types@Reference","params":{"reference":"value"}}}]}},"parameters":["value"]}},"icon":{"component":"data2-core-primitives@String","params":{"content":"share"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Link to open"}},"description":{"component":"data2-core-primitives@String","params":{"content":""}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Target"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Where to open the link"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"oneOf":[{"params":{"content":"_blank"},"component":"data2-core-primitives@String"},{"params":{"content":"_self"},"component":"data2-core-primitives@String"},{"params":{"content":"_parent"},"component":"data2-core-primitives@String"},{"params":{"content":"_top"},"component":"data2-core-primitives@String"}]},"component":"data2-core-types@ComponentParameter"}]}},"close":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":"close"}},"parameters":["value"]}},"icon":{"component":"data2-core-primitives@String","params":{"content":"times"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Link to open"}},"description":{"component":"data2-core-primitives@String","params":{"content":""}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Target"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Where to open the link"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"oneOf":[{"params":{"content":"_blank"},"component":"data2-core-primitives@String"},{"params":{"content":"_self"},"component":"data2-core-primitives@String"},{"params":{"content":"_parent"},"component":"data2-core-primitives@String"},{"params":{"content":"_top"},"component":"data2-core-primitives@String"}]},"component":"data2-core-types@ComponentParameter"}],"description":{"component":"data2-core-primitives@String","params":{"content":"Closes a window that was opened via router.open."}}}}}}}}},{"_id":"620d28658271aa4129919d89","component":"data2-core-types@Component","params":{"package":"data2-interface-services","component":"DeviceController","interactions":{"params":{"fields":{"postMessage":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@String","title":{"component":"data2-core-primitives@String","params":{"content":"data"}}}}]},"component":"data2-core-types@ComponentParameter"},"print":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"parameters":{"zoom":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Number"}},"title":{"component":"data2-core-primitives@String","params":{"content":"zoom"}},"visibility":"public"}}},"visibility":"public"},"component":"data2-core-types@ComponentParameter"}],"visibility":"public"},"component":"data2-core-types@ComponentParameter"},"share":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}}},"component":"data2-core-types@ComponentParameter"},"clipboard.copy":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}}}}]},"component":"data2-core-types@ComponentParameter"},"clipboard.paste":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}}}}]},"component":"data2-core-types@ComponentParameter"},"download":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Content"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Options"}},"parameters":{"params":{"fields":{"type":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Mimetype"}}}}}},"component":"data2-core-types@FieldSet"}}}]},"component":"data2-core-types@ComponentParameter"},"downloadUrl":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Url"}}}}]},"component":"data2-core-types@ComponentParameter"},"promptFiles":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@Object","flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"parameters":{"params":{"fields":{"multiple":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Multiple"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Whether or not to allow selecting multiple files"}},"component":"data2-core-primitives@Boolean"}},"acceptedFormats":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Accepted Formats"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Accepted file formats"}},"component":"data2-core-primitives@String","list":{"component":"data2-core-primitives@Boolean","params":{"content":true}}}},"timeout":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Timeout"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Max milliseconds to wait for file upload"}},"component":"data2-core-primitives@Number"}}}},"component":"data2-core-types@FieldSet"}}}],"visibility":"public"},"component":"data2-core-types@ComponentParameter"},"meetingRecord":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","definition":{"params":{"actions":[{"params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"meeting"}},"script":{"component":"data2-core-primitives@String","params":{"content":"(function() {\n  let mediaRecorder;\n  let audioChunks = [];\n  let combinedStream;\n  let audioContext;\n  \n  window.meetingCapture = async function() {\n    try {\n      // Solicitar acesso ao áudio da guia (e vídeo, que será ignorado depois)\n      const tabStream = await navigator.mediaDevices.getDisplayMedia({ \n        video: true, // Necessário para alguns navegadores\n        audio: true\n      });\n      \n      // Remover a trilha de vídeo\n      const tabAudioTrack = tabStream.getAudioTracks()[0];\n      \n      // Solicitar acesso ao microfone\n      const micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      const micAudioTrack = micStream.getAudioTracks()[0];\n      \n      // Criar um novo MediaStream com ambas as trilhas de áudio\n      combinedStream = new MediaStream([tabAudioTrack, micAudioTrack]);\n      \n      // Criar um contexto de áudio para misturar os streams\n      audioContext = new AudioContext();\n      const destination = audioContext.createMediaStreamDestination();\n      \n      // Conectar a trilha de áudio da guia\n      const tabSource = audioContext.createMediaStreamSource(new MediaStream([tabAudioTrack]));\n      tabSource.connect(destination);\n      \n      // Conectar a trilha de áudio do microfone\n      const micSource = audioContext.createMediaStreamSource(new MediaStream([micAudioTrack]));\n      micSource.connect(destination);\n      \n      // Iniciar gravação com o stream misturado\n      mediaRecorder = new MediaRecorder(destination.stream);\n      audioChunks = [];\n      mediaRecorder.ondataavailable = (e) => audioChunks.push(e.data);\n      mediaRecorder.start();\n      \n      console.log('Gravação iniciada. Chame meetingCaptureStop() para finalizar.');\n    } catch (error) {\n      console.error('Erro ao iniciar a captura:', error);\n    }\n  };\n  \n  window.meetingCaptureStop = function() {\n    return new Promise((resolve, reject) => {\n      if (!mediaRecorder) {\n        reject('Nenhuma gravação em andamento.');\n        return;\n      }\n      \n      mediaRecorder.onstop = () => {\n        const audioBlob = new Blob(audioChunks, { type: 'audio/webm' });\n        combinedStream.getTracks().forEach(track => track.stop());\n        audioContext.close();\n        \n        resolve(audioBlob);\n        console.log('Gravação finalizada. O arquivo de áudio está pronto para upload.');\n      };\n      \n      mediaRecorder.stop();\n    });\n  };\n})();"}}},"component":"data2-core-web@Script"},{"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":{"component":"data2-core-primitives@String","params":{"content":"meetingCapture"}}}}]},"component":"data2-core-flow@Series"}},"component":"data2-core-types@ComponentParameter"},"meetingRecordStop":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Content"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Options"}},"parameters":{"params":{"fields":{"type":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Mimetype"}}}}}},"component":"data2-core-types@FieldSet"}}}],"definition":{"params":{"actions":[{"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":{"component":"data2-core-primitives@String","params":{"content":"meetingCaptureStop"}}}}]},"component":"data2-core-flow@Series"}},"component":"data2-core-types@ComponentParameter"},"notify":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"private","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@Object","parameters":{"title":{"params":{"component":"data2-core-primitives@String","index":{"component":"data2-core-primitives@Number","params":{"content":0}},"title":{"component":"data2-core-primitives@String","params":{"content":"title"}}},"component":"data2-core-types@ComponentParameter"},"sound":{"params":{"component":"data2-core-types@FileComponentUrlReference","index":{"component":"data2-core-primitives@Number","params":{"content":1}},"title":{"component":"data2-core-primitives@String","params":{"content":"sound"}}},"component":"data2-core-types@ComponentParameter"}},"flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}}}}]},"component":"data2-core-types@ComponentParameter"}}},"component":"data2-core-types@FieldSet"}}},{"_id":"6af21f01d5edd50249264c3b","component":"data2-core-types@Component","system":"63d98929ddb46b0635033b23","params":{"extends":"data2-core-primitives@Block","component":"psh_landing","package":"demo","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function T() {\n  return {\n    en: {\n      kick: \"Lisbon · Thursday 19 November 2026\",\n      sub: \"Waking up to the end of enterprise software as we know it.\",\n      lede1: \"An evening after the summit, hosted by\",\n      lede2: \"Doors at 17:00, one keynote at 18:00, and we close at 20:30.\",\n      tap: \"Tap the glass\",\n      doors: \"Doors\", keynote: \"Keynote\", close: \"Close\",\n      inDays: function (n) { return n === 0 ? \"Today\" : n === 1 ? \"Tomorrow\" : \"In \" + n + \" days\"; },\n      loading: \"Opening your invitation\",\n      invited: function (n) { return n + \", you're invited.\"; },\n      invitedSub: \"Tell us if you're coming so we hold your place.\",\n      yes: \"I'll be there\", no: \"Can't make it\",\n      confirmed: function (n) { return \"See you Thursday, \" + n + \".\"; },\n      confirmedSub: \"Show this code at the door.\",\n      cal: \"Add to calendar\", gcal: \"Google\", ics: \"Apple / Outlook\",\n      change: \"I can't make it after all\",\n      declined: function (n) { return \"Noted, \" + n + \".\"; },\n      declinedSub: \"If plans change, this link keeps working until the day.\",\n      changeYes: \"Actually, I'll come\",\n      requested: function (n) { return \"Request received, \" + n + \".\"; },\n      requestedSub: \"It is with the team now. This page shows your ticket as soon as it is approved.\",\n      present: function (n) { return \"You're in, \" + n + \".\"; },\n      presentSub: \"Checked in at the door.\",\n      notFound: \"We couldn't find that invitation. Check the link you received, or request one below.\",\n      reqTitle: \"By invitation\",\n      reqSub: \"No invitation yet? Leave your details and the team will get back to you.\",\n      fName: \"Name\", fEmail: \"Work email\", fCompany: \"Company\", fRole: \"Role\",\n      send: \"Request an invitation\", sending: \"Sending\",\n      errName: \"Add your name so we know who is asking.\",\n      errNet: \"That didn't go through. Check your connection and try again.\",\n      where: \"Where\", map: \"Open in Maps\", hosted: \"Hosted by\",\n      calDesc: \"Post-Summit Hangover. Doors 17:00, keynote 18:00, close 20:30. Your invitation: \"\n    },\n    pt: {\n      kick: \"Lisboa · quinta-feira, 19 de novembro de 2026\",\n      sub: \"Acordar para o fim do software empresarial como o conhecemos.\",\n      lede1: \"Uma noite depois do summit, organizada pela\",\n      lede2: \"Portas às 17:00, um keynote às 18:00, encerramento às 20:30.\",\n      tap: \"Toque no copo\",\n      doors: \"Portas\", keynote: \"Keynote\", close: \"Fim\",\n      inDays: function (n) { return n === 0 ? \"Hoje\" : n === 1 ? \"Amanhã\" : \"Faltam \" + n + \" dias\"; },\n      loading: \"Abrindo o seu convite\",\n      invited: function (n) { return n + \", este convite é seu.\"; },\n      invitedSub: \"Diga se vem, para guardarmos o seu lugar.\",\n      yes: \"Vou\", no: \"Não consigo ir\",\n      confirmed: function (n) { return \"Até quinta, \" + n + \".\"; },\n      confirmedSub: \"Mostre este código à entrada.\",\n      cal: \"Adicionar ao calendário\", gcal: \"Google\", ics: \"Apple / Outlook\",\n      change: \"Afinal não consigo ir\",\n      declined: function (n) { return \"Anotado, \" + n + \".\"; },\n      declinedSub: \"Se os planos mudarem, este link funciona até o dia.\",\n      changeYes: \"Afinal, vou\",\n      requested: function (n) { return \"Pedido recebido, \" + n + \".\"; },\n      requestedSub: \"Está com a equipe. Esta página mostra o seu ingresso assim que for aprovado.\",\n      present: function (n) { return \"Entrada registrada, \" + n + \".\"; },\n      presentSub: \"Check-in feito na porta.\",\n      notFound: \"Não encontramos esse convite. Confira o link que recebeu, ou peça um abaixo.\",\n      reqTitle: \"Só com convite\",\n      reqSub: \"Ainda sem convite? Deixe os seus dados e a equipe responde.\",\n      fName: \"Nome\", fEmail: \"E-mail de trabalho\", fCompany: \"Empresa\", fRole: \"Cargo\",\n      send: \"Pedir um convite\", sending: \"Enviando\",\n      errName: \"Escreva o seu nome para sabermos quem está pedindo.\",\n      errNet: \"Não foi. Confira a conexão e tente de novo.\",\n      where: \"Onde\", map: \"Abrir no mapa\", hosted: \"Organização\",\n      calDesc: \"Post-Summit Hangover. Portas 17:00, keynote 18:00, fim 20:30. O seu convite: \"\n    }\n  };\n}\nfunction esc(s) { return String(s == null ? \"\" : s).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\"); }\nfunction firstName(n) { return String(n || \"\").trim().split(/\\s+/)[0] || \"\"; }\nfunction lsGet(k) { try { return window.localStorage.getItem(k); } catch (e) { return null; } }\nfunction lsSet(k, v) { try { window.localStorage.setItem(k, v); } catch (e) {} }\nfunction guessLang() {\n  var s = lsGet(\"psh_lang\"); if (s === \"en\" || s === \"pt\") return s;\n  try { return String(navigator.language || \"en\").toLowerCase().indexOf(\"pt\") === 0 ? \"pt\" : \"en\"; } catch (e) { return \"en\"; }\n}\nfunction LOGO(cls) {\n  return '<svg class=\"' + cls + '\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><g transform=\"translate(-678.859 -300.605)\" fill=\"currentColor\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\"/></g></svg>';\n}\nfunction apiUrl(d2) { return d2.param(\"api\", \"\") || \"https://demo.data2apis.com/rush/psh-api\"; }\nfunction siteUrl(d2) { return d2.param(\"site\", \"\") || (window.location.origin + window.location.pathname); }\nfunction call(d2, body) {\n  return fetch(apiUrl(d2), { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(body) })\n    .then(function (r) { return r.json(); })\n    .then(function (j) { return (j && j.data) || { error: \"network\" }; });\n}\nfunction qrSvg(lib, text) {\n  try {\n    var f = lib && (lib.default || lib);\n    if (typeof f !== \"function\") return \"\";\n    var q = f(0, \"M\"); q.addData(text); q.make();\n    var n = q.getModuleCount(), out = \"\";\n    for (var r = 0; r < n; r++) {\n      var row = \"\";\n      for (var c = 0; c < n; c++) { if (q.isDark(r, c)) row += '<rect x=\"' + c + '\" y=\"' + r + '\" width=\"1.03\" height=\"1.03\"/>'; }\n      out += '<g class=\"qrow\" style=\"animation-delay:' + (120 + r * 16) + 'ms\">' + row + \"</g>\";\n    }\n    return '<svg class=\"qr\" viewBox=\"0 0 ' + n + \" \" + n + '\" shape-rendering=\"crispEdges\" role=\"img\" aria-label=\"QR\">' + out + \"</svg>\";\n  } catch (e) { return \"\"; }\n}\nfunction daysTo() {\n  var now = new Date();\n  var a = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate());\n  var b = Date.UTC(2026, 10, 19);\n  return Math.round((b - a) / 86400000);\n}\nfunction bubbles(n) {\n  var out = \"\";\n  for (var i = 0; i < n; i++) {\n    var left = 24 + ((i * 37) % 52);\n    var size = 3 + ((i * 5) % 5);\n    var dur = 1600 + ((i * 271) % 1700);\n    var delay = -((i * 433) % 3000);\n    out += '<i class=\"bub\" style=\"left:' + left + \"%;width:\" + size + \"px;height:\" + size + \"px;animation-duration:\" + dur + \"ms;animation-delay:\" + delay + 'ms\"></i>';\n  }\n  return out;\n}\nfunction titleLine(txt, i) {\n  return '<span class=\"ln\" style=\"--i:' + i + '\"><span class=\"gh\" aria-hidden=\"true\"><i>' + txt + '</i></span><span class=\"m\">' + txt + \"</span></span>\";\n}\nfunction icsText(d2, t, code) {\n  var url = siteUrl(d2) + (code ? \"?c=\" + code : \"\");\n  var loc = d2.param(\"venue\", \"\") || \"Lisbon\";\n  var lines = [\"BEGIN:VCALENDAR\", \"VERSION:2.0\", \"PRODID:-//Data2//Post-Summit Hangover//EN\", \"CALSCALE:GREGORIAN\", \"METHOD:PUBLISH\", \"BEGIN:VEVENT\",\n    \"UID:post-summit-hangover-2026-\" + (code || \"guest\") + \"@data2.app\", \"DTSTAMP:20261101T000000Z\", \"DTSTART:20261119T170000Z\", \"DTEND:20261119T203000Z\",\n    \"SUMMARY:Post-Summit Hangover\", \"DESCRIPTION:\" + (t.calDesc + url).replace(/,/g, \"\\\\,\"), \"LOCATION:\" + String(loc).replace(/,/g, \"\\\\,\"), \"URL:\" + url,\n    \"BEGIN:VALARM\", \"TRIGGER:-PT2H\", \"ACTION:DISPLAY\", \"DESCRIPTION:Post-Summit Hangover\", \"END:VALARM\", \"END:VEVENT\", \"END:VCALENDAR\"];\n  return lines.join(\"\\r\\n\");\n}\nfunction gcalUrl(d2, t, code) {\n  var url = siteUrl(d2) + (code ? \"?c=\" + code : \"\");\n  return \"https://calendar.google.com/calendar/render?action=TEMPLATE&text=\" + encodeURIComponent(\"Post-Summit Hangover\") +\n    \"&dates=20261119T170000Z/20261119T203000Z&details=\" + encodeURIComponent(t.calDesc + url) + \"&location=\" + encodeURIComponent(d2.param(\"venue\", \"\") || \"Lisbon\");\n}\nfunction inviteBlock(d2, t, s) {\n  var g = s.guest, h = \"\";\n  if (s.loading) return '<section class=\"inv\"><p class=\"wait\"><span class=\"dots\"><i></i><i></i><i></i></span>' + t.loading + \"</p></section>\";\n  if (g && g.status === \"invited\") {\n    var n = esc(firstName(g.name));\n    return '<section class=\"inv\" data-key=\"invited\"><h2 class=\"h2\">' + t.invited(n) + '</h2><p class=\"p\">' + t.invitedSub + \"</p>\" +\n      '<div class=\"acts\"><button class=\"btn pri\" data-rsvp=\"confirmed\"' + (s.busy ? \" disabled\" : \"\") + \">\" + t.yes + '</button><button class=\"btn sec\" data-rsvp=\"declined\"' + (s.busy ? \" disabled\" : \"\") + \">\" + t.no + \"</button></div>\" +\n      (s.err ? '<p class=\"err\">' + t.errNet + \"</p>\" : \"\") + \"</section>\";\n  }\n  if (g && (g.status === \"confirmed\" || g.status === \"present\")) {\n    var n2 = esc(firstName(g.name));\n    var lib = d2.lib(\"qrcode-generator@1.4.4\");\n    var qr = qrSvg(lib, siteUrl(d2) + \"?c=\" + g.code);\n    var isIn = g.status === \"present\";\n    return '<section class=\"inv\" data-key=\"ticket\"><h2 class=\"h2\">' + (isIn ? t.present(n2) : t.confirmed(n2)) + '</h2><p class=\"p\">' + (isIn ? t.presentSub : t.confirmedSub) + \"</p>\" +\n      '<div class=\"ticket\"><div class=\"tq\">' + (qr || '<div class=\"qrph\"></div>') + '</div><div class=\"ti\"><div class=\"tn\">' + esc(g.name) + \"</div>\" +\n      (g.company ? '<div class=\"tc\">' + esc(g.company) + \"</div>\" : \"\") +\n      '<div class=\"tcode\">' + esc(g.code) + '</div><div class=\"tw\">19.11 · 17:00</div></div></div>' +\n      (isIn ? \"\" : '<div class=\"calrow\"><span class=\"lab\">' + t.cal + '</span><a class=\"btn sec sm\" href=\"' + gcalUrl(d2, t, g.code) + '\" target=\"_blank\" rel=\"noopener\">' + t.gcal + '</a><button class=\"btn sec sm\" data-ics>' + t.ics + \"</button></div>\" +\n        '<button class=\"lnk\" data-rsvp=\"declined\"' + (s.busy ? \" disabled\" : \"\") + \">\" + t.change + \"</button>\") +\n      (s.err ? '<p class=\"err\">' + t.errNet + \"</p>\" : \"\") + \"</section>\";\n  }\n  if (g && g.status === \"declined\") {\n    return '<section class=\"inv\" data-key=\"declined\"><h2 class=\"h2\">' + t.declined(esc(firstName(g.name))) + '</h2><p class=\"p\">' + t.declinedSub + \"</p>\" +\n      '<div class=\"acts\"><button class=\"btn sec\" data-rsvp=\"confirmed\"' + (s.busy ? \" disabled\" : \"\") + \">\" + t.changeYes + \"</button></div>\" +\n      (s.err ? '<p class=\"err\">' + t.errNet + \"</p>\" : \"\") + \"</section>\";\n  }\n  if (g && g.status === \"requested\") {\n    return '<section class=\"inv\" data-key=\"requested\"><h2 class=\"h2\">' + t.requested(esc(firstName(g.name))) + '</h2><p class=\"p\">' + t.requestedSub + \"</p></section>\";\n  }\n  h = '<section class=\"inv\" data-key=\"form\">' + (s.notFound ? '<p class=\"note\">' + t.notFound + \"</p>\" : \"\") +\n    '<h2 class=\"h2\">' + t.reqTitle + '</h2><p class=\"p\">' + t.reqSub + \"</p>\" +\n    '<div class=\"form\">' +\n    '<label class=\"f\"><span>' + t.fName + '</span><input name=\"name\" autocomplete=\"name\" maxlength=\"80\"/></label>' +\n    '<label class=\"f\"><span>' + t.fEmail + '</span><input name=\"email\" type=\"email\" inputmode=\"email\" autocomplete=\"email\" maxlength=\"120\"/></label>' +\n    '<div class=\"two\"><label class=\"f\"><span>' + t.fCompany + '</span><input name=\"company\" autocomplete=\"organization\" maxlength=\"120\"/></label>' +\n    '<label class=\"f\"><span>' + t.fRole + '</span><input name=\"role\" autocomplete=\"organization-title\" maxlength=\"120\"/></label></div>' +\n    (s.err === \"name\" ? '<p class=\"err\">' + t.errName + \"</p>\" : s.err ? '<p class=\"err\">' + t.errNet + \"</p>\" : \"\") +\n    '<button class=\"btn pri\" data-req' + (s.busy ? \" disabled\" : \"\") + \">\" + (s.busy ? t.sending : t.send) + \"</button></div></section>\";\n  return h;\n}\nfunction GLASS() {\n  var H = 1, RT = 0.40, RB = 0.29, P = 0.36, SP = Math.sin(P), CP = Math.cos(P), HS = 0.62, TH = 0.034, TA = 0.105, LIFE = 15;\n  var S = { roll: 0, rollV: 0, rollT: 0, th: 0, thV: 0, rip: 0, t: 0, tabs: [], bubs: [], drops: [], n: 0 };\n  function rnd(a, b) { return a + Math.random() * (b - a); }\n  function rad(y) { return RB + (RT - RB) * Math.max(0, Math.min(1, y / H)); }\n  function surfY(x, z) {\n    var ph = Math.atan2(z, x);\n    var y = HS + S.th * x + S.rip * (0.012 * Math.sin(3 * ph + 9 * S.t) + 0.008 * Math.sin(5 * ph - 13 * S.t));\n    return Math.max(0.06, Math.min(H - 0.03, y));\n  }\n  function drop() {\n    if (S.tabs.length >= 6) return;\n    S.tabs.push({ id: ++S.n, st: \"air\", x: rnd(-0.1, 0.1), y: 1.75, z: rnd(-0.08, 0.08), vx: 0, vy: -0.4, vz: 0, ax: rnd(-1.2, 1.2), az: rnd(-1.2, 1.2), wx: rnd(-7, 7), wz: rnd(-7, 7), life: LIFE, acc: 0 });\n  }\n  function bubble(x, y, z, big) {\n    if (S.bubs.length > 300) return;\n    var r = big ? rnd(0.012, 0.026) : rnd(0.005, 0.014);\n    S.bubs.push({ x: x, y: y, z: z, r: r, vy: 0.05, vt: 0.28 + r * 22 + rnd(0, 0.12), f: rnd(4, 9), p: rnd(0, 6.3), w: rnd(0.02, 0.07), fl: 0 });\n  }\n  function spray(x, y, z, n, pow) {\n    for (var i = 0; i < n; i++) S.drops.push({ x: x + rnd(-0.04, 0.04), y: y, z: z + rnd(-0.04, 0.04), vx: rnd(-0.45, 0.45) * pow, vy: rnd(0.7, 1.7) * pow, vz: rnd(-0.3, 0.3) * pow, r: rnd(0.006, 0.014) });\n  }\n  function step(dt) {\n    S.t += dt;\n    S.rollV += (150 * (S.rollT - S.roll) - 17 * S.rollV) * dt; S.roll += S.rollV * dt;\n    var tgt = Math.tan(-S.roll), mx = (H - HS - 0.06) / RT;\n    S.thV += (44 * (tgt - S.th) - 2.3 * S.thV) * dt; S.th += S.thV * dt;\n    if (S.th > mx) { S.th = mx; S.thV *= -0.35; } else if (S.th < -mx) { S.th = -mx; S.thV *= -0.35; }\n    S.rip *= Math.exp(-1.5 * dt);\n    var i, tb, b, d, rr, lim, k, order = 0;\n    for (i = 0; i < S.tabs.length; i++) {\n      tb = S.tabs[i];\n      if (tb.st === \"air\") {\n        tb.vy -= 3.6 * dt; tb.y += tb.vy * dt; tb.ax += tb.wx * dt; tb.az += tb.wz * dt;\n        if (tb.y < surfY(tb.x, tb.z)) {\n          tb.st = \"sink\"; S.rip = Math.min(1.8, S.rip + 1.1); S.thV += (tb.x >= 0 ? -1 : 1) * rnd(0.5, 1.1);\n          spray(tb.x, surfY(tb.x, tb.z), tb.z, 14, 1); tb.vy *= 0.3;\n          for (k = 0; k < 14; k++) bubble(tb.x + rnd(-0.08, 0.08), tb.y - rnd(0, 0.08), tb.z + rnd(-0.08, 0.08), true);\n        }\n      } else {\n        var floor = TH / 2 + 0.014 + order * TH * 1.12; order++;\n        k = tb.life / LIFE;\n        if (tb.st === \"sink\") {\n          tb.vy += (-1.0 - 3.4 * tb.vy) * dt; tb.y += tb.vy * dt;\n          tb.wx *= Math.exp(-2.2 * dt); tb.wz *= Math.exp(-2.2 * dt);\n          tb.ax += tb.wx * dt; tb.az += tb.wz * dt;\n          tb.ax += (Math.round(tb.ax / Math.PI) * Math.PI - tb.ax) * 1.6 * dt; tb.az += (Math.round(tb.az / Math.PI) * Math.PI - tb.az) * 1.6 * dt;\n          tb.x += Math.sin(S.t * 3 + tb.id) * 0.05 * dt;\n          if (tb.y <= floor) { tb.y = floor; tb.st = \"rest\"; }\n        } else {\n          tb.y += (floor - tb.y) * Math.min(1, 6 * dt);\n          tb.ax += (Math.round(tb.ax / Math.PI) * Math.PI - tb.ax) * Math.min(1, 7 * dt); tb.az += (Math.round(tb.az / Math.PI) * Math.PI - tb.az) * Math.min(1, 7 * dt);\n          tb.life -= dt;\n        }\n        rr = Math.sqrt(tb.x * tb.x + tb.z * tb.z); lim = rad(tb.y) - TA - 0.02;\n        if (rr > lim && rr > 0) { tb.x *= lim / rr; tb.z *= lim / rr; }\n        tb.acc += (tb.st === \"rest\" ? 62 : 34) * Math.max(0.15, k) * dt;\n        while (tb.acc > 1) { tb.acc -= 1; var an = rnd(0, 6.283), ra = TA * Math.sqrt(Math.random()) * Math.min(1, k * 4); bubble(tb.x + Math.cos(an) * ra, tb.y + TH / 2, tb.z + Math.sin(an) * ra, Math.random() < 0.12); }\n      }\n    }\n    S.tabs = S.tabs.filter(function (t) { return t.life > 0; });\n    if (S.bubs.length < 10 && Math.random() < dt * 2.2) { var a2 = rnd(0, 6.283), r2 = rnd(0, RB - 0.05); bubble(Math.cos(a2) * r2, 0.03, Math.sin(a2) * r2, false); }\n    for (i = S.bubs.length - 1; i >= 0; i--) {\n      b = S.bubs[i];\n      var sy = surfY(b.x, b.z) - b.r * 0.6;\n      if (b.fl > 0) {\n        b.y = sy; b.fl -= dt; b.x *= 1 + 0.35 * dt; b.z *= 1 + 0.35 * dt;\n        if (b.fl <= 0) { if (Math.random() < 0.22) spray(b.x, sy, b.z, 1, 0.45); S.bubs.splice(i, 1); continue; }\n      } else {\n        b.vy += (b.vt - b.vy) * 4 * dt; b.y += b.vy * dt;\n        b.x += Math.sin(S.t * b.f + b.p) * b.w * dt; b.z += Math.cos(S.t * b.f * 0.8 + b.p) * b.w * dt;\n        if (b.y >= sy) { b.y = sy; b.fl = rnd(0.2, 0.9); }\n      }\n      rr = Math.sqrt(b.x * b.x + b.z * b.z); lim = rad(b.y) - 0.025 - b.r;\n      if (rr > lim && rr > 0) { b.x *= lim / rr; b.z *= lim / rr; }\n    }\n    for (i = S.drops.length - 1; i >= 0; i--) {\n      d = S.drops[i]; d.vy -= 3.6 * dt; d.x += d.vx * dt; d.y += d.vy * dt; d.z += d.vz * dt;\n      if ((d.vy < 0 && d.y < surfY(d.x, d.z) && Math.sqrt(d.x * d.x + d.z * d.z) < rad(d.y)) || d.y < -0.2) { S.rip = Math.min(1.8, S.rip + 0.04); S.drops.splice(i, 1); }\n    }\n  }\n  function hull(pts) {\n    pts = pts.slice().sort(function (a, b) { return a[0] - b[0] || a[1] - b[1]; });\n    var cr = function (o, a, b) { return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]); };\n    var lo = [], up = [], i;\n    for (i = 0; i < pts.length; i++) { while (lo.length >= 2 && cr(lo[lo.length - 2], lo[lo.length - 1], pts[i]) <= 0) lo.pop(); lo.push(pts[i]); }\n    for (i = pts.length - 1; i >= 0; i--) { while (up.length >= 2 && cr(up[up.length - 2], up[up.length - 1], pts[i]) <= 0) up.pop(); up.push(pts[i]); }\n    lo.pop(); up.pop(); return lo.concat(up);\n  }\n  function poly(ctx, pts) { ctx.beginPath(); for (var i = 0; i < pts.length; i++) { if (i) ctx.lineTo(pts[i][0], pts[i][1]); else ctx.moveTo(pts[i][0], pts[i][1]); } ctx.closePath(); }\n  function draw(ctx, w, h) {\n    var s = Math.min(w / 1.2, h / 2.0), cx = w / 2, by = h - 0.2 * s, INK = \"#111114\", i, N = 56;\n    var pr = function (x, y, z) { return [x * s, (-y * CP + z * SP) * s]; };\n    ctx.lineJoin = \"round\"; ctx.lineCap = \"round\";\n    ctx.fillStyle = \"rgba(17,17,20,.11)\"; ctx.beginPath(); ctx.ellipse(cx + 0.1 * s, by + 0.035 * s, RB * 1.42 * s, RB * SP * 1.3 * s, 0, 0, 6.2832); ctx.fill();\n    ctx.save(); ctx.translate(cx, by); ctx.rotate(S.roll);\n    var topY = -H * CP * s;\n    ctx.beginPath(); ctx.ellipse(0, topY, RT * s, RT * SP * s, 0, Math.PI, 6.2832); ctx.lineTo(RB * s, 0); ctx.ellipse(0, 0, RB * s, RB * SP * s, 0, 0, Math.PI); ctx.closePath();\n    ctx.fillStyle = \"rgba(255,255,255,.34)\"; ctx.fill();\n    ctx.strokeStyle = \"rgba(17,17,20,.38)\"; ctx.lineWidth = 1.3;\n    ctx.beginPath(); ctx.ellipse(0, topY, RT * s, RT * SP * s, 0, Math.PI, 6.2832); ctx.stroke();\n    ctx.strokeStyle = \"rgba(17,17,20,.16)\"; ctx.beginPath(); ctx.ellipse(0, 0, RB * s, RB * SP * s, 0, Math.PI, 6.2832); ctx.stroke();\n    var sp = [];\n    for (i = 0; i < N; i++) {\n      var ph = 6.2832 * i / N, r = rad(HS) - 0.014, x = r * Math.cos(ph), z = r * Math.sin(ph), y = surfY(x, z);\n      r = rad(y) - 0.014; x = r * Math.cos(ph); z = r * Math.sin(ph); y = surfY(x, z);\n      sp.push(pr(x, y, z));\n    }\n    ctx.beginPath(); ctx.moveTo(sp[N / 2][0], sp[N / 2][1]);\n    for (i = N / 2 + 1; i <= N; i++) ctx.lineTo(sp[i % N][0], sp[i % N][1]);\n    ctx.lineTo((RB - 0.014) * s, -0.012 * s); ctx.ellipse(0, -0.012 * s, (RB - 0.014) * s, (RB - 0.014) * SP * s, 0, 0, Math.PI); ctx.closePath();\n    var g = ctx.createLinearGradient(0, -HS * CP * s, 0, RB * SP * s);\n    g.addColorStop(0, \"rgba(72,102,250,.20)\"); g.addColorStop(1, \"rgba(72,102,250,.46)\");\n    ctx.fillStyle = g; ctx.fill();\n    ctx.save(); ctx.clip();\n    ctx.fillStyle = \"rgba(255,255,255,.20)\";\n    poly(ctx, [[-0.70 * RT * s, topY], [-0.50 * RT * s, topY], [-0.50 * RB * s, RB * s], [-0.70 * RB * s, RB * s]]); ctx.fill();\n    ctx.fillStyle = \"rgba(72,102,250,.16)\";\n    poly(ctx, [[0.52 * RT * s, topY], [0.98 * RT * s, topY], [0.98 * RB * s, RB * s], [0.52 * RB * s, RB * s]]); ctx.fill();\n    ctx.restore();\n    poly(ctx, sp); ctx.fillStyle = \"rgba(255,255,255,.30)\"; ctx.fill();\n    ctx.strokeStyle = \"rgba(72,102,250,.55)\"; ctx.lineWidth = 1.2; ctx.beginPath();\n    for (i = N / 2; i <= N; i++) { var q = sp[i % N]; if (i === N / 2) ctx.moveTo(q[0], q[1]); else ctx.lineTo(q[0], q[1]); } ctx.stroke();\n    var objs = [];\n    for (i = 0; i < S.bubs.length; i++) objs.push({ z: S.bubs[i].z, b: S.bubs[i] });\n    for (i = 0; i < S.tabs.length; i++) objs.push({ z: S.tabs[i].z, t: S.tabs[i] });\n    objs.sort(function (a, b) { return a.z - b.z; });\n    for (i = 0; i < objs.length; i++) {\n      var o = objs[i];\n      if (o.b) {\n        var b = o.b, c = pr(b.x, b.y, b.z), dep = (b.z + RT) / (2 * RT), br = Math.max(0.8, b.r * s * (0.8 + 0.45 * dep));\n        ctx.beginPath(); ctx.arc(c[0], c[1], br, 0, 6.2832);\n        ctx.fillStyle = \"rgba(255,255,255,\" + (0.25 + 0.4 * dep).toFixed(2) + \")\"; ctx.fill();\n        ctx.strokeStyle = \"rgba(72,102,250,\" + (0.35 + 0.6 * dep).toFixed(2) + \")\"; ctx.lineWidth = br > 3 ? 1.25 : 1; ctx.stroke();\n        if (br > 3.2) { ctx.beginPath(); ctx.arc(c[0] - br * 0.32, c[1] - br * 0.34, br * 0.2, 0, 6.2832); ctx.fillStyle = \"rgba(255,255,255,.95)\"; ctx.fill(); }\n      } else {\n        var t = o.t, k = Math.min(1, (t.life / LIFE) * 3.2), a = TA * (0.25 + 0.75 * k), th = TH * (0.4 + 0.6 * k);\n        var cax = Math.cos(t.ax), sax = Math.sin(t.ax), caz = Math.cos(t.az), saz = Math.sin(t.az);\n        var rot = function (v) { var y1 = v[1] * cax - v[2] * sax, z1 = v[1] * sax + v[2] * cax; return [v[0] * caz - y1 * saz, v[0] * saz + y1 * caz, z1]; };\n        var nn = rot([0, 1, 0]), uu = rot([1, 0, 0]), vv = rot([0, 0, 1]);\n        var facing = nn[1] * SP + nn[2] * CP, sg = facing >= 0 ? 1 : -1, near = [], far = [], M = 26, j;\n        for (j = 0; j < M; j++) {\n          var an = 6.2832 * j / M, ca = Math.cos(an) * a, sa = Math.sin(an) * a;\n          var px = t.x + uu[0] * ca + vv[0] * sa, py = t.y + uu[1] * ca + vv[1] * sa, pz = t.z + uu[2] * ca + vv[2] * sa;\n          near.push(pr(px + nn[0] * th / 2 * sg, py + nn[1] * th / 2 * sg, pz + nn[2] * th / 2 * sg));\n          far.push(pr(px - nn[0] * th / 2 * sg, py - nn[1] * th / 2 * sg, pz - nn[2] * th / 2 * sg));\n        }\n        var wet = t.st !== \"air\";\n        poly(ctx, hull(near.concat(far))); ctx.fillStyle = wet ? \"#DDE2F7\" : \"#E9E6DC\"; ctx.fill();\n        ctx.strokeStyle = INK; ctx.lineWidth = 1.7; ctx.stroke();\n        poly(ctx, near); ctx.fillStyle = wet ? \"#F4F6FF\" : \"#FFFFFF\"; ctx.fill(); ctx.lineWidth = 1.3; ctx.stroke();\n        var e1 = pr(t.x + uu[0] * a * 0.72 + nn[0] * th / 2 * sg, t.y + uu[1] * a * 0.72 + nn[1] * th / 2 * sg, t.z + uu[2] * a * 0.72 + nn[2] * th / 2 * sg);\n        var e2 = pr(t.x - uu[0] * a * 0.72 + nn[0] * th / 2 * sg, t.y - uu[1] * a * 0.72 + nn[1] * th / 2 * sg, t.z - uu[2] * a * 0.72 + nn[2] * th / 2 * sg);\n        ctx.beginPath(); ctx.moveTo(e1[0], e1[1]); ctx.lineTo(e2[0], e2[1]); ctx.lineWidth = 1.1; ctx.strokeStyle = \"rgba(17,17,20,.55)\"; ctx.stroke();\n      }\n    }\n    ctx.strokeStyle = \"rgba(72,102,250,.95)\"; ctx.lineWidth = 1.9; ctx.beginPath();\n    for (i = 0; i <= N / 2; i++) { if (i === 0) ctx.moveTo(sp[i][0], sp[i][1]); else ctx.lineTo(sp[i][0], sp[i][1]); } ctx.stroke();\n    ctx.fillStyle = \"rgba(255,255,255,.78)\";\n    poly(ctx, [[-0.86 * rad(0.9) * s, -0.9 * CP * s], [-0.74 * rad(0.9) * s, -0.9 * CP * s + 0.03 * s], [-0.74 * rad(0.14) * s, -0.14 * CP * s + 0.03 * s], [-0.86 * rad(0.14) * s, -0.14 * CP * s]]); ctx.fill();\n    ctx.fillStyle = \"rgba(255,255,255,.5)\";\n    poly(ctx, [[0.80 * rad(0.84) * s, -0.84 * CP * s + 0.03 * s], [0.85 * rad(0.84) * s, -0.84 * CP * s + 0.02 * s], [0.85 * rad(0.4) * s, -0.4 * CP * s + 0.02 * s], [0.80 * rad(0.4) * s, -0.4 * CP * s + 0.03 * s]]); ctx.fill();\n    var bt = 0.05 * s, rb2 = RB * 0.965;\n    ctx.beginPath(); ctx.moveTo(-RB * s, 0); ctx.lineTo(-rb2 * s, bt); ctx.ellipse(0, bt, rb2 * s, rb2 * SP * s, 0, Math.PI, 0, true); ctx.lineTo(RB * s, 0); ctx.ellipse(0, 0, RB * s, RB * SP * s, 0, 0, Math.PI, false); ctx.closePath();\n    ctx.fillStyle = \"rgba(255,255,255,.62)\"; ctx.fill();\n    ctx.strokeStyle = INK; ctx.lineWidth = 2.3;\n    ctx.beginPath(); ctx.moveTo(-RT * s, topY); ctx.lineTo(-RB * s, 0); ctx.lineTo(-rb2 * s, bt); ctx.ellipse(0, bt, rb2 * s, rb2 * SP * s, 0, Math.PI, 0, true); ctx.lineTo(RB * s, 0); ctx.lineTo(RT * s, topY); ctx.stroke();\n    ctx.lineWidth = 1.2; ctx.strokeStyle = \"rgba(17,17,20,.5)\"; ctx.beginPath(); ctx.ellipse(0, 0, RB * s, RB * SP * s, 0, 0, Math.PI); ctx.stroke();\n    ctx.lineWidth = 2.3; ctx.strokeStyle = INK; ctx.beginPath(); ctx.ellipse(0, topY, RT * s, RT * SP * s, 0, 0, Math.PI); ctx.stroke();\n    ctx.lineWidth = 1; ctx.strokeStyle = \"rgba(17,17,20,.28)\"; ctx.beginPath(); ctx.ellipse(0, topY + 0.012 * s, (RT - 0.03) * s, (RT - 0.03) * SP * s, 0, 0, 6.2832); ctx.stroke();\n    ctx.fillStyle = \"rgba(72,102,250,.9)\";\n    for (i = 0; i < S.drops.length; i++) { var d = S.drops[i], dc = pr(d.x, d.y, d.z); ctx.beginPath(); ctx.arc(dc[0], dc[1], Math.max(1, d.r * s), 0, 6.2832); ctx.fill(); }\n    ctx.restore();\n  }\n  return { S: S, step: step, draw: draw, drop: drop };\n}\nexport default {\n  css: `\n:host{display:block;height:100%}\n*{box-sizing:border-box;margin:0;padding:0}\n.app{--paper:#F3F0E8;--ink:#111114;--mid:#5B5A57;--line:rgba(17,17,20,.16);--blue:#4866FA;--card:#FBFAF6;\n  height:100%;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;background:var(--paper);color:var(--ink);\n  font-family:\"Archivo\",\"Helvetica Neue\",Arial,sans-serif;font-size:17px;line-height:1.45;font-variation-settings:\"wdth\" 100;-webkit-font-smoothing:antialiased}\n.wrap{max-width:1120px;margin:0 auto;padding:0 16px 56px}\n.top{display:flex;align-items:center;justify-content:space-between;padding:18px 0 10px}\n.logo{height:22px;width:auto;display:block;color:var(--ink)}\n.lang{display:flex;border:1.5px solid var(--ink);border-radius:3px;overflow:hidden}\n.lang button{appearance:none;border:0;background:transparent;color:var(--ink);font:inherit;font-size:13px;font-weight:650;letter-spacing:.04em;padding:7px 11px;cursor:pointer}\n.lang button.on{background:var(--ink);color:var(--paper)}\n.kick{font-size:14px;font-weight:600;letter-spacing:.01em;margin-top:26px;padding-top:12px;border-top:1.5px solid var(--ink);animation:up .7s .05s both}\n.title{margin:14px 0 0;font-weight:800;font-variation-settings:\"wdth\" 62;text-transform:uppercase;font-size:min(22.5vw,208px);line-height:.84;letter-spacing:-.012em}\n.ln{display:block;position:relative;white-space:nowrap}\n.m{display:block;position:relative;animation:up .9s calc(var(--i)*90ms + 80ms) cubic-bezier(.2,.7,.1,1) both}\n.gh{position:absolute;left:0;top:0;color:var(--blue);transform:translate3d(calc(var(--dv,0)*1px),calc(var(--dv,0)*-.4px),0);will-change:transform}\n.gh i{display:block;font-style:normal;animation:focus 2.1s calc(var(--i)*90ms + 80ms) cubic-bezier(.3,.6,.1,1) both}\n@keyframes focus{0%{transform:translate3d(.11em,-.035em,0);opacity:0}18%{opacity:1}100%{transform:translate3d(0,0,0);opacity:1}}\n@keyframes up{from{transform:translate3d(0,18px,0);opacity:0}to{transform:none;opacity:1}}\n.intro{margin-top:22px}\n.hero{position:relative}\n.kick{padding-right:128px}\n.gl{position:absolute;right:-12px;top:-86px;width:160px;height:240px;z-index:2;animation:up .8s .45s both}\n.gl canvas{display:block;width:100%;height:100%;touch-action:pan-y;cursor:grab;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}\n.sub{font-size:22px;line-height:1.16;font-weight:600;letter-spacing:-.01em;max-width:21ch;animation:up .8s .5s both;text-wrap:balance}\n.lede{margin-top:14px;color:var(--mid);font-size:16px;max-width:36ch;animation:up .8s .62s both}\n.lede .il{height:.82em;width:auto;display:inline-block;vertical-align:-.04em;color:var(--ink);margin:0 .12em}\n.glassw{justify-self:end;text-align:center;animation:up .8s .7s both}\n.glass{appearance:none;border:0;background:transparent;display:block;position:relative;width:104px;height:147px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .18s}\n.glass:active{transform:scale(.97) rotate(-1.5deg)}\n.glass svg{position:absolute;inset:0;width:100%;height:100%;display:block}\n.bubs{position:absolute;left:0;right:0;bottom:8%;top:30%;overflow:hidden;pointer-events:none}\n.bub{position:absolute;bottom:4px;border:1.3px solid var(--blue);border-radius:50%;opacity:0;animation:rise linear infinite}\n@keyframes rise{0%{transform:translate3d(0,0,0);opacity:0}12%{opacity:1}80%{opacity:.9}100%{transform:translate3d(3px,-84px,0);opacity:0}}\n.tab{position:absolute;left:50%;bottom:7.5%;width:34px;height:9px;margin-left:-17px;background:#fff;border:1.6px solid var(--ink);border-radius:5px;animation:drop 1s cubic-bezier(.5,0,.9,.6) both}\n.tab.t0{animation-delay:1.2s}\n@keyframes drop{0%{transform:translate3d(0,-150px,0) rotate(-24deg);opacity:0}10%{opacity:1}72%{transform:translate3d(0,0,0) rotate(4deg)}86%{transform:translate3d(0,-5px,0) rotate(-2deg)}100%{transform:none;opacity:1}}\n.tap{font-size:11.5px;font-weight:600;color:var(--mid);margin-top:6px;letter-spacing:.02em}\n.body{margin-top:44px;display:grid;gap:44px}\n.when{animation:up .8s .8s both}\n.lab{font-size:12.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--mid)}\n.cd{display:flex;justify-content:space-between;align-items:baseline}\n.cd b{font-size:14px;font-weight:650}\n.rule{position:relative;height:74px;margin-top:16px}\n.rule:before{content:\"\";position:absolute;left:0;right:0;top:8px;height:1.5px;background:var(--ink);transform-origin:left;animation:draw 1.1s 1s cubic-bezier(.3,.6,.1,1) both}\n@keyframes draw{from{transform:scaleX(0)}to{transform:scaleX(1)}}\n.tick{position:absolute;top:0}\n.tick:before{content:\"\";display:block;width:1.5px;height:17px;background:var(--ink)}\n.tick.k:before{width:9px;height:17px;background:var(--blue);margin-left:-4px}\n.tick .tm{font-size:25px;font-weight:750;font-variation-settings:\"wdth\" 75;font-variant-numeric:tabular-nums;line-height:1;margin-top:9px;letter-spacing:-.01em}\n.tick .tl{font-size:13px;color:var(--mid);font-weight:550;margin-top:3px}\n.tick.e{right:0;text-align:right}.tick.e:before{margin-left:auto}\n.where{border-top:1.5px solid var(--line);padding-top:16px;margin-top:6px}\n.where .v{font-size:18px;font-weight:600;margin-top:6px}\n.where a{color:var(--ink);font-size:14px;font-weight:600;text-underline-offset:3px}\n.inv{border-top:1.5px solid var(--ink);padding-top:18px;animation:up .7s .15s both}\n.h2{font-size:30px;line-height:1.04;font-weight:750;font-variation-settings:\"wdth\" 80;letter-spacing:-.012em;text-wrap:balance}\n.p{color:var(--mid);margin-top:8px;max-width:40ch}\n.note{background:var(--ink);color:var(--paper);padding:12px 14px;border-radius:3px;font-size:15px;margin-bottom:22px}\n.acts{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}\n.btn{appearance:none;font:inherit;font-weight:650;font-size:16px;min-height:52px;padding:0 22px;border-radius:4px;border:1.5px solid var(--ink);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--ink);background:transparent;transition:transform .12s,background .15s,color .15s;-webkit-tap-highlight-color:transparent}\n.btn:active{transform:scale(.97)}\n.btn.pri{background:var(--blue);border-color:var(--blue);color:#fff;flex:1 1 180px}\n.btn.sec:hover{background:var(--ink);color:var(--paper)}\n.btn.sm{min-height:42px;font-size:14.5px;padding:0 15px}\n.btn[disabled]{opacity:.55;pointer-events:none}\n.btn:focus-visible,.lnk:focus-visible,.lang button:focus-visible,.glass:focus-visible,input:focus-visible{outline:2.5px solid var(--blue);outline-offset:2px}\n.lnk{appearance:none;border:0;background:none;font:inherit;font-size:14px;color:var(--mid);text-decoration:underline;text-underline-offset:3px;cursor:pointer;margin-top:18px;padding:6px 0}\n.err{color:#B3261E;font-size:14.5px;font-weight:550;margin-top:12px}\n.form{display:grid;gap:16px;margin-top:22px;max-width:520px}\n.two{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.f span{display:block;font-size:12.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--mid)}\n.f input{width:100%;font:inherit;font-size:18px;font-weight:550;color:var(--ink);background:transparent;border:0;border-bottom:1.5px solid var(--ink);border-radius:0;padding:8px 0 9px;outline-offset:4px}\n.ticket{display:grid;grid-template-columns:132px 1fr;margin-top:22px;background:var(--card);border:1.5px solid var(--ink);border-radius:5px;max-width:460px;animation:tick .8s .1s cubic-bezier(.2,.8,.2,1) both;transform-origin:20% 0}\n@keyframes tick{from{transform:translate3d(0,26px,0) rotate(-2.4deg);opacity:0}to{transform:none;opacity:1}}\n.tq{padding:14px;border-right:1.5px dashed var(--ink)}\n.qr{display:block;width:100%;height:auto;fill:var(--ink)}\n.qrow{animation:qin .35s both}\n@keyframes qin{from{opacity:0;transform:translate3d(-2px,0,0)}to{opacity:1;transform:none}}\n.qrph{aspect-ratio:1;background:repeating-linear-gradient(90deg,var(--line) 0 4px,transparent 4px 8px)}\n.ti{padding:14px 16px;display:flex;flex-direction:column;min-width:0}\n.tn{font-size:20px;font-weight:750;line-height:1.08;font-variation-settings:\"wdth\" 82;overflow-wrap:anywhere}\n.tc{font-size:14px;color:var(--mid);margin-top:3px}\n.tcode{margin-top:auto;padding-top:12px;font-size:23px;font-weight:800;letter-spacing:.14em;font-variant-numeric:tabular-nums;font-variation-settings:\"wdth\" 78}\n.tw{font-size:13px;font-weight:600;color:var(--mid);font-variant-numeric:tabular-nums}\n.calrow{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:20px}\n.calrow .lab{flex:1 0 100%}\n.wait{display:flex;align-items:center;gap:12px;font-weight:600}\n.dots{display:inline-flex;gap:5px}.dots i{width:7px;height:7px;border:1.4px solid var(--blue);border-radius:50%;animation:dt 1s infinite}\n.dots i:nth-child(2){animation-delay:.15s}.dots i:nth-child(3){animation-delay:.3s}\n@keyframes dt{0%,100%{transform:none}40%{transform:translate3d(0,-7px,0)}}\n.foot{margin-top:56px;padding-top:16px;border-top:1.5px solid var(--line);display:flex;align-items:center;gap:12px;color:var(--mid);font-size:13px;font-weight:600}\n.foot .logo{height:17px}\n@media (min-width:880px){\n  .wrap{padding:0 40px 80px}\n  .logo{height:26px}\n  .title{font-size:min(15.6vw,208px)}\n  .intro{grid-template-columns:1fr 170px;margin-top:34px}\n  .sub{font-size:34px}.lede{font-size:18px}\n  .glass{width:150px;height:212px}\n  .tab{width:48px;height:12px;margin-left:-24px}\n  @keyframes rise{0%{transform:translate3d(0,0,0);opacity:0}12%{opacity:1}80%{opacity:.9}100%{transform:translate3d(4px,-124px,0);opacity:0}}\n  .body{grid-template-columns:5fr 6fr;gap:72px;margin-top:72px;align-items:start}\n  .h2{font-size:40px}\n  .kick{padding-right:0}\n  .gl{top:auto;bottom:-14px;right:0;width:min(27vw,330px);height:min(40vw,490px)}\n}\n@media (max-width:359px){.two{grid-template-columns:1fr}.ticket{grid-template-columns:108px 1fr}}\n@media (prefers-reduced-motion:reduce){.app *,.app *:before{animation-duration:.01ms!important;animation-delay:0ms!important;animation-iteration-count:1!important}.gh{transform:none}.bub{opacity:.7}}\n`,\n  render: function (d2) {\n    var s = d2.state;\n    var lang = s.lang || guessLang();\n    var t = T()[lang];\n    var drops = s.drops || 0;\n    var d = daysTo();\n    var venue = d2.param(\"venue\", \"\");\n    var maps = d2.param(\"mapsUrl\", \"\");\n\n    var h = '<div class=\"app\" data-app><div class=\"wrap\">' +\n      '<header class=\"top\">' + LOGO(\"logo\") + '<div class=\"lang\" role=\"group\" aria-label=\"Language\"><button data-lang=\"en\" class=\"' + (lang === \"en\" ? \"on\" : \"\") + '\">EN</button><button data-lang=\"pt\" class=\"' + (lang === \"pt\" ? \"on\" : \"\") + '\">PT</button></div></header>' +\n      '<p class=\"kick\">' + t.kick + \"</p>\" +\n      '<div class=\"hero\"><h1 class=\"title\" aria-label=\"Post-Summit Hangover\">' + titleLine(\"Post-\", 0) + titleLine(\"Summit\", 1) + titleLine(\"Hangover\", 2) + '</h1><div class=\"gl\" data-d2-static><canvas data-glass role=\"img\" aria-label=\"' + t.tap + '\"></canvas></div></div>' +\n      '<div class=\"intro\"><div><p class=\"sub\">' + t.sub + '</p><p class=\"lede\">' + t.lede1 + \" \" + LOGO(\"il\") + \". \" + t.lede2 + \"</p></div>\" +\n      \"</div>\" +\n      '<div class=\"body\"><div><section class=\"when\"><div class=\"cd\"><span class=\"lab\">19.11.2026</span>' + (d >= 0 ? \"<b>\" + t.inDays(d) + \"</b>\" : \"\") + \"</div>\" +\n      '<div class=\"rule\"><div class=\"tick\" style=\"left:0\"><div class=\"tm\">17:00</div><div class=\"tl\">' + t.doors + '</div></div><div class=\"tick k\" style=\"left:28.6%\"><div class=\"tm\">18:00</div><div class=\"tl\">' + t.keynote + '</div></div><div class=\"tick e\"><div class=\"tm\">20:30</div><div class=\"tl\">' + t.close + \"</div></div></div></section>\" +\n      (venue ? '<section class=\"where\"><span class=\"lab\">' + t.where + '</span><div class=\"v\">' + esc(venue) + \"</div>\" + (maps ? '<a href=\"' + esc(maps) + '\" target=\"_blank\" rel=\"noopener\">' + t.map + \"</a>\" : \"\") + \"</section>\" : \"\") +\n      \"</div>\" + inviteBlock(d2, t, s) + \"</div>\" +\n      '<footer class=\"foot\"><span>' + t.hosted + \"</span>\" + LOGO(\"logo\") + \"</footer>\" +\n      \"</div></div>\";\n    return h;\n  },\n  mounted: function (d2, root) {\n    try {\n      if (!document.getElementById(\"psh-fonts\")) {\n        var l = document.createElement(\"link\"); l.id = \"psh-fonts\"; l.rel = \"stylesheet\";\n        l.href = \"https://fonts.googleapis.com/css2?family=Archivo:wdth,wght@62..125,400..900&display=swap\";\n        document.head.appendChild(l);\n      }\n    } catch (e) {}\n    var code = \"\";\n    try { code = new URLSearchParams(window.location.search).get(\"c\") || \"\"; } catch (e) {}\n    if (!code) code = lsGet(\"psh_code\") || \"\";\n    code = String(code).trim().toUpperCase();\n    if (code) {\n      d2.setState({ loading: true });\n      call(d2, { action: \"invite\", code: code }).then(function (r) {\n        if (r && r.ok && r.guest) {\n          lsSet(\"psh_code\", r.guest.code);\n          var st = { loading: false, guest: r.guest, notFound: false };\n          if (!lsGet(\"psh_lang\") && (r.guest.lang === \"pt\" || r.guest.lang === \"en\")) st.lang = r.guest.lang;\n          d2.setState(st);\n        } else { d2.setState({ loading: false, guest: null, notFound: true }); }\n      }).catch(function () { d2.setState({ loading: false, guest: null, notFound: false }); });\n    }\n    d2.on(\"[data-lang]\", \"click\", function (e, el) { var lg = el.getAttribute(\"data-lang\"); lsSet(\"psh_lang\", lg); d2.setState({ lang: lg }); });\n    var G = GLASS(), lastT = 0, lastTop = 0, drag = null, calm = false;\n    try { calm = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches; } catch (e) {}\n    d2.raf(function (t) {\n      var cv = d2.$(\"[data-glass]\"); if (!cv) return;\n      var w = cv.clientWidth, h = cv.clientHeight; if (!w || !h) return;\n      var dpr = Math.min(window.devicePixelRatio || 1, 2.5), pw = Math.round(w * dpr), ph = Math.round(h * dpr);\n      if (cv.width !== pw || cv.height !== ph) { cv.width = pw; cv.height = ph; }\n      var dt = lastT ? Math.min(0.034, (t - lastT) / 1000) : 0.016; lastT = t;\n      var ctx = cv.getContext(\"2d\");\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0); ctx.clearRect(0, 0, w, h);\n      G.step(dt); G.draw(ctx, w, h);\n    });\n    if (!calm) setTimeout(function () { G.drop(); }, 1300);\n    d2.on(\"[data-glass]\", \"pointerdown\", function (e) { drag = { x: e.clientX, moved: false }; });\n    d2.on(window, \"pointermove\", function (e) {\n      if (!drag) return;\n      var dx = e.clientX - drag.x;\n      if (Math.abs(dx) > 6) drag.moved = true;\n      if (drag.moved) G.S.rollT = Math.max(-0.55, Math.min(0.55, dx / 110));\n    });\n    var endDrag = function () { if (!drag) return; if (!drag.moved) G.drop(); G.S.rollT = 0; drag = null; };\n    d2.on(window, \"pointerup\", endDrag);\n    d2.on(window, \"pointercancel\", function () { if (drag) { G.S.rollT = 0; drag = null; } });\n    d2.on(\"[data-rsvp]\", \"click\", function (e, el) {\n      var g = d2.state.guest; if (!g || d2.state.busy) return;\n      var st = el.getAttribute(\"data-rsvp\");\n      d2.setState({ busy: true, err: \"\" });\n      call(d2, { action: \"rsvp\", code: g.code, status: st }).then(function (r) {\n        if (r && r.ok && r.guest) { d2.setState({ busy: false, guest: r.guest }); if (st === \"confirmed\") { G.drop(); setTimeout(function () { G.drop(); }, 380); } }\n        else { d2.setState({ busy: false, err: \"net\" }); }\n      }).catch(function () { d2.setState({ busy: false, err: \"net\" }); });\n    });\n    d2.on(\"[data-req]\", \"click\", function () {\n      if (d2.state.busy) return;\n      var v = function (n) { var el = d2.$('input[name=\"' + n + '\"]'); return el ? String(el.value || \"\").trim() : \"\"; };\n      var name = v(\"name\");\n      if (!name) { d2.setState({ err: \"name\" }); return; }\n      var lang = d2.state.lang || guessLang();\n      d2.setState({ busy: true, err: \"\" });\n      call(d2, { action: \"request\", name: name, email: v(\"email\"), company: v(\"company\"), role: v(\"role\"), lang: lang }).then(function (r) {\n        if (r && r.ok && r.guest) { lsSet(\"psh_code\", r.guest.code); d2.setState({ busy: false, guest: r.guest, notFound: false }); G.drop(); }\n        else { d2.setState({ busy: false, err: \"net\" }); }\n      }).catch(function () { d2.setState({ busy: false, err: \"net\" }); });\n    });\n    d2.on(\"[data-ics]\", \"click\", function () {\n      var g = d2.state.guest; var t = T()[d2.state.lang || guessLang()];\n      try {\n        var blob = new Blob([icsText(d2, t, g ? g.code : \"\")], { type: \"text/calendar;charset=utf-8\" });\n        var u = URL.createObjectURL(blob);\n        var a = document.createElement(\"a\"); a.href = u; a.download = \"post-summit-hangover.ics\";\n        document.body.appendChild(a); a.click(); a.remove();\n        setTimeout(function () { URL.revokeObjectURL(u); }, 4000);\n      } catch (e) {}\n    });\n    var app = d2.$(\"[data-app]\");\n    if (app) {\n      d2.on(app, \"scroll\", function () {\n        var dv = Math.min(16, app.scrollTop / 16);\n        app.style.setProperty(\"--dv\", dv.toFixed(2));\n        G.S.thV += Math.max(-0.5, Math.min(0.5, (app.scrollTop - lastTop) * 0.012)); lastTop = app.scrollTop;\n      });\n    }\n  },\n  updated: function (d2) {\n    var app = d2.$(\"[data-app]\");\n    if (app) app.style.setProperty(\"--dv\", Math.min(16, app.scrollTop / 16).toFixed(2));\n  }\n};"}},"api":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"api"}}}},"site":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"site"}}}},"venue":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"venue"}}}},"mapsUrl":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"mapsUrl"}}}}}}}}}},{"_id":"6af21fa1257f7c9b0d969a01","component":"data2-core-types@Component","system":"63d98929ddb46b0635033b23","params":{"extends":"data2-core-primitives@Block","component":"psh_admin","package":"demo","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function esc(s) { return String(s == null ? \"\" : s).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\"); }\nfunction firstName(n) { return String(n || \"\").trim().split(/\\s+/)[0] || \"\"; }\nfunction lsGet(k) { try { return window.localStorage.getItem(k); } catch (e) { return null; } }\nfunction lsSet(k, v) { try { if (v == null) window.localStorage.removeItem(k); else window.localStorage.setItem(k, v); } catch (e) {} }\nfunction LOGO(cls) {\n  return '<svg class=\"' + cls + '\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><g transform=\"translate(-678.859 -300.605)\" fill=\"currentColor\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\"/></g></svg>';\n}\nfunction apiUrl(d2) { return d2.param(\"api\", \"\") || \"https://demo.data2apis.com/rush/psh-api\"; }\nfunction inviteUrl(d2, code) { return (d2.param(\"site\", \"\") || \"https://hangover--demo.next.data2.app/\") + \"?c=\" + code; }\nfunction call(d2, body) {\n  body.key = d2.state.key || lsGet(\"psh_key\") || \"\";\n  return fetch(apiUrl(d2), { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(body) })\n    .then(function (r) { return r.json(); })\n    .then(function (j) { return (j && j.data) || { error: \"network\" }; });\n}\nfunction qrSvg(lib, text) {\n  try {\n    var f = lib && (lib.default || lib);\n    if (typeof f !== \"function\") return \"\";\n    var q = f(0, \"M\"); q.addData(text); q.make();\n    var n = q.getModuleCount(), out = \"\";\n    for (var r = 0; r < n; r++) {\n      var row = \"\";\n      for (var c = 0; c < n; c++) { if (q.isDark(r, c)) row += '<rect x=\"' + c + '\" y=\"' + r + '\" width=\"1.03\" height=\"1.03\"/>'; }\n      out += '<g class=\"qrow\" style=\"animation-delay:' + (r * 14) + 'ms\">' + row + \"</g>\";\n    }\n    return '<svg class=\"qr\" viewBox=\"0 0 ' + n + \" \" + n + '\" shape-rendering=\"crispEdges\" role=\"img\" aria-label=\"QR\">' + out + \"</svg>\";\n  } catch (e) { return \"\"; }\n}\nfunction statusLabel(s) { return { requested: \"Pediu convite\", invited: \"Convidado\", confirmed: \"Confirmado\", declined: \"Recusou\", present: \"Entrou\" }[s] || s; }\nfunction waUrl(d2, g) {\n  var url = inviteUrl(d2, g.code), n = firstName(g.name);\n  var txt = g.lang === \"pt\"\n    ? \"Olá \" + n + \", segue o seu convite para o Post-Summit Hangover, da Data². Lisboa, quinta 19/11, das 17:00 às 20:30, keynote às 18:00. \" + url\n    : \"Hi \" + n + \", here is your invitation to Post-Summit Hangover, hosted by Data². Lisbon, Thursday 19 Nov, 17:00 to 20:30, keynote at 18:00. \" + url;\n  var ph = String(g.phone || \"\").replace(/\\D/g, \"\");\n  return \"https://wa.me/\" + ph + \"?text=\" + encodeURIComponent(txt);\n}\nfunction extractCode(text) {\n  var s = String(text || \"\").trim();\n  var m = s.match(/[?&]c=([A-Za-z0-9]{6})/);\n  if (m) return m[1].toUpperCase();\n  if (/^[A-Za-z0-9]{6}$/.test(s)) return s.toUpperCase();\n  return \"\";\n}\nfunction sorted(gs) {\n  return (gs || []).slice().sort(function (a, b) { return String(b.invitedAt || \"\").localeCompare(String(a.invitedAt || \"\")); });\n}\nfunction counts(gs) {\n  var c = { requested: 0, invited: 0, confirmed: 0, declined: 0, present: 0 };\n  (gs || []).forEach(function (g) { if (c[g.status] != null) c[g.status]++; });\n  c.list = c.invited + c.confirmed + c.declined + c.present;\n  c.coming = c.confirmed + c.present;\n  return c;\n}\nfunction gate(s) {\n  return '<div class=\"gate\"><div class=\"gin\">' + LOGO(\"logo\") + '<h1 class=\"gt\">Post-Summit<br/>Hangover</h1><p class=\"gp\">Lista da porta · Lisboa, 19.11.2026</p>' +\n    '<label class=\"f\"><span>Chave de acesso</span><input name=\"key\" type=\"password\" autocomplete=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/></label>' +\n    (s.err ? '<p class=\"err\">Chave não reconhecida.</p>' : \"\") +\n    '<button class=\"btn pri\" data-login' + (s.busy ? \" disabled\" : \"\") + \">\" + (s.busy ? \"Entrando\" : \"Entrar\") + \"</button></div></div>\";\n}\nfunction qrCard(d2, g, big) {\n  var lib = d2.lib(\"qrcode-generator@1.4.4\");\n  var qr = qrSvg(lib, inviteUrl(d2, g.code));\n  return '<div class=\"qrc' + (big ? \" big\" : \"\") + '\">' + (qr || '<div class=\"qrph\">' + esc(g.code) + \"</div>\") + '<div class=\"qcode\">' + esc(g.code) + \"</div></div>\";\n}\nfunction tabInvite(d2, s) {\n  var g = s.made;\n  if (g) {\n    var scanTxt = g.lang === \"pt\" ? \"Aponte a câmera para abrir o seu convite\" : \"Point your camera to open your invitation\";\n    return '<section class=\"pane\" data-key=\"made\"><p class=\"lab\">Convite criado</p><h2 class=\"h2\">' + esc(g.name) + \"</h2>\" +\n      (g.company ? '<p class=\"p\">' + esc(g.company) + \"</p>\" : \"\") + qrCard(d2, g, true) +\n      '<p class=\"scan\">' + scanTxt + \"</p>\" +\n      '<div class=\"acts\"><a class=\"btn pri\" href=\"' + waUrl(d2, g) + '\" target=\"_blank\" rel=\"noopener\">Enviar por WhatsApp</a>' +\n      '<button class=\"btn sec\" data-copy=\"' + esc(g.code) + '\">' + (s.copied === g.code ? \"Link copiado\" : \"Copiar link\") + \"</button>\" +\n      '<button class=\"btn sec\" data-next>Próximo convidado</button></div></section>';\n  }\n  var fl = s.flang || \"en\";\n  return '<section class=\"pane\" data-key=\"form\"><h2 class=\"h2\">Novo convite</h2><p class=\"p\">Ao criar, aparece o QR para a pessoa escanear na hora.</p>' +\n    '<div class=\"form\"><label class=\"f\"><span>Nome</span><input name=\"name\" autocomplete=\"off\" maxlength=\"80\"/></label>' +\n    '<label class=\"f\"><span>Empresa</span><input name=\"company\" autocomplete=\"off\" maxlength=\"120\"/></label>' +\n    '<label class=\"f\"><span>WhatsApp, com código do país</span><input name=\"phone\" type=\"tel\" inputmode=\"tel\" autocomplete=\"off\" maxlength=\"40\" placeholder=\"+351 9\"/></label>' +\n    '<div class=\"f\"><span>Idioma do convite</span><div class=\"seg\"><button data-flang=\"en\" class=\"' + (fl === \"en\" ? \"on\" : \"\") + '\">English</button><button data-flang=\"pt\" class=\"' + (fl === \"pt\" ? \"on\" : \"\") + '\">Português</button></div></div>' +\n    (s.err === \"name\" ? '<p class=\"err\">Falta o nome.</p>' : s.err ? '<p class=\"err\">Não salvou. Tente de novo.</p>' : \"\") +\n    '<button class=\"btn pri\" data-create' + (s.busy ? \" disabled\" : \"\") + \">\" + (s.busy ? \"Criando\" : \"Criar convite\") + \"</button></div></section>\";\n}\nfunction tabGuests(d2, s) {\n  var all = sorted(s.guests), c = counts(all);\n  var q = String(s.q || \"\").toLowerCase(), flt = s.flt || \"all\";\n  var rows = all.filter(function (g) {\n    if (flt !== \"all\" && g.status !== flt) return false;\n    if (!q) return true;\n    return (String(g.name) + \" \" + String(g.company || \"\") + \" \" + String(g.code)).toLowerCase().indexOf(q) >= 0;\n  });\n  var chip = function (k, label, n) { return '<button class=\"chip' + (flt === k ? \" on\" : \"\") + '\" data-flt=\"' + k + '\">' + label + (n != null ? \" <b>\" + n + \"</b>\" : \"\") + \"</button>\"; };\n  var list = rows.map(function (g) {\n    return '<button class=\"row\" data-open=\"' + esc(g.code) + '\" data-key=\"' + esc(g._id || g.code) + '\"><span class=\"rn\">' + esc(g.name) + '</span><span class=\"rs st-' + esc(g.status) + '\">' + statusLabel(g.status) + '</span><span class=\"rc\">' + esc(g.company || \"\") + \"</span></button>\";\n  }).join(\"\");\n  return '<section class=\"pane\" data-key=\"guests\"><input class=\"search\" name=\"q\" type=\"search\" placeholder=\"Buscar nome, empresa ou código\" value=\"' + esc(s.q || \"\") + '\" autocomplete=\"off\"/>' +\n    '<div class=\"chips\">' + chip(\"all\", \"Todos\", all.length) + chip(\"requested\", \"Pedidos\", c.requested) + chip(\"invited\", \"Convidados\", c.invited) + chip(\"confirmed\", \"Confirmados\", c.confirmed) + chip(\"present\", \"Entraram\", c.present) + chip(\"declined\", \"Recusaram\", c.declined) + \"</div>\" +\n    '<div class=\"list\">' + (list || '<p class=\"empty\">' + (all.length ? \"Ninguém com esse filtro.\" : \"Nenhum convite ainda. Comece pela aba Convidar.\") + \"</p>\") + \"</div></section>\";\n}\nfunction tabDoor(d2, s) {\n  d2.lib(\"jsqr@1.4.0\");\n  var c = counts(s.guests), r = s.scanRes, banner = \"\";\n  if (r) {\n    var cls = r.kind === \"in\" ? \"ok\" : r.kind === \"already\" ? \"dup\" : \"bad\";\n    var head = r.kind === \"in\" ? \"Entrada liberada\" : r.kind === \"already\" ? \"Já tinha entrado\" : r.kind === \"nf\" ? \"Convite não encontrado\" : \"Sem conexão\";\n    banner = '<div class=\"res ' + cls + '\" data-key=\"res' + esc(r.at) + '\"><div class=\"rh\">' + head + \"</div>\" + (r.name ? '<div class=\"rnm\">' + esc(r.name) + \"</div>\" : \"\") + (r.company ? '<div class=\"rco\">' + esc(r.company) + \"</div>\" : \"\") + \"</div>\";\n  }\n  return '<section class=\"pane\" data-key=\"door\"><div class=\"cam\" data-d2-static><video data-video playsinline muted></video><div class=\"frame\"></div></div>' +\n    '<div class=\"acts\">' + (s.scanOn ? '<button class=\"btn sec\" data-camoff>Desligar câmera</button>' : '<button class=\"btn pri\" data-camon>Ligar câmera</button>') + \"</div>\" +\n    (s.camErr ? '<p class=\"err\">A câmera não abriu. Libere a permissão no navegador ou use o código abaixo.</p>' : \"\") + banner +\n    '<div class=\"manual\"><label class=\"f\"><span>Código do convite</span><input name=\"code\" autocomplete=\"off\" autocapitalize=\"characters\" maxlength=\"6\" placeholder=\"6 caracteres\"/></label><button class=\"btn sec\" data-manual>Dar entrada</button></div>' +\n    '<p class=\"tally\"><b>' + c.present + \"</b> de <b>\" + c.coming + \"</b> confirmados já entraram</p></section>\";\n}\nfunction sheet(d2, s) {\n  var g = (s.guests || []).filter(function (x) { return x.code === s.sheet; })[0];\n  if (!g) return \"\";\n  var b = function (st, label, cls) { return '<button class=\"btn ' + (cls || \"sec\") + '\" data-set=\"' + st + '\"' + (s.busy ? \" disabled\" : \"\") + \">\" + label + \"</button>\"; };\n  var acts = \"\";\n  if (g.status === \"requested\") acts = b(\"invited\", \"Aprovar convite\", \"pri\");\n  else if (g.status === \"invited\") acts = b(\"confirmed\", \"Marcar confirmado\", \"pri\") + b(\"declined\", \"Recusou\");\n  else if (g.status === \"confirmed\") acts = b(\"present\", \"Dar entrada\", \"pri\") + b(\"invited\", \"Voltar para convidado\");\n  else if (g.status === \"declined\") acts = b(\"confirmed\", \"Marcar confirmado\", \"pri\");\n  else if (g.status === \"present\") acts = b(\"confirmed\", \"Desfazer entrada\");\n  return '<div class=\"scrim\" data-close></div><div class=\"sheet\" data-key=\"sheet\"><div class=\"sh\"><div><h2 class=\"h2\">' + esc(g.name) + '</h2><p class=\"p\">' + esc([g.company, g.phone].filter(Boolean).join(\" · \")) + '</p></div><button class=\"x\" data-close aria-label=\"Fechar\">Fechar</button></div>' +\n    '<p class=\"stline st-' + esc(g.status) + '\">' + statusLabel(g.status) + (g.invitedBy ? \" · por \" + esc(g.invitedBy) : g.source === \"landing\" ? \" · pelo site\" : \"\") + \"</p>\" +\n    (g.status === \"requested\" ? (g.email ? '<p class=\"p\">' + esc(g.email) + (g.role ? \" · \" + esc(g.role) : \"\") + \"</p>\" : \"\") : qrCard(d2, g, false)) +\n    '<div class=\"acts\">' + acts + (g.status !== \"requested\" ? '<a class=\"btn sec\" href=\"' + waUrl(d2, g) + '\" target=\"_blank\" rel=\"noopener\">WhatsApp</a><button class=\"btn sec\" data-copy=\"' + esc(g.code) + '\">' + (s.copied === g.code ? \"Link copiado\" : \"Copiar link\") + \"</button>\" : \"\") + \"</div>\" +\n    '<button class=\"lnk\" data-del>' + (s.confirmDel ? \"Tocar de novo para remover da lista\" : \"Remover da lista\") + \"</button></div>\";\n}\nexport default {\n  css: `\n:host{display:block;height:100%}\n*{box-sizing:border-box;margin:0;padding:0}\n.app{--paper:#F3F0E8;--ink:#111114;--mid:#5B5A57;--line:rgba(17,17,20,.16);--blue:#4866FA;--card:#FBFAF6;\n  height:100%;position:relative;overflow:hidden;background:var(--paper);color:var(--ink);display:flex;flex-direction:column;\n  font-family:\"Archivo\",\"Helvetica Neue\",Arial,sans-serif;font-size:16px;line-height:1.4;-webkit-font-smoothing:antialiased}\n.col{width:100%;max-width:560px;margin:0 auto;padding:0 16px}\n.logo{height:20px;width:auto;display:block;color:var(--ink)}\n.gate{height:100%;overflow-y:auto;display:flex;align-items:center}\n.gin{width:100%;max-width:420px;margin:0 auto;padding:32px 20px;display:grid;gap:18px;animation:up .6s both}\n.gt{font-size:64px;line-height:.86;font-weight:800;font-variation-settings:\"wdth\" 62;text-transform:uppercase;margin-top:18px}\n.gp{color:var(--mid);font-weight:550}\n@keyframes up{from{transform:translate3d(0,14px,0);opacity:0}to{transform:none;opacity:1}}\n.hd{flex:none;border-bottom:1.5px solid var(--ink)}\n.hd1{display:flex;align-items:center;justify-content:space-between;padding:14px 0 10px}\n.who{font-size:13px;font-weight:600;color:var(--mid);display:flex;gap:12px;align-items:center}\n.who button{appearance:none;border:0;background:none;font:inherit;color:var(--ink);text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:6px 0}\n.nums{display:grid;grid-template-columns:repeat(4,1fr);border-top:1.5px solid var(--line)}\n.num{padding:9px 0 10px 10px;border-left:1.5px solid var(--line)}\n.num:first-child{border-left:0;padding-left:0}\n.num b{display:block;font-size:30px;line-height:1;font-weight:800;font-variation-settings:\"wdth\" 70;font-variant-numeric:tabular-nums}\n.num span{font-size:11.5px;font-weight:650;color:var(--mid);letter-spacing:.02em}\n.num.hot b{color:var(--blue)}\n.main{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}\n.pane{padding:22px 0 28px;animation:up .35s both}\n.lab{font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--mid)}\n.h2{font-size:28px;line-height:1.05;font-weight:750;font-variation-settings:\"wdth\" 80;letter-spacing:-.01em;overflow-wrap:anywhere}\n.p{color:var(--mid);margin-top:6px}\n.form{display:grid;gap:17px;margin-top:20px}\n.f{display:block}\n.f span{display:block;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--mid)}\n.f input{width:100%;font:inherit;font-size:19px;font-weight:550;color:var(--ink);background:transparent;border:0;border-bottom:1.5px solid var(--ink);border-radius:0;padding:8px 0 9px}\n.f input::placeholder{color:rgba(17,17,20,.3)}\n.seg{display:grid;grid-template-columns:1fr 1fr;border:1.5px solid var(--ink);border-radius:4px;overflow:hidden;margin-top:8px}\n.seg button{appearance:none;border:0;background:transparent;font:inherit;font-weight:650;min-height:46px;color:var(--ink);cursor:pointer}\n.seg button.on{background:var(--ink);color:var(--paper)}\n.btn{appearance:none;font:inherit;font-weight:650;font-size:16px;min-height:52px;padding:0 20px;border-radius:4px;border:1.5px solid var(--ink);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--ink);background:transparent;transition:transform .12s;-webkit-tap-highlight-color:transparent;text-align:center}\n.btn:active{transform:scale(.97)}\n.btn.pri{background:var(--blue);border-color:var(--blue);color:#fff}\n.btn[disabled]{opacity:.55;pointer-events:none}\n.btn:focus-visible,input:focus-visible,.row:focus-visible,.chip:focus-visible,.nav button:focus-visible{outline:2.5px solid var(--blue);outline-offset:2px}\n.acts{display:grid;gap:10px;margin-top:18px}\n.err{color:#B3261E;font-size:14.5px;font-weight:600}\n.lnk{appearance:none;border:0;background:none;font:inherit;font-size:14px;color:var(--mid);text-decoration:underline;text-underline-offset:3px;cursor:pointer;margin-top:16px;padding:8px 0}\n.qrc{background:#fff;border:1.5px solid var(--ink);border-radius:5px;padding:16px 16px 10px;margin-top:16px;max-width:220px}\n.qrc.big{max-width:none;padding:22px 22px 12px;animation:pop .5s cubic-bezier(.2,.8,.2,1) both}\n@keyframes pop{from{transform:scale(.94) rotate(-1.5deg);opacity:0}to{transform:none;opacity:1}}\n.qr{display:block;width:100%;height:auto;fill:var(--ink)}\n.qrow{animation:qin .3s both}\n@keyframes qin{from{opacity:0}to{opacity:1}}\n.qrph{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-weight:800;letter-spacing:.14em;color:var(--mid)}\n.qcode{text-align:center;font-size:17px;font-weight:800;letter-spacing:.2em;font-variant-numeric:tabular-nums;margin-top:8px}\n.scan{text-align:center;font-weight:650;margin-top:12px;font-size:17px}\n.search{width:100%;font:inherit;font-size:17px;font-weight:550;border:1.5px solid var(--ink);border-radius:4px;background:var(--card);color:var(--ink);padding:12px 13px;-webkit-appearance:none}\n.chips{display:flex;gap:8px;overflow-x:auto;padding:12px 0 4px;margin:0 -16px;padding-left:16px;padding-right:16px;scrollbar-width:none}\n.chips::-webkit-scrollbar{display:none}\n.chip{appearance:none;flex:none;font:inherit;font-size:13.5px;font-weight:650;border:1.5px solid var(--line);background:transparent;color:var(--ink);border-radius:4px;padding:7px 10px;cursor:pointer;white-space:nowrap}\n.chip b{font-variant-numeric:tabular-nums;color:var(--mid);font-weight:650;margin-left:2px}\n.chip.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}.chip.on b{color:var(--paper)}\n.list{margin-top:8px;border-top:1.5px solid var(--ink)}\n.row{appearance:none;width:100%;text-align:left;font:inherit;color:var(--ink);background:transparent;border:0;border-bottom:1.5px solid var(--line);padding:13px 0 12px;cursor:pointer;display:grid;grid-template-columns:1fr auto;column-gap:12px;row-gap:1px;-webkit-tap-highlight-color:transparent}\n.row:active{background:rgba(17,17,20,.05)}\n.rn{font-size:17.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.rc{font-size:13.5px;color:var(--mid);grid-column:1/-1;min-height:2px}\n.rs{font-size:12.5px;font-weight:700;align-self:center;padding:3px 7px;border-radius:3px;white-space:nowrap}\n.st-requested{background:var(--ink);color:var(--paper)}\n.st-present{background:var(--blue);color:#fff}\n.st-confirmed{box-shadow:inset 0 0 0 1.5px var(--ink)}\n.st-invited{color:var(--mid);padding-right:0}\n.st-declined{color:var(--mid);text-decoration:line-through;padding-right:0}\n.stline{display:inline-block;font-size:13px;font-weight:700;padding:4px 8px;border-radius:3px;margin-top:12px}\n.empty{color:var(--mid);padding:22px 0}\n.cam{position:relative;aspect-ratio:1;background:var(--ink);border-radius:5px;overflow:hidden}\n.cam video{width:100%;height:100%;object-fit:cover;display:block}\n.frame{position:absolute;inset:17%;border:2px solid #fff;border-radius:4px;pointer-events:none}\n.res{margin-top:16px;padding:16px 16px 15px;border-radius:5px;animation:pop .35s cubic-bezier(.2,.8,.2,1) both}\n.res.ok{background:var(--blue);color:#fff}.res.dup{background:var(--ink);color:var(--paper)}.res.bad{border:1.5px solid #B3261E;color:#B3261E}\n.rh{font-size:12.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}\n.rnm{font-size:32px;line-height:1.02;font-weight:800;font-variation-settings:\"wdth\" 76;margin-top:5px;overflow-wrap:anywhere}\n.rco{font-weight:600;margin-top:3px;opacity:.85}\n.manual{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:end;margin-top:24px}\n.manual input{text-transform:uppercase;letter-spacing:.14em}\n.tally{margin-top:22px;color:var(--mid);font-weight:550;font-variant-numeric:tabular-nums}.tally b{color:var(--ink)}\n.nav{flex:none;border-top:1.5px solid var(--ink);background:var(--paper);padding-bottom:env(safe-area-inset-bottom)}\n.navi{display:grid;grid-template-columns:repeat(3,1fr)}\n.nav button{appearance:none;border:0;background:transparent;font:inherit;font-size:15px;font-weight:700;color:var(--mid);min-height:58px;cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent}\n.nav button.on{color:var(--ink)}\n.nav button.on:before{content:\"\";position:absolute;left:22%;right:22%;top:-1.5px;height:4px;background:var(--blue)}\n.nav button i{font-style:normal;font-variant-numeric:tabular-nums;background:var(--ink);color:var(--paper);font-size:11.5px;border-radius:3px;padding:1px 5px;margin-left:6px}\n.scrim{position:absolute;inset:0;background:rgba(17,17,20,.42);animation:fade .2s both;z-index:5}\n@keyframes fade{from{opacity:0}to{opacity:1}}\n.sheet{position:absolute;left:0;right:0;bottom:0;z-index:6;background:var(--paper);border-top:1.5px solid var(--ink);border-radius:10px 10px 0 0;padding:20px 16px calc(22px + env(safe-area-inset-bottom));max-height:92%;overflow-y:auto;animation:rise .32s cubic-bezier(.2,.8,.2,1) both}\n@keyframes rise{from{transform:translate3d(0,40%,0);opacity:0}to{transform:none;opacity:1}}\n.sheet>*{max-width:528px;margin-left:auto;margin-right:auto}\n.sh{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}\n.x{appearance:none;border:0;background:none;font:inherit;font-size:14px;font-weight:650;text-decoration:underline;text-underline-offset:3px;color:var(--ink);cursor:pointer;padding:6px 0;flex:none}\n@media (prefers-reduced-motion:reduce){.app *{animation-duration:.01ms!important;animation-delay:0ms!important}}\n`,\n  render: function (d2) {\n    var s = d2.state;\n    if (!s.authed) return '<div class=\"app\">' + gate(s) + \"</div>\";\n    var tab = s.tab || \"invite\", c = counts(s.guests);\n    var body = tab === \"invite\" ? tabInvite(d2, s) : tab === \"guests\" ? tabGuests(d2, s) : tabDoor(d2, s);\n    var nb = function (k, label, extra) { return '<button data-tab=\"' + k + '\" class=\"' + (tab === k ? \"on\" : \"\") + '\">' + label + (extra || \"\") + \"</button>\"; };\n    return '<div class=\"app\"><header class=\"hd\"><div class=\"col\"><div class=\"hd1\">' + LOGO(\"logo\") + '<div class=\"who\"><span>' + esc(s.staff || \"\") + '</span><button data-logout>Sair</button></div></div>' +\n      '<div class=\"nums\"><div class=\"num\"><b>' + c.list + '</b><span>Convidados</span></div><div class=\"num\"><b>' + c.coming + '</b><span>Confirmados</span></div><div class=\"num hot\"><b>' + c.present + '</b><span>Entraram</span></div><div class=\"num\"><b>' + c.requested + \"</b><span>Pedidos</span></div></div></div></header>\" +\n      '<main class=\"main\"><div class=\"col\">' + body + \"</div></main>\" +\n      '<nav class=\"nav\"><div class=\"col navi\">' + nb(\"invite\", \"Convidar\") + nb(\"guests\", \"Lista\", c.requested ? \"<i>\" + c.requested + \"</i>\" : \"\") + nb(\"door\", \"Porta\") + \"</div></nav>\" +\n      (s.sheet ? sheet(d2, s) : \"\") + \"</div>\";\n  },\n  mounted: function (d2, root) {\n    try {\n      if (!document.getElementById(\"psh-fonts\")) {\n        var l = document.createElement(\"link\"); l.id = \"psh-fonts\"; l.rel = \"stylesheet\";\n        l.href = \"https://fonts.googleapis.com/css2?family=Archivo:wdth,wght@62..125,400..900&display=swap\";\n        document.head.appendChild(l);\n      }\n    } catch (e) {}\n    var stream = null, lastScan = 0, lastCode = \"\", lastAt = 0, cv = null;\n    var val = function (n) { var el = d2.$('input[name=\"' + n + '\"]'); return el ? String(el.value || \"\").trim() : \"\"; };\n    var reload = function () {\n      return call(d2, { action: \"list\" }).then(function (r) { if (r && r.ok) d2.setState({ guests: r.guests || [] }); return r; }).catch(function () {});\n    };\n    var login = function (key) {\n      d2.setState({ busy: true, err: \"\", key: key });\n      call(d2, { action: \"login\" }).then(function (r) {\n        if (r && r.ok) { lsSet(\"psh_key\", key); d2.setState({ busy: false, authed: true, staff: r.name }); reload(); }\n        else { lsSet(\"psh_key\", null); d2.setState({ busy: false, authed: false, err: \"key\", key: \"\" }); }\n      }).catch(function () { d2.setState({ busy: false, err: \"key\" }); });\n    };\n    var stopCam = function () {\n      try { if (stream) stream.getTracks().forEach(function (t) { t.stop(); }); } catch (e) {}\n      stream = null;\n      if (d2.state.scanOn) d2.setState({ scanOn: false });\n    };\n    var checkin = function (code) {\n      call(d2, { action: \"status\", code: code, status: \"present\" }).then(function (r) {\n        var res;\n        if (r && r.ok) res = { kind: r.already ? \"already\" : \"in\", name: r.guest.name, company: r.guest.company, at: Date.now() };\n        else if (r && r.error === \"not_found\") res = { kind: \"nf\", at: Date.now() };\n        else res = { kind: \"net\", at: Date.now() };\n        try { if (navigator.vibrate) navigator.vibrate(res.kind === \"in\" ? 60 : [40, 60, 40]); } catch (e) {}\n        d2.setState({ scanRes: res });\n        reload();\n      }).catch(function () { d2.setState({ scanRes: { kind: \"net\", at: Date.now() } }); });\n    };\n    var saved = lsGet(\"psh_key\");\n    if (saved) login(saved);\n    d2.on(\"[data-login]\", \"click\", function () { var k = val(\"key\").toLowerCase(); if (k) login(k); });\n    d2.on('input[name=\"key\"]', \"keydown\", function (e) { if (e.key === \"Enter\") { var k = val(\"key\").toLowerCase(); if (k) login(k); } });\n    d2.on(\"[data-logout]\", \"click\", function () { stopCam(); lsSet(\"psh_key\", null); d2.setState({ authed: false, key: \"\", guests: [], sheet: \"\", made: null }); });\n    d2.on(\"[data-tab]\", \"click\", function (e, el) {\n      var k = el.getAttribute(\"data-tab\");\n      if (k !== \"door\") stopCam();\n      d2.setState({ tab: k, err: \"\", scanRes: null, camErr: false });\n      reload();\n    });\n    d2.on(\"[data-flang]\", \"click\", function (e, el) { d2.setState({ flang: el.getAttribute(\"data-flang\") }); });\n    d2.on(\"[data-create]\", \"click\", function () {\n      if (d2.state.busy) return;\n      var name = val(\"name\");\n      if (!name) { d2.setState({ err: \"name\" }); return; }\n      d2.setState({ busy: true, err: \"\" });\n      call(d2, { action: \"create\", name: name, company: val(\"company\"), phone: val(\"phone\"), lang: d2.state.flang || \"en\" }).then(function (r) {\n        if (r && r.ok && r.guest) { d2.setState({ busy: false, made: r.guest }); reload(); }\n        else d2.setState({ busy: false, err: \"net\" });\n      }).catch(function () { d2.setState({ busy: false, err: \"net\" }); });\n    });\n    d2.on(\"[data-next]\", \"click\", function () { d2.setState({ made: null, err: \"\" }); });\n    d2.on(\"[data-copy]\", \"click\", function (e, el) {\n      var code = el.getAttribute(\"data-copy\"), url = inviteUrl(d2, code);\n      var done = function () { d2.setState({ copied: code }); setTimeout(function () { if (d2.state.copied === code) d2.setState({ copied: \"\" }); }, 1800); };\n      try { navigator.clipboard.writeText(url).then(done, function () { d2.dialog.prompt(\"Link do convite\", url); }); } catch (err) { d2.dialog.prompt(\"Link do convite\", url); }\n    });\n    d2.on('input[name=\"q\"]', \"input\", function (e, el) { d2.setState({ q: el.value }); });\n    d2.on(\"[data-flt]\", \"click\", function (e, el) { d2.setState({ flt: el.getAttribute(\"data-flt\") }); });\n    d2.on(\"[data-open]\", \"click\", function (e, el) { d2.setState({ sheet: el.getAttribute(\"data-open\"), confirmDel: false }); });\n    d2.on(\"[data-close]\", \"click\", function () { d2.setState({ sheet: \"\", confirmDel: false }); });\n    d2.on(\"[data-set]\", \"click\", function (e, el) {\n      var code = d2.state.sheet; if (!code || d2.state.busy) return;\n      d2.setState({ busy: true });\n      call(d2, { action: \"status\", code: code, status: el.getAttribute(\"data-set\") }).then(function () { return reload(); }).then(function () { d2.setState({ busy: false }); }).catch(function () { d2.setState({ busy: false }); });\n    });\n    d2.on(\"[data-del]\", \"click\", function () {\n      var code = d2.state.sheet; if (!code) return;\n      if (!d2.state.confirmDel) { d2.setState({ confirmDel: true }); return; }\n      call(d2, { action: \"remove\", code: code }).then(function () { d2.setState({ sheet: \"\", confirmDel: false }); return reload(); }).catch(function () {});\n    });\n    d2.on(\"[data-manual]\", \"click\", function () { var c = extractCode(val(\"code\")); if (c) checkin(c); else d2.setState({ scanRes: { kind: \"nf\", at: Date.now() } }); });\n    d2.on(\"[data-camoff]\", \"click\", function () { stopCam(); });\n    d2.on(\"[data-camon]\", \"click\", function () {\n      if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { d2.setState({ camErr: true }); return; }\n      navigator.mediaDevices.getUserMedia({ video: { facingMode: { ideal: \"environment\" } }, audio: false }).then(function (st) {\n        stream = st;\n        var v = d2.$(\"[data-video]\");\n        if (v) { v.srcObject = st; var p = v.play(); if (p && p.catch) p.catch(function () {}); }\n        d2.setState({ scanOn: true, camErr: false });\n      }).catch(function () { d2.setState({ camErr: true }); });\n    });\n    d2.raf(function (t) {\n      if (!stream || t - lastScan < 170) return;\n      lastScan = t;\n      var v = d2.$(\"[data-video]\");\n      var lib = d2.lib(\"jsqr@1.4.0\");\n      var jsqr = lib && (lib.default || lib);\n      if (!v || typeof jsqr !== \"function\" || !v.videoWidth) return;\n      if (!v.srcObject) { v.srcObject = stream; var p = v.play(); if (p && p.catch) p.catch(function () {}); return; }\n      try {\n        if (!cv) cv = document.createElement(\"canvas\");\n        var w = 480, h = Math.round(480 * v.videoHeight / v.videoWidth);\n        cv.width = w; cv.height = h;\n        var ctx = cv.getContext(\"2d\", { willReadFrequently: true });\n        ctx.drawImage(v, 0, 0, w, h);\n        var img = ctx.getImageData(0, 0, w, h);\n        var hit = jsqr(img.data, w, h, { inversionAttempts: \"dontInvert\" });\n        if (hit && hit.data) {\n          var code = extractCode(hit.data), now = Date.now();\n          if (code && !(code === lastCode && now - lastAt < 5000)) { lastCode = code; lastAt = now; checkin(code); }\n        }\n      } catch (e) {}\n    });\n    var iv = setInterval(function () { if (d2.state.authed && !d2.state.busy) reload(); }, 25000);\n    d2.onUnmount(function () { clearInterval(iv); stopCam(); });\n  }\n};"}},"api":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"api"}}}},"site":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"site"}}}}}}}}}}]}},{"reference":"ExternalComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f060d9b1ca96def42f3c40a","displayName":"Builder AuthStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"credentials":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"verifier":{"component":"data2-core-types@DataSetReference","params":{"reference":"UsersDataSet"}},"sessionShared":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},"email":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"nR6Q9d7qdaPtZhJ28Q8Dy"},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"yPCJBTKo8q1Mw0B_3Kpwl"},"component":"data2-core-types@ArtboardReference"}}},"session":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"name"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"sessionMetadata":{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},{"params":{"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"active"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.status"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is active user"}]},"component":"data2-core-logical-operators@And","displayName":"is active and has _id"}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $user"},{"params":{"action":{"component":"data2-core-types@Getter","displayName":"isData2User","params":{"module":{"component":"data2-core-functions@Match","params":{"pattern":{"component":"data2-core-types@Regex","params":{"pattern":"@data2\\.app$","flags":"i"}},"text":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}}},"prop":{"component":"data2-core-primitives@String","params":{"content":"0"}}}},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}},"component":"data2-core-flow@Step"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.d2_app"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"management"}}]},"component":"data2-core-functions@Includes","displayName":"isData2App Exception"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}},"component":"data2-core-flow@Step"},{"params":{"resultName":{"component":"data2-core-primitives@String","params":{"content":"has_access"}},"action":{"params":{"compare":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"actions":[{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $metadata.system"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":"filter","args":[{"_id":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records.length"}}}}},"component":"data2-core-logical-operators@Not","displayName":"systems not found"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check system found"},{"params":{"actions":[{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"organization":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"cursor.current.organization._id"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"}]},"component":"data2-core-flow@Parallel"}]},"component":"data2-core-flow@Series","displayName":"common setup"},{"params":{"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"else":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"compare":{"params":{"components":{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"mapper":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"system"}}],"body":{"params":{"expression":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.visibility"}}}},"defaultCase":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"public"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"billing-owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}},{"component":"data2-core-primitives@String","params":{"content":"member"}}]},"component":"data2-core-functions@Includes","displayName":"has role with access"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"collaborator"}}},"component":"data2-core-comparison-operators@Equal","displayName":"is collaborator"}]},"component":"data2-core-logical-operators@And","displayName":"is org member and collaborator"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is collaborator"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is collaborator and has system access"}]},"component":"data2-core-logical-operators@Or"}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"private"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}}]},"component":"data2-core-functions@Includes","displayName":"is owner/admin"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is owner/admin"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is member and has system access"}]},"component":"data2-core-logical-operators@Or","displayName":"is owner/admin or has system access"}}}]},"component":"data2-core-flow@Switch"}}}},"component":"data2-core-functions@ArrayMap"}},"component":"data2-core-logical-operators@And","displayName":"has org member for all systems in request"}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"}},"component":"data2-core-flow@If"}},"component":"data2-core-flow@Step"},{"params":{"then":{"component":"data2-core-flow@If","displayName":"management exception never picks the system","params":{"compare":{"component":"data2-core-logical-operators@Or","params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-logical-operators@Not","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}}}]}},"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"d2_app":"management"}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"identityProviders":[{"provider":{"component":"data2-core-primitives@String","params":{"content":"GOOGLE"}},"clientId":{"component":"data2-core-primitives@String","params":{"content":"55470861603-22pvfc1t49lp8cjnbfk71s5ct9hp1q1v.apps.googleusercontent.com"}}}]},"reference":"Data2BuilderAuthentication","updatedAt":"2026-10-29T19:05:43.007Z","updateMetadata":{"updatedBy":{"user":"5f1609be1ca96def427e1559"}}},{"_id":"5f060ee51ca96def42f3fbd1","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"UsersTableDataSource"}},"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}}},"reference":"UsersDataSet","updatedAt":"2026-03-04T21:16:40.291Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f1600b70528b92601890f75","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ServiceComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ServiceComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:20.208Z","createdAt":"2020-07-20T20:38:15.436Z"},{"_id":"5f1602190528b92601890f7d","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":40000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentInstancesTableDataSource"}},"sort":{"_id":1},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:07.089Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"5f16017f0528b92601890f7a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":[{"component":"data2-core-auth@PublicPolicy","params":{"reason":"Explicit so data2 can go private, 2026-11-05. Access is decided by the drive/file gate (applyFileTableGates, docs/drive-file-access.md), which runs after this policy; same behavior as today."}}]},"reference":"FileComponentInstancesDataSet","updatedAt":"2026-11-05T17:23:34.217Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"5f1601990528b92601890f7b","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ApplicationsTableDataSource"}},"pk":"_id","autoEdit":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"params":{"column":"_id"},"component":"data2-core-types@DataSetColumnReference"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"ApplicationsDataSet","updatedAt":"2022-12-13T21:51:13.995Z","createdAt":"2020-07-20T20:42:01.657Z"},{"_id":"5f16172a0528b92601890f85","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":10000}}},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"DataComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"DataComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:12.831Z","createdAt":"2020-07-20T22:14:02.097Z"},{"_id":"60ddc1bbda3861ca65407c5a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"pagination":{"size":1},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"policies":[{"component":"data2-core-auth@PublicPolicy","params":{"reason":"Explicit so data2 can go private, 2026-11-05. Access is decided by the drive/file gate (applyFileTableGates, docs/drive-file-access.md), which runs after this policy; same behavior as today."}}]},"reference":"OneFileComponentInstancesDataSet","updatedAt":"2026-11-05T17:23:34.254Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"63ee3d38b8c9838c62fb05fb","displayName":"DriveFileComponentInstancesDataSet","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core@Drive"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":[{"component":"data2-core-auth@PublicPolicy","params":{"reason":"Explicit so data2 can go private, 2026-11-05. Access is decided by the drive/file gate (applyFileTableGates, docs/drive-file-access.md), which runs after this policy; same behavior as today."}}]},"reference":"DriveFileComponentInstancesDataSet","updatedAt":"2026-11-05T17:23:34.347Z","createdAt":"2023-02-16T14:27:07.797Z"},{"reference":"ServiceComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6af21f0ed5edd50249264c77","component":"data2-core-primitives@Artboard","system":"63d98929ddb46b0635033b23","displayName":"Hangover · Landing","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Hangover · Landing"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":390,"height":844}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"zRGwR8UcvWOZHtHi5CY3q"},{"_id":"90f9a8cef7bb4ccd944c86ce","parent":"6af21f0ed5edd50249264c77","component":"demo@psh_landing","system":"63d98929ddb46b0635033b23","displayName":"Landing","params":{"api":"https://demo.data2apis.com/rush/psh-api","site":"https://hangover--demo.next.data2.app/","venue":"","mapsUrl":"","super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":390,"height":844}}}},"reference":"ABDaffjNVMBz5xhY_jgmr"}]}},{"_id":"5fc4faeec8da12be8bf3d08a","component":"data2-core@Data2TableDataSource","system":"5e3b796d6228227ca637d0f4","params":{"paginate":{"default":1000},"super":{},"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"fileId"}},"title":"File ID","component":"data2-core-primitives@ObjectId"},"break":true}],"hooks":{"before":{"all":[{"hook":"softDelete"}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"timestamp","options":{"fields":["createdAt","updatedAt"]}}],"update":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}],"patch":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}]},"after":{"all":[{"hook":"fileUrl","options":{"downloadField":"params.fileUrl","uploadField":"params.uploadFileUrl","enhanceSchema":false}}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"update":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"patch":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"remove":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}]}},"multi":["create"],"useEstimatedDocumentCount":true},"reference":"FileComponentInstancesTableDataSource","updatedAt":"2022-12-19T20:42:51.837Z","createdAt":"2020-11-30T13:59:52.294Z"},{"reference":"ApplicationsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6af21fdf29761895aee23f82","displayName":"Post-Summit Hangover","reference":"utwGe4KyANWyKm-UrgAPq","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"hangover"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"zRGwR8UcvWOZHtHi5CY3q"}}},"system":"63d98929ddb46b0635033b23","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}