{"context":{"domain":"tempo"},"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":"6a45d210b5865956b508ba84","name":"Tempo","domain":"tempo","visibility":"public","settings":{"defaultAccessPolicy":"public"},"updatedAt":"2026-07-27T14:19:36.810Z","createdAt":"2026-07-02T02:50:56.722Z"}]}},{"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":"6a7f31776eae65effb23d863","component":"data2-core-types@Component","system":"6a45d210b5865956b508ba84","params":{"extends":"data2-core-primitives@Block","component":"reserva-painel","package":"tempo","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"const LOGO = 'https://tempobyporsche.com/wp-content/uploads/2026/02/logo_tempo_by_porsche_white_V.svg';\n\nconst TIPOS = { festa: 'Festa', jantar: 'Jantar', almoco: 'Almoço', cafe: 'Café da manhã', corporativo: 'Corporativo / Talks' };\nconst FORMATOS = { coquetel: 'Coquetel em pé', sentado: 'Sentado', auditorio: 'Auditório', misto: 'Misto' };\nconst INFRA = { telao: 'Telão / painel de LED', microfone: 'Microfone', som: 'Sistema de som', dj: 'DJ / pista', luz: 'Iluminação cênica', palco: 'Palco', transmissao: 'Transmissão ao vivo', wifi: 'Wi-Fi dedicado' };\nconst EXCLUSIVIDADE = { privativo: 'Espaço totalmente privativo', reservada: 'Área reservada', indiferente: 'Sem preferência' };\nconst MUSICA = { ambiente: 'Música ambiente', dj: 'DJ', aovivo: 'Música ao vivo', outros: 'Outros' };\nconst BEBIDAS = { cerveja: 'Cerveja', chopp: 'Chopp', vinho: 'Vinho', espumante: 'Espumante', drinks: 'Drinks' };\nconst CATERING = { coquetel: 'Coquetel', jantar: 'Jantar servido', buffet: 'Buffet', bebidas: 'Apenas bebidas', nenhum: 'Sem gastronomia' };\nconst REFERRAL = { indicacao: 'Indicação', membro: 'Membro TEMPO', instagram: 'Instagram', google: 'Google', imprensa: 'Imprensa', evento: 'Esteve em evento', porsche: 'Porsche', outro: 'Outro' };\n\nconst STATUS = [\n  { v: 'novo', t: 'Novo' },\n  { v: 'em_contato', t: 'Em contato' },\n  { v: 'proposta', t: 'Proposta enviada' },\n  { v: 'confirmado', t: 'Confirmado' },\n  { v: 'perdido', t: 'Perdido' },\n];\nconst ST_LABEL = STATUS.reduce((a, s) => { a[s.v] = s.t; return a; }, {});\n\nconst esc = (s) => String(s == null ? '' : s)\n  .replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n\nconst DIACRITICOS = new RegExp('[\\\\u0300-\\\\u036f]', 'g');\nconst norm = (s) => String(s == null ? '' : s).toLowerCase().normalize('NFD').replace(DIACRITICOS, '');\n\nconst MES = ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'];\nconst parts = (iso) => {\n  if (!iso || !/^\\d{4}-\\d{2}-\\d{2}/.test(iso)) return null;\n  const p = iso.slice(0, 10).split('-').map(Number);\n  return { d: p[2], m: p[1], y: p[0], js: new Date(p[0], p[1] - 1, p[2]) };\n};\nconst diaNum = (iso) => { const p = parts(iso); return p ? String(p.d).padStart(2, '0') : '—'; };\nconst mesTxt = (iso) => { const p = parts(iso); return p ? MES[p.m - 1] : ''; };\nconst diaSemana = (iso) => { const p = parts(iso); return p ? ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'][p.js.getDay()] : ''; };\nconst dataLonga = (iso) => { const p = parts(iso); return p ? `${String(p.d).padStart(2, '0')} ${MES[p.m - 1]} ${p.y} · ${diaSemana(iso)}` : '—'; };\nconst desde = (iso) => {\n  if (!iso) return '';\n  const min = Math.floor((Date.now() - new Date(iso).getTime()) / 60000);\n  if (min < 1) return 'agora';\n  if (min < 60) return min + 'min';\n  const h = Math.floor(min / 60);\n  if (h < 24) return h + 'h';\n  return Math.floor(h / 24) + 'd';\n};\n\nconst dataHora = (iso) => {\n  if (!iso) return '—';\n  const d = new Date(iso);\n  if (isNaN(d.getTime())) return '—';\n  const p = (n) => String(n).padStart(2, '0');\n  return `${p(d.getDate())}/${p(d.getMonth() + 1)}/${d.getFullYear()} às ${p(d.getHours())}:${p(d.getMinutes())}`;\n};\nconst dataCurta = (iso) => {\n  if (!iso) return '';\n  const d = new Date(iso);\n  if (isNaN(d.getTime())) return '';\n  const p = (n) => String(n).padStart(2, '0');\n  return `${p(d.getDate())}/${p(d.getMonth() + 1)}`;\n};\n\nconst pedidoTexto = (r) => {\n  const L = [];\n  const put = (k, v) => { if (v !== undefined && v !== null && v !== '') L.push(k + ': ' + v); };\n  const lista = (arr, map) => (arr || []).map((v) => map[v] || v).join(', ');\n  L.push('PEDIDO DE ORÇAMENTO · TEMPO BY PORSCHE');\n  put('Recebido em', dataHora(r.criado_em || r.createdAt));\n  L.push('');\n  L.push('CONTATO');\n  put('Nome', r.nome);\n  put('Cargo', r.cargo);\n  put('Empresa', r.empresa);\n  put('E-mail', r.email);\n  put('Telefone', r.telefone);\n  L.push('');\n  L.push('EVENTO');\n  put('Tipo', TIPOS[r.tipo_evento]);\n  put('Data', dataLonga(r.data) + (r.data_flexivel ? ' (data flexível)' : ''));\n  put('Início', r.hora_inicio);\n  put('Duração', r.duracao_horas ? r.duracao_horas + 'h' : '');\n  put('Convidados', r.pessoas);\n  put('Formato da sala', FORMATOS[r.formato]);\n  put('Exclusividade', EXCLUSIVIDADE[r.exclusividade]);\n  L.push('');\n  L.push('ESTRUTURA E AMBIENTAÇÃO');\n  put('Infra audiovisual', lista(r.infraestrutura, INFRA) || 'nenhuma');\n  put('Transmissão', r.transmissao_desc);\n  put('Música', MUSICA[r.musica] ? (MUSICA[r.musica] + (r.musica_desc ? ', ' + r.musica_desc : '')) : '');\n  put('Cenografia', r.ambientacao ? ('sim, ' + (r.ambientacao_desc || 'sem detalhe')) : 'não');\n  L.push('');\n  L.push('GASTRONOMIA E BEBIDAS');\n  put('Serviço', CATERING[r.catering]);\n  put('Restrições alimentares', r.restricoes);\n  put('Cardápio personalizado', r.cardapio_personalizado ? ('sim, ' + (r.cardapio_desc || 'sem detalhe')) : 'não');\n  put('Bebida alcoólica', r.bebidas_alcoolicas ? ('sim, ' + (lista(r.bebidas, BEBIDAS) || 'sem preferência')) : 'não');\n  put('Obs. bebidas', r.bebidas_obs);\n  L.push('');\n  L.push('ORIGEM');\n  put('Como conheceu', REFERRAL[r.referral]);\n  put('Detalhe', r.referral_detalhe);\n  if (r.observacoes) { L.push(''); L.push('OBSERVAÇÕES'); L.push(r.observacoes); }\n  return L.join('\\n');\n};\n\nexport default {\n  css: `\n    .wrap{ position:fixed; inset:0; overflow:hidden; display:flex; flex-direction:column;\n      background:#0a0a0b; color:#eae8e3; box-sizing:border-box;\n      font-family:-apple-system,BlinkMacSystemFont,'Helvetica Neue',Arial,sans-serif;\n      -webkit-font-smoothing:antialiased; }\n\n    .nav{ background:rgba(10,10,11,.9); backdrop-filter:blur(14px);\n      border-bottom:1px solid rgba(255,255,255,.08); flex:none; }\n    .nav-in{ max-width:1440px; margin:0 auto; padding:15px 30px; display:flex; align-items:center;\n      justify-content:space-between; gap:18px; box-sizing:border-box; }\n    .nav .lhs{ display:flex; align-items:center; gap:22px; }\n    .nav .logo{ height:22px; width:auto; display:block; }\n    .nav .ttl{ font-size:10.5px; letter-spacing:.24em; text-transform:uppercase; color:#a8a6a1;\n      padding-left:22px; border-left:1px solid rgba(255,255,255,.12); }\n    .nav .right{ display:flex; align-items:center; gap:16px; }\n    .ghost{ background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.16); color:#eae8e3;\n      padding:8px 16px; border-radius:999px; font-size:10.5px; letter-spacing:.12em;\n      text-transform:uppercase; cursor:pointer; font-family:inherit; text-decoration:none;\n      display:inline-block; transition:all .2s ease; }\n    .ghost:hover{ background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.34); }\n    .stamp{ font-size:10.5px; color:#5f5d58; letter-spacing:.1em; text-transform:uppercase; }\n\n    .body{ flex:1; overflow:hidden; display:flex; max-width:1440px; width:100%; margin:0 auto;\n      box-sizing:border-box; }\n    .col-list{ flex:1; min-width:0; overflow-y:auto; padding:0 30px 70px; box-sizing:border-box; }\n    .col-det{ width:430px; flex:none; border-left:1px solid rgba(255,255,255,.08);\n      overflow-y:auto; padding:28px 30px 70px; box-sizing:border-box;\n      background:linear-gradient(180deg,#121214 0%,#0d0d0f 100%); }\n\n    .kpis{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px;\n      padding:26px 0 22px; }\n    .kpi{ border:1px solid rgba(255,255,255,.07); border-radius:12px; padding:20px 22px;\n      background:radial-gradient(130% 130% at 50% 0%, #1a1a1d 0%, #0e0e10 100%);\n      transition:border-color .25s ease; }\n    .kpi:hover{ border-color:rgba(255,255,255,.16); }\n    .kpi .n{ font-size:34px; font-weight:500; letter-spacing:-.03em; line-height:1; }\n    .kpi.hi .n{ color:#f3f1ec; }\n    .kpi .l{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:#77756f; margin-top:10px; }\n\n    .filters{ display:flex; align-items:center; gap:9px; flex-wrap:wrap;\n      padding-bottom:20px; border-bottom:1px solid rgba(255,255,255,.08); }\n    .fchips{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; }\n    .chip{ background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.14); color:#a8a6a1;\n      padding:9px 16px; border-radius:999px; font-size:12.5px; font-family:inherit; cursor:pointer;\n      transition:all .2s cubic-bezier(.2,.7,.3,1); white-space:nowrap; }\n    .chip:hover{ border-color:rgba(234,232,227,.5); color:#f3f1ec; transform:translateY(-1px); }\n    .chip.on{ background:#eae8e3; border-color:#eae8e3; color:#0a0a0b; font-weight:600;\n      box-shadow:0 6px 18px rgba(234,232,227,.12); }\n    .chip .c{ opacity:.5; margin-left:7px; font-variant-numeric:tabular-nums; }\n    .search{ margin-left:auto; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.10);\n      border-radius:999px; color:#eae8e3; padding:10px 18px; font-size:13px; outline:none;\n      font-family:inherit; min-width:240px; transition:border-color .2s ease, background .2s ease; }\n    .search::placeholder{ color:#4e4c48; }\n    .search:focus{ border-color:rgba(234,232,227,.45); background:rgba(255,255,255,.06); }\n\n    .rows{ display:flex; flex-direction:column; padding-top:6px; }\n    .r{ display:flex; align-items:center; gap:20px; padding:16px 16px 16px 14px; cursor:pointer;\n      border-bottom:1px solid rgba(255,255,255,.055); border-radius:10px;\n      border-left:2px solid transparent;\n      transition:background .18s ease, border-left-color .18s ease, transform .18s cubic-bezier(.2,.7,.3,1); }\n    .r:hover{ background:rgba(255,255,255,.035); transform:translateX(2px); }\n    .r.sel{ background:rgba(255,255,255,.06); border-left-color:#eae8e3; }\n    .r .when{ width:58px; flex:none; text-align:center; }\n    .r .when .d{ font-size:23px; font-weight:500; letter-spacing:-.02em; line-height:1;\n      font-variant-numeric:tabular-nums; }\n    .r .when .w{ font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#77756f; margin-top:5px; }\n    .r .who{ flex:1; min-width:0; }\n    .r .who .n{ font-size:15.5px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n    .r .who .m{ font-size:12.5px; color:#77756f; margin-top:5px; overflow:hidden;\n      text-overflow:ellipsis; white-space:nowrap; }\n    .r .pax{ font-size:14px; color:#c9c7c2; white-space:nowrap; font-variant-numeric:tabular-nums; }\n    .r .pax b{ font-weight:500; }\n    .r .pax span{ color:#5f5d58; font-size:11px; letter-spacing:.1em; text-transform:uppercase; margin-left:4px; }\n    .r .ago{ font-size:10.5px; color:#4e4c48; width:48px; text-align:right; flex:none;\n      letter-spacing:.04em; font-variant-numeric:tabular-nums; }\n    .copyrow{ display:flex; gap:9px; margin-top:16px; }\n    .copybtn{ flex:1; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.16);\n      color:#eae8e3; padding:12px 18px; border-radius:999px; font-size:11px; letter-spacing:.12em;\n      text-transform:uppercase; cursor:pointer; font-family:inherit; transition:all .2s ease; }\n    .copybtn:hover{ background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.34); }\n    .copybtn.done{ background:#eae8e3; border-color:#eae8e3; color:#0a0a0b; font-weight:700; }\n    .tag{ font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; padding:6px 12px;\n      border-radius:999px; white-space:nowrap; border:1px solid transparent; font-weight:600; }\n    .tag.novo{ background:#eae8e3; color:#0a0a0b; }\n    .tag.em_contato{ border-color:rgba(234,232,227,.38); color:#eae8e3; }\n    .tag.proposta{ border-color:#7a6a45; color:#c8a37a; background:rgba(122,106,69,.1); }\n    .tag.confirmado{ border-color:#4c6a52; color:#8fc39b; background:rgba(76,106,82,.12); }\n    .tag.perdido{ border-color:rgba(255,255,255,.09); color:#4e4c48; }\n\n    .empty{ padding:90px 12px; text-align:center; }\n    .empty .eg{ font-family:Georgia,'Times New Roman',serif; font-style:italic; font-size:19px;\n      color:#5f5d58; }\n    .empty .es{ font-size:12.5px; color:#4e4c48; margin-top:12px; letter-spacing:.04em; }\n\n    .det-h h2{ font-size:25px; font-weight:500; margin:0; letter-spacing:-.02em; line-height:1.2; }\n    .det-h{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }\n    .det-h .x{ background:transparent; border:0; color:#5f5d58; font-size:23px; cursor:pointer;\n      line-height:1; padding:0; font-family:inherit; transition:color .2s ease; }\n    .det-h .x:hover{ color:#eae8e3; }\n    .det-sub{ font-size:12.5px; color:#77756f; margin-top:8px; letter-spacing:.02em; }\n    .det-hero{ margin-top:20px; border:1px solid rgba(255,255,255,.08); border-radius:12px;\n      padding:20px 22px; background:radial-gradient(130% 130% at 50% 0%, #1a1a1d 0%, #0e0e10 100%); }\n    .det-hero .dl{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:#77756f; }\n    .det-hero .dv{ font-size:19px; margin-top:8px; letter-spacing:-.01em; }\n    .det-hero .dx{ font-size:13px; color:#a8a6a1; margin-top:6px; }\n    .flexf{ font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:#c8a37a;\n      border:1px solid #7a6a45; border-radius:999px; padding:3px 9px; margin-left:9px;\n      vertical-align:middle; font-weight:600; }\n    .yn{ font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; font-weight:600;\n      border-radius:999px; padding:4px 10px; border:1px solid rgba(255,255,255,.14); color:#77756f; }\n    .yn.on{ border-color:rgba(234,232,227,.42); color:#eae8e3; }\n    .det-sec{ margin-top:26px; padding-top:20px; border-top:1px solid rgba(255,255,255,.08); }\n    .det-sec > .k{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase;\n      color:#77756f; margin-bottom:14px; }\n    .kv{ display:flex; gap:14px; padding:8px 0; font-size:13.5px; margin:0; }\n    .kv dt{ color:#77756f; width:112px; flex:none; }\n    .kv dd{ margin:0; flex:1; color:#eae8e3; }\n    .pills{ display:flex; flex-wrap:wrap; gap:7px; }\n    .pills span{ border:1px solid rgba(255,255,255,.14); color:#c9c7c2; font-size:12px;\n      padding:6px 13px; border-radius:999px; background:rgba(255,255,255,.03); }\n    .obs{ font-family:Georgia,'Times New Roman',serif; font-style:italic; font-size:14.5px;\n      line-height:1.75; color:#dcdad5; white-space:pre-wrap; }\n    .acts{ display:flex; gap:9px; flex-wrap:wrap; margin-top:16px; }\n    .stbtns{ display:flex; flex-wrap:wrap; gap:7px; }\n    .stbtn{ background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.14); color:#a8a6a1;\n      padding:9px 15px; border-radius:999px; font-size:12px; cursor:pointer; font-family:inherit;\n      transition:all .2s cubic-bezier(.2,.7,.3,1); }\n    .stbtn:hover{ border-color:rgba(234,232,227,.5); color:#f3f1ec; transform:translateY(-1px); }\n    .stbtn.on{ background:#eae8e3; border-color:#eae8e3; color:#0a0a0b; font-weight:600;\n      box-shadow:0 6px 18px rgba(234,232,227,.12); }\n    .stbtn[disabled]{ opacity:.4; cursor:default; transform:none; }\n\n    .backbar{ display:none; background:rgba(255,255,255,.05);\n      border:1px solid rgba(255,255,255,.16); color:#eae8e3; font-family:inherit;\n      font-size:11px; letter-spacing:.12em; text-transform:uppercase; padding:11px 18px;\n      border-radius:999px; cursor:pointer; margin-bottom:22px; }\n\n    /* ── tablet ── */\n    @media (max-width:1100px){\n      .col-det{ width:370px; padding:24px 22px 60px; }\n      .col-list{ padding:0 22px 60px; }\n      .nav-in{ padding:14px 22px; }\n      .r{ gap:14px; }\n      .r .ago{ display:none; }\n    }\n\n    /* ── mobile ── */\n    @media (max-width:820px){\n      .nav-in{ padding:12px 18px; }\n      .nav .logo{ height:19px; }\n      .nav .ttl{ display:none; }\n      .stamp{ display:none; }\n\n      .col-list{ padding:0 18px 70px; }\n      .kpis{ grid-template-columns:repeat(2,1fr); gap:9px; padding:20px 0 18px; }\n      .kpi{ padding:15px 16px; border-radius:11px; }\n      .kpi .n{ font-size:26px; }\n      .kpi .l{ font-size:9px; letter-spacing:.16em; margin-top:7px; }\n      .kpi:last-child{ grid-column:1 / -1; }\n\n      .filters{ display:block; padding-bottom:16px; }\n      .fchips{ display:flex; gap:8px; overflow-x:auto; padding-bottom:10px;\n        -webkit-overflow-scrolling:touch; scrollbar-width:none; }\n      .fchips::-webkit-scrollbar{ display:none; }\n      .chip{ flex:none; padding:9px 15px; font-size:12.5px; }\n      .search{ margin:10px 0 0; width:100%; min-width:0; box-sizing:border-box; font-size:16px; }\n\n      .r{ gap:13px; padding:14px 10px; align-items:flex-start; flex-wrap:wrap; }\n      .r .when{ width:46px; }\n      .r .when .d{ font-size:20px; }\n      .r .when .w{ font-size:9px; letter-spacing:.12em; }\n      .r .who{ flex:1 1 auto; }\n      .r .who .n{ font-size:15px; white-space:normal; }\n      .r .who .m{ white-space:normal; line-height:1.45; }\n      .r .pax{ font-size:13px; }\n      .r .tag{ order:5; margin-left:59px; }\n\n      .col-det{ display:none; }\n      .col-det.open{ display:block; position:fixed; inset:0; width:auto; z-index:80;\n        border-left:0; padding:20px 18px 70px; overflow-y:auto;\n        background:linear-gradient(180deg,#121214 0%,#0a0a0b 100%); }\n      .backbar{ display:inline-block; }\n      .det-h .x{ display:none; }\n      .det-h h2{ font-size:22px; }\n      .det-hero{ padding:18px 18px; }\n      .det-hero .dv{ font-size:17px; }\n      .kv{ font-size:13px; }\n      .kv dt{ width:96px; }\n      .stbtn{ padding:10px 15px; }\n      .acts .ghost{ flex:1; text-align:center; }\n    }\n  `,\n\n  render(d2) {\n    const st = d2.state;\n    const all = st.rows || [];\n    const f = st.filtro || 'todos';\n    const q = norm(st.q || '');\n\n    const count = (v) => all.filter((r) => (r.status || 'novo') === v).length;\n\n    let list = all;\n    if (f !== 'todos') list = list.filter((r) => (r.status || 'novo') === f);\n    if (q) {\n      list = list.filter((r) => norm([r.nome, r.empresa, r.email, r.telefone, TIPOS[r.tipo_evento], REFERRAL[r.referral], r.referral_detalhe].join(' ')).indexOf(q) >= 0);\n    }\n\n    const abertos = all.filter((r) => ['novo', 'em_contato', 'proposta'].indexOf(r.status || 'novo') >= 0);\n    const confirmados = all.filter((r) => r.status === 'confirmado');\n    const paxConf = confirmados.reduce((a, r) => a + (Number(r.pessoas) || 0), 0);\n\n    const kpis = `<div class=\"kpis\">\n      <div class=\"kpi hi\"><div class=\"n\">${all.length}</div><div class=\"l\">Pedidos</div></div>\n      <div class=\"kpi\"><div class=\"n\">${count('novo')}</div><div class=\"l\">Novos</div></div>\n      <div class=\"kpi\"><div class=\"n\">${abertos.length}</div><div class=\"l\">Em aberto</div></div>\n      <div class=\"kpi\"><div class=\"n\">${confirmados.length}</div><div class=\"l\">Confirmados</div></div>\n      <div class=\"kpi\"><div class=\"n\">${paxConf}</div><div class=\"l\">Convidados confirmados</div></div>\n    </div>`;\n\n    const fchip = (v, t, n) => `<button class=\"chip${f === v ? ' on' : ''}\" data-f=\"${v}\">${esc(t)}${n != null ? `<span class=\"c\">${n}</span>` : ''}</button>`;\n    const filtros = `<div class=\"filters\">\n      <div class=\"fchips\">\n        ${fchip('todos', 'Todos', all.length)}\n        ${STATUS.map((s) => fchip(s.v, s.t, count(s.v))).join('')}\n      </div>\n      <input class=\"search q\" placeholder=\"Buscar nome, empresa, e-mail…\" value=\"${esc(st.q || '')}\">\n    </div>`;\n\n    let rows;\n    if (st.loading) {\n      rows = `<div class=\"empty\"><div class=\"eg\">Carregando pedidos…</div></div>`;\n    } else if (st.err) {\n      rows = `<div class=\"empty\"><div class=\"eg\">${esc(st.err)}</div>\n        <div class=\"es\"><button class=\"ghost reload\" style=\"margin-top:16px\">Tentar de novo</button></div></div>`;\n    } else if (!list.length) {\n      rows = `<div class=\"empty\"><div class=\"eg\">${all.length ? 'Nada por aqui.' : 'Ainda não chegou nenhum pedido.'}</div>\n        <div class=\"es\">${all.length ? 'Ajuste o filtro ou limpe a busca.' : 'Assim que o formulário for enviado, ele aparece nesta lista.'}</div></div>`;\n    } else {\n      rows = `<div class=\"rows\">` + list.map((r) => {\n        const stt = r.status || 'novo';\n        const meta = [r.empresa, TIPOS[r.tipo_evento], r.hora_inicio, REFERRAL[r.referral]].filter(Boolean).join(' · ');\n        return `<div class=\"r${st.sel === r._id ? ' sel' : ''}\" data-id=\"${esc(r._id)}\" data-key=\"${esc(r._id)}\">\n          <div class=\"when\"><div class=\"d\">${diaNum(r.data)}</div><div class=\"w\">${mesTxt(r.data)} · ${diaSemana(r.data)}</div></div>\n          <div class=\"who\"><div class=\"n\">${esc(r.nome || '—')}</div><div class=\"m\">${esc(meta)}</div></div>\n          <div class=\"pax\"><b>${r.pessoas || '—'}</b><span>pessoas</span></div>\n          <span class=\"tag ${stt}\">${esc(ST_LABEL[stt] || stt)}</span>\n          <div class=\"ago\" title=\"Recebido em ${esc(dataHora(r.criado_em || r.createdAt))}\">${dataCurta(r.criado_em || r.createdAt)}</div>\n        </div>`;\n      }).join('') + `</div>`;\n    }\n\n    const sel = all.find((r) => r._id === st.sel);\n    let det = '';\n    if (sel) {\n      const stt = sel.status || 'novo';\n      const infra = (sel.infraestrutura || []).map((v) => `<span>${esc(INFRA[v] || v)}</span>`).join('');\n      const kv = (k, v) => `<dl class=\"kv\"><dt>${k}</dt><dd>${esc(v || '—')}</dd></dl>`;\n      const tel = String(sel.telefone || '').replace(/\\D/g, '');\n      det = `<div class=\"col-det open\">\n        <button class=\"backbar close\">← Voltar para a lista</button>\n        <div class=\"det-h\">\n          <div><h2>${esc(sel.nome || '—')}</h2>\n            <div class=\"det-sub\">${esc(sel.empresa || 'Sem empresa')}${sel.cargo ? ' · ' + esc(sel.cargo) : ''}</div>\n            <div class=\"det-sub\">Recebido em ${esc(dataHora(sel.criado_em || sel.createdAt))} · há ${desde(sel.criado_em || sel.createdAt)}</div></div>\n          <button class=\"x close\">×</button>\n        </div>\n\n        <div class=\"det-hero\">\n          <div class=\"dl\">${esc(TIPOS[sel.tipo_evento] || 'Evento')}</div>\n          <div class=\"dv\">${esc(dataLonga(sel.data))}${sel.data_flexivel ? ' <span class=\"flexf\">flexível</span>' : ''}</div>\n          <div class=\"dx\">${esc(sel.hora_inicio || '—')}${sel.duracao_horas ? ' · ' + sel.duracao_horas + 'h' : ''} · ${sel.pessoas || '—'} convidados${sel.formato ? ' · ' + esc(FORMATOS[sel.formato] || sel.formato) : ''}</div>\n        </div>\n\n        <div class=\"copyrow\">\n          <button class=\"copybtn${st.copied === sel._id ? ' done' : ''}\">${st.copied === sel._id ? '✓ Copiado' : (st.copied === 'erro' ? 'Não consegui copiar' : 'Copiar pedido em texto')}</button>\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Status</div>\n          <div class=\"stbtns\">${STATUS.map((s) => `<button class=\"stbtn${stt === s.v ? ' on' : ''}\" data-st=\"${s.v}\"${st.saving ? ' disabled' : ''}>${esc(s.t)}</button>`).join('')}</div>\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Espaço</div>\n          ${kv('Exclusividade', EXCLUSIVIDADE[sel.exclusividade])}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Estrutura e ambientação</div>\n          ${infra ? `<div class=\"pills\">${infra}</div>` : `<div class=\"det-sub\" style=\"margin:0\">Nenhuma infra selecionada</div>`}\n          ${sel.transmissao_desc ? `<div style=\"margin-top:14px\">${kv('Transmissão', sel.transmissao_desc)}</div>` : ''}\n          <div style=\"margin-top:14px\">${kv('Música', MUSICA[sel.musica])}</div>\n          ${sel.musica_desc ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.musica_desc)}”</div>` : ''}\n          <dl class=\"kv\"><dt>Cenografia</dt><dd><span class=\"yn${sel.ambientacao ? ' on' : ''}\">${sel.ambientacao ? 'Sim' : 'Não'}</span></dd></dl>\n          ${sel.ambientacao_desc ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.ambientacao_desc)}”</div>` : ''}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Gastronomia e bebidas</div>\n          ${kv('Serviço', CATERING[sel.catering])}\n          ${sel.restricoes ? kv('Restrições', sel.restricoes) : ''}\n          <dl class=\"kv\"><dt>Cardápio</dt><dd><span class=\"yn${sel.cardapio_personalizado ? ' on' : ''}\">${sel.cardapio_personalizado ? 'Personalizado' : 'Padrão'}</span></dd></dl>\n          ${sel.cardapio_desc ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.cardapio_desc)}”</div>` : ''}\n          <dl class=\"kv\"><dt>Álcool</dt><dd><span class=\"yn${sel.bebidas_alcoolicas ? ' on' : ''}\">${sel.bebidas_alcoolicas ? 'Sim' : 'Não'}</span></dd></dl>\n          ${(sel.bebidas || []).length ? `<div class=\"pills\" style=\"margin-top:10px\">${(sel.bebidas || []).map((v) => `<span>${esc(BEBIDAS[v] || v)}</span>`).join('')}</div>` : ''}\n          ${sel.bebidas_obs ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.bebidas_obs)}”</div>` : ''}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Origem</div>\n          ${kv('Como conheceu', REFERRAL[sel.referral])}\n          ${kv('Detalhe', sel.referral_detalhe)}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Contato</div>\n          ${sel.cargo ? kv('Cargo', sel.cargo) : ''}\n          ${kv('E-mail', sel.email)}\n          ${kv('Telefone', sel.telefone)}\n          <div class=\"acts\">\n            <a class=\"ghost\" href=\"mailto:${esc(sel.email)}?subject=${encodeURIComponent('TEMPO by Porsche — seu pedido de reserva')}\">E-mail</a>\n            ${tel.length >= 10 ? `<a class=\"ghost\" href=\"https://wa.me/${tel.length > 11 ? tel : '55' + tel}\" target=\"_blank\" rel=\"noopener\">WhatsApp</a>` : ''}\n          </div>\n        </div>\n\n        ${sel.observacoes ? `<div class=\"det-sec\"><div class=\"k\">Observações</div><div class=\"obs\">“${esc(sel.observacoes)}”</div></div>` : ''}\n      </div>`;\n    }\n\n    return `<div class=\"wrap\">\n      <div class=\"nav\"><div class=\"nav-in\">\n        <div class=\"lhs\">\n          <img class=\"logo\" src=\"${LOGO}\" alt=\"TEMPO by Porsche\">\n          <span class=\"ttl\">Reservas de espaço</span>\n        </div>\n        <div class=\"right\">\n          <span class=\"stamp\">${st.stamp ? 'atualizado há ' + desde(st.stamp) : ''}</span>\n          <button class=\"ghost reload\">Atualizar</button>\n        </div>\n      </div></div>\n      <div class=\"body\">\n        <div class=\"col-list\">${kpis}${filtros}${rows}</div>\n        ${det}\n      </div>\n    </div>`;\n  },\n\n  mounted(d2) {\n    const API = d2.param('api') || 'reserva-espaco-api';\n\n    const load = async () => {\n      d2.state.loading = !(d2.state.rows || []).length;\n      d2.state.err = '';\n      try {\n        const res = await d2.rush(API).invoke({ action: 'list' });\n        const out = res && res.data !== undefined ? res.data : res;\n        if (out && out.ok) {\n          d2.setState({ rows: out.reservas || [], stamp: new Date().toISOString() });\n        } else {\n          d2.state.err = 'Não foi possível carregar os pedidos.';\n        }\n      } catch (e) {\n        d2.log('list err', e);\n        d2.state.err = 'Erro de conexão ao carregar.';\n      } finally {\n        d2.state.loading = false;\n      }\n    };\n    load();\n\n    const t = setInterval(load, 60000);\n    d2.onUnmount(() => clearInterval(t));\n\n    d2.on('.reload', 'click', () => load());\n    d2.on('.chip', 'click', (e, el) => { d2.state.filtro = el.dataset.f; });\n    d2.on('.q', 'input', (e, el) => { d2.state.q = el.value; });\n    d2.on('.r', 'click', (e, el) => { d2.state.sel = el.dataset.id; });\n    d2.on('.close', 'click', () => { d2.setState({ sel: null, copied: '' }); });\n\n    d2.on('.copybtn', 'click', async () => {\n      const sel = (d2.state.rows || []).find((r) => r._id === d2.state.sel);\n      if (!sel) return;\n      const txt = pedidoTexto(sel);\n      let ok = false;\n      try {\n        if (navigator.clipboard && navigator.clipboard.writeText) {\n          await navigator.clipboard.writeText(txt);\n          ok = true;\n        }\n      } catch (e) { ok = false; }\n      if (!ok) {\n        try {\n          const ta = document.createElement('textarea');\n          ta.value = txt;\n          ta.style.position = 'fixed';\n          ta.style.top = '-1000px';\n          ta.style.opacity = '0';\n          (d2.root || document.body).appendChild(ta);\n          ta.focus();\n          ta.select();\n          ok = document.execCommand('copy');\n          ta.parentNode.removeChild(ta);\n        } catch (e2) { ok = false; }\n      }\n      d2.state.copied = ok ? sel._id : 'erro';\n      setTimeout(() => { d2.state.copied = ''; }, 2400);\n    });\n\n    d2.on('.stbtn', 'click', async (e, el) => {\n      const id = d2.state.sel;\n      const novo = el.dataset.st;\n      if (!id || d2.state.saving) return;\n      d2.state.saving = true;\n      try {\n        const res = await d2.rush(API).invoke({ action: 'status', id, status: novo });\n        const out = res && res.data !== undefined ? res.data : res;\n        if (out && out.ok) {\n          d2.state.rows = (d2.state.rows || []).map((r) => (r._id === id ? Object.assign({}, r, { status: novo }) : r));\n        }\n      } catch (err) {\n        d2.log('status err', err);\n      } finally {\n        d2.state.saving = false;\n      }\n    });\n  },\n};"}},"api":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"api"}}}}}}}},"__d2PrevCode":{"code":"const LOGO = 'https://tempobyporsche.com/wp-content/uploads/2026/02/logo_tempo_by_porsche_white_V.svg';\n\nconst TIPOS = { festa: 'Festa', jantar: 'Jantar', almoco: 'Almoço', cafe: 'Café da manhã', corporativo: 'Corporativo / Talks' };\nconst FORMATOS = { coquetel: 'Coquetel em pé', sentado: 'Sentado', auditorio: 'Auditório', misto: 'Misto' };\nconst INFRA = { telao: 'Telão / painel de LED', microfone: 'Microfone', som: 'Sistema de som', dj: 'DJ / pista', luz: 'Iluminação cênica', palco: 'Palco', transmissao: 'Transmissão ao vivo', wifi: 'Wi-Fi dedicado' };\nconst EXCLUSIVIDADE = { privativo: 'Espaço totalmente privativo', reservada: 'Área reservada', indiferente: 'Sem preferência' };\nconst MUSICA = { ambiente: 'Música ambiente', dj: 'DJ', aovivo: 'Música ao vivo', nenhuma: 'Não precisa' };\nconst BEBIDAS = { cerveja: 'Cerveja', chopp: 'Chopp', vinho: 'Vinho', espumante: 'Espumante', drinks: 'Drinks' };\nconst CATERING = { coquetel: 'Coquetel', jantar: 'Jantar servido', buffet: 'Buffet', bebidas: 'Apenas bebidas', nenhum: 'Sem gastronomia' };\nconst REFERRAL = { indicacao: 'Indicação', membro: 'Membro TEMPO', instagram: 'Instagram', google: 'Google', imprensa: 'Imprensa', evento: 'Esteve em evento', porsche: 'Porsche', outro: 'Outro' };\n\nconst STATUS = [\n  { v: 'novo', t: 'Novo' },\n  { v: 'em_contato', t: 'Em contato' },\n  { v: 'proposta', t: 'Proposta enviada' },\n  { v: 'confirmado', t: 'Confirmado' },\n  { v: 'perdido', t: 'Perdido' },\n];\nconst ST_LABEL = STATUS.reduce((a, s) => { a[s.v] = s.t; return a; }, {});\n\nconst esc = (s) => String(s == null ? '' : s)\n  .replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n\nconst DIACRITICOS = new RegExp('[\\\\u0300-\\\\u036f]', 'g');\nconst norm = (s) => String(s == null ? '' : s).toLowerCase().normalize('NFD').replace(DIACRITICOS, '');\n\nconst MES = ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'];\nconst parts = (iso) => {\n  if (!iso || !/^\\d{4}-\\d{2}-\\d{2}/.test(iso)) return null;\n  const p = iso.slice(0, 10).split('-').map(Number);\n  return { d: p[2], m: p[1], y: p[0], js: new Date(p[0], p[1] - 1, p[2]) };\n};\nconst diaNum = (iso) => { const p = parts(iso); return p ? String(p.d).padStart(2, '0') : '—'; };\nconst mesTxt = (iso) => { const p = parts(iso); return p ? MES[p.m - 1] : ''; };\nconst diaSemana = (iso) => { const p = parts(iso); return p ? ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'][p.js.getDay()] : ''; };\nconst dataLonga = (iso) => { const p = parts(iso); return p ? `${String(p.d).padStart(2, '0')} ${MES[p.m - 1]} ${p.y} · ${diaSemana(iso)}` : '—'; };\nconst desde = (iso) => {\n  if (!iso) return '';\n  const min = Math.floor((Date.now() - new Date(iso).getTime()) / 60000);\n  if (min < 1) return 'agora';\n  if (min < 60) return min + 'min';\n  const h = Math.floor(min / 60);\n  if (h < 24) return h + 'h';\n  return Math.floor(h / 24) + 'd';\n};\n\nconst dataHora = (iso) => {\n  if (!iso) return '—';\n  const d = new Date(iso);\n  if (isNaN(d.getTime())) return '—';\n  const p = (n) => String(n).padStart(2, '0');\n  return `${p(d.getDate())}/${p(d.getMonth() + 1)}/${d.getFullYear()} às ${p(d.getHours())}:${p(d.getMinutes())}`;\n};\nconst dataCurta = (iso) => {\n  if (!iso) return '';\n  const d = new Date(iso);\n  if (isNaN(d.getTime())) return '';\n  const p = (n) => String(n).padStart(2, '0');\n  return `${p(d.getDate())}/${p(d.getMonth() + 1)}`;\n};\n\nconst pedidoTexto = (r) => {\n  const L = [];\n  const put = (k, v) => { if (v !== undefined && v !== null && v !== '') L.push(k + ': ' + v); };\n  const lista = (arr, map) => (arr || []).map((v) => map[v] || v).join(', ');\n  L.push('PEDIDO DE ORÇAMENTO — TEMPO BY PORSCHE');\n  put('Recebido em', dataHora(r.criado_em || r.createdAt));\n  L.push('');\n  L.push('CONTATO');\n  put('Nome', r.nome);\n  put('Cargo', r.cargo);\n  put('Empresa', r.empresa);\n  put('E-mail', r.email);\n  put('Telefone', r.telefone);\n  L.push('');\n  L.push('EVENTO');\n  put('Tipo', TIPOS[r.tipo_evento]);\n  put('Data', dataLonga(r.data) + (r.data_flexivel ? ' (data flexível)' : ''));\n  put('Início', r.hora_inicio);\n  put('Duração', r.duracao_horas ? r.duracao_horas + 'h' : '');\n  put('Convidados', r.pessoas);\n  put('Formato da sala', FORMATOS[r.formato]);\n  put('Exclusividade', EXCLUSIVIDADE[r.exclusividade]);\n  L.push('');\n  L.push('ESTRUTURA E AMBIENTAÇÃO');\n  put('Infra audiovisual', lista(r.infraestrutura, INFRA) || 'nenhuma');\n  put('Transmissão', r.transmissao_desc);\n  put('Música', MUSICA[r.musica]);\n  put('Cenografia', r.ambientacao ? ('sim' + (r.ambientacao_desc ? ' — ' + r.ambientacao_desc : '')) : 'não');\n  L.push('');\n  L.push('GASTRONOMIA E BEBIDAS');\n  put('Serviço', CATERING[r.catering]);\n  put('Restrições alimentares', r.restricoes);\n  put('Cardápio personalizado', r.cardapio_personalizado ? ('sim' + (r.cardapio_desc ? ' — ' + r.cardapio_desc : '')) : 'não');\n  put('Bebida alcoólica', r.bebidas_alcoolicas ? ('sim' + (lista(r.bebidas, BEBIDAS) ? ' — ' + lista(r.bebidas, BEBIDAS) : '')) : 'não');\n  put('Obs. bebidas', r.bebidas_obs);\n  L.push('');\n  L.push('ORIGEM');\n  put('Como conheceu', REFERRAL[r.referral]);\n  put('Detalhe', r.referral_detalhe);\n  if (r.observacoes) { L.push(''); L.push('OBSERVAÇÕES'); L.push(r.observacoes); }\n  return L.join('\\n');\n};\n\nexport default {\n  css: `\n    .wrap{ position:fixed; inset:0; overflow:hidden; display:flex; flex-direction:column;\n      background:#0a0a0b; color:#eae8e3; box-sizing:border-box;\n      font-family:-apple-system,BlinkMacSystemFont,'Helvetica Neue',Arial,sans-serif;\n      -webkit-font-smoothing:antialiased; }\n\n    .nav{ background:rgba(10,10,11,.9); backdrop-filter:blur(14px);\n      border-bottom:1px solid rgba(255,255,255,.08); flex:none; }\n    .nav-in{ max-width:1440px; margin:0 auto; padding:15px 30px; display:flex; align-items:center;\n      justify-content:space-between; gap:18px; box-sizing:border-box; }\n    .nav .lhs{ display:flex; align-items:center; gap:22px; }\n    .nav .logo{ height:22px; width:auto; display:block; }\n    .nav .ttl{ font-size:10.5px; letter-spacing:.24em; text-transform:uppercase; color:#a8a6a1;\n      padding-left:22px; border-left:1px solid rgba(255,255,255,.12); }\n    .nav .right{ display:flex; align-items:center; gap:16px; }\n    .ghost{ background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.16); color:#eae8e3;\n      padding:8px 16px; border-radius:999px; font-size:10.5px; letter-spacing:.12em;\n      text-transform:uppercase; cursor:pointer; font-family:inherit; text-decoration:none;\n      display:inline-block; transition:all .2s ease; }\n    .ghost:hover{ background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.34); }\n    .stamp{ font-size:10.5px; color:#5f5d58; letter-spacing:.1em; text-transform:uppercase; }\n\n    .body{ flex:1; overflow:hidden; display:flex; max-width:1440px; width:100%; margin:0 auto;\n      box-sizing:border-box; }\n    .col-list{ flex:1; min-width:0; overflow-y:auto; padding:0 30px 70px; box-sizing:border-box; }\n    .col-det{ width:430px; flex:none; border-left:1px solid rgba(255,255,255,.08);\n      overflow-y:auto; padding:28px 30px 70px; box-sizing:border-box;\n      background:linear-gradient(180deg,#121214 0%,#0d0d0f 100%); }\n\n    .kpis{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px;\n      padding:26px 0 22px; }\n    .kpi{ border:1px solid rgba(255,255,255,.07); border-radius:12px; padding:20px 22px;\n      background:radial-gradient(130% 130% at 50% 0%, #1a1a1d 0%, #0e0e10 100%);\n      transition:border-color .25s ease; }\n    .kpi:hover{ border-color:rgba(255,255,255,.16); }\n    .kpi .n{ font-size:34px; font-weight:500; letter-spacing:-.03em; line-height:1; }\n    .kpi.hi .n{ color:#f3f1ec; }\n    .kpi .l{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:#77756f; margin-top:10px; }\n\n    .filters{ display:flex; align-items:center; gap:9px; flex-wrap:wrap;\n      padding-bottom:20px; border-bottom:1px solid rgba(255,255,255,.08); }\n    .fchips{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; }\n    .chip{ background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.14); color:#a8a6a1;\n      padding:9px 16px; border-radius:999px; font-size:12.5px; font-family:inherit; cursor:pointer;\n      transition:all .2s cubic-bezier(.2,.7,.3,1); white-space:nowrap; }\n    .chip:hover{ border-color:rgba(234,232,227,.5); color:#f3f1ec; transform:translateY(-1px); }\n    .chip.on{ background:#eae8e3; border-color:#eae8e3; color:#0a0a0b; font-weight:600;\n      box-shadow:0 6px 18px rgba(234,232,227,.12); }\n    .chip .c{ opacity:.5; margin-left:7px; font-variant-numeric:tabular-nums; }\n    .search{ margin-left:auto; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.10);\n      border-radius:999px; color:#eae8e3; padding:10px 18px; font-size:13px; outline:none;\n      font-family:inherit; min-width:240px; transition:border-color .2s ease, background .2s ease; }\n    .search::placeholder{ color:#4e4c48; }\n    .search:focus{ border-color:rgba(234,232,227,.45); background:rgba(255,255,255,.06); }\n\n    .rows{ display:flex; flex-direction:column; padding-top:6px; }\n    .r{ display:flex; align-items:center; gap:20px; padding:16px 16px 16px 14px; cursor:pointer;\n      border-bottom:1px solid rgba(255,255,255,.055); border-radius:10px;\n      border-left:2px solid transparent;\n      transition:background .18s ease, border-left-color .18s ease, transform .18s cubic-bezier(.2,.7,.3,1); }\n    .r:hover{ background:rgba(255,255,255,.035); transform:translateX(2px); }\n    .r.sel{ background:rgba(255,255,255,.06); border-left-color:#eae8e3; }\n    .r .when{ width:58px; flex:none; text-align:center; }\n    .r .when .d{ font-size:23px; font-weight:500; letter-spacing:-.02em; line-height:1;\n      font-variant-numeric:tabular-nums; }\n    .r .when .w{ font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#77756f; margin-top:5px; }\n    .r .who{ flex:1; min-width:0; }\n    .r .who .n{ font-size:15.5px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n    .r .who .m{ font-size:12.5px; color:#77756f; margin-top:5px; overflow:hidden;\n      text-overflow:ellipsis; white-space:nowrap; }\n    .r .pax{ font-size:14px; color:#c9c7c2; white-space:nowrap; font-variant-numeric:tabular-nums; }\n    .r .pax b{ font-weight:500; }\n    .r .pax span{ color:#5f5d58; font-size:11px; letter-spacing:.1em; text-transform:uppercase; margin-left:4px; }\n    .r .ago{ font-size:10.5px; color:#4e4c48; width:48px; text-align:right; flex:none;\n      letter-spacing:.04em; font-variant-numeric:tabular-nums; }\n    .copyrow{ display:flex; gap:9px; margin-top:16px; }\n    .copybtn{ flex:1; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.16);\n      color:#eae8e3; padding:12px 18px; border-radius:999px; font-size:11px; letter-spacing:.12em;\n      text-transform:uppercase; cursor:pointer; font-family:inherit; transition:all .2s ease; }\n    .copybtn:hover{ background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.34); }\n    .copybtn.done{ background:#eae8e3; border-color:#eae8e3; color:#0a0a0b; font-weight:700; }\n    .tag{ font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; padding:6px 12px;\n      border-radius:999px; white-space:nowrap; border:1px solid transparent; font-weight:600; }\n    .tag.novo{ background:#eae8e3; color:#0a0a0b; }\n    .tag.em_contato{ border-color:rgba(234,232,227,.38); color:#eae8e3; }\n    .tag.proposta{ border-color:#7a6a45; color:#c8a37a; background:rgba(122,106,69,.1); }\n    .tag.confirmado{ border-color:#4c6a52; color:#8fc39b; background:rgba(76,106,82,.12); }\n    .tag.perdido{ border-color:rgba(255,255,255,.09); color:#4e4c48; }\n\n    .empty{ padding:90px 12px; text-align:center; }\n    .empty .eg{ font-family:Georgia,'Times New Roman',serif; font-style:italic; font-size:19px;\n      color:#5f5d58; }\n    .empty .es{ font-size:12.5px; color:#4e4c48; margin-top:12px; letter-spacing:.04em; }\n\n    .det-h h2{ font-size:25px; font-weight:500; margin:0; letter-spacing:-.02em; line-height:1.2; }\n    .det-h{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }\n    .det-h .x{ background:transparent; border:0; color:#5f5d58; font-size:23px; cursor:pointer;\n      line-height:1; padding:0; font-family:inherit; transition:color .2s ease; }\n    .det-h .x:hover{ color:#eae8e3; }\n    .det-sub{ font-size:12.5px; color:#77756f; margin-top:8px; letter-spacing:.02em; }\n    .det-hero{ margin-top:20px; border:1px solid rgba(255,255,255,.08); border-radius:12px;\n      padding:20px 22px; background:radial-gradient(130% 130% at 50% 0%, #1a1a1d 0%, #0e0e10 100%); }\n    .det-hero .dl{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:#77756f; }\n    .det-hero .dv{ font-size:19px; margin-top:8px; letter-spacing:-.01em; }\n    .det-hero .dx{ font-size:13px; color:#a8a6a1; margin-top:6px; }\n    .flexf{ font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:#c8a37a;\n      border:1px solid #7a6a45; border-radius:999px; padding:3px 9px; margin-left:9px;\n      vertical-align:middle; font-weight:600; }\n    .yn{ font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; font-weight:600;\n      border-radius:999px; padding:4px 10px; border:1px solid rgba(255,255,255,.14); color:#77756f; }\n    .yn.on{ border-color:rgba(234,232,227,.42); color:#eae8e3; }\n    .det-sec{ margin-top:26px; padding-top:20px; border-top:1px solid rgba(255,255,255,.08); }\n    .det-sec > .k{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase;\n      color:#77756f; margin-bottom:14px; }\n    .kv{ display:flex; gap:14px; padding:8px 0; font-size:13.5px; margin:0; }\n    .kv dt{ color:#77756f; width:112px; flex:none; }\n    .kv dd{ margin:0; flex:1; color:#eae8e3; }\n    .pills{ display:flex; flex-wrap:wrap; gap:7px; }\n    .pills span{ border:1px solid rgba(255,255,255,.14); color:#c9c7c2; font-size:12px;\n      padding:6px 13px; border-radius:999px; background:rgba(255,255,255,.03); }\n    .obs{ font-family:Georgia,'Times New Roman',serif; font-style:italic; font-size:14.5px;\n      line-height:1.75; color:#dcdad5; white-space:pre-wrap; }\n    .acts{ display:flex; gap:9px; flex-wrap:wrap; margin-top:16px; }\n    .stbtns{ display:flex; flex-wrap:wrap; gap:7px; }\n    .stbtn{ background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.14); color:#a8a6a1;\n      padding:9px 15px; border-radius:999px; font-size:12px; cursor:pointer; font-family:inherit;\n      transition:all .2s cubic-bezier(.2,.7,.3,1); }\n    .stbtn:hover{ border-color:rgba(234,232,227,.5); color:#f3f1ec; transform:translateY(-1px); }\n    .stbtn.on{ background:#eae8e3; border-color:#eae8e3; color:#0a0a0b; font-weight:600;\n      box-shadow:0 6px 18px rgba(234,232,227,.12); }\n    .stbtn[disabled]{ opacity:.4; cursor:default; transform:none; }\n\n    .backbar{ display:none; background:rgba(255,255,255,.05);\n      border:1px solid rgba(255,255,255,.16); color:#eae8e3; font-family:inherit;\n      font-size:11px; letter-spacing:.12em; text-transform:uppercase; padding:11px 18px;\n      border-radius:999px; cursor:pointer; margin-bottom:22px; }\n\n    /* ── tablet ── */\n    @media (max-width:1100px){\n      .col-det{ width:370px; padding:24px 22px 60px; }\n      .col-list{ padding:0 22px 60px; }\n      .nav-in{ padding:14px 22px; }\n      .r{ gap:14px; }\n      .r .ago{ display:none; }\n    }\n\n    /* ── mobile ── */\n    @media (max-width:820px){\n      .nav-in{ padding:12px 18px; }\n      .nav .logo{ height:19px; }\n      .nav .ttl{ display:none; }\n      .stamp{ display:none; }\n\n      .col-list{ padding:0 18px 70px; }\n      .kpis{ grid-template-columns:repeat(2,1fr); gap:9px; padding:20px 0 18px; }\n      .kpi{ padding:15px 16px; border-radius:11px; }\n      .kpi .n{ font-size:26px; }\n      .kpi .l{ font-size:9px; letter-spacing:.16em; margin-top:7px; }\n      .kpi:last-child{ grid-column:1 / -1; }\n\n      .filters{ display:block; padding-bottom:16px; }\n      .fchips{ display:flex; gap:8px; overflow-x:auto; padding-bottom:10px;\n        -webkit-overflow-scrolling:touch; scrollbar-width:none; }\n      .fchips::-webkit-scrollbar{ display:none; }\n      .chip{ flex:none; padding:9px 15px; font-size:12.5px; }\n      .search{ margin:10px 0 0; width:100%; min-width:0; box-sizing:border-box; font-size:16px; }\n\n      .r{ gap:13px; padding:14px 10px; align-items:flex-start; flex-wrap:wrap; }\n      .r .when{ width:46px; }\n      .r .when .d{ font-size:20px; }\n      .r .when .w{ font-size:9px; letter-spacing:.12em; }\n      .r .who{ flex:1 1 auto; }\n      .r .who .n{ font-size:15px; white-space:normal; }\n      .r .who .m{ white-space:normal; line-height:1.45; }\n      .r .pax{ font-size:13px; }\n      .r .tag{ order:5; margin-left:59px; }\n\n      .col-det{ display:none; }\n      .col-det.open{ display:block; position:fixed; inset:0; width:auto; z-index:80;\n        border-left:0; padding:20px 18px 70px; overflow-y:auto;\n        background:linear-gradient(180deg,#121214 0%,#0a0a0b 100%); }\n      .backbar{ display:inline-block; }\n      .det-h .x{ display:none; }\n      .det-h h2{ font-size:22px; }\n      .det-hero{ padding:18px 18px; }\n      .det-hero .dv{ font-size:17px; }\n      .kv{ font-size:13px; }\n      .kv dt{ width:96px; }\n      .stbtn{ padding:10px 15px; }\n      .acts .ghost{ flex:1; text-align:center; }\n    }\n  `,\n\n  render(d2) {\n    const st = d2.state;\n    const all = st.rows || [];\n    const f = st.filtro || 'todos';\n    const q = norm(st.q || '');\n\n    const count = (v) => all.filter((r) => (r.status || 'novo') === v).length;\n\n    let list = all;\n    if (f !== 'todos') list = list.filter((r) => (r.status || 'novo') === f);\n    if (q) {\n      list = list.filter((r) => norm([r.nome, r.empresa, r.email, r.telefone, TIPOS[r.tipo_evento], REFERRAL[r.referral], r.referral_detalhe].join(' ')).indexOf(q) >= 0);\n    }\n\n    const abertos = all.filter((r) => ['novo', 'em_contato', 'proposta'].indexOf(r.status || 'novo') >= 0);\n    const confirmados = all.filter((r) => r.status === 'confirmado');\n    const paxConf = confirmados.reduce((a, r) => a + (Number(r.pessoas) || 0), 0);\n\n    const kpis = `<div class=\"kpis\">\n      <div class=\"kpi hi\"><div class=\"n\">${all.length}</div><div class=\"l\">Pedidos</div></div>\n      <div class=\"kpi\"><div class=\"n\">${count('novo')}</div><div class=\"l\">Novos</div></div>\n      <div class=\"kpi\"><div class=\"n\">${abertos.length}</div><div class=\"l\">Em aberto</div></div>\n      <div class=\"kpi\"><div class=\"n\">${confirmados.length}</div><div class=\"l\">Confirmados</div></div>\n      <div class=\"kpi\"><div class=\"n\">${paxConf}</div><div class=\"l\">Convidados confirmados</div></div>\n    </div>`;\n\n    const fchip = (v, t, n) => `<button class=\"chip${f === v ? ' on' : ''}\" data-f=\"${v}\">${esc(t)}${n != null ? `<span class=\"c\">${n}</span>` : ''}</button>`;\n    const filtros = `<div class=\"filters\">\n      <div class=\"fchips\">\n        ${fchip('todos', 'Todos', all.length)}\n        ${STATUS.map((s) => fchip(s.v, s.t, count(s.v))).join('')}\n      </div>\n      <input class=\"search q\" placeholder=\"Buscar nome, empresa, e-mail…\" value=\"${esc(st.q || '')}\">\n    </div>`;\n\n    let rows;\n    if (st.loading) {\n      rows = `<div class=\"empty\"><div class=\"eg\">Carregando pedidos…</div></div>`;\n    } else if (st.err) {\n      rows = `<div class=\"empty\"><div class=\"eg\">${esc(st.err)}</div>\n        <div class=\"es\"><button class=\"ghost reload\" style=\"margin-top:16px\">Tentar de novo</button></div></div>`;\n    } else if (!list.length) {\n      rows = `<div class=\"empty\"><div class=\"eg\">${all.length ? 'Nada por aqui.' : 'Ainda não chegou nenhum pedido.'}</div>\n        <div class=\"es\">${all.length ? 'Ajuste o filtro ou limpe a busca.' : 'Assim que o formulário for enviado, ele aparece nesta lista.'}</div></div>`;\n    } else {\n      rows = `<div class=\"rows\">` + list.map((r) => {\n        const stt = r.status || 'novo';\n        const meta = [r.empresa, TIPOS[r.tipo_evento], r.hora_inicio, REFERRAL[r.referral]].filter(Boolean).join(' · ');\n        return `<div class=\"r${st.sel === r._id ? ' sel' : ''}\" data-id=\"${esc(r._id)}\" data-key=\"${esc(r._id)}\">\n          <div class=\"when\"><div class=\"d\">${diaNum(r.data)}</div><div class=\"w\">${mesTxt(r.data)} · ${diaSemana(r.data)}</div></div>\n          <div class=\"who\"><div class=\"n\">${esc(r.nome || '—')}</div><div class=\"m\">${esc(meta)}</div></div>\n          <div class=\"pax\"><b>${r.pessoas || '—'}</b><span>pessoas</span></div>\n          <span class=\"tag ${stt}\">${esc(ST_LABEL[stt] || stt)}</span>\n          <div class=\"ago\" title=\"Recebido em ${esc(dataHora(r.criado_em || r.createdAt))}\">${dataCurta(r.criado_em || r.createdAt)}</div>\n        </div>`;\n      }).join('') + `</div>`;\n    }\n\n    const sel = all.find((r) => r._id === st.sel);\n    let det = '';\n    if (sel) {\n      const stt = sel.status || 'novo';\n      const infra = (sel.infraestrutura || []).map((v) => `<span>${esc(INFRA[v] || v)}</span>`).join('');\n      const kv = (k, v) => `<dl class=\"kv\"><dt>${k}</dt><dd>${esc(v || '—')}</dd></dl>`;\n      const tel = String(sel.telefone || '').replace(/\\D/g, '');\n      det = `<div class=\"col-det open\">\n        <button class=\"backbar close\">← Voltar para a lista</button>\n        <div class=\"det-h\">\n          <div><h2>${esc(sel.nome || '—')}</h2>\n            <div class=\"det-sub\">${esc(sel.empresa || 'Sem empresa')}${sel.cargo ? ' · ' + esc(sel.cargo) : ''}</div>\n            <div class=\"det-sub\">Recebido em ${esc(dataHora(sel.criado_em || sel.createdAt))} · há ${desde(sel.criado_em || sel.createdAt)}</div></div>\n          <button class=\"x close\">×</button>\n        </div>\n\n        <div class=\"det-hero\">\n          <div class=\"dl\">${esc(TIPOS[sel.tipo_evento] || 'Evento')}</div>\n          <div class=\"dv\">${esc(dataLonga(sel.data))}${sel.data_flexivel ? ' <span class=\"flexf\">flexível</span>' : ''}</div>\n          <div class=\"dx\">${esc(sel.hora_inicio || '—')}${sel.duracao_horas ? ' · ' + sel.duracao_horas + 'h' : ''} · ${sel.pessoas || '—'} convidados${sel.formato ? ' · ' + esc(FORMATOS[sel.formato] || sel.formato) : ''}</div>\n        </div>\n\n        <div class=\"copyrow\">\n          <button class=\"copybtn${st.copied === sel._id ? ' done' : ''}\">${st.copied === sel._id ? '✓ Copiado' : (st.copied === 'erro' ? 'Não consegui copiar' : 'Copiar pedido em texto')}</button>\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Status</div>\n          <div class=\"stbtns\">${STATUS.map((s) => `<button class=\"stbtn${stt === s.v ? ' on' : ''}\" data-st=\"${s.v}\"${st.saving ? ' disabled' : ''}>${esc(s.t)}</button>`).join('')}</div>\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Espaço</div>\n          ${kv('Exclusividade', EXCLUSIVIDADE[sel.exclusividade])}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Estrutura e ambientação</div>\n          ${infra ? `<div class=\"pills\">${infra}</div>` : `<div class=\"det-sub\" style=\"margin:0\">Nenhuma infra selecionada</div>`}\n          ${sel.transmissao_desc ? `<div style=\"margin-top:14px\">${kv('Transmissão', sel.transmissao_desc)}</div>` : ''}\n          <div style=\"margin-top:14px\">${kv('Música', MUSICA[sel.musica])}</div>\n          <dl class=\"kv\"><dt>Cenografia</dt><dd><span class=\"yn${sel.ambientacao ? ' on' : ''}\">${sel.ambientacao ? 'Sim' : 'Não'}</span></dd></dl>\n          ${sel.ambientacao_desc ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.ambientacao_desc)}”</div>` : ''}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Gastronomia e bebidas</div>\n          ${kv('Serviço', CATERING[sel.catering])}\n          ${sel.restricoes ? kv('Restrições', sel.restricoes) : ''}\n          <dl class=\"kv\"><dt>Cardápio</dt><dd><span class=\"yn${sel.cardapio_personalizado ? ' on' : ''}\">${sel.cardapio_personalizado ? 'Personalizado' : 'Padrão'}</span></dd></dl>\n          ${sel.cardapio_desc ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.cardapio_desc)}”</div>` : ''}\n          <dl class=\"kv\"><dt>Álcool</dt><dd><span class=\"yn${sel.bebidas_alcoolicas ? ' on' : ''}\">${sel.bebidas_alcoolicas ? 'Sim' : 'Não'}</span></dd></dl>\n          ${(sel.bebidas || []).length ? `<div class=\"pills\" style=\"margin-top:10px\">${(sel.bebidas || []).map((v) => `<span>${esc(BEBIDAS[v] || v)}</span>`).join('')}</div>` : ''}\n          ${sel.bebidas_obs ? `<div class=\"obs\" style=\"margin-top:10px\">“${esc(sel.bebidas_obs)}”</div>` : ''}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Origem</div>\n          ${kv('Como conheceu', REFERRAL[sel.referral])}\n          ${kv('Detalhe', sel.referral_detalhe)}\n        </div>\n\n        <div class=\"det-sec\"><div class=\"k\">Contato</div>\n          ${sel.cargo ? kv('Cargo', sel.cargo) : ''}\n          ${kv('E-mail', sel.email)}\n          ${kv('Telefone', sel.telefone)}\n          <div class=\"acts\">\n            <a class=\"ghost\" href=\"mailto:${esc(sel.email)}?subject=${encodeURIComponent('TEMPO by Porsche — seu pedido de reserva')}\">E-mail</a>\n            ${tel.length >= 10 ? `<a class=\"ghost\" href=\"https://wa.me/${tel.length > 11 ? tel : '55' + tel}\" target=\"_blank\" rel=\"noopener\">WhatsApp</a>` : ''}\n          </div>\n        </div>\n\n        ${sel.observacoes ? `<div class=\"det-sec\"><div class=\"k\">Observações</div><div class=\"obs\">“${esc(sel.observacoes)}”</div></div>` : ''}\n      </div>`;\n    }\n\n    return `<div class=\"wrap\">\n      <div class=\"nav\"><div class=\"nav-in\">\n        <div class=\"lhs\">\n          <img class=\"logo\" src=\"${LOGO}\" alt=\"TEMPO by Porsche\">\n          <span class=\"ttl\">Reservas de espaço</span>\n        </div>\n        <div class=\"right\">\n          <span class=\"stamp\">${st.stamp ? 'atualizado há ' + desde(st.stamp) : ''}</span>\n          <button class=\"ghost reload\">Atualizar</button>\n        </div>\n      </div></div>\n      <div class=\"body\">\n        <div class=\"col-list\">${kpis}${filtros}${rows}</div>\n        ${det}\n      </div>\n    </div>`;\n  },\n\n  mounted(d2) {\n    const API = d2.param('api') || 'reserva-espaco-api';\n\n    const load = async () => {\n      d2.state.loading = !(d2.state.rows || []).length;\n      d2.state.err = '';\n      try {\n        const res = await d2.rush(API).invoke({ action: 'list' });\n        const out = res && res.data !== undefined ? res.data : res;\n        if (out && out.ok) {\n          d2.setState({ rows: out.reservas || [], stamp: new Date().toISOString() });\n        } else {\n          d2.state.err = 'Não foi possível carregar os pedidos.';\n        }\n      } catch (e) {\n        d2.log('list err', e);\n        d2.state.err = 'Erro de conexão ao carregar.';\n      } finally {\n        d2.state.loading = false;\n      }\n    };\n    load();\n\n    const t = setInterval(load, 60000);\n    d2.onUnmount(() => clearInterval(t));\n\n    d2.on('.reload', 'click', () => load());\n    d2.on('.chip', 'click', (e, el) => { d2.state.filtro = el.dataset.f; });\n    d2.on('.q', 'input', (e, el) => { d2.state.q = el.value; });\n    d2.on('.r', 'click', (e, el) => { d2.state.sel = el.dataset.id; });\n    d2.on('.close', 'click', () => { d2.setState({ sel: null, copied: '' }); });\n\n    d2.on('.copybtn', 'click', async () => {\n      const sel = (d2.state.rows || []).find((r) => r._id === d2.state.sel);\n      if (!sel) return;\n      const txt = pedidoTexto(sel);\n      let ok = false;\n      try {\n        if (navigator.clipboard && navigator.clipboard.writeText) {\n          await navigator.clipboard.writeText(txt);\n          ok = true;\n        }\n      } catch (e) { ok = false; }\n      if (!ok) {\n        try {\n          const ta = document.createElement('textarea');\n          ta.value = txt;\n          ta.style.position = 'fixed';\n          ta.style.top = '-1000px';\n          ta.style.opacity = '0';\n          (d2.root || document.body).appendChild(ta);\n          ta.focus();\n          ta.select();\n          ok = document.execCommand('copy');\n          ta.parentNode.removeChild(ta);\n        } catch (e2) { ok = false; }\n      }\n      d2.state.copied = ok ? sel._id : 'erro';\n      setTimeout(() => { d2.state.copied = ''; }, 2400);\n    });\n\n    d2.on('.stbtn', 'click', async (e, el) => {\n      const id = d2.state.sel;\n      const novo = el.dataset.st;\n      if (!id || d2.state.saving) return;\n      d2.state.saving = true;\n      try {\n        const res = await d2.rush(API).invoke({ action: 'status', id, status: novo });\n        const out = res && res.data !== undefined ? res.data : res;\n        if (out && out.ok) {\n          d2.state.rows = (d2.state.rows || []).map((r) => (r._id === id ? Object.assign({}, r, { status: novo }) : r));\n        }\n      } catch (err) {\n        d2.log('status err', err);\n      } finally {\n        d2.state.saving = false;\n      }\n    });\n  },\n};","at":"2026-08-14T17:26:17.726Z"}}}]}},{"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":{"params":{"pattern":{"component":"data2-core-primitives@String","params":{"content":"@data2.app"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}},"component":"data2-core-functions@Includes","displayName":"isData2User"},"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":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"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-08-06T19:31:23.557Z"},{"_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"},{"_id":"68f938cf5fb002e33752a43d","displayName":"InternalApplicationsAuthenticationStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}}},"verifier":{"disabled":false,"component":"data2-core-types@DataSetReference","params":{"reference":"InternalApplicationsVerifierDataSet"}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"secret"}},"credentials":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}],"session":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}]},"reference":"InternalApplicationsAuthenticationStrategy","updatedAt":"2025-10-22T20:08:54.442Z","createdAt":"2025-10-22T20:04:31.198Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"_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}}},"reference":"FileComponentInstancesDataSet","updatedAt":"2023-08-03T16:08:18.193Z","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"}},"reference":"OneFileComponentInstancesDataSet","updatedAt":"2022-02-09T19:44:38.036Z","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}}},"reference":"DriveFileComponentInstancesDataSet","updatedAt":"2025-12-04T21:58:32.367Z","createdAt":"2023-02-16T14:27:07.797Z"},{"reference":"ServiceComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a7f3183d9050b951cc3ee3f","component":"data2-core-primitives@Artboard","system":"6a45d210b5865956b508ba84","displayName":"Painel de Reservas do Espaço","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Painel de Reservas do Espaço"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"d5YpU5v6gr4uUy2IMyEeF","deleteMetadata":{}},{"_id":"53e1e08659b368caa5060749","parent":"6a7f3183d9050b951cc3ee3f","component":"tempo@reserva-painel","system":"6a45d210b5865956b508ba84","displayName":"PainelReservasEspaco","params":{"api":"reserva-espaco-api","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":1440,"height":900}}}},"reference":"qeezur2dY4Q7iaOXTkGNX","deleteMetadata":{}}]}},{"_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":"6a7f39f41fa204069b09a9b5","displayName":"Painel de Eventos TEMPO","reference":"lUY5iWKoh7tkq5to0QwOs","params":{"responseHeaders":{"X-Frame-Options":{"params":{"content":""},"component":"data2-core-primitives@String"},"Content-Security-Policy":{"params":{"content":""},"component":"data2-core-primitives@String"},"X-XSS-Protection":{"params":{"content":""},"component":"data2-core-primitives@String"}},"domain":{"component":"data2-core-primitives@String","params":{"content":"pedidos"}},"name":{"component":"data2-core-primitives@String","params":{"content":"TEMPO · Pedidos de Evento"}},"entryPoint":{"params":{"component":"data2-core-primitives@Artboard","reference":"d5YpU5v6gr4uUy2IMyEeF"},"component":"data2-core-types@ComponentInstanceReference"},"shortName":{"component":"data2-core-primitives@String","params":{"content":"TEMPO · Pedidos"}},"serverSideRendering":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"icon":"https://tempobyporsche.com/wp-content/uploads/2026/03/logo-tempo-social.webp","appIcon":{"component":"data2-core-primitives@String","params":{"content":"https://tempobyporsche.com/wp-content/uploads/2026/03/logo-tempo-social.webp"}},"themeColor":{"component":"data2-core-types@Color","params":{"rgba":"#0a0a0b"}},"backgroundColor":{"component":"data2-core-types@Color","params":{"rgba":"#0a0a0b"}},"language":{"component":"data2-core-primitives@String","params":{"content":"pt-BR"}},"display":{"component":"data2-core-primitives@String","params":{"content":"standalone"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Painel interno TEMPO by Porsche — pedidos de evento no espaço, com triagem por status."}}},"system":"6a45d210b5865956b508ba84","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}