{"context":{"domain":"cooltive"},"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":"6369693af0b06405d12fbef3","name":"cooltive","domain":"cooltive","visibility":"private","settings":{"defaultAccessPolicy":"public"},"updatedAt":"2026-07-27T14:19:36.810Z","createdAt":"2022-11-07T20:23:22.797Z"}]}},{"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":"6a766537bca296db36c67f5a","component":"data2-core-types@Component","system":"6369693af0b06405d12fbef3","params":{"extends":"data2-core-primitives@Block","component":"CKt0bzCPp9CD4BGmnRaAM","package":"cooltive","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 IMG = {\n  hero: 'https://cooltive.data2.media/file/CqoGz8b4xjCnz75NrYYxl?size=cover&w=2000',\n  logo: 'https://cooltive.data2.media/file/MkaAbHhRy7JD8Lj3G4xay?size=contain&w=240',\n  logoInverted: 'https://cooltive.data2.media/file/hghTpuEgZ9vX23p9onlnE',\n  logotype: 'https://cooltive.data2.media/file/qcGH_fLbf-dmQymc3TqMW',\n  storefront: 'https://cooltive.data2.media/file/5piuUDBFUFwmNTag_L3tQ?size=cover&w=1200',\n}\n\nconst ADDRESS = 'Rua Pedro Antonio Pierro, 112 — Sousas, Campinas · SP · 13105-504'\nconst MAPS_SRC = 'https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3675.9134965565095!2d-46.972099522738645!3d-22.879653679274146!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x94c8d03d676e092d%3A0x9037fe850ad7995f!2sRua%20Dr%20-%20Rua%20Pedro%20Antonio%20Pierro%2C%20112%20-%20Vila%20S%C3%B4nia%20(Sousas)%2C%20Campinas%20-%20SP%2C%2013105-504!5e0!3m2!1spt-BR!2sbr!4v1785200655072!5m2!1spt-BR!2sbr'\n\nconst HOURS = [\n  { d: 'Segunda-feira', h: 'Fechado' },\n  { d: 'Ter — Sex', h: '9h às 18h' },\n  { d: 'Sábado', h: '9h às 16h' },\n  { d: 'Domingo', h: '9h às 12h' },\n]\n\nconst GROUPS = [\n  { key: 'comidinhas', label: 'Comidinhas', subgrupos: ['comidinhas'] },\n  { key: 'pao', label: 'É tudo pão, mas não só...', subgrupos: ['e tudo pao mas nao so'] },\n  { key: 'doces', label: 'O lado doce das coisas', subgrupos: ['o lado doce das coisas', 'e tem mais'] },\n  { key: 'extras', label: 'Extras pro seu jeito', subgrupos: ['extras pro seu jeito'] },\n  { key: 'quentes', label: 'Bebidas quentes', subgrupos: ['bebidas quentes'] },\n  { key: 'frias', label: 'Bebidas frias', subgrupos: ['bebidas frias'] },\n]\n\nconst DIET_TAGS = [\n  { key: 'sem_gluten', abbr: 'SG', label: 'Sem glúten' },\n  { key: 'sem_acucar', abbr: 'SA', label: 'Sem açúcar' },\n  { key: 'sem_lactose', abbr: 'SL', label: 'Sem lactose' },\n  { key: 'vegano', abbr: 'VG', label: 'Vegano' },\n]\n\nconst ENCOMENDAS = [\n  { nome: 'Torta de chocolate da Leda', nota: 'Sem glúten, metade bolo, metade mousse · 12 fatias', preco: 160 },\n  { nome: 'Torta de limão', nota: 'Casquinha de biscoito, mousse de limão siciliano e merengue · 10 fatias', preco: 160 },\n  { nome: 'Torta Basca', nota: 'Cheesecake espanhol · 8 fatias', preco: 150 },\n  { nome: 'Blondie', nota: 'Brownie de chocolate branco, com morangos e amêndoas · 8 fatias', preco: 95 },\n  { nome: 'Bolo de pistache, mel e limão', nota: 'Cobertura de cream cheese e mel · 12 fatias', preco: 160 },\n  { nome: 'Bolo de laranja com amêndoas', nota: '10 fatias', preco: 85 },\n  { nome: 'Bolo de maçã com farofa de nozes e côco', nota: '12 fatias', preco: 105 },\n  { nome: 'Bolo de iogurte, limão e frutas vermelhas', nota: '10 fatias', preco: 70 },\n]\n\nconst CONTACT = {\n  whatsapp: 'https://wa.me/19992404774',\n  whatsappLabel: '(19) 99240-4774',\n  instagram: 'https://instagram.com/cooltive_me',\n  instagramLabel: '@cooltive_me',\n  email: 'contato@cooltive.me',\n}\n\nconst NAV = [\n  { key: 'sobre', label: 'Sobre' },\n  { key: 'como', label: 'Como chegar' },\n  { key: 'contato', label: 'Contato' },\n]\n\nfunction esc(s) {\n  return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n}\n\nlet beansModal = null\n\nfunction openBeansModal(d2, beans) {\n  if (beansModal) return\n  const el = document.createElement('div')\n  el.style.cssText = 'position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(20,28,17,.55);font-family:sans-serif'\n  const rows = beans.map(b => `\n    <div style=\"border-top:1px solid #e7e2d6;padding-top:16px;margin-top:16px;\">\n      <div style=\"display:flex;justify-content:space-between;gap:12px;margin-bottom:6px;\">\n        <h4 style=\"margin:0;font-size:16px;font-weight:600;color:#1c1c1c;\">${esc(b.nome)}</h4>\n        <span style=\"font-weight:600;font-size:15px;color:#1c1c1c;white-space:nowrap;\">${d2.fmt.currency(b.preco || 0, 'BRL')}</span>\n      </div>\n      <p style=\"margin:0;font-size:13.5px;color:#6b6b61;line-height:1.55;\">${esc(b.descricao || '')}</p>\n    </div>`).join('') || '<p style=\"color:#8a8a80;font-size:14px;\">Sem grãos cadastrados no momento.</p>'\n  el.innerHTML = `\n    <div role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\" style=\"position:relative;background:#FBF8F1;border-radius:28px 28px 28px 6px;max-width:560px;width:100%;max-height:82vh;overflow:auto;padding:40px 32px 32px;box-shadow:0 32px 64px rgba(0,0,0,.25);\">\n      <button class=\"d2-bean-close\" aria-label=\"Fechar\" style=\"position:absolute;top:18px;right:18px;background:#eef1e9;border:none;border-radius:999px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#3c6633;\">${ic.close}</button>\n      <span style=\"display:inline-block;font-family:Poppins,sans-serif;font-size:12px;letter-spacing:2px;text-transform:uppercase;color:#6b8a5a;font-weight:600;margin-bottom:10px;\">Extração V60 ou prensa francesa</span>\n      <h2 style=\"margin:0 0 8px;font-size:28px;font-style:italic;color:#1c1c1c;\">Onde o café acontece</h2>\n      <p style=\"margin:0 0 8px;font-size:14px;color:#6b6b61;\">Escolha o grão que mais te agrada e aproveite seu café delicioso.</p>\n      ${rows}\n    </div>`\n  document.body.appendChild(el)\n  document.body.style.overflow = 'hidden'\n  const close = () => {\n    el.remove()\n    document.body.style.overflow = ''\n    beansModal = null\n  }\n  el.addEventListener('click', (e) => { if (e.target === el) close() })\n  el.querySelector('.d2-bean-close').addEventListener('click', close)\n  d2.on(window, 'keydown', (e) => { if (e.key === 'Escape') close() })\n  d2.onUnmount(close)\n  beansModal = el\n}\n\nconst ic = {\n  copy: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\"/><path d=\"M4 16V5a1 1 0 0 1 1-1h11\"/></svg>`,\n  check: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 13l4 4L19 7\"/></svg>`,\n  menu: `<svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M4 7h16M4 12h16M4 17h16\"/></svg>`,\n  close: `<svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M5 5l14 14M19 5L5 19\"/></svg>`,\n  arrow: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M13 6l6 6-6 6\"/></svg>`,\n  star: `<svg viewBox=\"0 0 24 24\" width=\"13\" height=\"13\" fill=\"currentColor\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14l-5-4.87 6.91-1.01L12 2z\"/></svg>`,\n  leaf: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" style=\"display:inline-block;vertical-align:-3px\"><path d=\"M20 4C11 4 4 10 4 19\"/><path d=\"M20 4c0 8-5 13-11 14\"/></svg>`,\n  heart: `<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" style=\"display:inline-block;vertical-align:-2px\"><path d=\"M12 21C7 17.5 3 13.9 3 9.6 3 6.5 5.4 4 8.4 4c1.7 0 3 .8 3.6 1.9C12.6 4.8 13.9 4 15.6 4 18.6 4 21 6.5 21 9.6 21 13.9 17 17.5 12 21z\"/></svg>`,\n  cup: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M4 8h13v5a5 5 0 0 1-5 5H9a5 5 0 0 1-5-5V8z\"/><path d=\"M17 9h2a2 2 0 0 1 0 4h-2\"/><path d=\"M7 3c0 1-1 1-1 2s1 1 1 2M11 3c0 1-1 1-1 2s1 1 1 2\"/></svg>`,\n  armchair: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M12 21c-4 0-7-3-7-7v-3a3 3 0 0 1 6 0M12 21c4 0 7-3 7-7v-3a3 3 0 0 0-6 0M9 11V8a3 3 0 0 1 6 0v3\"/></svg>`,\n  filter: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M5 4h14l-5.5 7v6l-3 2v-8L5 4z\"/></svg>`,\n  whatsapp: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"currentColor\"><path d=\"M12 2a10 10 0 0 0-8.6 15.1L2 22l5.1-1.3A10 10 0 1 0 12 2zm5.5 14.2c-.2.6-1.3 1.2-1.8 1.3-.5.1-1 .1-1.7-.1-.4-.1-1-.3-1.7-.6-3-1.3-4.9-4.3-5-4.5-.1-.2-1.2-1.6-1.2-3s.7-2.1 1-2.4c.3-.3.6-.4.8-.4h.6c.2 0 .4 0 .6.5.2.5.7 1.8.8 1.9.1.2.1.4 0 .6-.1.2-.2.3-.4.5l-.5.6c-.2.2-.3.4-.1.7.2.4.9 1.4 1.9 2.3 1.3 1.2 2.4 1.5 2.8 1.7.3.1.5.1.7-.1l.7-.8c.2-.3.4-.2.7-.1.3.1 1.7.8 2 1 .3.1.5.2.5.4.1.2.1.7-.1 1.3z\"/></svg>`,\n  instagram: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"4\"/><circle cx=\"17.2\" cy=\"6.8\" r=\"1\"/></svg>`,\n  mail: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2.5\"/><path d=\"M4 7l8 6 8-6\"/></svg>`,\n}\n\nfunction header(page, menuOpen) {\n  return `\n  <header class=\"site-header\">\n    <div class=\"brand\" data-nav=\"home\">\n      <img class=\"brand-mark\" src=\"${IMG.logo}\" alt=\"Cooltive\" />\n      <div class=\"brand-word\">\n        <span class=\"brand-name\">Cooltive</span>\n        <span class=\"brand-sub\">Café &amp; Plantas</span>\n      </div>\n    </div>\n    <nav class=\"nav-desktop\">\n      ${NAV.map(n => `<span class=\"nav-link ${page === n.key ? 'is-active' : ''}\" data-nav=\"${n.key}\">${n.label}</span>`).join('')}\n      <span class=\"cta-pill\" data-nav=\"cardapio\">Ver cardápio</span>\n    </nav>\n    <button class=\"hamburger\" aria-label=\"menu\">${menuOpen ? ic.close : ic.menu}</button>\n  </header>\n  <div class=\"nav-mobile ${menuOpen ? 'is-open' : ''}\">\n    ${NAV.map(n => `<span class=\"nav-mobile-link ${page === n.key ? 'is-active' : ''}\" data-nav=\"${n.key}\">${n.label}</span>`).join('')}\n    <span class=\"cta-pill cta-pill--block\" data-nav=\"cardapio\">Ver cardápio</span>\n  </div>`\n}\n\nfunction footer() {\n  return `\n  <footer class=\"site-footer\">\n    <span class=\"footer-brand\">Cooltive · Café &amp; Plantas</span>\n    <span class=\"footer-meta\">§ Sousas · Campinas · SP</span>\n    <span class=\"footer-meta footer-meta--mono\">△ ${ADDRESS}</span>\n  </footer>`\n}\n\nfunction viewHome() {\n  return `\n  <section class=\"hero\">\n    <img class=\"hero-bg\" src=\"${IMG.hero}\" alt=\"\" />\n    <div class=\"hero-scrim\"></div>\n    <span class=\"ghost-word\" aria-hidden=\"true\">cooltive</span>\n    <div class=\"hero-inner\">\n      <span class=\"eyebrow eyebrow--light\">Sousas · Campinas</span>\n      <img class=\"hero-logotype\" src=\"${IMG.logotype}\" alt=\"Cooltive · Café &amp; Plantas\" />\n      <p class=\"hero-tagline\">Nossa casinha de felicidade ${ic.leaf} ${ic.heart}</p>\n      <div class=\"hero-ctas\">\n        <span class=\"cta-pill\" data-nav=\"cardapio\">Ver cardápio</span>\n        <span class=\"cta-ghost\" data-nav=\"como\">Como chegar ${ic.arrow}</span>\n      </div>\n    </div>\n  </section>\n  <section class=\"feature-row\">\n    ${[\n      [ic.cup, 'Café de verdade', 'Grãos selecionados, feito com carinho a cada xícara.'],\n      [ic.leaf, 'Plantas por todo canto', 'Um cantinho verde pra você respirar fundo.'],\n      [ic.armchair, 'Ambiente pra desacelerar', 'Sem pressa. Fique o tempo que quiser.'],\n    ].map(([e, t, d]) => `\n      <div class=\"feature-card\">\n        <span class=\"feature-emoji\">${e}</span>\n        <h3>${t}</h3>\n        <p>${d}</p>\n      </div>`).join('')}\n  </section>`\n}\n\nfunction viewSobre() {\n  return `\n  <section class=\"sobre\">\n    <div class=\"sobre-media\"><img src=\"${IMG.storefront}\" alt=\"Fachada da Cooltive\" /></div>\n    <div class=\"sobre-copy\">\n      <span class=\"eyebrow\">Nosso cantinho</span>\n      <p class=\"sobre-text\">A Cooltive nasceu da inspiração. De um daqueles momentos em que percebemos que sentir a beleza ao nosso redor faz o coração se encher de alegria. É uma honra te receber aqui. E honra maior ainda é fazer parte de um bom momento seu.</p>\n      <p class=\"sobre-text\">Nossas plantas são escolhidas uma a uma, cuidadas e cultivadas com atenção. Não usamos fertilizantes ou defensivos químicos. Nossos produtos são feitos de forma artesanal, com ingredientes de fornecedores e parceiros que compartilham do nosso olhar. Não utilizamos corantes, xaropes artificiais, ou realçadores de sabor. Escolhemos com atenção cada música, sabor, aroma, textura e cor.</p>\n      <p class=\"sobre-text\">Nosso desejo é que a Cooltive seja um refúgio. Um lugar onde você se sinta especial, acolhido, com todos os sentidos despertos e tocados de forma especial.</p>\n      <p class=\"sobre-text sobre-text--emphasis\">E temos um pedido: aproveite esse seu tempo! E conte pra gente se podemos tornar sua experiência ainda melhor. Vai ser um prazer cultivar você como presença no nosso pequeno paraíso.</p>\n      <div class=\"hours\">\n        <span class=\"hours-label\">Funcionamento</span>\n        ${HOURS.map(h => `<div class=\"hours-row\"><span>${h.d}</span><span>${h.h}</span></div>`).join('')}\n      </div>\n    </div>\n  </section>`\n}\n\nfunction viewCardapio(d2, items, cat) {\n  const loading = items === undefined\n  const group = GROUPS.find(g => g.key === cat) || GROUPS[0]\n  const filtered = (items || []).filter(r => group.subgrupos.includes(r.subgrupo))\n  return `\n  <section class=\"menu\">\n    <div class=\"menu-head\">\n      <div>\n        <span class=\"eyebrow\">Cada receita tem uma história, nada aqui está por acaso...</span>\n        <h1 class=\"menu-title\">Cardápio</h1>\n      </div>\n      <div class=\"legend\">\n        ${DIET_TAGS.map(t => `<span class=\"legend-item\"><span class=\"chip chip--tag\">${t.abbr}</span>${t.label}</span>`).join('')}\n      </div>\n    </div>\n    <div class=\"cat-row\">\n      ${GROUPS.map(g => `<span class=\"cat-pill ${cat === g.key ? 'is-active' : ''}\" data-cat=\"${g.key}\">${g.label}</span>`).join('')}\n    </div>\n    ${loading ? `<p class=\"menu-loading\">Carregando cardápio…</p>` : `\n    <div class=\"menu-grid\">\n      ${cat === 'quentes' ? `\n        <article class=\"menu-card beans-trigger\" data-action=\"open-beans\">\n          <span class=\"beans-icon\">${ic.filter}</span>\n          <h3>Cafés coados na V60 ou prensa francesa</h3>\n          <p class=\"menu-desc\">Escolha o grão que mais te agrada. Toque aqui pra ver as opções.</p>\n        </article>` : ''}\n      ${filtered.map(r => `\n        <article class=\"menu-card\" data-key=\"${r._id}\">\n          ${r.mais_pedidos ? `<span class=\"ribbon\">${ic.star} Mais pedido</span>` : ''}\n          <h3>${esc(r.nome)}</h3>\n          <p class=\"menu-desc\">${esc(r.descricao || '')}</p>\n          <div class=\"menu-foot\">\n            <span class=\"menu-price\">${r.preco != null ? d2.fmt.currency(r.preco, 'BRL') : 'Sob consulta'}</span>\n            <div class=\"menu-tags\">\n              ${DIET_TAGS.filter(t => r[t.key]).map(t => `<span class=\"chip chip--tag\" title=\"${t.label}\">${t.abbr}</span>`).join('')}\n            </div>\n          </div>\n        </article>`).join('') || `<p class=\"menu-empty\">Sem itens nesta categoria ainda.</p>`}\n    </div>`}\n    <div class=\"encomenda\">\n      <div class=\"encomenda-head\">\n        <span class=\"eyebrow\">Sob encomenda</span>\n        <h2>Nossas tortas e bolos podem ser só seus.</h2>\n        <p>Encomende o seu com 24h de antecedência.</p>\n      </div>\n      <div class=\"encomenda-grid\">\n        ${ENCOMENDAS.map(e => `\n          <div class=\"encomenda-item\">\n            <div>\n              <h4>${esc(e.nome)}</h4>\n              <p>${esc(e.nota)}</p>\n            </div>\n            <span class=\"menu-price\">${d2.fmt.currency(e.preco, 'BRL')}</span>\n          </div>`).join('')}\n      </div>\n      <a class=\"cta-pill encomenda-cta\" href=\"${CONTACT.whatsapp}\" target=\"_blank\" rel=\"noopener\">${ic.whatsapp} Encomendar pelo WhatsApp</a>\n    </div>\n  </section>`\n}\n\nfunction viewComo(copied) {\n  return `\n  <section class=\"como\">\n    <div class=\"como-copy\">\n      <span class=\"eyebrow\">Estamos bem aqui!</span>\n      <h1 class=\"como-address\">${ADDRESS}</h1>\n      <button class=\"copy-btn\" type=\"button\">${copied ? ic.check : ic.copy}<span>${copied ? 'Copiado!' : 'Copiar endereço'}</span></button>\n    </div>\n    <div class=\"como-media\">\n      <iframe src=\"${MAPS_SRC}\" width=\"100%\" height=\"100%\" style=\"border:0\" loading=\"lazy\" referrerpolicy=\"strict-origin-when-cross-origin\" title=\"Mapa da Cooltive\"></iframe>\n    </div>\n  </section>`\n}\n\nfunction viewContato() {\n  const cards = [\n    [ic.whatsapp, 'WhatsApp', CONTACT.whatsappLabel, CONTACT.whatsapp],\n    [ic.instagram, 'Instagram', CONTACT.instagramLabel, CONTACT.instagram],\n    [ic.mail, 'E-mail', CONTACT.email, `mailto:${CONTACT.email}`],\n  ]\n  return `\n  <section class=\"contato\">\n    <span class=\"eyebrow\">Fala com a gente</span>\n    <h1 class=\"contato-title\">Contato</h1>\n    <p class=\"contato-sub\">Dúvidas, encomendas ou só pra dar um oi — escolha o seu jeito favorito.</p>\n    <div class=\"contato-grid\">\n      ${cards.map(([e, t, d, href]) => `\n        <a class=\"contact-card\" href=\"${href}\" target=\"_blank\" rel=\"noopener\">\n          <span class=\"contact-icon\">${e}</span>\n          <h3>${t}</h3>\n          <p>${d}</p>\n        </a>`).join('')}\n    </div>\n  </section>`\n}\n\nexport default {\n  css: `\n  @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap');\n\n  @font-face { font-family:'type'; src:url('https://cooltive.data2.media/file/rNNNiOrAEG90yLewSSxN3') format('truetype'); font-weight:400; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-bold'; src:url('https://cooltive.data2.media/file/E-bhqidXSwVLzTUasVJGE') format('truetype'); font-weight:700; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-condensed'; src:url('https://cooltive.data2.media/file/BCZHKrJTJunS7ILpJRj3p') format('truetype'); font-weight:400; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-condensed-bold'; src:url('https://cooltive.data2.media/file/rvP7tRH4o7dxGRPcQkvFh') format('truetype'); font-weight:700; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-condensed-light'; src:url('https://cooltive.data2.media/file/eJtQh_PbOcck4Ufdl7OSw') format('truetype'); font-weight:300; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-light'; src:url('https://cooltive.data2.media/file/eTB4CX6cNkmoLzcbqks_8') format('truetype'); font-weight:300; font-style:normal; font-display:swap; }\n\n  :host, .app { display:flex; flex-direction:column; min-height:100vh; font-family:'type',sans-serif; color:#1c1c1c; background:#FBF8F1; }\n  * { box-sizing:border-box; }\n  h1,h2,h3,h4 { margin:0; font-family:'type',serif; }\n  p { margin:0; }\n  img { display:block; max-width:100%; }\n  a { text-decoration:none; color:inherit; }\n\n  .eyebrow { display:inline-block; font-family:'Poppins',sans-serif; font-weight:500; font-size:12px; letter-spacing:2px; text-transform:uppercase; color:#6b8a5a; margin-bottom:10px; }\n  .eyebrow--light { color:rgba(255,255,255,0.85); }\n\n  /* ---- header ---- */\n  .site-header { position:sticky; top:0; z-index:50; display:flex; align-items:center; justify-content:space-between; padding:14px 32px; background:rgba(251,248,241,0.86); backdrop-filter:blur(10px); border-bottom:1px solid #e7e2d6; }\n  .brand { display:flex; align-items:center; gap:12px; cursor:pointer; }\n  .brand-mark { width:44px; height:44px; border-radius:999px; }\n  .brand-word { display:flex; flex-direction:column; line-height:1.15; }\n  .brand-name { font-family:'type',serif; font-weight:600; font-size:20px; }\n  .brand-sub { font-family:'Poppins',sans-serif; font-size:11px; letter-spacing:1.5px; text-transform:uppercase; color:#6b8a5a; }\n  .nav-desktop { display:flex; align-items:center; gap:24px; }\n  .nav-link { font-size:14px; font-weight:500; letter-spacing:0.3px; cursor:pointer; padding-bottom:4px; border-bottom:1px solid transparent; transition:border-color .2s,color .2s; white-space:nowrap; }\n  .nav-link:hover { color:#4a7c3f; }\n  .nav-link.is-active { color:#4a7c3f; border-bottom-color:#4a7c3f; }\n  .cta-pill { background:#4a7c3f; color:#fff; font-size:14px; font-weight:600; padding:11px 22px; border-radius:24px 24px 24px 6px; cursor:pointer; transition:background .2s,transform .15s; white-space:nowrap; display:inline-flex; align-items:center; gap:8px; }\n  .cta-pill:hover { background:#3c6633; transform:translateY(-1px); }\n  .cta-ghost { display:inline-flex; align-items:center; gap:6px; font-size:14px; font-weight:600; color:#fff; cursor:pointer; border-bottom:1px solid rgba(255,255,255,0.5); padding-bottom:2px; }\n  .hamburger { display:none; background:none; border:none; color:#1c1c1c; cursor:pointer; padding:4px; }\n  .nav-mobile { display:none; flex-direction:column; gap:14px; padding:18px 32px 24px; background:#FBF8F1; border-bottom:1px solid #e7e2d6; }\n  .nav-mobile.is-open { display:flex; }\n  .nav-mobile-link { font-size:16px; font-weight:500; cursor:pointer; }\n  .nav-mobile-link.is-active { color:#4a7c3f; font-weight:700; }\n  .cta-pill--block { text-align:center; justify-content:center; }\n\n  @media (max-width:880px) {\n    .nav-desktop { display:none; }\n    .hamburger { display:flex; }\n    .site-header { padding:12px 20px; }\n  }\n  @media (min-width:881px) { .nav-mobile { display:none !important; } }\n\n  main.view { flex:1 0 auto; animation:viewIn .45s ease both; }\n  @keyframes viewIn { from{opacity:0; transform:translateY(10px);} to{opacity:1; transform:translateY(0);} }\n\n  /* ---- hero ---- */\n  .hero { position:relative; min-height:100vh; display:flex; align-items:center; overflow:hidden; }\n  .hero-bg { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }\n  .hero-scrim { position:absolute; inset:0; background:linear-gradient(120deg, rgba(20,28,17,0.82) 0%, rgba(20,28,17,0.55) 60%, rgba(20,28,17,0.35) 100%); }\n  .ghost-word { position:absolute; right:-40px; bottom:-40px; font-family:'type-light',serif; font-weight:300; font-size:min(30vw,320px); color:rgba(255,255,255,0.05); white-space:nowrap; pointer-events:none; z-index:0; }\n  .hero-inner { position:relative; z-index:1; padding:64px 6vw; max-width:780px; }\n  .hero-logotype { width:min(60vw,460px); height:auto; filter:brightness(0) invert(1); margin:0 0 18px; display:block; }\n  .hero-tagline { font-size:18px; color:rgba(255,255,255,0.92); margin-bottom:32px; }\n  .hero-ctas { display:flex; align-items:center; gap:22px; flex-wrap:wrap; }\n\n  /* ---- feature row ---- */\n  .feature-row { display:grid; grid-template-columns:repeat(3,1fr); gap:20px; padding:56px 6vw; max-width:1280px; margin:0 auto; }\n  .feature-card { background:#fff; border:1px solid #e7e2d6; border-radius:22px 22px 22px 4px; padding:26px 22px; transition:transform .2s,box-shadow .2s; }\n  .feature-card:hover { transform:translateY(-4px); box-shadow:0 16px 32px rgba(37,57,31,0.08); }\n  .feature-emoji { font-size:26px; display:block; margin-bottom:12px; }\n  .feature-card h3 { font-size:17px; font-weight:600; margin-bottom:6px; }\n  .feature-card p { font-size:14px; color:#5b5b52; line-height:1.55; }\n  @media (max-width:880px){ .feature-row{ grid-template-columns:1fr; } }\n\n  /* ---- sobre ---- */\n  .sobre { display:grid; grid-template-columns:1fr 1fr; gap:56px; align-items:center; align-content:center; min-height:calc(100vh - 73px); padding:80px 6vw; max-width:1280px; margin:0 auto; }\n  .sobre-media img { border-radius:36px 36px 36px 6px; width:100%; height:460px; object-fit:cover; box-shadow:0 24px 48px rgba(37,57,31,0.14); position:sticky; top:100px; }\n  .sobre-copy { display:flex; flex-direction:column; }\n  .sobre-text { font-size:15.5px; line-height:1.7; color:#3a3a34; margin-bottom:16px; }\n  .sobre-text--emphasis { font-family:'type',serif; font-style:italic; font-size:18px; color:#1c1c1c; }\n  .sobre-copy .hours { margin-top:8px; }\n  @media (max-width:880px){ .sobre{ grid-template-columns:1fr; gap:32px; } .sobre-media img{ height:300px; position:static; } }\n\n  /* ---- cardapio ---- */\n  .menu { padding:64px 6vw 96px; max-width:1280px; margin:0 auto; }\n  .menu-head { display:flex; justify-content:space-between; align-items:flex-end; gap:24px; flex-wrap:wrap; margin-bottom:28px; }\n  .menu-title { font-family:'type',serif; font-size:clamp(34px,5vw,52px); font-style:italic; font-weight:400; }\n  .legend { display:flex; gap:16px; flex-wrap:wrap; }\n  .legend-item { display:flex; align-items:center; gap:8px; font-family:'Poppins',sans-serif; font-size:12px; color:#5b5b52; }\n  .chip { display:inline-flex; align-items:center; justify-content:center; font-family:'type-condensed',sans-serif; font-size:11px; font-weight:400; width:24px; height:24px; border-radius:999px; background:#eef1e9; color:#4a7c3f; }\n  .cat-row { display:flex; gap:12px; margin-bottom:32px; flex-wrap:wrap; }\n  .cat-pill { padding:10px 20px; border-radius:999px; border:1.5px solid #4a7c3f; color:#4a7c3f; font-size:14px; font-weight:600; cursor:pointer; transition:all .2s; white-space:nowrap; }\n  .cat-pill.is-active { background:#4a7c3f; color:#fff; }\n  .menu-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:18px; }\n  .menu-card { position:relative; background:#fff; border:1px solid #e7e2d6; border-radius:20px 20px 20px 4px; padding:22px 20px 18px; transition:transform .2s,box-shadow .2s; }\n  .menu-card:hover { transform:translateY(-3px); box-shadow:0 14px 30px rgba(37,57,31,0.1); }\n  .menu-card h3 { font-size:17px; font-weight:600; margin-bottom:6px; padding-right:8px; }\n  .menu-desc { font-size:13.5px; color:#6b6b61; line-height:1.5; margin-bottom:16px; min-height:20px; }\n  .menu-foot { display:flex; align-items:center; justify-content:space-between; }\n  .menu-price { font-family:'type-condensed-bold',sans-serif; font-weight:400; font-size:15px; color:#1c1c1c; }\n  .menu-tags { display:flex; gap:6px; }\n  .ribbon { position:absolute; top:-10px; right:14px; display:flex; align-items:center; gap:5px; background:#c97b4a; color:#fff; font-size:10.5px; font-weight:700; letter-spacing:0.3px; padding:5px 10px; border-radius:999px; text-transform:uppercase; box-shadow:0 6px 14px rgba(201,123,74,0.35); }\n  .menu-loading, .menu-empty { color:#8a8a80; font-size:14px; padding:40px 0; }\n\n  .beans-trigger { cursor:pointer; background:#eef1e9; border:1.5px dashed #4a7c3f; display:flex; flex-direction:column; justify-content:center; }\n  .beans-trigger:hover { background:#e2ebd8; }\n  .beans-icon { color:#4a7c3f; margin-bottom:10px; }\n  .beans-trigger h3 { color:#3c6633; }\n\n  .encomenda { margin-top:64px; background:#1c1c1c; border-radius:32px 32px 32px 6px; padding:44px 6vw; color:#fff; }\n  .encomenda-head h2 { font-family:'type',serif; font-style:italic; font-size:clamp(22px,3vw,30px); color:#fff; margin-bottom:8px; }\n  .encomenda-head p { font-size:14px; color:rgba(255,255,255,0.7); margin-bottom:28px; }\n  .encomenda-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; margin-bottom:28px; }\n  .encomenda-item { display:flex; justify-content:space-between; gap:16px; padding:16px 0; border-bottom:1px solid rgba(255,255,255,0.12); }\n  .encomenda-item h4 { font-size:15px; font-weight:600; color:#fff; margin-bottom:4px; }\n  .encomenda-item p { font-size:12.5px; color:rgba(255,255,255,0.55); line-height:1.5; }\n  .encomenda-item .menu-price { color:#a9cf9a; white-space:nowrap; }\n  .encomenda-cta { background:#4a7c3f; }\n\n  /* ---- como chegar ---- */\n  .como { display:grid; grid-template-columns:1fr 1fr; gap:56px; align-content:center; min-height:calc(100vh - 73px); padding:80px 6vw 96px; max-width:1280px; margin:0 auto; align-items:stretch; }\n  .como-copy { display:flex; flex-direction:column; justify-content:center; }\n  .como-address { font-family:'type',serif; font-size:clamp(24px,3vw,32px); font-style:italic; line-height:1.35; margin-bottom:24px; max-width:440px; }\n  .copy-btn { display:inline-flex; align-items:center; gap:8px; background:#eef1e9; color:#3c6633; border:none; border-radius:999px; padding:11px 20px; font-size:14px; font-weight:600; cursor:pointer; transition:background .2s; }\n  .copy-btn:hover { background:#dfe8d5; }\n  .hours { border-top:1px solid #e7e2d6; padding-top:20px; max-width:340px; }\n  .hours-label { display:block; font-family:'Poppins',sans-serif; font-size:11px; letter-spacing:1.5px; text-transform:uppercase; color:#6b8a5a; margin-bottom:12px; }\n  .hours-row { display:flex; justify-content:space-between; font-size:14px; padding:7px 0; border-bottom:1px dashed #e7e2d6; }\n  .hours-row:last-child { border-bottom:none; }\n  .como-media { border-radius:28px 28px 28px 6px; overflow:hidden; min-height:340px; box-shadow:0 24px 48px rgba(37,57,31,0.14); }\n  @media (max-width:880px){ .como{ grid-template-columns:1fr; gap:32px; } .como-media{ min-height:280px; } }\n\n  /* ---- contato ---- */\n  .contato { display:flex; flex-direction:column; justify-content:center; min-height:calc(100vh - 73px); padding:80px 6vw 96px; max-width:1000px; margin:0 auto; text-align:center; }\n  .contato-title { font-family:'type',serif; font-size:clamp(34px,5vw,52px); font-style:italic; margin-bottom:14px; }\n  .contato-sub { font-size:15px; color:#6b6b61; max-width:480px; margin:0 auto 44px; }\n  .contato-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }\n  .contact-card { background:#fff; border:1px solid #e7e2d6; border-radius:24px 24px 24px 6px; padding:32px 20px; transition:transform .2s,box-shadow .2s; }\n  .contact-card:hover { transform:translateY(-4px); box-shadow:0 16px 32px rgba(37,57,31,0.1); }\n  .contact-icon { color:#4a7c3f; display:block; margin:0 auto 16px; }\n  .contact-card h3 { font-size:16px; font-weight:600; margin-bottom:6px; }\n  .contact-card p { font-size:13.5px; color:#6b6b61; word-break:break-word; }\n  @media (max-width:880px){ .contato-grid{ grid-template-columns:1fr; } }\n\n  /* ---- footer ---- */\n  .site-footer { display:flex; flex-wrap:wrap; gap:18px 32px; justify-content:space-between; align-items:center; padding:26px 6vw; background:#1c1c1c; color:rgba(255,255,255,0.7); }\n  .footer-brand { font-family:'type',serif; font-style:italic; font-size:15px; color:#fff; }\n  .footer-meta { font-family:'Poppins',sans-serif; font-size:11px; letter-spacing:0.5px; color:rgba(255,255,255,0.55); }\n  .footer-meta--mono { font-family:'type-condensed',sans-serif; }\n  `,\n\n  render(d2) {\n    const page = d2.state.page || 'home'\n    const menuOpen = !!d2.state.menuOpen\n    const cat = d2.state.category || 'comidinhas'\n    const copied = !!d2.state.copied\n    const items = d2.state.menuItems\n\n    let body\n    if (page === 'sobre') body = viewSobre()\n    else if (page === 'cardapio') body = viewCardapio(d2, items, cat)\n    else if (page === 'como') body = viewComo(copied)\n    else if (page === 'contato') body = viewContato()\n    else body = viewHome()\n\n    return `<div class=\"app\">${header(page, menuOpen)}<main class=\"view\" data-key=\"${page}\">${body}</main>${footer()}</div>`\n  },\n\n  mounted(d2) {\n    d2.on('[data-nav]', 'click', (e, el) => {\n      d2.setState({ page: el.dataset.nav, menuOpen: false })\n      try { window.scrollTo(0, 0) } catch (e) {}\n    })\n    d2.on('.hamburger', 'click', () => { d2.setState({ menuOpen: !d2.state.menuOpen }) })\n    d2.on('[data-cat]', 'click', (e, el) => { d2.setState({ category: el.dataset.cat }) })\n    d2.on('[data-action=\"open-beans\"]', 'click', () => {\n      const beans = (d2.state.menuItems || []).filter(r => r.subgrupo === 'onde o cafe acontece')\n      openBeansModal(d2, beans)\n    })\n    d2.on('.copy-btn', 'click', async () => {\n      try { await navigator.clipboard.writeText(ADDRESS) } catch (e) {}\n      d2.setState({ copied: true })\n      setTimeout(() => d2.setState({ copied: false }), 2000)\n    })\n    ;(async () => {\n      const ds = d2.data('cardapio')\n      if (!ds) return\n      await ds.refresh()\n      const all = await ds.loadAll()\n      d2.setState({ menuItems: all })\n    })()\n  },\n}\n"}},"cardapio":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"cardapio"}}}}}}}},"__d2PrevCode":{"code":"const IMG = {\n  hero: 'https://cooltive.data2.media/file/CqoGz8b4xjCnz75NrYYxl?size=cover&w=2000',\n  logo: 'https://cooltive.data2.media/file/MkaAbHhRy7JD8Lj3G4xay?size=contain&w=240',\n  logoInverted: 'https://cooltive.data2.media/file/hghTpuEgZ9vX23p9onlnE',\n  logotype: 'https://cooltive.data2.media/file/qcGH_fLbf-dmQymc3TqMW',\n  storefront: 'https://cooltive.data2.media/file/5piuUDBFUFwmNTag_L3tQ?size=cover&w=1200',\n}\n\nconst ADDRESS = 'Rua Pedro Antonio Pierro, 112 — Sousas, Campinas · SP · 13105-504'\nconst MAPS_SRC = 'https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3675.9134965565095!2d-46.972099522738645!3d-22.879653679274146!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x94c8d03d676e092d%3A0x9037fe850ad7995f!2sRua%20Dr%20-%20Rua%20Pedro%20Antonio%20Pierro%2C%20112%20-%20Vila%20S%C3%B4nia%20(Sousas)%2C%20Campinas%20-%20SP%2C%2013105-504!5e0!3m2!1spt-BR!2sbr!4v1785200655072!5m2!1spt-BR!2sbr'\n\nconst HOURS = [\n  { d: 'Segunda-feira', h: 'Fechado' },\n  { d: 'Ter — Sex', h: '9h às 18h' },\n  { d: 'Sábado', h: '9h às 16h' },\n  { d: 'Domingo', h: '9h às 12h' },\n]\n\nconst GROUPS = [\n  { key: 'comidinhas', label: 'Comidinhas', subgrupos: ['comidinhas'] },\n  { key: 'pao', label: 'É tudo pão, mas não só...', subgrupos: ['e tudo pao mas nao so'] },\n  { key: 'doces', label: 'O lado doce das coisas', subgrupos: ['o lado doce das coisas', 'e tem mais'] },\n  { key: 'extras', label: 'Extras pro seu jeito', subgrupos: ['extras pro seu jeito'] },\n  { key: 'quentes', label: 'Bebidas quentes', subgrupos: ['bebidas quentes'] },\n  { key: 'frias', label: 'Bebidas frias', subgrupos: ['bebidas frias'] },\n]\n\nconst DIET_TAGS = [\n  { key: 'sem_gluten', abbr: 'SG', label: 'Sem glúten' },\n  { key: 'sem_acucar', abbr: 'SA', label: 'Sem açúcar' },\n  { key: 'sem_lactose', abbr: 'SL', label: 'Sem lactose' },\n  { key: 'vegano', abbr: 'VG', label: 'Vegano' },\n]\n\nconst ENCOMENDAS = [\n  { nome: 'Torta de chocolate da Leda', nota: 'Sem glúten, metade bolo, metade mousse · 12 fatias', preco: 160 },\n  { nome: 'Torta de limão', nota: 'Casquinha de biscoito, mousse de limão siciliano e merengue · 10 fatias', preco: 160 },\n  { nome: 'Torta Basca', nota: 'Cheesecake espanhol · 8 fatias', preco: 150 },\n  { nome: 'Blondie', nota: 'Brownie de chocolate branco, com morangos e amêndoas · 8 fatias', preco: 95 },\n  { nome: 'Bolo de pistache, mel e limão', nota: 'Cobertura de cream cheese e mel · 12 fatias', preco: 160 },\n  { nome: 'Bolo de laranja com amêndoas', nota: '10 fatias', preco: 85 },\n  { nome: 'Bolo de maçã com farofa de nozes e côco', nota: '12 fatias', preco: 105 },\n  { nome: 'Bolo de iogurte, limão e frutas vermelhas', nota: '10 fatias', preco: 70 },\n]\n\nconst CONTACT = {\n  whatsapp: 'https://wa.me/19992404774',\n  whatsappLabel: '(19) 99240-4774',\n  instagram: 'https://instagram.com/cooltive_me',\n  instagramLabel: '@cooltive_me',\n  email: 'contato@cooltive.me',\n}\n\nconst NAV = [\n  { key: 'sobre', label: 'Sobre' },\n  { key: 'como', label: 'Como chegar' },\n  { key: 'contato', label: 'Contato' },\n]\n\nfunction esc(s) {\n  return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n}\n\nlet beansModal = null\n\nfunction openBeansModal(d2, beans) {\n  if (beansModal) return\n  const el = document.createElement('div')\n  el.style.cssText = 'position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(20,28,17,.55);font-family:sans-serif'\n  const rows = beans.map(b => `\n    <div style=\"border-top:1px solid #e7e2d6;padding-top:16px;margin-top:16px;\">\n      <div style=\"display:flex;justify-content:space-between;gap:12px;margin-bottom:6px;\">\n        <h4 style=\"margin:0;font-size:16px;font-weight:600;color:#1c1c1c;\">${esc(b.nome)}</h4>\n        <span style=\"font-weight:600;font-size:15px;color:#1c1c1c;white-space:nowrap;\">${d2.fmt.currency(b.preco || 0, 'BRL')}</span>\n      </div>\n      <p style=\"margin:0;font-size:13.5px;color:#6b6b61;line-height:1.55;\">${esc(b.descricao || '')}</p>\n    </div>`).join('') || '<p style=\"color:#8a8a80;font-size:14px;\">Sem grãos cadastrados no momento.</p>'\n  el.innerHTML = `\n    <div role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\" style=\"position:relative;background:#FBF8F1;border-radius:28px 28px 28px 6px;max-width:560px;width:100%;max-height:82vh;overflow:auto;padding:40px 32px 32px;box-shadow:0 32px 64px rgba(0,0,0,.25);\">\n      <button class=\"d2-bean-close\" aria-label=\"Fechar\" style=\"position:absolute;top:18px;right:18px;background:#eef1e9;border:none;border-radius:999px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#3c6633;\">${ic.close}</button>\n      <span style=\"display:inline-block;font-family:Poppins,sans-serif;font-size:12px;letter-spacing:2px;text-transform:uppercase;color:#6b8a5a;font-weight:600;margin-bottom:10px;\">Extração V60 ou prensa francesa</span>\n      <h2 style=\"margin:0 0 8px;font-size:28px;font-style:italic;color:#1c1c1c;\">Onde o café acontece</h2>\n      <p style=\"margin:0 0 8px;font-size:14px;color:#6b6b61;\">Escolha o grão que mais te agrada e aproveite seu café delicioso.</p>\n      ${rows}\n    </div>`\n  document.body.appendChild(el)\n  document.body.style.overflow = 'hidden'\n  const close = () => {\n    el.remove()\n    document.body.style.overflow = ''\n    beansModal = null\n  }\n  el.addEventListener('click', (e) => { if (e.target === el) close() })\n  el.querySelector('.d2-bean-close').addEventListener('click', close)\n  d2.on(window, 'keydown', (e) => { if (e.key === 'Escape') close() })\n  d2.onUnmount(close)\n  beansModal = el\n}\n\nconst ic = {\n  copy: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\"/><path d=\"M4 16V5a1 1 0 0 1 1-1h11\"/></svg>`,\n  check: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 13l4 4L19 7\"/></svg>`,\n  menu: `<svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M4 7h16M4 12h16M4 17h16\"/></svg>`,\n  close: `<svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M5 5l14 14M19 5L5 19\"/></svg>`,\n  arrow: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M13 6l6 6-6 6\"/></svg>`,\n  star: `<svg viewBox=\"0 0 24 24\" width=\"13\" height=\"13\" fill=\"currentColor\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14l-5-4.87 6.91-1.01L12 2z\"/></svg>`,\n  leaf: `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" style=\"display:inline-block;vertical-align:-3px\"><path d=\"M20 4C11 4 4 10 4 19\"/><path d=\"M20 4c0 8-5 13-11 14\"/></svg>`,\n  heart: `<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" style=\"display:inline-block;vertical-align:-2px\"><path d=\"M12 21C7 17.5 3 13.9 3 9.6 3 6.5 5.4 4 8.4 4c1.7 0 3 .8 3.6 1.9C12.6 4.8 13.9 4 15.6 4 18.6 4 21 6.5 21 9.6 21 13.9 17 17.5 12 21z\"/></svg>`,\n  cup: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M4 8h13v5a5 5 0 0 1-5 5H9a5 5 0 0 1-5-5V8z\"/><path d=\"M17 9h2a2 2 0 0 1 0 4h-2\"/><path d=\"M7 3c0 1-1 1-1 2s1 1 1 2M11 3c0 1-1 1-1 2s1 1 1 2\"/></svg>`,\n  armchair: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M12 21c-4 0-7-3-7-7v-3a3 3 0 0 1 6 0M12 21c4 0 7-3 7-7v-3a3 3 0 0 0-6 0M9 11V8a3 3 0 0 1 6 0v3\"/></svg>`,\n  filter: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M5 4h14l-5.5 7v6l-3 2v-8L5 4z\"/></svg>`,\n  whatsapp: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"currentColor\"><path d=\"M12 2a10 10 0 0 0-8.6 15.1L2 22l5.1-1.3A10 10 0 1 0 12 2zm5.5 14.2c-.2.6-1.3 1.2-1.8 1.3-.5.1-1 .1-1.7-.1-.4-.1-1-.3-1.7-.6-3-1.3-4.9-4.3-5-4.5-.1-.2-1.2-1.6-1.2-3s.7-2.1 1-2.4c.3-.3.6-.4.8-.4h.6c.2 0 .4 0 .6.5.2.5.7 1.8.8 1.9.1.2.1.4 0 .6-.1.2-.2.3-.4.5l-.5.6c-.2.2-.3.4-.1.7.2.4.9 1.4 1.9 2.3 1.3 1.2 2.4 1.5 2.8 1.7.3.1.5.1.7-.1l.7-.8c.2-.3.4-.2.7-.1.3.1 1.7.8 2 1 .3.1.5.2.5.4.1.2.1.7-.1 1.3z\"/></svg>`,\n  instagram: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"4\"/><circle cx=\"17.2\" cy=\"6.8\" r=\"1\"/></svg>`,\n  mail: `<svg viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2.5\"/><path d=\"M4 7l8 6 8-6\"/></svg>`,\n}\n\nfunction header(page, menuOpen) {\n  return `\n  <header class=\"site-header\">\n    <div class=\"brand\" data-nav=\"home\">\n      <img class=\"brand-mark\" src=\"${IMG.logo}\" alt=\"Cooltive\" />\n      <div class=\"brand-word\">\n        <span class=\"brand-name\">Cooltive</span>\n        <span class=\"brand-sub\">Café &amp; Plantas</span>\n      </div>\n    </div>\n    <nav class=\"nav-desktop\">\n      ${NAV.map(n => `<span class=\"nav-link ${page === n.key ? 'is-active' : ''}\" data-nav=\"${n.key}\">${n.label}</span>`).join('')}\n      <span class=\"cta-pill\" data-nav=\"cardapio\">Ver cardápio</span>\n    </nav>\n    <button class=\"hamburger\" aria-label=\"menu\">${menuOpen ? ic.close : ic.menu}</button>\n  </header>\n  <div class=\"nav-mobile ${menuOpen ? 'is-open' : ''}\">\n    ${NAV.map(n => `<span class=\"nav-mobile-link ${page === n.key ? 'is-active' : ''}\" data-nav=\"${n.key}\">${n.label}</span>`).join('')}\n    <span class=\"cta-pill cta-pill--block\" data-nav=\"cardapio\">Ver cardápio</span>\n  </div>`\n}\n\nfunction footer() {\n  return `\n  <footer class=\"site-footer\">\n    <span class=\"footer-brand\">Cooltive · Café &amp; Plantas</span>\n    <span class=\"footer-meta\">§ Sousas · Campinas · SP</span>\n    <span class=\"footer-meta footer-meta--mono\">△ ${ADDRESS}</span>\n  </footer>`\n}\n\nfunction viewHome() {\n  return `\n  <section class=\"hero\">\n    <img class=\"hero-bg\" src=\"${IMG.hero}\" alt=\"\" />\n    <div class=\"hero-scrim\"></div>\n    <span class=\"ghost-word\" aria-hidden=\"true\">cooltive</span>\n    <div class=\"hero-inner\">\n      <span class=\"eyebrow eyebrow--light\">Sousas · Campinas</span>\n      <img class=\"hero-logotype\" src=\"${IMG.logotype}\" alt=\"Cooltive · Café &amp; Plantas\" />\n      <p class=\"hero-tagline\">Nossa casinha de felicidade ${ic.leaf} ${ic.heart}</p>\n      <div class=\"hero-ctas\">\n        <span class=\"cta-pill\" data-nav=\"cardapio\">Ver cardápio</span>\n        <span class=\"cta-ghost\" data-nav=\"como\">Como chegar ${ic.arrow}</span>\n      </div>\n    </div>\n  </section>\n  <section class=\"feature-row\">\n    ${[\n      [ic.cup, 'Café de verdade', 'Grãos selecionados, feito com carinho a cada xícara.'],\n      [ic.leaf, 'Plantas por todo canto', 'Um cantinho verde pra você respirar fundo.'],\n      [ic.armchair, 'Ambiente pra desacelerar', 'Sem pressa. Fique o tempo que quiser.'],\n    ].map(([e, t, d]) => `\n      <div class=\"feature-card\">\n        <span class=\"feature-emoji\">${e}</span>\n        <h3>${t}</h3>\n        <p>${d}</p>\n      </div>`).join('')}\n  </section>`\n}\n\nfunction viewSobre() {\n  return `\n  <section class=\"sobre\">\n    <div class=\"sobre-media\"><img src=\"${IMG.storefront}\" alt=\"Fachada da Cooltive\" /></div>\n    <div class=\"sobre-copy\">\n      <span class=\"eyebrow\">Nosso cantinho</span>\n      <p class=\"sobre-text\">A Cooltive nasceu da inspiração. De um daqueles momentos em que percebemos que sentir a beleza ao nosso redor faz o coração se encher de alegria. É uma honra te receber aqui. E honra maior ainda é fazer parte de um bom momento seu.</p>\n      <p class=\"sobre-text\">Nossas plantas são escolhidas uma a uma, cuidadas e cultivadas com atenção. Não usamos fertilizantes ou defensivos químicos. Nossos produtos são feitos de forma artesanal, com ingredientes de fornecedores e parceiros que compartilham do nosso olhar. Não utilizamos corantes, xaropes artificiais, ou realçadores de sabor. Escolhemos com atenção cada música, sabor, aroma, textura e cor.</p>\n      <p class=\"sobre-text\">Nosso desejo é que a Cooltive seja um refúgio. Um lugar onde você se sinta especial, acolhido, com todos os sentidos despertos e tocados de forma especial.</p>\n      <p class=\"sobre-text sobre-text--emphasis\">E temos um pedido: aproveite esse seu tempo! E conte pra gente se podemos tornar sua experiência ainda melhor. Vai ser um prazer cultivar você como presença no nosso pequeno paraíso.</p>\n      <div class=\"hours\">\n        <span class=\"hours-label\">Funcionamento</span>\n        ${HOURS.map(h => `<div class=\"hours-row\"><span>${h.d}</span><span>${h.h}</span></div>`).join('')}\n      </div>\n    </div>\n  </section>`\n}\n\nfunction viewCardapio(d2, items, cat) {\n  const loading = items === undefined\n  const group = GROUPS.find(g => g.key === cat) || GROUPS[0]\n  const filtered = (items || []).filter(r => group.subgrupos.includes(r.subgrupo))\n  return `\n  <section class=\"menu\">\n    <div class=\"menu-head\">\n      <div>\n        <span class=\"eyebrow\">Cada receita tem uma história, nada aqui está por acaso...</span>\n        <h1 class=\"menu-title\">Cardápio</h1>\n      </div>\n      <div class=\"legend\">\n        ${DIET_TAGS.map(t => `<span class=\"legend-item\"><span class=\"chip chip--tag\">${t.abbr}</span>${t.label}</span>`).join('')}\n      </div>\n    </div>\n    <div class=\"cat-row\">\n      ${GROUPS.map(g => `<span class=\"cat-pill ${cat === g.key ? 'is-active' : ''}\" data-cat=\"${g.key}\">${g.label}</span>`).join('')}\n    </div>\n    ${loading ? `<p class=\"menu-loading\">Carregando cardápio…</p>` : `\n    <div class=\"menu-grid\">\n      ${cat === 'quentes' ? `\n        <article class=\"menu-card beans-trigger\" data-action=\"open-beans\">\n          <span class=\"beans-icon\">${ic.filter}</span>\n          <h3>Cafés coados na V60 ou prensa francesa</h3>\n          <p class=\"menu-desc\">Escolha o grão que mais te agrada. Toque aqui pra ver as opções.</p>\n        </article>` : ''}\n      ${filtered.map(r => `\n        <article class=\"menu-card\" data-key=\"${r._id}\">\n          ${r.mais_pedidos ? `<span class=\"ribbon\">${ic.star} Mais pedido</span>` : ''}\n          <h3>${esc(r.nome)}</h3>\n          <p class=\"menu-desc\">${esc(r.descricao || '')}</p>\n          <div class=\"menu-foot\">\n            <span class=\"menu-price\">${d2.fmt.currency(r.preco || 0, 'BRL')}</span>\n            <div class=\"menu-tags\">\n              ${DIET_TAGS.filter(t => r[t.key]).map(t => `<span class=\"chip chip--tag\" title=\"${t.label}\">${t.abbr}</span>`).join('')}\n            </div>\n          </div>\n        </article>`).join('') || `<p class=\"menu-empty\">Sem itens nesta categoria ainda.</p>`}\n    </div>`}\n    <div class=\"encomenda\">\n      <div class=\"encomenda-head\">\n        <span class=\"eyebrow\">Sob encomenda</span>\n        <h2>Nossas tortas e bolos podem ser só seus.</h2>\n        <p>Encomende o seu com 24h de antecedência.</p>\n      </div>\n      <div class=\"encomenda-grid\">\n        ${ENCOMENDAS.map(e => `\n          <div class=\"encomenda-item\">\n            <div>\n              <h4>${esc(e.nome)}</h4>\n              <p>${esc(e.nota)}</p>\n            </div>\n            <span class=\"menu-price\">${d2.fmt.currency(e.preco, 'BRL')}</span>\n          </div>`).join('')}\n      </div>\n      <a class=\"cta-pill encomenda-cta\" href=\"${CONTACT.whatsapp}\" target=\"_blank\" rel=\"noopener\">${ic.whatsapp} Encomendar pelo WhatsApp</a>\n    </div>\n  </section>`\n}\n\nfunction viewComo(copied) {\n  return `\n  <section class=\"como\">\n    <div class=\"como-copy\">\n      <span class=\"eyebrow\">Estamos bem aqui!</span>\n      <h1 class=\"como-address\">${ADDRESS}</h1>\n      <button class=\"copy-btn\" type=\"button\">${copied ? ic.check : ic.copy}<span>${copied ? 'Copiado!' : 'Copiar endereço'}</span></button>\n    </div>\n    <div class=\"como-media\">\n      <iframe src=\"${MAPS_SRC}\" width=\"100%\" height=\"100%\" style=\"border:0\" loading=\"lazy\" referrerpolicy=\"strict-origin-when-cross-origin\" title=\"Mapa da Cooltive\"></iframe>\n    </div>\n  </section>`\n}\n\nfunction viewContato() {\n  const cards = [\n    [ic.whatsapp, 'WhatsApp', CONTACT.whatsappLabel, CONTACT.whatsapp],\n    [ic.instagram, 'Instagram', CONTACT.instagramLabel, CONTACT.instagram],\n    [ic.mail, 'E-mail', CONTACT.email, `mailto:${CONTACT.email}`],\n  ]\n  return `\n  <section class=\"contato\">\n    <span class=\"eyebrow\">Fala com a gente</span>\n    <h1 class=\"contato-title\">Contato</h1>\n    <p class=\"contato-sub\">Dúvidas, encomendas ou só pra dar um oi — escolha o seu jeito favorito.</p>\n    <div class=\"contato-grid\">\n      ${cards.map(([e, t, d, href]) => `\n        <a class=\"contact-card\" href=\"${href}\" target=\"_blank\" rel=\"noopener\">\n          <span class=\"contact-icon\">${e}</span>\n          <h3>${t}</h3>\n          <p>${d}</p>\n        </a>`).join('')}\n    </div>\n  </section>`\n}\n\nexport default {\n  css: `\n  @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap');\n\n  @font-face { font-family:'type'; src:url('https://cooltive.data2.media/file/rNNNiOrAEG90yLewSSxN3') format('truetype'); font-weight:400; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-bold'; src:url('https://cooltive.data2.media/file/E-bhqidXSwVLzTUasVJGE') format('truetype'); font-weight:700; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-condensed'; src:url('https://cooltive.data2.media/file/BCZHKrJTJunS7ILpJRj3p') format('truetype'); font-weight:400; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-condensed-bold'; src:url('https://cooltive.data2.media/file/rvP7tRH4o7dxGRPcQkvFh') format('truetype'); font-weight:700; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-condensed-light'; src:url('https://cooltive.data2.media/file/eJtQh_PbOcck4Ufdl7OSw') format('truetype'); font-weight:300; font-style:normal; font-display:swap; }\n  @font-face { font-family:'type-light'; src:url('https://cooltive.data2.media/file/eTB4CX6cNkmoLzcbqks_8') format('truetype'); font-weight:300; font-style:normal; font-display:swap; }\n\n  :host, .app { display:flex; flex-direction:column; min-height:100vh; font-family:'type',sans-serif; color:#1c1c1c; background:#FBF8F1; }\n  * { box-sizing:border-box; }\n  h1,h2,h3,h4 { margin:0; font-family:'type',serif; }\n  p { margin:0; }\n  img { display:block; max-width:100%; }\n  a { text-decoration:none; color:inherit; }\n\n  .eyebrow { display:inline-block; font-family:'Poppins',sans-serif; font-weight:500; font-size:12px; letter-spacing:2px; text-transform:uppercase; color:#6b8a5a; margin-bottom:10px; }\n  .eyebrow--light { color:rgba(255,255,255,0.85); }\n\n  /* ---- header ---- */\n  .site-header { position:sticky; top:0; z-index:50; display:flex; align-items:center; justify-content:space-between; padding:14px 32px; background:rgba(251,248,241,0.86); backdrop-filter:blur(10px); border-bottom:1px solid #e7e2d6; }\n  .brand { display:flex; align-items:center; gap:12px; cursor:pointer; }\n  .brand-mark { width:44px; height:44px; border-radius:999px; }\n  .brand-word { display:flex; flex-direction:column; line-height:1.15; }\n  .brand-name { font-family:'type',serif; font-weight:600; font-size:20px; }\n  .brand-sub { font-family:'Poppins',sans-serif; font-size:11px; letter-spacing:1.5px; text-transform:uppercase; color:#6b8a5a; }\n  .nav-desktop { display:flex; align-items:center; gap:24px; }\n  .nav-link { font-size:14px; font-weight:500; letter-spacing:0.3px; cursor:pointer; padding-bottom:4px; border-bottom:1px solid transparent; transition:border-color .2s,color .2s; white-space:nowrap; }\n  .nav-link:hover { color:#4a7c3f; }\n  .nav-link.is-active { color:#4a7c3f; border-bottom-color:#4a7c3f; }\n  .cta-pill { background:#4a7c3f; color:#fff; font-size:14px; font-weight:600; padding:11px 22px; border-radius:24px 24px 24px 6px; cursor:pointer; transition:background .2s,transform .15s; white-space:nowrap; display:inline-flex; align-items:center; gap:8px; }\n  .cta-pill:hover { background:#3c6633; transform:translateY(-1px); }\n  .cta-ghost { display:inline-flex; align-items:center; gap:6px; font-size:14px; font-weight:600; color:#fff; cursor:pointer; border-bottom:1px solid rgba(255,255,255,0.5); padding-bottom:2px; }\n  .hamburger { display:none; background:none; border:none; color:#1c1c1c; cursor:pointer; padding:4px; }\n  .nav-mobile { display:none; flex-direction:column; gap:14px; padding:18px 32px 24px; background:#FBF8F1; border-bottom:1px solid #e7e2d6; }\n  .nav-mobile.is-open { display:flex; }\n  .nav-mobile-link { font-size:16px; font-weight:500; cursor:pointer; }\n  .nav-mobile-link.is-active { color:#4a7c3f; font-weight:700; }\n  .cta-pill--block { text-align:center; justify-content:center; }\n\n  @media (max-width:880px) {\n    .nav-desktop { display:none; }\n    .hamburger { display:flex; }\n    .site-header { padding:12px 20px; }\n  }\n  @media (min-width:881px) { .nav-mobile { display:none !important; } }\n\n  main.view { flex:1 0 auto; animation:viewIn .45s ease both; }\n  @keyframes viewIn { from{opacity:0; transform:translateY(10px);} to{opacity:1; transform:translateY(0);} }\n\n  /* ---- hero ---- */\n  .hero { position:relative; min-height:100vh; display:flex; align-items:center; overflow:hidden; }\n  .hero-bg { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }\n  .hero-scrim { position:absolute; inset:0; background:linear-gradient(120deg, rgba(20,28,17,0.82) 0%, rgba(20,28,17,0.55) 60%, rgba(20,28,17,0.35) 100%); }\n  .ghost-word { position:absolute; right:-40px; bottom:-40px; font-family:'type-light',serif; font-weight:300; font-size:min(30vw,320px); color:rgba(255,255,255,0.05); white-space:nowrap; pointer-events:none; z-index:0; }\n  .hero-inner { position:relative; z-index:1; padding:64px 6vw; max-width:780px; }\n  .hero-logotype { width:min(60vw,460px); height:auto; filter:brightness(0) invert(1); margin:0 0 18px; display:block; }\n  .hero-tagline { font-size:18px; color:rgba(255,255,255,0.92); margin-bottom:32px; }\n  .hero-ctas { display:flex; align-items:center; gap:22px; flex-wrap:wrap; }\n\n  /* ---- feature row ---- */\n  .feature-row { display:grid; grid-template-columns:repeat(3,1fr); gap:20px; padding:56px 6vw; max-width:1280px; margin:0 auto; }\n  .feature-card { background:#fff; border:1px solid #e7e2d6; border-radius:22px 22px 22px 4px; padding:26px 22px; transition:transform .2s,box-shadow .2s; }\n  .feature-card:hover { transform:translateY(-4px); box-shadow:0 16px 32px rgba(37,57,31,0.08); }\n  .feature-emoji { font-size:26px; display:block; margin-bottom:12px; }\n  .feature-card h3 { font-size:17px; font-weight:600; margin-bottom:6px; }\n  .feature-card p { font-size:14px; color:#5b5b52; line-height:1.55; }\n  @media (max-width:880px){ .feature-row{ grid-template-columns:1fr; } }\n\n  /* ---- sobre ---- */\n  .sobre { display:grid; grid-template-columns:1fr 1fr; gap:56px; align-items:center; align-content:center; min-height:calc(100vh - 73px); padding:80px 6vw; max-width:1280px; margin:0 auto; }\n  .sobre-media img { border-radius:36px 36px 36px 6px; width:100%; height:460px; object-fit:cover; box-shadow:0 24px 48px rgba(37,57,31,0.14); position:sticky; top:100px; }\n  .sobre-copy { display:flex; flex-direction:column; }\n  .sobre-text { font-size:15.5px; line-height:1.7; color:#3a3a34; margin-bottom:16px; }\n  .sobre-text--emphasis { font-family:'type',serif; font-style:italic; font-size:18px; color:#1c1c1c; }\n  .sobre-copy .hours { margin-top:8px; }\n  @media (max-width:880px){ .sobre{ grid-template-columns:1fr; gap:32px; } .sobre-media img{ height:300px; position:static; } }\n\n  /* ---- cardapio ---- */\n  .menu { padding:64px 6vw 96px; max-width:1280px; margin:0 auto; }\n  .menu-head { display:flex; justify-content:space-between; align-items:flex-end; gap:24px; flex-wrap:wrap; margin-bottom:28px; }\n  .menu-title { font-family:'type',serif; font-size:clamp(34px,5vw,52px); font-style:italic; font-weight:400; }\n  .legend { display:flex; gap:16px; flex-wrap:wrap; }\n  .legend-item { display:flex; align-items:center; gap:8px; font-family:'Poppins',sans-serif; font-size:12px; color:#5b5b52; }\n  .chip { display:inline-flex; align-items:center; justify-content:center; font-family:'type-condensed',sans-serif; font-size:11px; font-weight:400; width:24px; height:24px; border-radius:999px; background:#eef1e9; color:#4a7c3f; }\n  .cat-row { display:flex; gap:12px; margin-bottom:32px; flex-wrap:wrap; }\n  .cat-pill { padding:10px 20px; border-radius:999px; border:1.5px solid #4a7c3f; color:#4a7c3f; font-size:14px; font-weight:600; cursor:pointer; transition:all .2s; white-space:nowrap; }\n  .cat-pill.is-active { background:#4a7c3f; color:#fff; }\n  .menu-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:18px; }\n  .menu-card { position:relative; background:#fff; border:1px solid #e7e2d6; border-radius:20px 20px 20px 4px; padding:22px 20px 18px; transition:transform .2s,box-shadow .2s; }\n  .menu-card:hover { transform:translateY(-3px); box-shadow:0 14px 30px rgba(37,57,31,0.1); }\n  .menu-card h3 { font-size:17px; font-weight:600; margin-bottom:6px; padding-right:8px; }\n  .menu-desc { font-size:13.5px; color:#6b6b61; line-height:1.5; margin-bottom:16px; min-height:20px; }\n  .menu-foot { display:flex; align-items:center; justify-content:space-between; }\n  .menu-price { font-family:'type-condensed-bold',sans-serif; font-weight:400; font-size:15px; color:#1c1c1c; }\n  .menu-tags { display:flex; gap:6px; }\n  .ribbon { position:absolute; top:-10px; right:14px; display:flex; align-items:center; gap:5px; background:#c97b4a; color:#fff; font-size:10.5px; font-weight:700; letter-spacing:0.3px; padding:5px 10px; border-radius:999px; text-transform:uppercase; box-shadow:0 6px 14px rgba(201,123,74,0.35); }\n  .menu-loading, .menu-empty { color:#8a8a80; font-size:14px; padding:40px 0; }\n\n  .beans-trigger { cursor:pointer; background:#eef1e9; border:1.5px dashed #4a7c3f; display:flex; flex-direction:column; justify-content:center; }\n  .beans-trigger:hover { background:#e2ebd8; }\n  .beans-icon { color:#4a7c3f; margin-bottom:10px; }\n  .beans-trigger h3 { color:#3c6633; }\n\n  .encomenda { margin-top:64px; background:#1c1c1c; border-radius:32px 32px 32px 6px; padding:44px 6vw; color:#fff; }\n  .encomenda-head h2 { font-family:'type',serif; font-style:italic; font-size:clamp(22px,3vw,30px); color:#fff; margin-bottom:8px; }\n  .encomenda-head p { font-size:14px; color:rgba(255,255,255,0.7); margin-bottom:28px; }\n  .encomenda-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; margin-bottom:28px; }\n  .encomenda-item { display:flex; justify-content:space-between; gap:16px; padding:16px 0; border-bottom:1px solid rgba(255,255,255,0.12); }\n  .encomenda-item h4 { font-size:15px; font-weight:600; color:#fff; margin-bottom:4px; }\n  .encomenda-item p { font-size:12.5px; color:rgba(255,255,255,0.55); line-height:1.5; }\n  .encomenda-item .menu-price { color:#a9cf9a; white-space:nowrap; }\n  .encomenda-cta { background:#4a7c3f; }\n\n  /* ---- como chegar ---- */\n  .como { display:grid; grid-template-columns:1fr 1fr; gap:56px; align-content:center; min-height:calc(100vh - 73px); padding:80px 6vw 96px; max-width:1280px; margin:0 auto; align-items:stretch; }\n  .como-copy { display:flex; flex-direction:column; justify-content:center; }\n  .como-address { font-family:'type',serif; font-size:clamp(24px,3vw,32px); font-style:italic; line-height:1.35; margin-bottom:24px; max-width:440px; }\n  .copy-btn { display:inline-flex; align-items:center; gap:8px; background:#eef1e9; color:#3c6633; border:none; border-radius:999px; padding:11px 20px; font-size:14px; font-weight:600; cursor:pointer; transition:background .2s; }\n  .copy-btn:hover { background:#dfe8d5; }\n  .hours { border-top:1px solid #e7e2d6; padding-top:20px; max-width:340px; }\n  .hours-label { display:block; font-family:'Poppins',sans-serif; font-size:11px; letter-spacing:1.5px; text-transform:uppercase; color:#6b8a5a; margin-bottom:12px; }\n  .hours-row { display:flex; justify-content:space-between; font-size:14px; padding:7px 0; border-bottom:1px dashed #e7e2d6; }\n  .hours-row:last-child { border-bottom:none; }\n  .como-media { border-radius:28px 28px 28px 6px; overflow:hidden; min-height:340px; box-shadow:0 24px 48px rgba(37,57,31,0.14); }\n  @media (max-width:880px){ .como{ grid-template-columns:1fr; gap:32px; } .como-media{ min-height:280px; } }\n\n  /* ---- contato ---- */\n  .contato { display:flex; flex-direction:column; justify-content:center; min-height:calc(100vh - 73px); padding:80px 6vw 96px; max-width:1000px; margin:0 auto; text-align:center; }\n  .contato-title { font-family:'type',serif; font-size:clamp(34px,5vw,52px); font-style:italic; margin-bottom:14px; }\n  .contato-sub { font-size:15px; color:#6b6b61; max-width:480px; margin:0 auto 44px; }\n  .contato-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }\n  .contact-card { background:#fff; border:1px solid #e7e2d6; border-radius:24px 24px 24px 6px; padding:32px 20px; transition:transform .2s,box-shadow .2s; }\n  .contact-card:hover { transform:translateY(-4px); box-shadow:0 16px 32px rgba(37,57,31,0.1); }\n  .contact-icon { color:#4a7c3f; display:block; margin:0 auto 16px; }\n  .contact-card h3 { font-size:16px; font-weight:600; margin-bottom:6px; }\n  .contact-card p { font-size:13.5px; color:#6b6b61; word-break:break-word; }\n  @media (max-width:880px){ .contato-grid{ grid-template-columns:1fr; } }\n\n  /* ---- footer ---- */\n  .site-footer { display:flex; flex-wrap:wrap; gap:18px 32px; justify-content:space-between; align-items:center; padding:26px 6vw; background:#1c1c1c; color:rgba(255,255,255,0.7); }\n  .footer-brand { font-family:'type',serif; font-style:italic; font-size:15px; color:#fff; }\n  .footer-meta { font-family:'Poppins',sans-serif; font-size:11px; letter-spacing:0.5px; color:rgba(255,255,255,0.55); }\n  .footer-meta--mono { font-family:'type-condensed',sans-serif; }\n  `,\n\n  render(d2) {\n    const page = d2.state.page || 'home'\n    const menuOpen = !!d2.state.menuOpen\n    const cat = d2.state.category || 'comidinhas'\n    const copied = !!d2.state.copied\n    const items = d2.state.menuItems\n\n    let body\n    if (page === 'sobre') body = viewSobre()\n    else if (page === 'cardapio') body = viewCardapio(d2, items, cat)\n    else if (page === 'como') body = viewComo(copied)\n    else if (page === 'contato') body = viewContato()\n    else body = viewHome()\n\n    return `<div class=\"app\">${header(page, menuOpen)}<main class=\"view\" data-key=\"${page}\">${body}</main>${footer()}</div>`\n  },\n\n  mounted(d2) {\n    d2.on('[data-nav]', 'click', (e, el) => {\n      d2.setState({ page: el.dataset.nav, menuOpen: false })\n      try { window.scrollTo(0, 0) } catch (e) {}\n    })\n    d2.on('.hamburger', 'click', () => { d2.setState({ menuOpen: !d2.state.menuOpen }) })\n    d2.on('[data-cat]', 'click', (e, el) => { d2.setState({ category: el.dataset.cat }) })\n    d2.on('[data-action=\"open-beans\"]', 'click', () => {\n      const beans = (d2.state.menuItems || []).filter(r => r.subgrupo === 'onde o cafe acontece')\n      openBeansModal(d2, beans)\n    })\n    d2.on('.copy-btn', 'click', async () => {\n      try { await navigator.clipboard.writeText(ADDRESS) } catch (e) {}\n      d2.setState({ copied: true })\n      setTimeout(() => d2.setState({ copied: false }), 2000)\n    })\n    ;(async () => {\n      const ds = d2.data('cardapio')\n      if (!ds) return\n      await ds.refresh()\n      const all = await ds.loadAll()\n      d2.setState({ menuItems: all })\n    })()\n  },\n}\n","at":"2026-08-08T00:27:59.885Z"}}},{"_id":"5ed9bed7b9e0891ce913e884","component":"data2-core-types@Component","params":{"package":"data2-core","component":"DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}},{"_id":"5f472ae463c680de4ff296e9","component":"data2-core-types@Component","params":{"package":"data2-core","component":"Data2TableDataSource","extends":"data2-core@DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}}]}},{"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":"6a75f27f8bf663d9684addaa","component":"data2-core-primitives@Artboard","system":"6369693af0b06405d12fbef3","displayName":"Cooltive — Editorial (Code Component)ss","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Cooltive — Editorial (Code Component)"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}},"a":{"params":{"fonts":[{"component":"data2-core-web@Font","params":{"family":{"component":"data2-core-primitives@String","params":{"content":"type"}},"faces":[{"src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"rNNNiOrAEG90yLewSSxN3"}},"format":{"component":"data2-core-primitives@String","params":{"content":"truetype"}}}]}},{"component":"data2-core-web@Font","params":{"family":{"component":"data2-core-primitives@String","params":{"content":"type-bold"}},"faces":[{"src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"E-bhqidXSwVLzTUasVJGE"}},"format":{"component":"data2-core-primitives@String","params":{"content":"truetype"}}}]}},{"component":"data2-core-web@Font","params":{"family":{"component":"data2-core-primitives@String","params":{"content":"type-condensed"}},"faces":[{"src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"BCZHKrJTJunS7ILpJRj3p"}},"format":{"component":"data2-core-primitives@String","params":{"content":"truetype"}}}]}},{"component":"data2-core-web@Font","params":{"family":{"component":"data2-core-primitives@String","params":{"content":"type-condensed-bold"}},"faces":[{"src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"rvP7tRH4o7dxGRPcQkvFh"}},"format":{"component":"data2-core-primitives@String","params":{"content":"truetype"}}}]}},{"component":"data2-core-web@Font","params":{"family":{"component":"data2-core-primitives@String","params":{"content":"type-condensed-light"}},"faces":[{"src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"eJtQh_PbOcck4Ufdl7OSw"}},"format":{"component":"data2-core-primitives@String","params":{"content":"truetype"}}}]}},{"component":"data2-core-web@Font","params":{"family":{"component":"data2-core-primitives@String","params":{"content":"type-light"}},"faces":[{"src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"eTB4CX6cNkmoLzcbqks_8"}},"format":{"component":"data2-core-primitives@String","params":{"content":"truetype"}}}]}}]},"component":"data2-core-web@Fonts"}},"reference":"DOdM5nfgitD6sFGuLEcFn"},{"_id":"6a75f464ff4b33550fd3d35e","parent":"6a75f27f8bf663d9684addaa","component":"cooltive@CKt0bzCPp9CD4BGmnRaAM","system":"6369693af0b06405d12fbef3","displayName":"Copy of CooltiveAppInstance","params":{"cardapio":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"MvlTIGtMzw5uoxJfr3rPs"}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false,"left":true,"right":true,"top":true,"bottom":false,"exactX":false,"exactY":false,"fixed":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900,"growHeightWithContent":true}}}},"reference":"jubirZ-cXQubPv_iYc7_9"}]}},{"_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":"6a75f8e0c19549a582ae6866","displayName":"New Application (3)","reference":"-oDw9Um8fYfDdyAIuM1iA","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":"site"}},"entryPoint":{"params":{"component":"data2-core-primitives@Artboard","reference":"DOdM5nfgitD6sFGuLEcFn"},"component":"data2-core-types@ComponentInstanceReference"}},"system":"6369693af0b06405d12fbef3","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a6845ecbf2f0ff17e6adbff","component":"data2-core@DataSet","system":"6369693af0b06405d12fbef3","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"xMRoOooM2T6GIem-fYKjP"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"reference":"MvlTIGtMzw5uoxJfr3rPs"},{"_id":"6a68456cbf2f0ff17e6adbfe","component":"data2-core@Data2TableDataSource","system":"6369693af0b06405d12fbef3","params":{"table":"xMRoOooM2T6GIem-fYKjP","multi":["create"],"super":{},"schema":[{"component":"data2-core-types@Field","params":{"title":"nome","key":"nome","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"title":"descricao","key":"descricao","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"title":"grupo","key":"grupo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"title":"subgrupo","key":"subgrupo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"title":"preco","key":"preco","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"title":"mais_pedidos","key":"mais_pedidos","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"title":"sem_gluten","key":"sem_gluten","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"title":"sem_lactose","key":"sem_lactose","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"title":"sem_acucar","key":"sem_acucar","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"title":"vegano","key":"vegano","component":"data2-core-primitives@Boolean"}}]},"reference":"xMRoOooM2T6GIem-fYKjP"}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}