{"context":{"domain":"www"},"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":"618d6a444e43970b360badd6","name":"www","domain":"www","visibility":"public","settings":{"defaultAccessPolicy":"public"},"updatedAt":"2026-07-27T14:19:36.810Z","createdAt":"2021-11-11T19:08:52.829Z"}]}},{"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":"6a3fcaa982271ebfc5492545","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"landing_v2","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n  :host { all: initial; }\n  .page {\n    height: 100%; overflow-y: auto; overflow-x: hidden;\n    font-family: 'Inter', system-ui, -apple-system, sans-serif;\n    color: #eaeaf2; background: #07060d;\n    background-image:\n      radial-gradient(900px 600px at 50% -8%, rgba(124,77,255,0.28), transparent 60%),\n      radial-gradient(700px 500px at 88% 12%, rgba(233,51,85,0.10), transparent 55%),\n      linear-gradient(180deg, #0a0814 0%, #07060d 38%, #08060f 100%);\n    -webkit-font-smoothing: antialiased;\n  }\n  .page *, .page *::before, .page *::after { box-sizing: border-box; }\n  a { color: inherit; text-decoration: none; }\n  .wrap { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 32px; }\n\n  /* reveal */\n  .reveal { opacity: 0; transform: translateY(18px); transition: opacity .7s ease, transform .7s cubic-bezier(.2,.7,.2,1); }\n  .reveal.in { opacity: 1; transform: none; }\n\n  /* header */\n  .hdr { position: sticky; top: 0; z-index: 50; backdrop-filter: blur(14px);\n    background: rgba(8,6,15,0.55); border-bottom: 1px solid rgba(255,255,255,0.06); }\n  .hdr .wrap { display: flex; align-items: center; gap: 28px; height: 70px; }\n  .logo { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }\n  .logo sup { font-size: 13px; color: #9315ec; }\n  .nav { display: flex; gap: 28px; margin-left: 14px; }\n  .nav a { font-size: 14px; color: #b9bacb; transition: color .2s; }\n  .nav a:hover { color: #fff; }\n  .hdr-cta { margin-left: auto; display: flex; align-items: center; gap: 14px; }\n  .pill-ghost { border: 1px solid rgba(147,21,236,0.6); color: #fff; padding: 9px 20px; border-radius: 999px;\n    font-size: 14px; font-weight: 600; transition: background .2s, border-color .2s; }\n  .pill-ghost:hover { background: rgba(147,21,236,0.18); }\n  .burger { display: none; background: none; border: 0; color: #fff; font-size: 22px; cursor: pointer; }\n\n  /* hero */\n  .hero { padding: 96px 0 40px; }\n  .hero .wrap { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 56px; align-items: center; }\n  .ring-wrap { display: flex; flex-direction: column; align-items: center; gap: 26px; }\n  .ring { position: relative; width: 320px; height: 320px; animation: spin 38s linear infinite; }\n  @keyframes spin { to { transform: rotate(360deg); } }\n  .dot { position: absolute; width: 30px; height: 30px; border-radius: 50%;\n    box-shadow: 0 0 22px 2px currentColor; color: #fff; }\n  .ring-label { font-size: 13px; letter-spacing: 0.16em; text-transform: uppercase; color: #8f90a6; }\n  .h-title { font-size: 76px; line-height: 0.98; font-weight: 800; letter-spacing: -0.03em; margin: 0; }\n  .grad { background: linear-gradient(96deg, #4a7afa 0%, #9315ec 60%, #d549fa 100%);\n    -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }\n  .h-sub { margin: 26px 0 0; font-size: 18px; line-height: 1.55; color: #b6b7ca; max-width: 520px; }\n  .h-ctas { display: flex; align-items: center; gap: 20px; margin-top: 34px; }\n  .btn-primary { background: linear-gradient(96deg, #7c4dff, #d549fa); color: #fff; border: 0;\n    padding: 14px 28px; border-radius: 999px; font-size: 15px; font-weight: 700; cursor: pointer;\n    box-shadow: 0 10px 30px -8px rgba(124,77,255,0.6); transition: transform .15s, box-shadow .2s; }\n  .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 16px 38px -8px rgba(124,77,255,0.7); }\n  .btn-ghost { color: #d6d7e6; font-size: 15px; font-weight: 600; }\n  .btn-ghost:hover { color: #fff; }\n  .note { margin-top: 26px; display: inline-flex; align-items: center; gap: 10px; font-size: 13px;\n    color: #aeb0c6; background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.08);\n    padding: 9px 16px; border-radius: 999px; }\n  .note a { color: #d549fa; font-weight: 600; }\n\n  /* section heads */\n  .sec { padding: 84px 0; }\n  .eyebrow { font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: #76f29b; }\n  .sec-title { font-size: 40px; font-weight: 800; letter-spacing: -0.02em; margin: 14px 0 0; }\n  .sec-lead { color: #a9aabf; font-size: 17px; margin-top: 12px; max-width: 620px; }\n  .center { text-align: center; }\n  .center .sec-lead { margin-left: auto; margin-right: auto; }\n\n  /* pillars */\n  .pillars { display: grid; grid-template-columns: repeat(3,1fr); gap: 18px; margin-top: 42px; }\n  .pillar { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08);\n    border-radius: 16px; padding: 26px; }\n  .pillar .pg { width: 40px; height: 40px; border-radius: 11px; display: grid; place-items: center;\n    font-size: 19px; margin-bottom: 16px; }\n  .pillar h3 { margin: 0 0 8px; font-size: 19px; font-weight: 700; }\n  .pillar p { margin: 0; color: #9d9eb4; font-size: 14px; line-height: 1.5; }\n  .personas { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: 44px; }\n  .persona { border: 1px solid rgba(255,255,255,0.12); border-radius: 999px; padding: 10px 20px;\n    font-size: 14px; color: #c4c5d6; background: rgba(255,255,255,0.02); transition: border-color .2s, color .2s; }\n  .persona:hover { border-color: rgba(124,77,255,0.5); color: #fff; }\n\n  /* concept band */\n  .band { background: linear-gradient(120deg, rgba(124,77,255,0.14), rgba(213,73,250,0.08));\n    border: 1px solid rgba(255,255,255,0.08); border-radius: 24px; padding: 56px; text-align: center; }\n  .band h2 { font-size: 38px; font-weight: 800; letter-spacing: -0.02em; margin: 0; }\n  .band h2 .grad { font-style: normal; }\n  .band .trial { color: #aeb0c6; margin: 14px 0 26px; font-size: 15px; }\n  .checks { display: flex; gap: 26px; justify-content: center; flex-wrap: wrap; margin-bottom: 30px; }\n  .check { display: flex; align-items: center; gap: 8px; color: #d6d7e6; font-size: 15px; }\n  .check b { color: #76f29b; }\n\n  /* companies */\n  .logos { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; margin-top: 34px; opacity: .8; }\n  .logo-chip { width: 150px; height: 52px; border-radius: 12px; background: rgba(255,255,255,0.04);\n    border: 1px solid rgba(255,255,255,0.07); display: grid; place-items: center; color: #6f7088;\n    font-weight: 700; letter-spacing: 0.04em; font-size: 14px; }\n\n  /* suite showcase */\n  .show { display: grid; grid-template-columns: repeat(3,1fr); gap: 18px; margin-top: 42px; }\n  .card { background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.08);\n    border-radius: 18px; padding: 24px; backdrop-filter: blur(6px); }\n  .card h3 { margin: 0 0 6px; font-size: 18px; font-weight: 700; }\n  .card .desc { color: #9d9eb4; font-size: 13.5px; margin: 0 0 18px; line-height: 1.5; }\n  .ctrls { display: flex; flex-direction: column; gap: 10px; }\n  .ctrl { display: flex; align-items: center; justify-content: space-between; background: rgba(255,255,255,0.03);\n    border: 1px solid rgba(255,255,255,0.07); border-radius: 10px; padding: 10px 13px; font-size: 13px; color: #cfd0e0; }\n  .toggle { width: 38px; height: 20px; border-radius: 999px; background: #7c4dff; position: relative; }\n  .toggle::after { content:''; position: absolute; top: 2px; right: 2px; width: 16px; height: 16px; border-radius: 50%; background: #fff; }\n  .slider { width: 90px; height: 5px; border-radius: 999px; background: rgba(255,255,255,0.15); position: relative; }\n  .slider::after { content:''; position: absolute; left: 56%; top: -4px; width: 13px; height: 13px; border-radius: 50%; background: #d549fa; }\n  .swatches { display: flex; gap: 8px; margin-bottom: 16px; }\n  .sw { width: 30px; height: 30px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.12); }\n  .presets { display: flex; flex-wrap: wrap; gap: 8px; }\n  .preset { font-size: 12px; padding: 6px 12px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.1);\n    color: #c4c5d6; background: rgba(255,255,255,0.03); }\n  .preset.on { border-color: rgba(118,242,155,0.5); color: #76f29b; }\n  .urow { display: flex; align-items: center; gap: 11px; padding: 9px 0; border-bottom: 1px solid rgba(255,255,255,0.05); }\n  .urow:last-child { border-bottom: 0; }\n  .av { width: 32px; height: 32px; border-radius: 50%; flex: none; }\n  .urow .nm { font-size: 13px; color: #e6e7f1; font-weight: 600; }\n  .urow .hd { font-size: 11.5px; color: #8f90a6; }\n\n  /* suite list */\n  .suite { display: grid; grid-template-columns: repeat(4,1fr); gap: 12px; margin-top: 40px; }\n  .prod { display: flex; align-items: center; gap: 12px; background: rgba(255,255,255,0.03);\n    border: 1px solid rgba(255,255,255,0.07); border-radius: 13px; padding: 15px 16px; }\n  .prod .pd { width: 12px; height: 12px; border-radius: 50%; box-shadow: 0 0 12px 1px currentColor; }\n  .prod .pn { font-size: 14px; font-weight: 600; color: #dfe0ec; }\n  .prod .soon { margin-left: auto; font-size: 10px; color: #76f29b; letter-spacing: 0.06em; }\n\n  /* footer */\n  .ft { border-top: 1px solid rgba(255,255,255,0.07); padding: 64px 0 40px; margin-top: 40px; }\n  .ft-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 30px; }\n  .ft h4 { font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: #76f29b; margin: 0 0 16px; }\n  .ft a { display: block; color: #a9aabf; font-size: 14px; margin-bottom: 11px; transition: color .2s; }\n  .ft a:hover { color: #fff; }\n  .ft .brand .logo { font-size: 26px; }\n  .ft .tag { color: #8f90a6; font-size: 14px; margin-top: 12px; max-width: 240px; line-height: 1.5; }\n  .ft-base { display: flex; justify-content: space-between; align-items: center; margin-top: 48px;\n    padding-top: 22px; border-top: 1px solid rgba(255,255,255,0.06); color: #75768c; font-size: 13px; }\n\n  @media (max-width: 980px) {\n    .hero .wrap { grid-template-columns: 1fr; gap: 36px; }\n    .ring-wrap { order: -1; }\n    .h-title { font-size: 54px; }\n    .show, .pillars { grid-template-columns: 1fr; }\n    .suite { grid-template-columns: repeat(2,1fr); }\n    .ft-grid { grid-template-columns: 1fr 1fr; }\n  }\n  @media (max-width: 720px) {\n    .nav { display: none; }\n    .burger { display: block; }\n    .hdr.open .nav { display: flex; position: absolute; top: 70px; left: 0; right: 0; flex-direction: column;\n      gap: 0; background: #0c0a16; border-bottom: 1px solid rgba(255,255,255,0.08); padding: 8px 32px 18px; margin: 0; }\n    .h-title { font-size: 42px; }\n    .band { padding: 36px 22px; }\n    .band h2 { font-size: 28px; }\n    .ft-grid { grid-template-columns: 1fr; }\n    .ft-base { flex-direction: column; gap: 10px; }\n    .wrap { padding: 0 20px; }\n  }\n  `,\n\n  render() {\n    const COLORS = ['#4a7afa','#f84970','#4bfadc','#f9ba49','#d549fa','#794dfa','#4bb0fa','#76f29b'];\n    const POS = [[266,146],[231,231],[146,266],[61,231],[26,146],[61,61],[146,26],[231,61]];\n    const dots = COLORS.map((c,i) =>\n      `<span class=\"dot\" style=\"left:${POS[i][0]}px;top:${POS[i][1]}px;background:${c};color:${c}\"></span>`\n    ).join('');\n\n    const personas = ['developers','designers','sales engineering','operations','ceo','makers','product owners','marketing']\n      .map(p => `<div class=\"persona\">${p}</div>`).join('');\n\n    const pillars = [\n      { g:'🤝', c:'#4a7afa', t:'Collaborative', d:'Design, data and logic live in one place — no hand-offs, no lost context across teams.' },\n      { g:'♻️', c:'#76f29b', t:'No-Rework', d:'What you see is truly what you get. Build it once and ship it — straight from concept.' },\n      { g:'🔍', c:'#d549fa', t:'Transparent', d:'Your whole model is exposed across the company, never hidden away inside code.' },\n    ].map(p => `<div class=\"pillar reveal\"><div class=\"pg\" style=\"background:${p.c}22;color:${p.c}\">${p.g}</div>\n      <h3>${p.t}</h3><p>${p.d}</p></div>`).join('');\n\n    const companies = ['NOVA','ARCADIS','BLISS','GOOMER','WHIRLPOOL','PEPITA']\n      .map(n => `<div class=\"logo-chip\">${n}</div>`).join('');\n\n    const suiteList = [\n      ['Ui','#4a7afa'],['Registry','#f84970'],['Media','#f9ba49'],['ID','#4bfadc'],\n      ['Connect','#4bb0fa'],['Domain','#d549fa'],['Rush','#794dfa'],['Cashier','#76f29b']\n    ].map(([n,c],i) => `<div class=\"prod\"><span class=\"pd\" style=\"background:${c};color:${c}\"></span>\n      <span class=\"pn\">Data² ${n}</span>${i===7?'<span class=\"soon\">soon</span>':''}</div>`).join('');\n\n    const users = [\n      ['Christie Duncan','theonly_christie','#f84970','cats and pizza. A freelance designer'],\n      ['Maxwell F.','maxxplorer','#4a7afa','Capturing moments that matter 📷'],\n      ['Rachel Green','rachie_g','#76f29b','Bookworm by day, stargazer by night 📚'],\n    ].map(([n,h,c,b]) => `<div class=\"urow\"><span class=\"av\" style=\"background:${c}\"></span>\n      <div><div class=\"nm\">${n}</div><div class=\"hd\">@${h} · ${b}</div></div></div>`).join('');\n\n    return `\n    <div class=\"page\">\n      <header class=\"hdr\">\n        <div class=\"wrap\">\n          <div class=\"logo\">Data<sup>2</sup></div>\n          <nav class=\"nav\">\n            <a data-go=\"suite\">Products</a><a data-go=\"platform\">Use Cases</a>\n            <a data-go=\"companies\">Integrations</a><a data-go=\"suite\">Learn</a>\n          </nav>\n          <div class=\"hdr-cta\">\n            <a class=\"pill-ghost\" href=\"#\">Sign-up</a>\n            <button class=\"burger\" data-burger>☰</button>\n          </div>\n        </div>\n      </header>\n\n      <section class=\"hero\">\n        <div class=\"wrap\">\n          <div class=\"ring-wrap reveal\">\n            <div class=\"ring\">${dots}</div>\n            <div class=\"ring-label\">Digital Expression Suite</div>\n          </div>\n          <div class=\"reveal\">\n            <h1 class=\"h-title\">Lead the <span class=\"grad\">Change</span><br/>in your Industry.</h1>\n            <p class=\"h-sub\">More accessible than traditional software development. More flexible and scalable than generic SaaS.</p>\n            <div class=\"h-ctas\">\n              <button class=\"btn-primary\" data-go=\"band\">Start Building</button>\n              <a class=\"btn-ghost\" href=\"#\">Talk to Sales →</a>\n            </div>\n            <div class=\"note\">🔔 We can also build it for you using Data² ! <a href=\"#\">Know more!</a></div>\n          </div>\n        </div>\n      </section>\n\n      <section class=\"sec\" id=\"platform\">\n        <div class=\"wrap center\">\n          <div class=\"eyebrow\">The Platform</div>\n          <h2 class=\"sec-title\">All-In-One Software Crafting Platform</h2>\n          <div class=\"pillars\">${pillars}</div>\n          <div class=\"personas reveal\">${personas}</div>\n        </div>\n      </section>\n\n      <section class=\"sec\" id=\"band\">\n        <div class=\"wrap\">\n          <div class=\"band reveal\">\n            <h2>From Concept To <span class=\"grad\">WOW</span><br/>without a single Alt + Tab</h2>\n            <div class=\"trial\">Free 7-day trial — no credit card required.</div>\n            <div class=\"checks\">\n              <div class=\"check\"><b>✓</b> No infrastructure</div>\n              <div class=\"check\"><b>✓</b> No setup costs</div>\n              <div class=\"check\"><b>✓</b> Pay as you go</div>\n            </div>\n            <button class=\"btn-primary\" href=\"#\">Start Building</button>\n          </div>\n        </div>\n      </section>\n\n      <section class=\"sec\" id=\"companies\">\n        <div class=\"wrap center\">\n          <div class=\"eyebrow\">Trusted</div>\n          <h2 class=\"sec-title\">Companies Building with Data²</h2>\n          <div class=\"logos reveal\">${companies}</div>\n        </div>\n      </section>\n\n      <section class=\"sec\" id=\"suite\">\n        <div class=\"wrap\">\n          <div class=\"center\">\n            <div class=\"eyebrow\">Digital Expression Suite</div>\n            <h2 class=\"sec-title\">Components from the finest porcelain</h2>\n            <p class=\"sec-lead\">Instant drop-in components for viewing and interacting with your data — tweak every piece to make it yours.</p>\n          </div>\n          <div class=\"show\">\n            <div class=\"card reveal\">\n              <h3>Controls</h3>\n              <p class=\"desc\">Customizable, dark-mode drop-in controls.</p>\n              <div class=\"ctrls\">\n                <div class=\"ctrl\">Select <span>▾</span></div>\n                <div class=\"ctrl\">Toggle <span class=\"toggle\"></span></div>\n                <div class=\"ctrl\">Slider <span class=\"slider\"></span></div>\n                <div class=\"ctrl\">Number <span>42</span></div>\n              </div>\n            </div>\n            <div class=\"card reveal\">\n              <h3>Tweak it to make it yours</h3>\n              <p class=\"desc\">Live palette &amp; presets across the whole suite.</p>\n              <div class=\"swatches\">\n                <span class=\"sw\" style=\"background:#9315ec\"></span>\n                <span class=\"sw\" style=\"background:#8543fe\"></span>\n                <span class=\"sw\" style=\"background:#45fa9c\"></span>\n                <span class=\"sw\" style=\"background:#e93355\"></span>\n                <span class=\"sw\" style=\"background:#0b0814\"></span>\n              </div>\n              <div class=\"presets\">\n                <span class=\"preset on\">Default</span><span class=\"preset\">Space</span>\n                <span class=\"preset\">Candy</span><span class=\"preset\">Matcha</span>\n              </div>\n            </div>\n            <div class=\"card reveal\">\n              <h3>Tables</h3>\n              <p class=\"desc\">Display your entities in tabular form.</p>\n              ${users}\n            </div>\n          </div>\n          <div class=\"suite reveal\">${suiteList}</div>\n        </div>\n      </section>\n\n      <footer class=\"ft\">\n        <div class=\"wrap\">\n          <div class=\"ft-grid\">\n            <div class=\"brand\">\n              <div class=\"logo\">Data<sup>2</sup></div>\n              <div class=\"tag\">The all-in-one platform to design, build and ship software — without a single Alt + Tab.</div>\n            </div>\n            <div><h4>Suite</h4>\n              <a href=\"#\">Data² Ui</a><a href=\"#\">Data² Registry</a><a href=\"#\">Data² Media</a>\n              <a href=\"#\">Data² ID</a><a href=\"#\">Data² Connect</a><a href=\"#\">Data² Domain</a><a href=\"#\">Data² Rush</a></div>\n            <div><h4>Data²</h4>\n              <a href=\"#\">Use Cases</a><a href=\"#\">Schedule a Demo</a><a href=\"#\">Funding</a>\n              <a href=\"#\">People</a><a href=\"#\">Solutions</a><a href=\"#\">Pricing</a></div>\n            <div><h4>Learn</h4>\n              <a href=\"#\">Getting Started</a><a href=\"#\">Playlists</a><a href=\"#\">Categories</a>\n              <a href=\"#\">Search Content</a><a href=\"#\">Components Reference</a></div>\n          </div>\n          <div class=\"ft-base\">\n            <span>Data² — all rights reserved.</span>\n            <span>Products · Use Cases · Integrations · Learn</span>\n          </div>\n        </div>\n      </footer>\n    </div>`;\n  },\n\n  mounted(d2, root) {\n    const scroller = root.querySelector('.page');\n    // smooth scroll for nav + CTA anchors\n    d2.on('[data-go]', 'click', (e, el) => {\n      const target = root.querySelector('#' + el.getAttribute('data-go'));\n      if (target && scroller) {\n        scroller.scrollTo({ top: target.offsetTop - 80, behavior: 'smooth' });\n        root.querySelector('.hdr').classList.remove('open');\n      }\n    });\n    // mobile menu\n    d2.on('[data-burger]', 'click', () => root.querySelector('.hdr').classList.toggle('open'));\n    // scroll reveal\n    const els = root.querySelectorAll('.reveal');\n    if (typeof IntersectionObserver !== 'undefined') {\n      const io = new IntersectionObserver((entries) => {\n        entries.forEach((en) => { if (en.isIntersecting) { en.target.classList.add('in'); io.unobserve(en.target); } });\n      }, { root: scroller, threshold: 0.12 });\n      els.forEach((el) => io.observe(el));\n      d2.onUnmount(() => io.disconnect());\n    } else {\n      els.forEach((el) => el.classList.add('in'));\n    }\n  },\n}"}}}}}}}},{"_id":"6a62f760209986653b20ffea","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"d2sitev2","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host,.d2site{\n  --worm:linear-gradient(90deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e,#ff6a4d,#e8e84d,#84e05a,#4de0a1,#4ddfe6,#5b86ff,#9b5cff);\n  --worm-mesh:linear-gradient(125deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e,#ff6a4d,#e8e84d,#84e05a,#4de0a1,#4ddfe6,#5b86ff,#9b5cff);\n  --tile:2400px;\n  --bg:#000; --panel:#0b0b0d; --panel2:#101013; --raise:#17171b;\n  --line:rgba(255,255,255,.09); --line2:rgba(255,255,255,.055);\n  --ink:#f2f2f5; --mut:#8a8a93; --faint:#55555e;\n  --blue:#3a7bff; --blue-soft:rgba(58,123,255,.16);\n  --ok:#4de0a1; --warn:#e8e84d; --bad:#ff6a4d;\n  --sans:\"Helvetica Neue\",Helvetica,Arial,\"PingFang SC\",\"Hiragino Sans GB\",\"Microsoft YaHei\",\"Noto Sans CJK SC\",\"Noto Sans SC\",system-ui,sans-serif;\n  --mono:ui-monospace,\"SF Mono\",Menlo,Consolas,monospace;\n  --out:cubic-bezier(.22,1,.36,1); --soft:cubic-bezier(.4,0,.2,1); --spring:cubic-bezier(.34,1.4,.5,1);\n  --hue:#5b86ff;\n}\n*{box-sizing:border-box;margin:0;padding:0}\n.d2site{position:relative;height:100%;overflow-y:auto;overflow-x:hidden;background:var(--bg);color:var(--ink);\n  font-family:var(--sans);-webkit-font-smoothing:antialiased;line-height:1.55;scroll-behavior:smooth;scroll-snap-type:y proximity;scroll-padding-top:66px}\n.d2site a{color:inherit;text-decoration:none}\n.d2site ::selection{background:var(--blue);color:#fff}\n@keyframes flow{to{background-position:var(--tile) 0}}\n@keyframes drift{0%{background-position:0% 30%}100%{background-position:100% 70%}}\n@keyframes spin{to{transform:rotate(360deg)}}\n@keyframes orbglow{0%,100%{box-shadow:0 0 14px currentColor,inset 0 2px 6px rgba(255,255,255,.32)}50%{box-shadow:0 0 30px currentColor,inset 0 2px 6px rgba(255,255,255,.44)}}\n.mark{font-weight:500;letter-spacing:-.015em;line-height:1;font-family:var(--sans);display:inline-flex;align-items:center}\n.logo{display:block;width:auto;height:24px}\n.logo use{fill:#fff}\n.mark sup{font-size:.46em;font-weight:500;vertical-align:super;margin-left:.5px}\nheader.nav{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;\n  padding:20px 40px;transition:background .4s var(--soft),backdrop-filter .4s,border-color .4s;border-bottom:1px solid transparent}\nheader.nav.scrolled{background:rgba(6,6,8,.72);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}\nheader.nav .mark{font-size:26px}\n.navlinks{display:flex;align-items:center;gap:28px;font-size:14px}\n.navlinks a{color:rgba(255,255,255,.82);transition:color .2s}\n.navlinks a:hover{color:#fff}\n.navctl{display:flex;align-items:center;gap:14px}\n.lang{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;font-family:var(--mono);font-size:11px}\n.lang button{background:none;border:0;color:var(--mut);cursor:pointer;padding:6px 11px;font:inherit;letter-spacing:.06em;transition:.25s var(--soft)}\n.lang button.on{background:var(--blue);color:#fff}\n.signin{border:1px solid var(--line);border-radius:999px;padding:8px 18px;font-size:13px;color:#fff;transition:.3s var(--out)}\n.signin:hover{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft)}\n.burger{display:none;background:none;border:0;cursor:pointer;flex-direction:column;gap:5px;padding:6px}\n.burger span{width:22px;height:2px;background:#fff;border-radius:2px}\n.btn{position:relative;display:inline-flex;align-items:center;gap:9px;overflow:hidden;border:0;cursor:pointer;font:inherit;font-weight:600;color:#08080a;padding:15px 30px;border-radius:999px;background:var(--worm);background-size:var(--tile) 100%;animation:flow 20s linear infinite;box-shadow:inset 0 1.5px 0 rgba(255,255,255,.5),inset 0 -4px 9px rgba(0,0,0,.16),0 8px 26px rgba(0,0,0,.45);transition:transform .42s var(--spring),box-shadow .3s var(--soft),filter .4s}\n.btn:hover{transform:translateY(-2px);filter:saturate(1.06) brightness(1.03);box-shadow:inset 0 1.5px 0 rgba(255,255,255,.55),inset 0 -4px 9px rgba(0,0,0,.16),0 16px 40px rgba(155,92,255,.32)}\n.btn:active{transform:translateY(0) scale(.96)}\n.btn.ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--line);animation:none}\n.btn.ghost:hover{box-shadow:inset 0 0 0 1.5px var(--blue),0 0 0 3px var(--blue-soft);filter:none}\nsection{position:relative;padding:clamp(80px,11vh,150px) 40px;min-height:100vh;display:flex;flex-direction:column;justify-content:center}\n#essence,#levers,#deliver{background:rgba(255,255,255,.014)}\n.wrap{width:100%;max-width:1200px;margin:0 auto}\n.sec-t{font-size:clamp(30px,4.6vw,58px);font-weight:800;letter-spacing:-.02em;line-height:1.04;margin-top:14px;text-wrap:balance}\n.sec-sub{color:var(--mut);font-size:17px;line-height:1.55;margin-top:16px;max-width:60ch}\n.eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.24em;text-transform:uppercase;color:var(--faint)}\n.reveal{opacity:0;transform:translateY(24px);transition:opacity .8s var(--out),transform .8s var(--out)}\n.reveal.in{opacity:1;transform:none}\n#hero{padding:0;min-height:calc(100vh - 66px);overflow:hidden;scroll-snap-align:start;background:#000}\n#hero .herofx{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block}\n#hero .corner{position:absolute;inset:0;pointer-events:none;background:radial-gradient(46% 42% at -2% -4%,rgba(255,90,210,.55),transparent 62%)}\n#hero .vig{position:absolute;inset:0;pointer-events:none;background:radial-gradient(140% 110% at 50% 20%,transparent 38%,rgba(4,8,7,.72) 100%)}\n#hero .inner{position:relative;z-index:2;min-height:calc(100vh - 66px);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:80px 40px 90px}\n.h1{font-size:clamp(34px,5vw,74px);line-height:1.02;font-weight:760;letter-spacing:-.025em;text-transform:none;text-wrap:balance;text-shadow:0 2px 40px rgba(0,0,0,.35)}\n.hero-kicker{font-family:var(--mono);font-size:clamp(11px,1.25vw,13px);letter-spacing:.22em;text-transform:uppercase;color:rgba(255,255,255,.62);margin-bottom:26px;font-weight:500}\n#hero .sub{margin-top:30px;max-width:640px;font-size:clamp(16px,2vw,21px);line-height:1.5;color:rgba(255,255,255,.94);font-weight:400;text-wrap:balance}\n#hero .cta{margin-top:44px;display:flex;gap:14px;flex-wrap:wrap;justify-content:center;align-items:center}\n#hero .cta .btn{color:#0a0a0c}\n#hero .cta .btn:not(.ghost){padding:17px 36px;font-size:16px;font-weight:700}\n#hero .cta .btn.ghost{padding:14px 26px;opacity:.9}\n#hero .cta .btn.ghost{color:#fff;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.5)}\n#hero .cta .btn.ghost:hover{box-shadow:inset 0 0 0 1.5px #fff}\n.herostrip{margin-top:52px;display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:820px}\n.hs-clients{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 14px;font-size:14px}\n.hs-clients .hs-lead{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}\n.hs-clients .hs-logos{font-weight:600;color:rgba(255,255,255,.72)}\n.hs-steps{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 16px;font-size:13px;color:var(--mut)}\n.hs-step b{color:#fff;font-weight:700}\n.hs-arrow{color:var(--blue)}\n@media(max-width:600px){.herostrip{margin-top:34px}.hs-steps{font-size:12px}}\n.credit{position:absolute;right:40px;bottom:34px;z-index:2;width:280px;text-align:right;background:rgba(6,10,9,.5);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:12px 15px}\n.credit b{font-size:10px;font-weight:700;display:block;margin-bottom:4px;letter-spacing:.02em}\n.credit p{font-size:10px;line-height:1.5;color:rgba(255,255,255,.72)}\n.scrollcue{position:absolute;left:50%;bottom:30px;z-index:2;transform:translateX(-50%);font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:rgba(255,255,255,.7);text-transform:uppercase;display:flex;flex-direction:column;align-items:center;gap:8px}\n.scrollcue i{width:1px;height:34px;background:linear-gradient(rgba(255,255,255,.8),transparent);display:block}\n#essence{border-bottom:1px solid var(--line)}\n.triad{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:46px}\n.tri{border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:32px 30px;display:flex;flex-direction:column;transition:transform .45s var(--spring),box-shadow .4s,border-color .4s}\n.tri:hover{transform:translateY(-3px);box-shadow:0 22px 60px rgba(0,0,0,.5);border-color:rgba(255,255,255,.16)}\n.tri .accent{height:6px;width:56px;border-radius:999px;background:var(--worm);background-size:var(--tile) 100%;animation:flow 15s linear infinite;margin-bottom:22px}\n.tri .q{font-family:var(--mono);font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--faint);margin-bottom:12px}\n.tri h3{font-size:clamp(21px,2.3vw,28px);font-weight:800;letter-spacing:-.01em;line-height:1.08;margin-bottom:14px;text-wrap:balance}\n.tri p{color:var(--mut);font-size:15.5px;line-height:1.55}\n.tri em{font-style:normal;background:var(--worm);background-size:var(--tile) 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 15s linear infinite}\n.tri .foot{margin-top:auto;padding-top:22px}\n.tri .foot .prod-row{gap:8px}\n.tri .foot .chip{padding:5px 10px;font-size:10.5px}\n.tri .inames{display:flex;flex-wrap:wrap;gap:8px 12px;margin-top:auto;padding-top:22px;font-size:14px;color:var(--ink);font-weight:500}\n.baband{display:grid;grid-template-columns:1fr auto 1fr;gap:28px;align-items:center;margin-top:22px;border:1px solid var(--line);border-radius:20px;background:var(--panel2);padding:26px 32px}\n.baband .k{font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--faint);margin-bottom:8px}\n.baband .before p{color:var(--faint);text-decoration:line-through;text-decoration-color:rgba(255,106,77,.5);font-size:15px}\n.baband .arrow{color:var(--blue);font-size:26px;line-height:1}\n.baband .after p{color:var(--ink);font-size:15px}\n#glance{border-bottom:1px solid var(--line);min-height:auto}\n.glance-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:42px}\n.gcard{position:relative;border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:22px;display:flex;flex-direction:column;gap:12px;transition:transform .4s var(--spring),border-color .4s,background .4s;overflow:hidden}\n.gcard:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--hue) 55%,var(--line));background:var(--panel2)}\n.gcard .num{position:absolute;top:16px;right:18px;font-family:var(--mono);font-size:11px;color:var(--faint)}\n.gicon{width:42px;height:42px;display:flex;align-items:center;justify-content:center;border-radius:11px;background:color-mix(in srgb,var(--hue) 15%,transparent)}\n.gsvg{width:24px;height:24px;stroke:var(--hue);stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round;overflow:visible}\n.gsvg *{transform-box:fill-box;transform-origin:center}\n.gsvg .dot{fill:var(--hue);stroke:none;animation:gdot 2.6s var(--soft) infinite}\n@keyframes gdot{0%{transform:translateX(0);opacity:0}12%{opacity:1}88%{opacity:1}100%{transform:translateX(24px);opacity:0}}\n.gsvg .b2{animation:gpulse 2.2s ease-in-out infinite}\n@keyframes gpulse{0%,100%{opacity:.4}50%{opacity:1}}\n.gsvg .bar{transform-origin:bottom center;animation:gbar 1.9s ease-in-out infinite}\n.gsvg .bar2{animation-delay:.22s}.gsvg .bar3{animation-delay:.44s}\n@keyframes gbar{0%,100%{transform:scaleY(.55)}50%{transform:scaleY(1)}}\n.gsvg .bx{animation:gbox 2.4s var(--spring) infinite}\n@keyframes gbox{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}\n.gname{font-size:16px;font-weight:700;letter-spacing:-.01em}\n.gval{font-size:13px;color:var(--mut);line-height:1.42}\n.clients-row{display:flex;flex-wrap:wrap;align-items:center;gap:14px 40px;margin-top:36px;padding-top:30px;border-top:1px solid var(--line)}\n.clients-row .cl-lead{width:100%;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:2px}\n.clients-row .cl{font-size:19px;font-weight:600;color:rgba(255,255,255,.58);filter:grayscale(1);transition:color .3s,opacity .3s;opacity:.85}\n.clients-row .cl:hover{color:#fff;opacity:1}\n@media(max-width:900px){.glance-grid{grid-template-columns:1fr 1fr}}\n@media(max-width:600px){.glance-grid{grid-template-columns:1fr}}\n#proof{min-height:auto;padding:70px 40px;border-bottom:1px solid var(--line)}\n#proof .lead{text-align:center;color:var(--mut);font-size:13px;font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;margin-bottom:34px}\n.logos{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:14px 54px}\n.logos .lg{font-size:23px;font-weight:600;letter-spacing:.01em;color:rgba(255,255,255,.62);filter:grayscale(1);transition:color .3s,filter .3s,opacity .3s;opacity:.85}\n.logos .lg:hover{color:#fff;opacity:1}\n.prod-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n.prod-row .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-right:4px}\n.chip{font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--ink);border:1px solid var(--line);border-radius:999px;padding:6px 12px;background:var(--panel2)}\n#industries{padding:0;min-height:auto}\n.ind-head{padding:110px 40px 40px;max-width:1180px;margin:0 auto}\n.ind-head h2{font-size:clamp(30px,5vw,62px);font-weight:800;letter-spacing:-.02em;line-height:1;text-wrap:balance}\n.ind-head p{color:var(--mut);font-size:18px;margin-top:18px;max-width:52ch}\n.industry{position:relative;min-height:100vh;display:flex;align-items:center;padding:110px 40px;overflow:hidden;border-top:1px solid var(--line);scroll-snap-align:start}\n.industry .glow{position:absolute;inset:0;pointer-events:none;background:radial-gradient(60% 70% at 82% 30%,color-mix(in srgb,var(--hue) 42%,transparent),transparent 66%)}\n.industry .glow2{position:absolute;inset:0;pointer-events:none;background:radial-gradient(50% 60% at 10% 90%,color-mix(in srgb,var(--hue) 20%,transparent),transparent 60%)}\n.industry .flow{position:absolute;inset:0;z-index:1;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen}\n.industry .inner{position:relative;z-index:2;max-width:1180px;margin:0 auto;width:100%;display:grid;grid-template-columns:1.05fr .95fr;gap:64px;align-items:center}\n.ix-num{font-family:var(--mono);font-size:13px;letter-spacing:.2em;color:var(--hue);margin-bottom:20px}\n.ix-num span{color:var(--faint)}\n.ix-name{font-size:clamp(34px,5.6vw,74px);font-weight:800;line-height:.96;letter-spacing:-.02em;text-wrap:balance}\n.ix-poss{margin-top:26px;font-size:clamp(19px,2.3vw,27px);line-height:1.28;font-weight:500;color:#fff;text-wrap:balance;max-width:22ch}\n.ix-poss b{color:var(--hue);font-weight:700}\n.ix-side{display:flex;flex-direction:column;gap:22px}\n.caps{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:16px;background:rgba(12,12,15,.55);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);overflow:hidden}\n.caps .cap{display:flex;align-items:center;gap:14px;padding:15px 20px;border-bottom:1px solid var(--line2);font-size:15px}\n.caps .cap:last-child{border-bottom:0}\n.caps .cap .dot{width:8px;height:8px;border-radius:50%;background:var(--hue);flex:none;box-shadow:0 0 10px var(--hue)}\n.ix-proof{display:flex;align-items:center;gap:12px;font-size:13px;color:var(--mut)}\n.ix-proof .who{color:#fff;font-weight:600;filter:grayscale(1);opacity:.9}\n.industry{display:none}\n.indacc{display:none}\n#industries{display:none}\n.gcard{cursor:pointer}\n.gcard::after{content:\"↗\";position:absolute;bottom:16px;right:18px;color:var(--faint);font-size:14px;transition:color .3s,transform .3s}\n.gcard:hover::after{color:var(--hue);transform:translate(2px,-2px)}\n.uni-overlay{position:fixed;inset:0;z-index:300;background:#05060a;visibility:hidden;opacity:0;transition:opacity .5s var(--out),visibility .5s;--hue:#4ddfe6}\n.uni-overlay.on{visibility:visible;opacity:1}\n.uni-scroll{position:absolute;inset:0;overflow-y:auto;scroll-behavior:smooth}\n.uni-top{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;padding:20px 40px;background:linear-gradient(180deg,rgba(5,6,10,.92),rgba(5,6,10,0));pointer-events:none}\n.uni-top .mark{font-size:22px;pointer-events:auto;color:#fff}\n.uni-close{pointer-events:auto;width:44px;height:44px;border-radius:999px;border:1px solid var(--line);background:rgba(12,12,15,.7);color:#fff;font-size:15px;cursor:pointer;transition:.3s;backdrop-filter:blur(8px)}\n.uni-close:hover{border-color:var(--hue);box-shadow:0 0 0 3px color-mix(in srgb,var(--hue) 20%,transparent)}\n.uni-hero{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:90px 40px 60px;position:relative;margin-top:-64px}\n.uni-hero .glow{position:absolute;inset:0;pointer-events:none;background:radial-gradient(58% 55% at 50% 42%,color-mix(in srgb,var(--hue) 22%,transparent),transparent 70%)}\n.uni-eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.24em;text-transform:uppercase;color:var(--hue);position:relative}\n.uni-hero h1{font-size:clamp(34px,6vw,74px);font-weight:800;letter-spacing:-.02em;line-height:.98;margin-top:16px;text-transform:uppercase;position:relative;text-wrap:balance}\n.uni-hero .lead{color:var(--mut);font-size:clamp(16px,2vw,20px);max-width:52ch;margin-top:18px;position:relative}\n.sysmap{position:relative;width:100%;max-width:860px;margin:34px auto 0}\n.sysmap.gl{aspect-ratio:16/9;border-radius:16px;overflow:hidden;border:1px solid var(--line);box-shadow:0 30px 90px rgba(0,0,0,.55)}\n.sysmap.gl canvas.dioramaGL{display:block;width:100%;height:100%}\n.sysmap svg{width:100%;height:auto;overflow:visible;filter:drop-shadow(0 0 2px color-mix(in srgb,var(--hue) 40%,transparent))}\n.sysmap .wire{fill:none;stroke:color-mix(in srgb,var(--hue) 45%,transparent);stroke-width:1.5;stroke-dasharray:5 7;animation:wireflow 1.5s linear infinite}\n@keyframes wireflow{to{stroke-dashoffset:-24}}\n.sysmap .flowdot{fill:var(--hue);filter:drop-shadow(0 0 5px var(--hue))}\n.sysmap .comp{cursor:pointer;transition:filter .3s}\n.sysmap .comp .f{fill:color-mix(in srgb,var(--hue) 18%,transparent)}\n.sysmap .comp .s{fill:none;stroke:var(--hue);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}\n.sysmap .comp .dot{fill:var(--hue)}\n.sysmap .comp:hover{filter:drop-shadow(0 0 8px var(--hue))}\n.sysmap .comp:hover .f{fill:color-mix(in srgb,var(--hue) 36%,transparent)}\n.sysmap .clabel{fill:#fff;font-family:var(--sans);font-size:12px;font-weight:600;text-anchor:middle;opacity:.82}\n.sysmap .comp:hover .clabel{opacity:1}\n.sys-hint{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-top:28px;position:relative}\n.uni-overlay{--fct:color-mix(in srgb,var(--hue) 36%,transparent);--fcl:color-mix(in srgb,var(--hue) 18%,transparent);--fcr:color-mix(in srgb,var(--hue) 7%,transparent)}\n.sysmap .comp:hover{--fct:color-mix(in srgb,var(--hue) 52%,transparent);--fcl:color-mix(in srgb,var(--hue) 30%,transparent)}\n.iso svg,.sysmap svg{overflow:visible}\n.iso svg use,.sysmap svg use{--x:0}\n.iso-svg{width:100%;height:100%;overflow:visible;filter:drop-shadow(0 0 2px rgba(255,255,255,.04))}\n.iso-svg .ft{fill:color-mix(in srgb,var(--h) 34%,transparent);stroke:var(--h);stroke-width:1.5;stroke-linejoin:round;vector-effect:non-scaling-stroke}\n.iso-svg .fl{fill:color-mix(in srgb,var(--h) 17%,transparent);stroke:var(--h);stroke-width:1.5;stroke-linejoin:round;vector-effect:non-scaling-stroke}\n.iso-svg .fr{fill:color-mix(in srgb,var(--h) 8%,transparent);stroke:var(--h);stroke-width:1.5;stroke-linejoin:round;vector-effect:non-scaling-stroke}\n.iso-svg .seam{stroke:var(--h);opacity:.45;stroke-width:1;vector-effect:non-scaling-stroke}\n.iso-svg .det{stroke:var(--h);opacity:.7;stroke-width:1.3;vector-effect:non-scaling-stroke;fill:none}\n.iso-svg .iso-lbl{fill:#fff;font-family:var(--sans);font-size:12px;font-weight:600;text-anchor:middle;opacity:.9}\n.iso-svg .iso-wire{fill:none;stroke:color-mix(in srgb,var(--h) 55%,transparent);stroke-width:1.5;stroke-dasharray:5 7;animation:isowire 1.5s linear infinite}\n@keyframes isowire{to{stroke-dashoffset:-24}}\n.iso-svg .iso-flow{fill:var(--h);filter:drop-shadow(0 0 5px var(--h))}\n.iso-blk{transform-box:fill-box;transform-origin:center}\n.iso-float{animation:isofloat 3s ease-in-out infinite}\n@keyframes isofloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}\n.iso-bob{animation:isobob 3.4s ease-in-out infinite}\n@keyframes isobob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}\n.iso-pulse{animation:isopulse 2.4s ease-in-out infinite}\n@keyframes isopulse{0%,100%{opacity:.68}50%{opacity:1}}\n.iso-svg .face{stroke:none}\n.iso-svg .glow2{fill:none;stroke:var(--h);stroke-width:11;opacity:.05;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .glow1{fill:none;stroke:var(--h);stroke-width:5.5;opacity:.13;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .edge{fill:none;stroke:var(--h);stroke-width:1.6;opacity:.95;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .core{fill:none;stroke:#fff;stroke-width:.7;opacity:.7;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .contact{pointer-events:none}\n.iso-svg .floor-glow{pointer-events:none}\n.iso-svg .grid{fill:none;stroke:color-mix(in srgb,var(--h) 24%,transparent);stroke-width:.8;opacity:.13;vector-effect:non-scaling-stroke}\n.iso-svg .ghost{opacity:.22}\n.iso-svg .gface{stroke:none;fill:color-mix(in srgb,var(--h) 8%,#070810)}\n.iso-svg .gedge{fill:none;stroke:color-mix(in srgb,var(--h) 34%,#0a0b12);stroke-width:1;opacity:.7;vector-effect:non-scaling-stroke}\n.iso-svg .dust{fill:#cdd8f7;animation-name:dustf;animation-timing-function:linear;animation-iteration-count:infinite}\n@keyframes dustf{0%{opacity:0;transform:translateY(6px)}25%{opacity:.5}75%{opacity:.38}100%{opacity:0;transform:translateY(-10px)}}\n.iso-svg .ic{fill:none;stroke:var(--h);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}\n.iso-svg .lbl-bg{fill:rgba(6,7,10,.72);stroke:rgba(255,255,255,.06);stroke-width:1;vector-effect:non-scaling-stroke}\n.iso-svg .det{stroke:var(--h);opacity:.22;stroke-width:1;vector-effect:non-scaling-stroke;fill:none}\n.iso-svg .iso-lbl{fill:#fff;font-family:var(--sans);font-weight:600;text-anchor:middle;dominant-baseline:central;opacity:.96;letter-spacing:.01em}\n.sysmap,.ud-viz .iso{position:relative}\n.sysmap::after,.ud-viz .iso::after{content:\"\";position:absolute;inset:0;pointer-events:none;mix-blend-mode:overlay;opacity:.06;border-radius:inherit;background:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"140\" height=\"140\"><filter id=\"n\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.85\" numOctaves=\"2\" stitchTiles=\"stitch\"/><feColorMatrix type=\"saturate\" values=\"0\"/></filter><rect width=\"140\" height=\"140\" filter=\"url(%23n)\"/></svg>')}\n.sysmap .iso-blk.comp{cursor:pointer;transition:filter .3s}\n.sysmap .iso-blk.comp:hover{filter:drop-shadow(0 0 9px var(--h)) brightness(1.14)}\n.sysmap .iso-blk.comp:hover .iso-lbl{opacity:1}\n.uni-detail{min-height:100vh;max-width:1080px;margin:0 auto;padding:100px 40px;display:grid;grid-template-columns:.78fr 1.22fr;gap:56px;align-items:center;border-top:1px solid var(--line)}\n.ud-gain{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:24px}\n.ug-col{border:1px solid var(--line);border-radius:12px;padding:16px 18px;background:var(--panel)}\n.ug-k{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;display:block;margin-bottom:8px}\n.ug-old .ug-k{color:var(--bad)}\n.ug-new .ug-k{color:var(--hue)}\n.ug-col p{font-size:13.5px;line-height:1.45;color:var(--mut)}\n.ug-new p{color:var(--ink)}\n@media(max-width:640px){.ud-gain{grid-template-columns:1fr}}\n.uni-detail:nth-child(odd) .ud-viz{order:2}\n.ud-viz{display:flex;align-items:center;justify-content:center}\n.ud-viz .iso{width:230px;height:210px}\n.ud-num{font-family:var(--mono);font-size:13px;color:var(--hue);letter-spacing:.2em}\n.ud-t{font-size:clamp(24px,3vw,38px);font-weight:800;letter-spacing:-.02em;margin:10px 0 14px;text-wrap:balance}\n.ud-d{color:var(--mut);font-size:17px;line-height:1.5;max-width:46ch}\n.ud-res{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}\n.ud-res .r{border:1px solid var(--line);border-radius:10px;padding:10px 14px;font-size:13px;color:var(--ink);background:var(--panel)}\n.ud-res .r b{color:var(--hue);font-weight:800}\n.ud-points{display:flex;flex-direction:column;gap:9px;margin-top:20px}\n.ud-point{display:flex;align-items:flex-start;gap:10px;font-size:14.5px;color:var(--ink);line-height:1.42}\n.ud-point .pk{color:var(--hue);flex:none;margin-top:1px;font-weight:700}\n.uni-more{text-align:center;padding:96px 40px 120px;border-top:1px solid var(--line);position:relative}\n.uni-more .glow{position:absolute;inset:0;pointer-events:none;background:radial-gradient(50% 60% at 50% 50%,color-mix(in srgb,var(--hue) 16%,transparent),transparent 70%)}\n.uni-more h2{font-size:clamp(28px,4.4vw,52px);font-weight:800;letter-spacing:-.02em;text-wrap:balance;max-width:22ch;margin:0 auto;position:relative}\n.uni-more h2 em{font-style:normal;background:var(--worm);background-size:var(--tile) 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 15s linear infinite}\n.uni-more p{color:var(--mut);font-size:18px;margin:18px auto 34px;max-width:48ch;position:relative}\n.uni-more .btn{position:relative;display:inline-flex;width:auto;max-width:max-content}\n@media(max-width:760px){.uni-detail{grid-template-columns:1fr;gap:22px}.uni-detail:nth-child(odd) .ud-viz{order:0}.ud-viz .iso{width:170px;height:160px}}\n.indacc{margin-top:44px;border:1px solid var(--line);border-radius:18px;overflow:hidden;background:var(--panel)}\n.acc-item{border-bottom:1px solid var(--line);--hue:#5b86ff}\n.acc-item:last-child{border-bottom:0}\n.acc-head{display:flex;align-items:center;gap:16px;padding:22px 26px;cursor:pointer;transition:background .3s}\n.acc-head:hover{background:var(--panel2)}\n.acc-item.open .acc-head{background:var(--panel2)}\n.acc-dot{width:10px;height:10px;border-radius:50%;background:var(--hue);box-shadow:0 0 12px var(--hue);flex:none}\n.acc-name{font-size:clamp(18px,2.2vw,24px);font-weight:700;letter-spacing:-.01em}\n.acc-val{color:var(--mut);font-size:14px;margin-left:auto;text-align:right}\n.acc-chev{flex:none;color:var(--faint);transition:transform .35s var(--spring),color .3s;font-size:20px;line-height:1;margin-left:14px}\n.acc-item.open .acc-chev{transform:rotate(90deg);color:var(--hue)}\n.acc-body{max-height:0;overflow:hidden;transition:max-height .5s var(--out)}\n.acc-item.open .acc-body{max-height:1200px}\n.universe{max-height:640px;overflow-y:auto;padding:6px 26px 30px 52px}\n.uni-head{margin-bottom:22px}\n.uni-head h3{font-size:clamp(20px,2.4vw,28px);font-weight:800;letter-spacing:-.01em}\n.uni-head p{color:var(--mut);font-size:15px;margin-top:6px;max-width:60ch}\n.uni-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}\n.deliv{border:1px solid var(--line);border-radius:14px;background:rgba(12,12,15,.5);padding:18px;display:flex;gap:16px;align-items:flex-start;transition:border-color .3s,transform .3s}\n.deliv:hover{border-color:color-mix(in srgb,var(--hue) 50%,var(--line));transform:translateY(-2px)}\n.iso{width:84px;height:78px;flex:none;display:flex;align-items:center;justify-content:center}\n.iso svg{width:100%;height:100%;overflow:visible;filter:drop-shadow(0 0 3px var(--hue)) drop-shadow(0 0 9px color-mix(in srgb,var(--hue) 55%,transparent))}\n.iso svg .f{fill:color-mix(in srgb,var(--hue) 16%,transparent)}\n.iso svg .s{fill:none;stroke:var(--hue);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}\n.iso svg .dot{fill:var(--hue)}\n.deliv-tx{display:flex;flex-direction:column;gap:5px}\n.deliv-t{font-size:15px;font-weight:700;letter-spacing:-.01em}\n.deliv-d{font-size:13px;color:var(--mut);line-height:1.45}\n.uni-prods{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px;align-items:center}\n.uni-prods .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-right:4px}\n@media(max-width:640px){.uni-grid{grid-template-columns:1fr}.universe{padding-left:26px}}\n.acc-inner{padding:2px 26px 28px 52px;display:flex;flex-wrap:wrap;gap:22px 44px;align-items:flex-start}\n.acc-caps{display:flex;flex-direction:column;gap:10px;flex:1;min-width:260px}\n.acc-cap{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--ink)}\n.acc-cap .d{width:6px;height:6px;border-radius:50%;background:var(--hue);flex:none}\n.acc-prods{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start;max-width:300px}\n@media(max-width:640px){.acc-val{display:none}.acc-inner{padding-left:26px}}\n#threads{border-top:1px solid var(--line);min-height:auto;padding:90px 40px}\n.threads-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-top:40px}\n.thread{background:var(--panel);padding:30px 26px;transition:background .4s}\n.thread:hover{background:var(--panel2)}\n.thread .t{font-size:18px;font-weight:600;margin-bottom:8px}\n.thread .d{color:var(--mut);font-size:14px}\n.thread .n{font-family:var(--mono);font-size:11px;color:var(--faint);letter-spacing:.16em}\n#levers{border-top:1px solid var(--line);min-height:auto}\n.levers-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-top:40px}\n.lever{background:var(--panel);padding:28px 24px;display:flex;flex-direction:column;gap:9px;transition:background .4s}\n.lever:hover{background:var(--panel2)}\n.lever .lv-cap{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint)}\n.lever .lv-num{font-size:clamp(30px,3.6vw,44px);font-weight:800;letter-spacing:-.02em;line-height:1;color:#fff}\n.lever .lv-num b{background:var(--worm);background-size:var(--tile) 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 16s linear infinite;font-weight:800}\n.lever .lv-txt{font-size:13.5px;color:var(--mut);line-height:1.42}\n@media(max-width:900px){.levers-grid{grid-template-columns:1fr 1fr}}\n@media(max-width:560px){.levers-grid{grid-template-columns:1fr}}\n#platform{border-top:1px solid var(--line)}\n.plat-sub{color:var(--mut);font-size:18px;margin-top:18px;max-width:60ch}\n.flow-strip{position:relative;display:flex;flex-wrap:wrap;margin-top:40px;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--panel)}\n.flow-strip::before{content:\"\";position:absolute;top:0;left:0;right:0;height:3px;background:var(--worm);background-size:var(--tile) 100%;animation:flow 12s linear infinite;z-index:1}\n.fnode{flex:1;min-width:130px;padding:26px 16px;text-align:center;border-right:1px solid var(--line)}\n.fnode:last-child{border-right:0}\n.fn-code{font-family:var(--mono);font-size:13px;letter-spacing:.1em;font-weight:600;color:var(--ink)}\n.fn-lbl{font-size:12.5px;color:var(--mut);margin-top:7px}\n.eng-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin-top:26px}\n.eng-row .eng-lead{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint)}\n.eng-chip{font-family:var(--mono);font-size:11px;color:var(--mut);border:1px solid var(--line);border-radius:8px;padding:6px 11px}\n@media(max-width:600px){.fnode{flex:1 0 50%;border-bottom:1px solid var(--line)}}\n#alternatives{border-top:1px solid var(--line)}\n.alt-pills{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.alt-pill{font-family:var(--mono);font-size:12px;letter-spacing:.06em;border:1px solid var(--line);border-radius:999px;padding:9px 16px;color:var(--mut);text-decoration:line-through;text-decoration-color:rgba(255,106,77,.5)}\n.alt-verdict{margin-top:24px;font-size:clamp(20px,3.2vw,34px);font-weight:800;letter-spacing:-.01em;text-wrap:balance}\n.alt-nos{display:flex;flex-wrap:wrap;gap:14px 22px;margin-top:22px}\n.alt-no{display:flex;align-items:center;gap:9px;font-size:15px;color:var(--mut)}\n.alt-no .x{color:var(--bad);font-weight:800;font-family:var(--mono)}\n.alt-counter{margin-top:32px;padding-top:26px;border-top:1px solid var(--line);font-size:clamp(18px,2.4vw,26px);font-weight:700;letter-spacing:-.01em}\n.alt-counter em{font-style:normal;background:var(--worm);background-size:var(--tile) 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 15s linear infinite}\n#products{border-top:1px solid var(--line)}\n.prod-wrap{display:grid;grid-template-columns:minmax(340px,440px) 1fr;gap:70px;align-items:center;margin-top:20px}\n.ring{position:relative;width:100%;aspect-ratio:1;max-width:440px;margin:0 auto}\n.ring .orb{position:absolute;width:15.5%;aspect-ratio:1;border-radius:50%;transform:translate(-50%,-50%);cursor:pointer;box-shadow:0 0 20px currentColor,inset 0 2px 6px rgba(255,255,255,.35);animation:orbglow 4.5s ease-in-out infinite;transition:transform .4s var(--spring),filter .3s}\n.ring .orb:hover,.ring .orb.on{transform:translate(-50%,-50%) scale(1.22);filter:brightness(1.12)}\n.ring .orb::after{content:attr(data-code);position:absolute;left:50%;top:118%;transform:translateX(-50%);font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--mut);white-space:nowrap}\n.ring .center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center}\n.ring .center .mark{font-size:40px;color:#fff}\n.ring .center small{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.2em;color:var(--faint);margin-top:6px;text-transform:uppercase}\n.prod-detail .code{font-family:var(--mono);font-size:13px;letter-spacing:.18em;color:var(--pc,#fff)}\n.prod-detail h3{font-size:clamp(26px,3.4vw,40px);font-weight:800;letter-spacing:-.01em;margin:8px 0 14px;text-wrap:balance}\n.prod-detail p{color:var(--mut);font-size:18px;max-width:40ch}\n.prod-detail .what{color:var(--faint);font-family:var(--mono);font-size:12px;letter-spacing:.06em;margin-top:16px;text-transform:uppercase}\n.prod-detail .soon{display:inline-block;margin-left:8px;font-family:var(--mono);font-size:10px;color:#08080a;background:var(--warn);border-radius:999px;padding:2px 8px;letter-spacing:.1em}\n.prod-showcase{display:flex;flex-direction:column;align-items:center;gap:6px}\n.prod-showcase .ring{margin:16px auto 6px}\n.pgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:34px;width:100%}\n.pcard{border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:18px 18px 20px;display:flex;flex-direction:column;gap:7px;transition:transform .4s var(--spring),border-color .4s,background .4s}\n.pcard:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--pc) 55%,var(--line));background:var(--panel2)}\n.pcard .ptop{display:flex;align-items:center;gap:9px}\n.pcard .pcdot{width:10px;height:10px;border-radius:50%;background:var(--pc);box-shadow:0 0 12px var(--pc);flex:none}\n.pcard .pccode{font-family:var(--mono);font-size:12px;letter-spacing:.14em;color:var(--pc)}\n.pcard .pcname{font-size:16px;font-weight:700;letter-spacing:-.01em}\n.pcard .pctag{font-size:13px;color:var(--mut);line-height:1.45}\n.pcard .soon{margin-left:auto;font-family:var(--mono);font-size:9px;letter-spacing:.1em;color:#08080a;background:var(--warn);border-radius:999px;padding:2px 7px}\n@media(max-width:900px){.pgrid{grid-template-columns:1fr 1fr}}\n@media(max-width:560px){.pgrid{grid-template-columns:1fr}}\n#deliver{border-top:1px solid var(--line)}\n.deliver-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:44px}\n.card{border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:34px;position:relative;overflow:hidden;transition:transform .45s var(--spring),box-shadow .4s,border-color .4s}\n.card:hover{transform:translateY(-3px);box-shadow:0 22px 60px rgba(0,0,0,.5);border-color:rgba(255,255,255,.16)}\n.card .accent{height:6px;border-radius:999px;background:var(--worm);background-size:var(--tile) 100%;animation:flow 15s linear infinite;margin-bottom:22px;width:64px}\n.card h3{font-size:26px;font-weight:700;letter-spacing:-.01em;margin-bottom:10px}\n.card>p{color:var(--mut);font-size:16px;margin-bottom:20px;max-width:42ch}\n.flavors{display:flex;gap:10px;flex-wrap:wrap}\n.flavor{font-family:var(--mono);font-size:12px;letter-spacing:.08em;border:1px solid var(--line);border-radius:10px;padding:9px 14px;color:var(--ink)}\n.card .own{font-size:clamp(28px,3.6vw,44px);font-weight:800;letter-spacing:-.02em;line-height:1;margin-bottom:14px}\n.card .own em{font-style:normal;background:var(--worm);background-size:var(--tile) 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 15s linear infinite}\n.fde-band{margin-top:26px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--line);border-radius:16px;background:var(--panel2);padding:22px 28px}\n.fde-flow{display:flex;flex-wrap:wrap;align-items:center;gap:12px;font-size:clamp(16px,2vw,22px);font-weight:700;letter-spacing:-.01em}\n.fde-flow i{color:var(--blue);font-style:normal;font-weight:400}\n.fde-pay{font-family:var(--mono);font-size:13px;letter-spacing:.06em;color:var(--mut)}\n.cta-kicker{font-family:var(--mono);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--faint);margin-bottom:20px}\n#cta .cta-row{display:flex;gap:14px;flex-wrap:wrap;justify-content:center}\n#cta{border-top:1px solid var(--line);text-align:center;align-items:center}\n#cta .big{font-size:clamp(34px,6vw,84px);font-weight:800;letter-spacing:-.02em;line-height:.95;text-transform:uppercase;text-wrap:balance}\n#cta .sub{color:var(--mut);font-size:19px;margin:22px auto 40px;max-width:44ch}\nfooter{padding:60px 40px 50px;border-top:1px solid var(--line);background:var(--panel)}\n.foot{max-width:1180px;margin:0 auto;display:flex;justify-content:space-between;align-items:flex-start;gap:40px;flex-wrap:wrap}\n.foot .mark{font-size:30px}\n.foot .cols{display:flex;gap:60px;flex-wrap:wrap}\n.foot .fc h5{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:14px}\n.foot .fc a{display:block;color:var(--mut);font-size:14px;margin-bottom:9px;transition:color .2s}\n.foot .fc a:hover{color:#fff}\n.foot .fine{width:100%;border-top:1px solid var(--line);margin-top:36px;padding-top:22px;display:flex;justify-content:space-between;color:var(--faint);font-size:12px;font-family:var(--mono);letter-spacing:.04em;flex-wrap:wrap;gap:10px}\n.rail{position:absolute;right:22px;transform:translateY(-50%);z-index:40;display:flex;flex-direction:column;gap:12px}\n.rail a{width:9px;height:9px;border-radius:50%;border:1.4px solid rgba(255,255,255,.4);transition:.3s var(--spring)}\n.rail a.on{background:#fff;border-color:#fff;transform:scale(1.15)}\n.rail a:hover{border-color:#fff}\n@media(max-width:900px){\n  .navlinks{display:none}\n  .burger{display:flex}\n  header.nav.open .navlinks{display:flex;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;background:rgba(6,6,8,.96);backdrop-filter:blur(16px);padding:10px 40px 24px;border-bottom:1px solid var(--line)}\n  header.nav.open .navlinks a{padding:12px 0;border-bottom:1px solid var(--line2)}\n  section{padding:90px 24px}\n  .industry .inner{grid-template-columns:1fr;gap:34px}\n  .threads-grid{grid-template-columns:1fr}\n  .prod-wrap{grid-template-columns:1fr;gap:40px}\n  .deliver-grid{grid-template-columns:1fr}\n  .triad{grid-template-columns:1fr}\n  .baband{grid-template-columns:1fr;gap:12px}\n  .baband .arrow{transform:rotate(90deg)}\n  .rail{display:none}\n  .credit{display:none}\n}\n`,\n  render(d2){\n    return `<div class=\"d2site\" id=\"site\">\n<svg width=\"0\" height=\"0\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><symbol id=\"d2wm\" viewBox=\"0 0 459.554 148.471\"><g transform=\"translate(-678.859 -300.605)\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\" fill=\"#fff\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\" fill=\"#fff\"/></g></symbol></svg>\n<header class=\"nav\" id=\"nav\">\n  <a href=\"#hero\" class=\"mark\"><svg class=\"logo\" viewBox=\"0 0 459.554 148.471\" style=\"height:22px\"><use href=\"#d2wm\"></use></svg></a>\n  <nav class=\"navlinks\">\n    <a href=\"#industries\" data-pt=\"Indústrias\" data-en=\"Industries\">Indústrias</a>\n    <a href=\"#products\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</a>\n    <a href=\"#deliver\" data-pt=\"Como entregamos\" data-en=\"How we deliver\">Como entregamos</a>\n    <a href=\"#proof\" data-pt=\"Clientes\" data-en=\"Customers\">Clientes</a>\n    <a href=\"#cta\" data-pt=\"Demo\" data-en=\"Demo\">Demo</a>\n  </nav>\n  <div class=\"navctl\">\n    <div class=\"lang\" id=\"lang\"><button data-l=\"pt\" class=\"on\">PT</button><button data-l=\"en\">EN</button><button data-l=\"zh\">中文</button></div>\n    <a href=\"#\" class=\"signin\" data-pt=\"Entrar\" data-en=\"Sign in\">Entrar</a>\n    <button class=\"burger\" id=\"burger\" aria-label=\"menu\"><span></span><span></span><span></span></button>\n  </div>\n</header>\n<div class=\"rail\" id=\"rail\"></div>\n<section id=\"hero\">    <canvas class=\"herofx\"></canvas>\n  <div class=\"inner\">\n    <div class=\"hero-kicker reveal\" data-pt=\"Consultoria de engenharia · plataforma e runtimes próprios\" data-en=\"Engineering consultancy · proprietary platform & runtimes\" data-zh=\"工程咨询 · 自有平台与运行时\">Consultoria de engenharia · plataforma e runtimes próprios</div>\n    <h1 class=\"h1\" data-pt=\"Do problema de negócio<br>ao software em produção.\" data-en=\"From a business problem<br>to software in production.\">Do problema de negócio<br>ao software em produção.</h1>\n    <p class=\"sub\" data-pt=\"Uma consultoria de engenharia com plataforma e runtimes próprios. Encaramos os problemas difíceis das grandes operações — e entregamos rodando, com o seu time junto.\" data-en=\"An engineering consultancy with a proprietary platform and runtimes. We take on the hard problems of large operations — and ship them to production, with your team alongside.\">Uma consultoria de engenharia com plataforma e runtimes próprios. Encaramos os problemas difíceis das grandes operações — e entregamos rodando, com o seu time junto.</p>\n    <div class=\"cta\">\n      <a href=\"#industries\" class=\"btn\"><span data-pt=\"Ver o que é possível\" data-en=\"See what's possible\">Ver o que é possível</span></a>\n      <a href=\"#cta\" class=\"btn ghost\"><span data-pt=\"Agendar demo\" data-en=\"Book a demo\">Agendar demo</span></a>\n    </div>\n    <div class=\"herostrip reveal\">\n      <div class=\"hs-clients\"><span class=\"hs-lead\" data-pt=\"Já em produção com\" data-en=\"Already in production with\">Já em produção com</span><span class=\"hs-logos\">Natura · XP · Americanas · Whirlpool · Arcadis · Raízen</span></div>\n      <div class=\"hs-steps\"><span class=\"hs-step\"><b>30 min</b> <span data-pt=\"mapeamos onde dói\" data-en=\"we map where it hurts\">mapeamos onde dói</span></span><span class=\"hs-arrow\">→</span><span class=\"hs-step\"><b data-pt=\"2–4 semanas\" data-en=\"2–4 weeks\">2–4 semanas</b> <span data-pt=\"sprint com engenheiro embarcado\" data-en=\"sprint with an embedded engineer\">sprint com engenheiro embarcado</span></span><span class=\"hs-arrow\">→</span><span class=\"hs-step\"><b data-pt=\"Em produção\" data-en=\"In production\">Em produção</b> <span data-pt=\"seu time é dono\" data-en=\"your team owns it\">seu time é dono</span></span></div>\n    </div>\n  </div>\n  <div class=\"scrollcue\"><span data-pt=\"ROLE\" data-en=\"SCROLL\">ROLE</span><i></i></div>\n</section>\n<section id=\"essence\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"A Data² em uma tela\" data-en=\"Data² in one screen\">A Data² em uma tela</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"O que vemos, o que fazemos e para quem.\" data-en=\"What we see, what we do, and who for.\">O que vemos, o que fazemos e para quem.</h2>\n    <div class=\"triad\">\n      <div class=\"tri reveal\">\n        <div class=\"accent\"></div>\n        <div class=\"q\" data-pt=\"O que vemos\" data-en=\"What we see\">O que vemos</div>\n        <h3 data-pt=\"Toda área tem um <em>software esperando pra existir</em>.\" data-en=\"Every area has <em>software waiting to exist</em>.\">.</h3>\n        <p data-pt=\"A tecnologia já permite construir quase tudo. O que faltava era a ponte direta entre quem conhece o problema e a solução rodando em produção.\" data-en=\"Technology already lets us build almost anything. What was missing is the direct bridge between the people who know the problem and the solution running in production.\">.</p>\n      </div>\n      <div class=\"tri reveal\">\n        <div class=\"accent\"></div>\n        <div class=\"q\" data-pt=\"O que fazemos\" data-en=\"What we do\">O que fazemos</div>\n        <h3 data-pt=\"Uma suíte que vira <em>software de verdade</em>.\" data-en=\"A suite that becomes <em>real software</em>.\">.</h3>\n        <p data-pt=\"8 produtos com AI, omnichannel, dados reais, automação e dashboards — montados no builder visual e publicados em produção. Sem código.\" data-en=\"8 products with AI, omnichannel, real data, automation and dashboards — assembled in the visual builder and shipped to production. No code.\">.</p>\n        <div class=\"foot\"><div class=\"prod-row\"><span class=\"chip\">UI</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">MEDIA</span><span class=\"chip\">ID</span><span class=\"chip\">CONNECT</span><span class=\"chip\">DOMAIN</span><span class=\"chip\">RUSH</span><span class=\"chip\">CASHIER</span></div></div>\n      </div>\n      <div class=\"tri reveal\">\n        <div class=\"accent\"></div>\n        <div class=\"q\" data-pt=\"Para quem\" data-en=\"Who for\">Para quem</div>\n        <h3 data-pt=\"Para a área que <em>tem o problema</em>.\" data-en=\"For the area that <em>owns the problem</em>.\">.</h3>\n        <p data-pt=\"Times de negócio de grandes empresas que não querem mais esperar. Nós somos os enablers entre a ideia e a produção.\" data-en=\"Business teams at large companies that won't wait anymore. We are the enablers between the idea and production.\">.</p>\n        <div class=\"inames\" data-pt=\"RH · Supply · Financeiro · CX · Varejo · Vendas · BI · Seguros · Compras\" data-en=\"HR · Supply · Financial · CX · Retail · Sales · BI · Insurance · Procurement\">RH · Supply · Financeiro · CX · Varejo · Vendas · BI · Seguros · Compras</div>\n      </div>\n    </div>\n    <div class=\"baband reveal\">\n      <div class=\"before\"><div class=\"k\" data-pt=\"Antes\" data-en=\"Before\">Antes</div><p data-pt=\"Da ideia à entrega: muitas mãos, muitas traduções, muito tempo.\" data-en=\"From idea to delivery: many hands, many translations, a lot of time.\">.</p></div>\n      <div class=\"arrow\">→</div>\n      <div class=\"after\"><div class=\"k\" data-pt=\"Com a Data²\" data-en=\"With Data²\">Com a Data²</div><p data-pt=\"A própria área desenha, conecta o dado real, publica e opera. Em produção.\" data-en=\"The business area itself designs, connects the real data, ships and operates. In production.\">.</p></div>\n    </div>\n  </div>\n</section>\n<section id=\"glance\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"Panorama\" data-en=\"At a glance\" data-zh=\"概览\">Panorama</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"As frentes onde já entregamos\" data-en=\"Where we already deliver\" data-zh=\"我们已交付的领域\">As frentes onde já entregamos</h2>\n    <div class=\"glance-grid\">\n      <div class=\"gcard reveal\" style=\"--hue:#5b86ff\"><span class=\"num\">01</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect x=\"5\" y=\"8\" width=\"20\" height=\"14\" rx=\"4\"></rect><rect class=\"b2\" x=\"17\" y=\"19\" width=\"18\" height=\"13\" rx=\"4\"></rect></svg></span><span class=\"gname\" data-pt=\"RH & Pessoas\" data-en=\"HR & People\" data-zh=\"人力资源\">RH & Pessoas</span><span class=\"gval\" data-pt=\"Atendimento ao colaborador com AI\" data-en=\"AI employee support\" data-zh=\"AI 员工服务\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#4de0a1\"><span class=\"num\">02</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect x=\"9\" y=\"23\" width=\"22\" height=\"9\" rx=\"2\"></rect><rect class=\"bx\" x=\"14\" y=\"9\" width=\"12\" height=\"10\" rx=\"2\"></rect></svg></span><span class=\"gname\" data-pt=\"Supply & Operações\" data-en=\"Supply & Operations\" data-zh=\"供应与运营\">Supply & Operações</span><span class=\"gval\" data-pt=\"Cenários que viram plano de produção\" data-en=\"Scenarios into production plans\" data-zh=\"情景转化为生产计划\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#e8b84d\"><span class=\"num\">03</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><circle cx=\"8\" cy=\"20\" r=\"3.2\"></circle><circle cx=\"20\" cy=\"20\" r=\"3.2\"></circle><circle cx=\"32\" cy=\"20\" r=\"3.2\"></circle><path d=\"M11.5 20h5.5M23 20h5.5\"></path><circle class=\"dot\" cx=\"8\" cy=\"20\" r=\"2.4\"></circle></svg></span><span class=\"gname\" data-pt=\"Serviços Financeiros\" data-en=\"Financial Services\" data-zh=\"金融服务\">Serviços Financeiros</span><span class=\"gval\" data-pt=\"Prospecção 1-a-1 personalizada por AI\" data-en=\"AI-personalized outreach\" data-zh=\"AI 个性化触达\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#4ddfe6\"><span class=\"num\">04</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect x=\"5\" y=\"8\" width=\"20\" height=\"14\" rx=\"4\"></rect><rect class=\"b2\" x=\"17\" y=\"19\" width=\"18\" height=\"13\" rx=\"4\"></rect></svg></span><span class=\"gname\" data-pt=\"CX & Contact Center\" data-en=\"CX & Contact Center\" data-zh=\"客户体验\">CX & Contact Center</span><span class=\"gval\" data-pt=\"Um contact center numa plataforma\" data-en=\"A contact center on one platform\" data-zh=\"一体化呼叫中心\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#ff4d9e\"><span class=\"num\">05</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect x=\"9\" y=\"23\" width=\"22\" height=\"9\" rx=\"2\"></rect><rect class=\"bx\" x=\"14\" y=\"9\" width=\"12\" height=\"10\" rx=\"2\"></rect></svg></span><span class=\"gname\" data-pt=\"Varejo & E-commerce\" data-en=\"Retail & E-commerce\" data-zh=\"零售电商\">Varejo & E-commerce</span><span class=\"gval\" data-pt=\"Da vitrine ao ERP\" data-en=\"From storefront to ERP\" data-zh=\"从门店到 ERP\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#9b5cff\"><span class=\"num\">06</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><circle cx=\"8\" cy=\"20\" r=\"3.2\"></circle><circle cx=\"20\" cy=\"20\" r=\"3.2\"></circle><circle cx=\"32\" cy=\"20\" r=\"3.2\"></circle><path d=\"M11.5 20h5.5M23 20h5.5\"></path><circle class=\"dot\" cx=\"8\" cy=\"20\" r=\"2.4\"></circle></svg></span><span class=\"gname\" data-pt=\"Força de Vendas\" data-en=\"Sales Enablement\" data-zh=\"销售赋能\">Força de Vendas</span><span class=\"gval\" data-pt=\"Copiloto de vendas para a força\" data-en=\"A sales copilot for the field\" data-zh=\"一线销售副驾\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#84e05a\"><span class=\"num\">07</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect class=\"bar bar1\" x=\"8\" y=\"12\" width=\"6\" height=\"20\" rx=\"1.5\"></rect><rect class=\"bar bar2\" x=\"17\" y=\"12\" width=\"6\" height=\"20\" rx=\"1.5\"></rect><rect class=\"bar bar3\" x=\"26\" y=\"12\" width=\"6\" height=\"20\" rx=\"1.5\"></rect></svg></span><span class=\"gname\" data-pt=\"BI & Analytics\" data-en=\"BI & Analytics\" data-zh=\"数据分析\">BI & Analytics</span><span class=\"gval\" data-pt=\"Do dado vivo ao plano de ação\" data-en=\"Live data to action plan\" data-zh=\"从实时数据到行动计划\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#ff6a4d\"><span class=\"num\">08</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect x=\"5\" y=\"8\" width=\"20\" height=\"14\" rx=\"4\"></rect><rect class=\"b2\" x=\"17\" y=\"19\" width=\"18\" height=\"13\" rx=\"4\"></rect></svg></span><span class=\"gname\" data-pt=\"Seguros & CX\" data-en=\"Insurance & CX\" data-zh=\"保险\">Seguros & CX</span><span class=\"gval\" data-pt=\"Conhecimento com busca semântica\" data-en=\"Semantic knowledge base\" data-zh=\"语义知识库\">.</span></div>\n      <div class=\"gcard reveal\" style=\"--hue:#e8e84d\"><span class=\"num\">09</span><span class=\"gicon\"><svg class=\"gsvg\" viewBox=\"0 0 40 40\"><rect x=\"9\" y=\"23\" width=\"22\" height=\"9\" rx=\"2\"></rect><rect class=\"bx\" x=\"14\" y=\"9\" width=\"12\" height=\"10\" rx=\"2\"></rect></svg></span><span class=\"gname\" data-pt=\"Compras & Procurement\" data-en=\"Procurement\" data-zh=\"采购\">Compras & Procurement</span><span class=\"gval\" data-pt=\"Modelagem e planejamento de compras\" data-en=\"Sourcing modeling & planning\" data-zh=\"采购建模与规划\">.</span></div>\n    </div>\n    \n  </div>\n</section>\n\n<section id=\"cases\" style=\"padding:0;position:relative;background:#04050a\">${d2.render('www@nUYyYfWeNHEK6YeaD5kcd',{},{style:'display:block;width:100%;height:86vh'})}</section>\n\n<section id=\"proof\">\n  <p class=\"lead\" data-pt=\"Times de negócio já constroem na Data²\" data-en=\"Business teams already build on Data²\">Times de negócio já constroem na Data²</p>\n  <div class=\"logos\">\n    <span class=\"lg\">Natura</span><span class=\"lg\">XP</span><span class=\"lg\">Americanas</span><span class=\"lg\">Vivara</span><span class=\"lg\">Avon</span><span class=\"lg\">Justos</span>\n  </div>\n</section>\n<section id=\"industries\">\n  <div class=\"ind-head\">\n    <p class=\"eyebrow reveal\" data-pt=\"O que é possível\" data-en=\"What's possible\">O que é possível</p>\n    <h2 class=\"reveal\" style=\"margin-top:16px\" data-pt=\"Uma plataforma. Toda indústria.\" data-en=\"One platform. Every industry.\">Uma plataforma. Toda indústria.</h2>\n    <p class=\"reveal\" data-pt=\"Não vendemos slides. Cada frente abaixo é software real, em produção, construído pela própria área de negócio.\" data-en=\"We don't sell slides. Each frontier below is real software, in production, built by the business area itself.\">.</p>\n  </div>\n  <div class=\"indacc reveal\" id=\"indacc\">\n  <div class=\"acc-item\" style=\"--hue:#5b86ff\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"RH & Pessoas\" data-en=\"HR & People\">RH & Pessoas</span><span class=\"acc-val\" data-pt=\"Atendimento ao colaborador com AI\" data-en=\"AI employee support\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Assistente de AI para o colaborador\" data-en=\"AI assistant for employees\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Transbordo para atendimento humano\" data-en=\"Handoff to human agents\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Leitura de documentos (OCR)\" data-en=\"Document reading (OCR)\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Respostas e regras configuráveis pela área\" data-en=\"Answers & rules configured by the team\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Analytics e CSAT\" data-en=\"Analytics & CSAT\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">UI</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">ID</span><span class=\"chip\">A.I.</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#4de0a1\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"Supply & Operações\" data-en=\"Supply & Operations\">Supply & Operações</span><span class=\"acc-val\" data-pt=\"Cenários que viram plano de produção\" data-en=\"Scenarios into production plans\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Simulação de cenários de produção\" data-en=\"Production scenario simulation\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Explosão de estrutura (BOM)\" data-en=\"Bill-of-materials explosion\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Score de economia e viabilidade\" data-en=\"Savings & feasibility scoring\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"SQL self-service sobre o data lake\" data-en=\"Self-service SQL over the data lake\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Exportação para planilha\" data-en=\"Export to spreadsheet\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">UI</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#e8b84d\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"Serviços Financeiros\" data-en=\"Financial Services\">Serviços Financeiros</span><span class=\"acc-val\" data-pt=\"Prospecção 1-a-1 personalizada por AI\" data-en=\"AI-personalized outreach\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"CRM + automação de outreach\" data-en=\"CRM + outreach automation\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Ondas de mensagens omnichannel\" data-en=\"Omnichannel message waves\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Copy gerada por AI no tom do lead\" data-en=\"AI-written copy in the lead's tone\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Modelagem de proposta e ROI\" data-en=\"Offer & ROI modeling\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"SSO corporativo\" data-en=\"Corporate SSO\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">UI</span><span class=\"chip\">ID</span><span class=\"chip\">A.I.</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#4ddfe6\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"CX & Contact Center\" data-en=\"CX & Contact Center\">CX & Contact Center</span><span class=\"acc-val\" data-pt=\"Um contact center numa plataforma\" data-en=\"A contact center on one platform\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"universe\"><div class=\"uni-head\"><h3 data-pt=\"CX & Contact Center\" data-en=\"CX & Contact Center\">CX & Contact Center</h3><p data-pt=\"Um contact center inteiro numa plataforma — cada peça, um módulo Data².\" data-en=\"An entire contact center on one platform — each piece, a Data² module.\" data-zh=\"一体化呼叫中心 —— 每个环节都是一个 Data² 模块。\">.</p></div><div class=\"uni-grid\"><div class=\"deliv\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m0\" width=\"100\" height=\"100\"></use></svg></div><div class=\"deliv-tx\"><div class=\"deliv-t\" data-pt=\"Webchat omnichannel\" data-en=\"Omnichannel webchat\">.</div><div class=\"deliv-d\" data-pt=\"Widget no site + WhatsApp, voz e e-mail no mesmo fluxo.\" data-en=\"On-site widget + WhatsApp, voice and email in one flow.\" data-zh=\"网站挂件 + WhatsApp、语音与邮件，统一流程。\">.</div></div></div><div class=\"deliv\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m1\" width=\"100\" height=\"100\"></use></svg></div><div class=\"deliv-tx\"><div class=\"deliv-t\" data-pt=\"Bot de triagem com AI\" data-en=\"AI triage bot\">.</div><div class=\"deliv-d\" data-pt=\"A AI entende a intenção, resolve o simples e classifica o resto.\" data-en=\"AI reads intent, resolves the simple, routes the rest.\" data-zh=\"AI 理解意图，解决简单问题，分流其余。\">.</div></div></div><div class=\"deliv\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m2\" width=\"100\" height=\"100\"></use></svg></div><div class=\"deliv-tx\"><div class=\"deliv-t\" data-pt=\"Transbordo bot → humano\" data-en=\"Bot → human handoff\">.</div><div class=\"deliv-d\" data-pt=\"Passagem fluida do bot pro atendente, com todo o contexto.\" data-en=\"Seamless bot-to-human handoff, with full context.\" data-zh=\"从机器人到人工的无缝转接，携带完整上下文。\">.</div></div></div><div class=\"deliv\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m3\" width=\"100\" height=\"100\"></use></svg></div><div class=\"deliv-tx\"><div class=\"deliv-t\" data-pt=\"Console de agente + supervisor\" data-en=\"Agent workspace + supervisor console\">.</div><div class=\"deliv-d\" data-pt=\"Fila, transferências, status e supervisão num painel só.\" data-en=\"Queue, transfers, status and supervision in one console.\" data-zh=\"队列、转接、状态与督导，集于一个控制台。\">.</div></div></div><div class=\"deliv\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m4\" width=\"100\" height=\"100\"></use></svg></div><div class=\"deliv-tx\"><div class=\"deliv-t\" data-pt=\"Automação de filas e CSAT\" data-en=\"Queue automation & CSAT\">.</div><div class=\"deliv-d\" data-pt=\"Filas que se auto-gerenciam, detecção de abandono e pesquisa de satisfação.\" data-en=\"Self-managing queues, abandonment detection and CSAT surveys.\" data-zh=\"自我管理的队列、弃单检测与满意度调查。\">.</div></div></div></div><div class=\"uni-prods\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">A.I.</span><span class=\"chip\">UI</span><span class=\"chip\">MEDIA</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#ff4d9e\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"Varejo & E-commerce\" data-en=\"Retail & E-commerce\">Varejo & E-commerce</span><span class=\"acc-val\" data-pt=\"Da vitrine ao ERP\" data-en=\"From storefront to ERP\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Experiências de catálogo e produto\" data-en=\"Catalog & product experiences\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Integração VTEX / GraphQL\" data-en=\"VTEX / GraphQL integration\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Estúdio de foto com AI\" data-en=\"AI photo studio\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"ERP e operações de loja\" data-en=\"ERP & store operations\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">UI</span><span class=\"chip\">CONNECT</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">MEDIA</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#9b5cff\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"Força de Vendas\" data-en=\"Sales Enablement\">Força de Vendas</span><span class=\"acc-val\" data-pt=\"Copiloto de vendas para a força\" data-en=\"A sales copilot for the field\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Copiloto de vendas em linguagem natural\" data-en=\"Sales copilot in natural language\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Recomendação de próxima melhor ação\" data-en=\"Next-best-action recommendation\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Busca de clientes e segmentos com AI\" data-en=\"AI search over customers & segments\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Painéis de performance da carteira\" data-en=\"Portfolio performance dashboards\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">UI</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">A.I.</span><span class=\"chip\">REGISTRY</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#84e05a\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"BI & Analytics\" data-en=\"BI & Analytics\">BI & Analytics</span><span class=\"acc-val\" data-pt=\"Do dado vivo ao plano de ação\" data-en=\"Live data to action plan\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Painéis executivos sobre dado vivo\" data-en=\"Executive dashboards on live data\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Ingestão diária automatizada\" data-en=\"Automated daily ingestion\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Metas e plano de ação acompanhados\" data-en=\"Targets & action plan tracked\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Alertas e monitoramento\" data-en=\"Alerts & monitoring\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">REGISTRY</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">UI</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#ff6a4d\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"Seguros & CX\" data-en=\"Insurance & CX\">Seguros & CX</span><span class=\"acc-val\" data-pt=\"Conhecimento com busca semântica\" data-en=\"Semantic knowledge base\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Base de conhecimento com busca semântica\" data-en=\"Semantic-search knowledge base\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Triagem e atendimento com AI\" data-en=\"AI triage & support\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Respostas ancoradas na fonte\" data-en=\"Answers grounded in the source\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Analytics de atendimento\" data-en=\"Support analytics\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">A.I.</span><span class=\"chip\">CONNECT</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">UI</span></div></div></div></div>\n  <div class=\"acc-item\" style=\"--hue:#e8e84d\"><div class=\"acc-head\"><span class=\"acc-dot\"></span><span class=\"acc-name\" data-pt=\"Compras & Procurement\" data-en=\"Procurement\">Compras & Procurement</span><span class=\"acc-val\" data-pt=\"Modelagem e planejamento de compras\" data-en=\"Sourcing modeling & planning\">.</span><span class=\"acc-chev\">›</span></div><div class=\"acc-body\"><div class=\"acc-inner\"><div class=\"acc-caps\"><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Planejamento de fornecimento\" data-en=\"Supply planning\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Modelagem financeira de cenários\" data-en=\"Financial scenario modeling\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Simuladores e croquis de decisão\" data-en=\"Decision simulators & builders\">.</span></div><div class=\"acc-cap\"><span class=\"d\"></span><span data-pt=\"Compras orientadas a dado\" data-en=\"Data-driven sourcing\">.</span></div></div><div class=\"acc-prods\"><span class=\"chip\">UI</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span></div></div></div></div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#5b86ff\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">01 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"RH & Pessoas\" data-en=\"HR & People\">RH & Pessoas</div>\n        <div class=\"ix-poss\" data-pt=\"Um RH que responde <b>milhares de colaboradores</b>, em vários idiomas — na hora.\" data-en=\"An HR that answers <b>thousands of employees</b>, in multiple languages — instantly.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Assistente de AI para o colaborador\" data-en=\"AI assistant for employees\">Assistente de AI para o colaborador</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Transbordo para atendimento humano\" data-en=\"Handoff to human agents\">Transbordo para atendimento humano</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Leitura de documentos (OCR)\" data-en=\"Document reading (OCR)\">Leitura de documentos (OCR)</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Respostas e regras configuráveis pela área\" data-en=\"Answers & rules configured by the team\">Respostas e regras configuráveis pela área</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Analytics e CSAT\" data-en=\"Analytics & CSAT\">Analytics e CSAT</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">UI</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">ID</span><span class=\"chip\">A.I.</span></div>\n        \n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#4de0a1\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">02 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"Supply & Operações\" data-en=\"Supply & Operations\">Supply & Operações</div>\n        <div class=\"ix-poss\" data-pt=\"Transformar <b>sobra de estoque em plano de produção</b> priorizado — em minutos, não semanas.\" data-en=\"Turn <b>leftover stock into a prioritized production plan</b> — in minutes, not weeks.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Simulação de cenários de produção\" data-en=\"Production scenario simulation\">Simulação de cenários de produção</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Explosão de estrutura (BOM)\" data-en=\"Bill-of-materials explosion\">Explosão de estrutura (BOM)</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Score de economia e viabilidade\" data-en=\"Savings & feasibility scoring\">Score de economia e viabilidade</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"SQL self-service sobre o data lake\" data-en=\"Self-service SQL over the data lake\">SQL self-service sobre o data lake</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Exportação para planilha\" data-en=\"Export to spreadsheet\">Exportação para planilha</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">UI</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span></div>\n        \n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#e8b84d\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">03 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"Serviços Financeiros\" data-en=\"Financial Services\">Serviços Financeiros</div>\n        <div class=\"ix-poss\" data-pt=\"Prospecção <b>1-a-1 personalizada por AI</b>, em escala de milhares — operada pelo próprio time comercial.\" data-en=\"<b>AI-personalized 1-to-1 outreach</b> at a scale of thousands — run by the commercial team itself.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"CRM + automação de outreach\" data-en=\"CRM + outreach automation\">CRM + automação de outreach</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Ondas de mensagens omnichannel\" data-en=\"Omnichannel message waves\">Ondas de mensagens omnichannel</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Copy gerada por AI no tom do lead\" data-en=\"AI-written copy in the lead's tone\">Copy gerada por AI no tom do lead</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Modelagem de proposta e ROI\" data-en=\"Offer & ROI modeling\">Modelagem de proposta e ROI</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"SSO corporativo\" data-en=\"Corporate SSO\">SSO corporativo</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">UI</span><span class=\"chip\">ID</span><span class=\"chip\">A.I.</span></div>\n        \n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#4ddfe6\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">04 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"CX & Contact Center\" data-en=\"CX & Contact Center\">CX & Contact Center</div>\n        <div class=\"ix-poss\" data-pt=\"Um <b>contact center inteiro</b> — do widget no site à automação de fila — numa plataforma só.\" data-en=\"An <b>entire contact center</b> — from the on-site widget to queue automation — on a single platform.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Webchat omnichannel\" data-en=\"Omnichannel webchat\">Webchat omnichannel</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Bot de triagem com AI\" data-en=\"AI triage bot\">Bot de triagem com AI</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Transbordo bot → humano\" data-en=\"Bot → human handoff\">Transbordo bot → humano</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Workspace de agente + console de supervisor\" data-en=\"Agent workspace + supervisor console\">Workspace de agente + console de supervisor</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Automação de filas e CSAT\" data-en=\"Queue automation & CSAT\">Automação de filas e CSAT</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">A.I.</span><span class=\"chip\">UI</span><span class=\"chip\">MEDIA</span></div>\n        \n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#ff4d9e\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">05 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"Varejo & E-commerce\" data-en=\"Retail & E-commerce\">Varejo & E-commerce</div>\n        <div class=\"ix-poss\" data-pt=\"Da <b>vitrine ao ERP</b>: experiências de compra sob medida, com os dados reais do seu e-commerce.\" data-en=\"From <b>storefront to ERP</b>: tailor-made buying experiences, with your e-commerce's real data.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Experiências de catálogo e produto\" data-en=\"Catalog & product experiences\">Experiências de catálogo e produto</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Integração VTEX / GraphQL\" data-en=\"VTEX / GraphQL integration\">Integração VTEX / GraphQL</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Estúdio de foto com AI\" data-en=\"AI photo studio\">Estúdio de foto com AI</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"ERP e operações de loja\" data-en=\"ERP & store operations\">ERP e operações de loja</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">UI</span><span class=\"chip\">CONNECT</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">MEDIA</span></div>\n        \n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#9b5cff\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">06 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"Força de Vendas\" data-en=\"Sales Enablement\">Força de Vendas</div>\n        <div class=\"ix-poss\" data-pt=\"Um <b>copiloto de vendas</b> que diz a cada vendedor a próxima melhor ação — em linguagem natural.\" data-en=\"A <b>sales copilot</b> that tells each rep the next best action — in natural language.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Copiloto de vendas em linguagem natural\" data-en=\"Sales copilot in natural language\">Copiloto de vendas em linguagem natural</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Recomendação de próxima melhor ação\" data-en=\"Next-best-action recommendation\">Recomendação de próxima melhor ação</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Busca de clientes e segmentos com AI\" data-en=\"AI search over customers & segments\">Busca de clientes e segmentos com AI</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Painéis de performance da carteira\" data-en=\"Portfolio performance dashboards\">Painéis de performance da carteira</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Geração de conteúdo e imagem com AI\" data-en=\"AI content & image generation\">Geração de conteúdo e imagem com AI</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">UI</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">A.I.</span><span class=\"chip\">REGISTRY</span></div>\n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#84e05a\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">07 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"BI & Analytics\" data-en=\"BI & Analytics\">BI & Analytics</div>\n        <div class=\"ix-poss\" data-pt=\"Do <b>dado vivo ao plano de ação</b> — painéis que a área lê e age, sem exportar pra planilha.\" data-en=\"From <b>live data to an action plan</b> — dashboards the team reads and acts on, no spreadsheet export.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Painéis executivos sobre dado vivo\" data-en=\"Executive dashboards on live data\">Painéis executivos sobre dado vivo</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Ingestão diária automatizada\" data-en=\"Automated daily ingestion\">Ingestão diária automatizada</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Metas e plano de ação acompanhados\" data-en=\"Targets & action plan tracked\">Metas e plano de ação acompanhados</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Alertas e monitoramento\" data-en=\"Alerts & monitoring\">Alertas e monitoramento</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span><span class=\"chip\">UI</span></div>\n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#ff6a4d\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">08 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"Seguros & CX\" data-en=\"Insurance & CX\">Seguros & CX</div>\n        <div class=\"ix-poss\" data-pt=\"Atendimento que <b>responde na fonte certa</b> — base de conhecimento com busca semântica e triagem por AI.\" data-en=\"Support that <b>answers from the right source</b> — a semantic knowledge base with AI triage.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Base de conhecimento com busca semântica\" data-en=\"Semantic-search knowledge base\">Base de conhecimento com busca semântica</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Triagem e atendimento com AI\" data-en=\"AI triage & support\">Triagem e atendimento com AI</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Respostas ancoradas na fonte\" data-en=\"Answers grounded in the source\">Respostas ancoradas na fonte</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Analytics de atendimento\" data-en=\"Support analytics\">Analytics de atendimento</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">A.I.</span><span class=\"chip\">CONNECT</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">UI</span></div>\n      </div>\n    </div>\n  </div>\n  <div class=\"industry\" style=\"--hue:#e8e84d\">\n    <div class=\"glow\"></div><div class=\"glow2\"></div><canvas class=\"flow\"></canvas>\n    <div class=\"inner\">\n      <div class=\"reveal\">\n        <div class=\"ix-num\">09 <span>— 09</span></div>\n        <div class=\"ix-name\" data-pt=\"Compras & Procurement\" data-en=\"Procurement\">Compras & Procurement</div>\n        <div class=\"ix-poss\" data-pt=\"<b>Excelência em compras</b>: modelagem financeira e planejamento de fornecimento, simulados em minutos.\" data-en=\"<b>Procurement excellence</b>: financial modeling and supply planning, simulated in minutes.\">.</div>\n      </div>\n      <div class=\"ix-side reveal\">\n        <div class=\"caps\">\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Planejamento de fornecimento\" data-en=\"Supply planning\">Planejamento de fornecimento</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Modelagem financeira de cenários\" data-en=\"Financial scenario modeling\">Modelagem financeira de cenários</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Simuladores e croquis de decisão\" data-en=\"Decision simulators & builders\">Simuladores e croquis de decisão</span></div>\n          <div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"Compras orientadas a dado\" data-en=\"Data-driven sourcing\">Compras orientadas a dado</span></div>\n        </div>\n        <div class=\"prod-row\"><span class=\"lbl\" data-pt=\"Produtos\" data-en=\"Products\">Produtos</span><span class=\"chip\">UI</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">CONNECT</span><span class=\"chip\">RUSH</span></div>\n      </div>\n    </div>\n  </div>\n</section>\n<section id=\"threads\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"Em toda indústria\" data-en=\"Across every industry\">Em toda indústria</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"O mesmo motor, seja qual for o problema\" data-en=\"The same engine, whatever the problem\">O mesmo motor, seja qual for o problema</h2>\n    <div class=\"threads-grid reveal\">\n      <div class=\"thread\"><div class=\"n\">A.I.</div><div class=\"t\" data-pt=\"AI embutida\" data-en=\"AI built in\">AI embutida</div><div class=\"d\" data-pt=\"Detecção, classificação, geração e visão — em linguagem natural.\" data-en=\"Detection, classification, generation and vision — in natural language.\">.</div></div>\n      <div class=\"thread\"><div class=\"n\">OMNI</div><div class=\"t\" data-pt=\"Omnichannel\" data-en=\"Omnichannel\">Omnichannel</div><div class=\"d\" data-pt=\"WhatsApp, voz, webchat e e-mail no mesmo fluxo.\" data-en=\"WhatsApp, voice, webchat and email in one flow.\">.</div></div>\n      <div class=\"thread\"><div class=\"n\">DATA</div><div class=\"t\" data-pt=\"Dados reais + integrações\" data-en=\"Real data + integrations\">Dados reais + integrações</div><div class=\"d\" data-pt=\"Databricks, VTEX, CRMs, SSO — conectados de verdade.\" data-en=\"Databricks, VTEX, CRMs, SSO — genuinely connected.\">.</div></div>\n      <div class=\"thread\"><div class=\"n\">AUTO</div><div class=\"t\" data-pt=\"Automação\" data-en=\"Automation\">Automação</div><div class=\"d\" data-pt=\"Eventos, webhooks e agendadores reagindo em tempo real.\" data-en=\"Events, webhooks and schedulers reacting in real time.\">.</div></div>\n      <div class=\"thread\"><div class=\"n\">VIEW</div><div class=\"t\" data-pt=\"Dashboards\" data-en=\"Dashboards\">Dashboards</div><div class=\"d\" data-pt=\"Painéis e analytics sobre o dado vivo da operação.\" data-en=\"Panels and analytics over the operation's live data.\">.</div></div>\n      <div class=\"thread\"><div class=\"n\">NOCODE</div><div class=\"t\" data-pt=\"Sem código\" data-en=\"No code\">Sem código</div><div class=\"d\" data-pt=\"Tudo montado no builder visual — pela própria área.\" data-en=\"All assembled in the visual builder — by the business team itself.\">.</div></div>\n    </div>\n  </div>\n</section>\n<section id=\"levers\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"Resultados\" data-en=\"Results\" data-zh=\"成果\">Resultados</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"No fim do dia, movemos KPIs.\" data-en=\"At the end of the day, we move KPIs.\" data-zh=\"归根结底，我们撬动 KPI。\">No fim do dia, movemos KPIs.</h2>\n    <p class=\"sec-sub reveal\" data-pt=\"As alavancas que a Data² move na operação dos nossos clientes — o que realmente importa no fim do dia.\" data-en=\"The levers Data² moves in our customers' operations — what actually matters at the end of the day.\" data-zh=\"Data² 在客户运营中撬动的杠杆 —— 归根结底真正重要的东西。\">.</p>\n    <div class=\"levers-grid\">\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Contact Center\" data-en=\"Contact Center\" data-zh=\"呼叫中心\">Contact Center</span><span class=\"lv-num\" data-pt=\"até <b>90%</b>\" data-en=\"up to <b>90%</b>\" data-zh=\"高达 <b>90%</b>\">.</span><span class=\"lv-txt\" data-pt=\"dos contatos resolvidos — com mais satisfação\" data-en=\"of contacts resolved — with higher satisfaction\" data-zh=\"的联系得到解决 —— 满意度更高\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\">NPS</span><span class=\"lv-num\" data-pt=\"<b>+26</b> pts\" data-en=\"<b>+26</b> pts\" data-zh=\"<b>+26</b> 分\">.</span><span class=\"lv-txt\" data-pt=\"de NPS no atendimento ao cliente\" data-en=\"in customer-support NPS\" data-zh=\"客户服务 NPS 提升\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Conversão\" data-en=\"Conversion\" data-zh=\"转化\">Conversão</span><span class=\"lv-num\" data-pt=\"<b>+20%</b>\" data-en=\"<b>+20%</b>\" data-zh=\"<b>+20%</b>\">.</span><span class=\"lv-txt\" data-pt=\"de conversão na jornada de compra\" data-en=\"conversion in the buying journey\" data-zh=\"购买旅程转化率\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Operações\" data-en=\"Operations\" data-zh=\"运营\">Operações</span><span class=\"lv-num\" data-pt=\"<b>−85%</b>\" data-en=\"<b>−85%</b>\" data-zh=\"<b>−85%</b>\">.</span><span class=\"lv-txt\" data-pt=\"de chamados na operação\" data-en=\"tickets in the operation\" data-zh=\"运营工单\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Compras\" data-en=\"Procurement\" data-zh=\"采购\">Compras</span><span class=\"lv-num\" data-pt=\"<b>milhões</b>\" data-en=\"<b>millions</b>\" data-zh=\"<b>数百万</b>\">.</span><span class=\"lv-txt\" data-pt=\"economizados por mês em procurement\" data-en=\"saved per month in procurement\" data-zh=\"每月采购节省\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Time-to-market\" data-en=\"Time-to-market\" data-zh=\"上线周期\">Time-to-market</span><span class=\"lv-num\" data-pt=\"<b>30</b> dias\" data-en=\"<b>30</b> days\" data-zh=\"<b>30</b> 天\">.</span><span class=\"lv-txt\" data-pt=\"da ideia à produção\" data-en=\"from idea to production\" data-zh=\"从创意到上线\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Escala\" data-en=\"Scale\" data-zh=\"规模\">Escala</span><span class=\"lv-num\" data-pt=\"<b>100k+</b>/dia\" data-en=\"<b>100k+</b>/day\" data-zh=\"每日 <b>10万+</b>\">.</span><span class=\"lv-txt\" data-pt=\"atendimentos automatizados\" data-en=\"interactions automated\" data-zh=\"自动化服务\">.</span></div>\n      <div class=\"lever reveal\"><span class=\"lv-cap\" data-pt=\"Retenção\" data-en=\"Retention\" data-zh=\"客户留存\">Retenção</span><span class=\"lv-num\" data-pt=\"<b>85%</b>\" data-en=\"<b>85%</b>\" data-zh=\"<b>85%</b>\">.</span><span class=\"lv-txt\" data-pt=\"de retenção de clientes\" data-en=\"customer retention\" data-zh=\"客户留存率\">.</span></div>\n    </div>\n  </div>\n</section>\n\n<section id=\"products\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"A Suíte\" data-en=\"The Suite\">A Suíte</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"Oito produtos. Um só sistema.\" data-en=\"Eight products. One system.\">Oito produtos. Um só sistema.</h2>\n    <div class=\"prod-showcase\">\n      <div class=\"ring reveal\" id=\"ring\"><div class=\"center\"><div class=\"mark\"><svg class=\"logo\" viewBox=\"0 0 459.554 148.471\" style=\"height:26px\"><use href=\"#d2wm\"></use></svg></div><small data-pt=\"8 produtos · 1 sistema\" data-en=\"8 products · 1 system\">8 produtos · 1 sistema</small></div></div>\n      <div class=\"pgrid reveal\">\n        <div class=\"pcard\" style=\"--pc:#5b86ff\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">UI</span></div><div class=\"pcname\" data-pt=\"Interface\" data-en=\"Interface\">Interface</div><div class=\"pctag\" data-pt=\"Desenhe o app, não uma foto dele.\" data-en=\"Design the app, not a picture of it.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#ff5a4d\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">REGISTRY</span></div><div class=\"pcname\" data-pt=\"Dados\" data-en=\"Data\">Dados</div><div class=\"pctag\" data-pt=\"Modele, armazene e analise em escala. Adeus, Lorem Ipsum.\" data-en=\"Model, store and analyze at scale. Goodbye Lorem Ipsum.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#e8e84d\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">MEDIA</span></div><div class=\"pcname\" data-pt=\"Mídia\" data-en=\"Media\">Mídia</div><div class=\"pctag\" data-pt=\"Otimize e distribua arquivos, na nuvem.\" data-en=\"Optimize and distribute files, in the cloud.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#4de0a1\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">ID</span></div><div class=\"pcname\" data-pt=\"Identidade\" data-en=\"Identity\">Identidade</div><div class=\"pctag\" data-pt=\"Ciclos completos, do onboarding ao reset de senha.\" data-en=\"Full lifecycles, from onboarding to password reset.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#4ddfe6\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">CONNECT</span></div><div class=\"pcname\" data-pt=\"Integrações\" data-en=\"Integrations\">Integrações</div><div class=\"pctag\" data-pt=\"Conecte-se a qualquer serviço externo.\" data-en=\"Connect to any external service.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#ff4d9e\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">DOMAIN</span></div><div class=\"pcname\" data-pt=\"Domínio · AI\" data-en=\"Domain · AI\">Domínio · AI</div><div class=\"pctag\" data-pt=\"Seu modelo, nunca escondido em código. AI multimodal.\" data-en=\"Your model, never hidden in code. Multimodal AI.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#9b5cff\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">RUSH</span></div><div class=\"pcname\" data-pt=\"Automação\" data-en=\"Automation\">Automação</div><div class=\"pctag\" data-pt=\"Reaja a eventos em tempo real. Webhooks e agendadores.\" data-en=\"React to events in real time. Webhooks and schedulers.\">.</div></div>\n        <div class=\"pcard\" style=\"--pc:#84e05a\"><div class=\"ptop\"><span class=\"pcdot\"></span><span class=\"pccode\">CASHIER</span><span class=\"soon\">SOON</span></div><div class=\"pcname\" data-pt=\"Pagamentos\" data-en=\"Payments\">Pagamentos</div><div class=\"pctag\" data-pt=\"Cobre e receba — qualquer transação de valor.\" data-en=\"Charge and get paid — any value transaction.\">.</div></div>\n      </div>\n    </div>\n  </div>\n</section>\n<section id=\"platform\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"A plataforma\" data-en=\"The platform\" data-zh=\"平台\">A plataforma</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"Escrita desde 2020. Não embrulhada.\" data-en=\"Written since 2020. Not wrapped.\" data-zh=\"自 2020 年自研，而非套壳。\">Escrita desde 2020. Não embrulhada.</h2>\n    <p class=\"plat-sub reveal\" data-pt=\"Agent-native de verdade: o builder É um servidor MCP. Agentes compõem os mesmos primitivos governados que um engenheiro — validados antes de entrar no ar.\" data-en=\"Truly agent-native: the builder IS an MCP server. Agents compose the same governed primitives an engineer would — validated before they ship.\" data-zh=\"真正的 agent-native：构建器本身就是一个 MCP 服务器。智能体与工程师使用同一套受治理的原语进行组装 —— 上线前即经校验。\">.</p>\n    <div class=\"flow-strip reveal\">\n      <div class=\"fnode\"><div class=\"fn-code\" style=\"color:var(--faint)\">EVENTO</div><div class=\"fn-lbl\" data-pt=\"entra\" data-en=\"comes in\" data-zh=\"进入\">entra</div></div>\n      <div class=\"fnode\"><div class=\"fn-code\" style=\"color:#9b5cff\">RUSH</div><div class=\"fn-lbl\" data-pt=\"decide\" data-en=\"decides\" data-zh=\"决策\">decide</div></div>\n      <div class=\"fnode\"><div class=\"fn-code\" style=\"color:#4ddfe6\">CONNECT · DOMAIN</div><div class=\"fn-lbl\" data-pt=\"AI + integrações\" data-en=\"AI + integrations\" data-zh=\"AI + 集成\">AI + integrações</div></div>\n      <div class=\"fnode\"><div class=\"fn-code\" style=\"color:#ff5a4d\">REGISTRY</div><div class=\"fn-lbl\" data-pt=\"dados\" data-en=\"data\" data-zh=\"数据\">dados</div></div>\n      <div class=\"fnode\"><div class=\"fn-code\" style=\"color:#5b86ff\">DATASET</div><div class=\"fn-lbl\" data-pt=\"reativo\" data-en=\"reactive\" data-zh=\"响应式\">reativo</div></div>\n      <div class=\"fnode\"><div class=\"fn-code\" style=\"color:#e8e84d\">UI</div><div class=\"fn-lbl\" data-pt=\"em tela\" data-en=\"on screen\" data-zh=\"呈现\">em tela</div></div>\n    </div>\n    <div class=\"eng-row reveal\">\n      <span class=\"eng-lead\" data-pt=\"Nível de engenharia\" data-en=\"Engineering-grade\" data-zh=\"工程级\">Nível de engenharia</span>\n      <span class=\"eng-chip\">Auth &amp; SSO</span><span class=\"eng-chip\">Key Vaults</span><span class=\"eng-chip\">SSR</span><span class=\"eng-chip\">Cron</span><span class=\"eng-chip\">WebSockets</span><span class=\"eng-chip\">Logs</span><span class=\"eng-chip\" data-pt=\"Semantic Search\" data-en=\"Semantic Search\" data-zh=\"语义搜索\">Semantic Search</span><span class=\"eng-chip\">Staging → Publish</span>\n    </div>\n  </div>\n</section>\n\n<section id=\"deliver\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow reveal\" data-pt=\"Como entregamos\" data-en=\"How we deliver\">Como entregamos</p>\n    <h2 class=\"sec-t reveal\" data-pt=\"Nossa stack. Nossos serviços.\" data-en=\"Our stack. Our services.\">Nossa stack. Nossos serviços.</h2>\n    <div class=\"deliver-grid\">\n      <div class=\"card reveal\">\n        <div class=\"accent\"></div>\n        <h3 data-pt=\"Sprints\" data-en=\"Sprints\">Sprints</h3>\n        <p data-pt=\"Nossos Forward Deployed Engineers entram junto da sua área: entendem a dor, prototipam e constroem com você — do primeiro passo à produção.\" data-en=\"Our Forward Deployed Engineers embed with your area: they learn the pain, prototype and build with you — from first step to production.\" data-zh=\"我们的前署工程师与您的业务团队并肩作战：洞察痛点、快速原型、与您共同构建 — 从第一步到上线。\">.</p>\n        <div class=\"flavors\"><span class=\"flavor\">Forward Deployed Engineers</span><span class=\"flavor\" data-pt=\"Ideação\" data-en=\"Ideation\">Ideação</span><span class=\"flavor\">Design</span><span class=\"flavor\" data-pt=\"Protótipo\" data-en=\"Prototype\">Protótipo</span></div>\n      </div>\n      <div class=\"card reveal\">\n        <div class=\"accent\"></div>\n        <div class=\"own\" data-pt=\"<em>Seus dados</em> são seus.\" data-en=\"<em>Own</em> your data.\">.</div>\n        <p data-pt=\"O Data Framework mantém seu modelo e sua infraestrutura sob seu domínio — nunca escondidos em código, nunca reféns de um fornecedor.\" data-en=\"The Data Framework keeps your model and infrastructure under your control — never hidden in code, never hostage to a vendor.\">.</p>\n        <div class=\"flavors\"><span class=\"flavor\" data-pt=\"Domain-Driven\" data-en=\"Domain-Driven\">Domain-Driven</span><span class=\"flavor\" data-pt=\"Linguagem única de dados\" data-en=\"Single Data Language\">Linguagem única de dados</span></div>\n      </div>\n    </div>\n    <div class=\"fde-band reveal\">\n      <div class=\"fde-flow\"><span data-pt=\"Seu time aprende\" data-en=\"Your team learns\" data-zh=\"你的团队学习\">Seu time aprende</span><i>→</i><span data-pt=\"é dono\" data-en=\"owns it\" data-zh=\"拥有它\">é dono</span><i>→</i><span data-pt=\"evolui\" data-en=\"evolves\" data-zh=\"持续进化\">evolui</span></div>\n      <div class=\"fde-pay\" data-pt=\"Pague por entrega, não por hora.\" data-en=\"Pay by delivery, not by hours.\" data-zh=\"按交付付费，而非按工时。\">Pague por entrega, não por hora.</div>\n    </div>\n  </div>\n</section>\n<section id=\"cta\">\n  <div class=\"wrap\">\n    <p class=\"cta-kicker reveal\" data-pt=\"Pronto pra começar?\" data-en=\"Ready to build?\" data-zh=\"准备好开始了吗？\">Pronto pra começar?</p>\n    <h2 class=\"big reveal\" data-pt=\"Do problema<br>à produção.\" data-en=\"From problem<br>to production.\">Do problema<br>à produção.</h2>\n    <p class=\"sub reveal\" data-pt=\"Traga o desafio da sua área. A gente transforma em software — em produção.\" data-en=\"Bring your area's challenge. We turn it into software — in production.\">.</p>\n    <div class=\"cta-row reveal\"><a href=\"#\" class=\"btn\"><span data-pt=\"Agendar uma demo\" data-en=\"Book a demo\">Agendar uma demo</span></a><a href=\"#\" class=\"btn ghost\"><span data-pt=\"Falar com a gente\" data-en=\"Talk to us\" data-zh=\"联系我们\">Falar com a gente</span></a></div>\n  </div>\n</section>\n<footer>\n  <div class=\"foot\">\n    <div>\n      <div class=\"mark\"><svg class=\"logo\" viewBox=\"0 0 459.554 148.471\" style=\"height:26px\"><use href=\"#d2wm\"></use></svg></div>\n      <p style=\"color:var(--faint);font-size:13px;margin-top:12px;max-width:26ch\" data-pt=\"A Digital Expression Suite. Do problema à produção.\" data-en=\"The Digital Expression Suite. From problem to production.\">.</p>\n    </div>\n    <div class=\"cols\">\n      <div class=\"fc\"><h5 data-pt=\"Produto\" data-en=\"Product\">Produto</h5><a href=\"#products\" data-pt=\"A Suíte\" data-en=\"The Suite\">A Suíte</a><a href=\"#industries\" data-pt=\"Indústrias\" data-en=\"Industries\">Indústrias</a><a href=\"#deliver\">Sprints</a><a href=\"#\" data-pt=\"Integrações\" data-en=\"Integrations\">Integrações</a></div>\n      <div class=\"fc\"><h5 data-pt=\"Empresa\" data-en=\"Company\">Empresa</h5><a href=\"#\" data-pt=\"Sobre\" data-en=\"About\">Sobre</a><a href=\"#proof\" data-pt=\"Clientes\" data-en=\"Customers\">Clientes</a><a href=\"#\" data-pt=\"Pessoas\" data-en=\"People\">Pessoas</a><a href=\"#\" data-pt=\"Contato\" data-en=\"Contact\">Contato</a></div>\n      <div class=\"fc\"><h5 data-pt=\"Indústrias\" data-en=\"Industries\" data-zh=\"行业\">Indústrias</h5><a href=\"#glance\" data-pt=\"RH & Pessoas\" data-en=\"HR & People\">RH & Pessoas</a><a href=\"#glance\" data-pt=\"CX & Contact Center\" data-en=\"CX & Contact Center\">CX & Contact Center</a><a href=\"#glance\" data-pt=\"Varejo & E-commerce\" data-en=\"Retail & E-commerce\">Varejo & E-commerce</a><a href=\"#glance\" data-pt=\"Ver todas\" data-en=\"See all\" data-zh=\"查看全部\">Ver todas</a></div>\n      <div class=\"fc\"><h5 data-pt=\"Recursos\" data-en=\"Resources\" data-zh=\"资源\">Recursos</h5><a href=\"#platform\" data-pt=\"A plataforma\" data-en=\"The platform\">A plataforma</a><a href=\"#deliver\">Sprints</a><a href=\"#levers\" data-pt=\"Resultados\" data-en=\"Results\">Resultados</a><a href=\"#\" data-pt=\"Contato\" data-en=\"Contact\">Demo</a></div>\n    </div>\n    <div class=\"fine\"><span>© 2026 Data² · www.data2.app</span><span data-pt=\"Feito na Data². Sem uma linha de código.\" data-en=\"Made on Data². Without a single line of code.\">Feito na Data². Sem uma linha de código.</span></div>\n  </div>\n</footer>\n<div class=\"uni-overlay\" id=\"uni\" style=\"--hue:#4ddfe6\">\n  <div class=\"uni-scroll\">\n    <svg width=\"0\" height=\"0\" style=\"position:absolute;width:0;height:0\" aria-hidden=\"true\"><defs>\n      <symbol id=\"isocube\" viewBox=\"0 0 100 100\"><polygon points=\"50,4 96,29 50,54 4,29\" fill=\"var(--fct)\" stroke=\"var(--hue)\" stroke-width=\"1.5\" stroke-linejoin=\"round\" vector-effect=\"non-scaling-stroke\"></polygon><polygon points=\"4,29 50,54 50,98 4,73\" fill=\"var(--fcl)\" stroke=\"var(--hue)\" stroke-width=\"1.5\" stroke-linejoin=\"round\" vector-effect=\"non-scaling-stroke\"></polygon><polygon points=\"96,29 50,54 50,98 96,73\" fill=\"var(--fcr)\" stroke=\"var(--hue)\" stroke-width=\"1.5\" stroke-linejoin=\"round\" vector-effect=\"non-scaling-stroke\"></polygon></symbol>\n      <symbol id=\"m0\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"4\" y=\"6\" width=\"56\" height=\"56\"></use><use href=\"#isocube\" x=\"46\" y=\"40\" width=\"46\" height=\"46\"></use></symbol>\n      <symbol id=\"m1\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"1\" y=\"24\" width=\"38\" height=\"38\"></use><use href=\"#isocube\" x=\"31\" y=\"42\" width=\"38\" height=\"38\"></use><use href=\"#isocube\" x=\"61\" y=\"24\" width=\"38\" height=\"38\"></use></symbol>\n      <symbol id=\"m2\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"2\" y=\"10\" width=\"44\" height=\"44\"></use><use href=\"#isocube\" x=\"54\" y=\"46\" width=\"44\" height=\"44\"></use></symbol>\n      <symbol id=\"m3\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"2\" y=\"34\" width=\"96\" height=\"60\"></use><use href=\"#isocube\" x=\"24\" y=\"8\" width=\"28\" height=\"28\"></use><use href=\"#isocube\" x=\"50\" y=\"16\" width=\"26\" height=\"26\"></use></symbol>\n      <symbol id=\"m4\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"26\" y=\"46\" width=\"48\" height=\"48\"></use><use href=\"#isocube\" x=\"26\" y=\"28\" width=\"48\" height=\"48\"></use><use href=\"#isocube\" x=\"26\" y=\"10\" width=\"48\" height=\"48\"></use></symbol>\n      <symbol id=\"m5\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"30\" y=\"44\" width=\"40\" height=\"40\"></use><use href=\"#isocube\" x=\"30\" y=\"18\" width=\"40\" height=\"40\"></use></symbol>\n      <symbol id=\"m6\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"30\" y=\"6\" width=\"40\" height=\"40\"></use><use href=\"#isocube\" x=\"8\" y=\"26\" width=\"40\" height=\"40\"></use><use href=\"#isocube\" x=\"52\" y=\"26\" width=\"40\" height=\"40\"></use><use href=\"#isocube\" x=\"30\" y=\"46\" width=\"40\" height=\"40\"></use></symbol>\n      <symbol id=\"m7\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"2\" y=\"40\" width=\"96\" height=\"54\"></use><use href=\"#isocube\" x=\"35\" y=\"22\" width=\"30\" height=\"30\"></use></symbol>\n      <symbol id=\"m8\" viewBox=\"0 0 100 100\"><use href=\"#isocube\" x=\"8\" y=\"52\" width=\"38\" height=\"38\"></use><use href=\"#isocube\" x=\"34\" y=\"35\" width=\"38\" height=\"38\"></use><use href=\"#isocube\" x=\"60\" y=\"18\" width=\"38\" height=\"38\"></use></symbol>\n    </defs></svg>\n    <div class=\"uni-top\"><span class=\"mark\"><svg class=\"logo\" viewBox=\"0 0 459.554 148.471\" style=\"height:22px\"><use href=\"#d2wm\"></use></svg></span><button class=\"uni-close\" id=\"uniClose\" aria-label=\"close\">✕</button></div>\n    <div class=\"uni-body\" id=\"uniBody\">\n    <section class=\"uni-hero\"><div class=\"glow\"></div>\n      <div class=\"uni-eyebrow\" data-pt=\"Universo\" data-en=\"Universe\" data-zh=\"宇宙\">Universo</div>\n      <h1 data-pt=\"CX & Contact Center\" data-en=\"CX & Contact Center\">CX & Contact Center</h1>\n      <p class=\"lead\" data-pt=\"Um contact center inteiro, funcionando como um sistema vivo — cada componente é um módulo Data². Passe o mouse. Role para os detalhes.\" data-en=\"An entire contact center, running as a living system — each component is a Data² module. Hover. Scroll for the details.\" data-zh=\"一个完整的呼叫中心，如同一个活的系统在运行 —— 每个组件都是一个 Data² 模块。悬停查看，下滚了解详情。\">.</p>\n      <div class=\"sysmap\"><svg viewBox=\"0 0 820 400\">\n        <path class=\"wire\" d=\"M150,150 L360,110\"></path><path class=\"wire\" d=\"M390,140 L400,275\"></path><path class=\"wire\" d=\"M430,110 L620,150\"></path><path class=\"wire\" d=\"M440,285 L630,175\"></path><path class=\"wire\" d=\"M660,185 L600,300\"></path>\n        <circle class=\"flowdot\" r=\"3.5\"><animateMotion dur=\"2.6s\" repeatCount=\"indefinite\" path=\"M150,150 L360,110\"></animateMotion></circle>\n        <circle class=\"flowdot\" r=\"3.5\"><animateMotion dur=\"3s\" repeatCount=\"indefinite\" path=\"M430,110 L620,150\"></animateMotion></circle>\n        <circle class=\"flowdot\" r=\"3.5\"><animateMotion dur=\"2.4s\" repeatCount=\"indefinite\" path=\"M660,185 L600,300\"></animateMotion></circle>\n        <circle class=\"flowdot\" r=\"3.5\"><animateMotion dur=\"3.2s\" repeatCount=\"indefinite\" path=\"M390,140 L400,275\"></animateMotion></circle>\n        <g class=\"comp\" data-i=\"0\" transform=\"translate(108,86)\"><use href=\"#m0\" width=\"100\" height=\"100\"></use><text class=\"clabel\" x=\"50\" y=\"116\" data-pt=\"Webchat\" data-en=\"Webchat\" data-zh=\"网页聊天\">Webchat</text></g>\n        <g class=\"comp\" data-i=\"1\" transform=\"translate(345,38)\"><use href=\"#m1\" width=\"100\" height=\"100\"></use><text class=\"clabel\" x=\"50\" y=\"112\" data-pt=\"Bot de triagem\" data-en=\"Triage bot\" data-zh=\"分流机器人\">Bot de triagem</text></g>\n        <g class=\"comp\" data-i=\"2\" transform=\"translate(355,236)\"><use href=\"#m2\" width=\"100\" height=\"100\"></use><text class=\"clabel\" x=\"50\" y=\"112\" data-pt=\"Transbordo\" data-en=\"Handoff\" data-zh=\"转接\">Transbordo</text></g>\n        <g class=\"comp\" data-i=\"3\" transform=\"translate(612,84)\"><use href=\"#m3\" width=\"100\" height=\"100\"></use><text class=\"clabel\" x=\"50\" y=\"114\" data-pt=\"Console\" data-en=\"Console\" data-zh=\"控制台\">Console</text></g>\n        <g class=\"comp\" data-i=\"4\" transform=\"translate(556,246)\"><use href=\"#m4\" width=\"100\" height=\"100\"></use><text class=\"clabel\" x=\"50\" y=\"118\" data-pt=\"Filas & CSAT\" data-en=\"Queues & CSAT\" data-zh=\"队列与 CSAT\">Filas & CSAT</text></g>\n      </svg></div>\n      <div class=\"sys-hint\" data-pt=\"Passe o mouse · clique um componente · role\" data-en=\"Hover · click a component · scroll\" data-zh=\"悬停 · 点击组件 · 下滚\">Passe o mouse · clique um componente · role</div>\n    </section>\n    <section class=\"uni-detail\" data-i=\"0\"><div class=\"ud-viz\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m0\" width=\"100\" height=\"100\"></use></svg></div></div><div class=\"ud-tx\"><div class=\"ud-num\">01 / 05</div><div class=\"ud-t\" data-pt=\"Webchat omnichannel\" data-en=\"Omnichannel webchat\">.</div><div class=\"ud-d\" data-pt=\"Um widget no seu site conversa no mesmo fluxo que WhatsApp, voz e e-mail. O cliente começa onde quiser e a conversa nunca se perde.\" data-en=\"A widget on your site talks in the same flow as WhatsApp, voice and email. Customers start anywhere and the conversation is never lost.\" data-zh=\"网站挂件与 WhatsApp、语音和邮件处于同一流程。客户可从任何渠道开始，对话永不丢失。\">.</div><div class=\"ud-points\"><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Widget embutido via iframe + websockets\" data-en=\"Embedded widget via iframe + websockets\" data-zh=\"通过 iframe + websockets 嵌入挂件\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Ponte com provedor de mensageria e voz (CPaaS)\" data-en=\"Bridge to a messaging/voice provider (CPaaS)\" data-zh=\"对接消息/语音服务商（CPaaS）\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Sessões, mensagens e transferências unificadas por cliente\" data-en=\"Sessions, messages and transfers unified per customer\" data-zh=\"按客户统一会话、消息与转接\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Continuidade de contexto ao trocar de canal\" data-en=\"Context continuity across channels\" data-zh=\"跨渠道保持上下文连续\">.</span></div></div><div class=\"ud-gain\"><div class=\"ug-col ug-old\"><span class=\"ug-k\" data-pt=\"O modelo não digitalizado\" data-en=\"The non-digitized model\" data-zh=\"未数字化的模式\">.</span><p data-pt=\"Canais soltos, sem histórico compartilhado. O cliente repete tudo a cada troca; o atendente trabalha às cegas.\" data-en=\"Disconnected channels, no shared history. Customers repeat everything on each switch; agents work blind.\" data-zh=\"渠道割裂、无共享历史。客户每次切换都要重复，坐席只能盲目应对。\">.</p></div><div class=\"ug-col ug-new\"><span class=\"ug-k\" data-pt=\"Com Data²\" data-en=\"With Data²\">.</span><p data-pt=\"Um só fluxo, um só histórico. Menos repetição, respostas mais rápidas, e o cliente começa onde for mais fácil.\" data-en=\"One flow, one history. Less repetition, faster answers, and customers start wherever is easiest.\" data-zh=\"统一流程、统一历史。更少重复、更快响应，客户从最方便的渠道开始。\">.</p></div></div><div class=\"ud-res\"><span class=\"r\"><b>100k+</b> <span data-pt=\"atendimentos/dia\" data-en=\"interactions/day\" data-zh=\"次服务/天\">atendimentos/dia</span></span></div></div></section>\n    <section class=\"uni-detail\" data-i=\"1\"><div class=\"ud-viz\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m1\" width=\"100\" height=\"100\"></use></svg></div></div><div class=\"ud-tx\"><div class=\"ud-num\">02 / 05</div><div class=\"ud-t\" data-pt=\"Bot de triagem com AI\" data-en=\"AI triage bot\">.</div><div class=\"ud-d\" data-pt=\"A AI entende a intenção, resolve na hora o que é simples e classifica o resto para a fila certa — antes de qualquer humano tocar.\" data-en=\"AI reads intent, instantly resolves the simple, and routes the rest to the right queue — before any human touches it.\" data-zh=\"AI 理解意图，即时解决简单问题，并将其余分流到正确队列 —— 无需任何人工介入。\">.</div><div class=\"ud-points\"><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Detecção de caso de uso por AI\" data-en=\"AI use-case detection\" data-zh=\"AI 用例识别\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Fluxos guiados: cancelamento, troca, reembolso, atraso\" data-en=\"Guided flows: cancel, exchange, refund, delay\" data-zh=\"引导式流程：取消、换货、退款、延迟\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Leitura de imagem e classificação de texto livre\" data-en=\"Image reading and free-text classification\" data-zh=\"图像识别与自由文本分类\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Abertura de ticket no CRM externo\" data-en=\"Ticket creation in the external CRM\" data-zh=\"在外部 CRM 中创建工单\">.</span></div></div><div class=\"ud-gain\"><div class=\"ug-col ug-old\"><span class=\"ug-k\" data-pt=\"O modelo não digitalizado\" data-en=\"The non-digitized model\" data-zh=\"未数字化的模式\">.</span><p data-pt=\"Todo contato cai na fila humana, até os triviais. A fila cresce e o custo por contato dispara.\" data-en=\"Every contact hits the human queue, even trivial ones. The queue grows and cost-per-contact soars.\" data-zh=\"所有联系都进入人工队列，连琐事也是。队列膨胀，单次联系成本飪升。\">.</p></div><div class=\"ug-col ug-new\"><span class=\"ug-k\" data-pt=\"Com Data²\" data-en=\"With Data²\">.</span><p data-pt=\"A AI resolve o repetitivo na hora e só encaminha o que precisa de gente — menos fila, menos custo, 24/7.\" data-en=\"AI resolves the repetitive instantly and only routes what needs a human — less queue, less cost, 24/7.\" data-zh=\"AI 即时解决重复问题，只转交需人工的部分 —— 更短队列、更低成本、7×24。\">.</p></div></div><div class=\"ud-res\"><span class=\"r\"><b>−50%</b> <span data-pt=\"tempo de resolução\" data-en=\"resolution time\" data-zh=\"解决时间\">tempo de resolução</span></span></div></div></section>\n    <section class=\"uni-detail\" data-i=\"2\"><div class=\"ud-viz\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m2\" width=\"100\" height=\"100\"></use></svg></div></div><div class=\"ud-tx\"><div class=\"ud-num\">03 / 05</div><div class=\"ud-t\" data-pt=\"Transbordo bot → humano\" data-en=\"Bot → human handoff\">.</div><div class=\"ud-d\" data-pt=\"Quando o humano precisa entrar, entra com todo o histórico e o contexto na mão. Zero ‘reconte tudo de novo’.\" data-en=\"When a human is needed, they step in with the full history and context in hand. Zero ‘tell me everything again’.\" data-zh=\"当需要人工时，坐席携带完整历史与上下文接手。无需‘重新说一遍’。\">.</div><div class=\"ud-points\"><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Handoff com histórico e contexto completos\" data-en=\"Handoff with full history and context\" data-zh=\"携带完整历史与上下文的转接\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Transferência entre filas e times\" data-en=\"Transfer across queues and teams\" data-zh=\"跨队列与团队转接\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Detecção de inatividade e abandono\" data-en=\"Inactivity and abandonment detection\" data-zh=\"闲置与弃单检测\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Respostas prontas + atalhos do atendente\" data-en=\"Canned replies + agent shortcuts\" data-zh=\"预设回复 + 坐席快捷方式\">.</span></div></div><div class=\"ud-gain\"><div class=\"ug-col ug-old\"><span class=\"ug-k\" data-pt=\"O modelo não digitalizado\" data-en=\"The non-digitized model\" data-zh=\"未数字化的模式\">.</span><p data-pt=\"A passagem pro humano perde o contexto. ‘Me conta tudo de novo’ vira regra e a satisfação despenca.\" data-en=\"The handoff loses context. ‘Tell me everything again’ becomes the rule and satisfaction drops.\" data-zh=\"转人工时丢失上下文。‘请再说一遍’成常态，满意度骤降。\">.</p></div><div class=\"ug-col ug-new\"><span class=\"ug-k\" data-pt=\"Com Data²\" data-en=\"With Data²\">.</span><p data-pt=\"O atendente entra com histórico e contexto completos. Transição invisível pro cliente.\" data-en=\"The agent steps in with full history and context. An invisible transition for the customer.\" data-zh=\"坐席携带完整历史与上下文接手。对客户而言，转接无感。\">.</p></div></div><div class=\"ud-res\"><span class=\"r\"><b>100%</b> <span data-pt=\"do contexto preservado\" data-en=\"context preserved\" data-zh=\"上下文保留\">do contexto preservado</span></span></div></div></section>\n    <section class=\"uni-detail\" data-i=\"3\"><div class=\"ud-viz\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m3\" width=\"100\" height=\"100\"></use></svg></div></div><div class=\"ud-tx\"><div class=\"ud-num\">04 / 05</div><div class=\"ud-t\" data-pt=\"Console de agente + supervisor\" data-en=\"Agent workspace + supervisor console\">.</div><div class=\"ud-d\" data-pt=\"Fila, transferências, status dos agentes e supervisão ao vivo — tudo num painel só, sobre o dado real da operação.\" data-en=\"Queue, transfers, agent status and live supervision — all in one console, over the operation’s real data.\" data-zh=\"队列、转接、坐席状态与实时督导 —— 全部集于一个控制台，基于运营真实数据。\">.</div><div class=\"ud-points\"><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Workspace do agente: status, presets, chatrooms\" data-en=\"Agent workspace: status, presets, chatrooms\" data-zh=\"坐席工作台：状态、预设、聊天室\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Console do supervisor: fila e métricas ao vivo\" data-en=\"Supervisor console: live queue and metrics\" data-zh=\"主管控制台：实时队列与指标\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Classificação de transferências\" data-en=\"Transfer classification\" data-zh=\"转接分类\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Fechamentos mensais e sync de metadados\" data-en=\"Monthly closings and metadata sync\" data-zh=\"月度结算与元数据同步\">.</span></div></div><div class=\"ud-gain\"><div class=\"ug-col ug-old\"><span class=\"ug-k\" data-pt=\"O modelo não digitalizado\" data-en=\"The non-digitized model\" data-zh=\"未数字化的模式\">.</span><p data-pt=\"Supervisão por planilha e telas espalhadas. Ninguém enxerga a operação ao vivo; decisão no achismo.\" data-en=\"Supervision by spreadsheet and scattered screens. No one sees the live operation; decisions by guesswork.\" data-zh=\"靠表格与零散界面督导。无人实时掌控，决策靠猜。\">.</p></div><div class=\"ug-col ug-new\"><span class=\"ug-k\" data-pt=\"Com Data²\" data-en=\"With Data²\">.</span><p data-pt=\"Uma tela com fila, status, transferências e métricas ao vivo — decisão sobre o dado real.\" data-en=\"One screen with live queue, status, transfers and metrics — decisions on real data.\" data-zh=\"一屏掌握实时队列、状态、转接与指标 —— 基于真实数据决策。\">.</p></div></div><div class=\"ud-res\"><span class=\"r\"><b>1</b> <span data-pt=\"tela para toda a operação\" data-en=\"screen for the whole operation\" data-zh=\"一屏掌控全局\">tela para toda a operação</span></span></div></div></section>\n    <section class=\"uni-detail\" data-i=\"4\"><div class=\"ud-viz\"><div class=\"iso\"><svg viewBox=\"0 0 100 100\"><use href=\"#m4\" width=\"100\" height=\"100\"></use></svg></div></div><div class=\"ud-tx\"><div class=\"ud-num\">05 / 05</div><div class=\"ud-t\" data-pt=\"Automação de filas & CSAT\" data-en=\"Queue automation & CSAT\">.</div><div class=\"ud-d\" data-pt=\"Filas que se auto-gerenciam: detecção de abandono, repriorização e pesquisa de satisfação disparada na hora certa.\" data-en=\"Self-managing queues: abandonment detection, re-prioritization and CSAT surveys fired at the right moment.\" data-zh=\"自我管理的队列：弃单检测、重新优先级排序，并在恰当时机发起满意度调查。\">.</div><div class=\"ud-points\"><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Agendadores (Rush) mantêm a fila saudável\" data-en=\"Schedulers (Rush) keep the queue healthy\" data-zh=\"调度器（Rush）维持队列健康\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Detecção de abandono + auto-cura da fila\" data-en=\"Abandonment detection + queue self-healing\" data-zh=\"弃单检测 + 队列自愈\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"CSAT disparado no momento certo\" data-en=\"CSAT fired at the right moment\" data-zh=\"在恰当时机发起 CSAT\">.</span></div><div class=\"ud-point\"><span class=\"pk\">▸</span><span data-pt=\"Analytics de custo por caso de uso + export\" data-en=\"Cost analytics by use-case + export\" data-zh=\"按用例的成本分析 + 导出\">.</span></div></div><div class=\"ud-gain\"><div class=\"ug-col ug-old\"><span class=\"ug-k\" data-pt=\"O modelo não digitalizado\" data-en=\"The non-digitized model\" data-zh=\"未数字化的模式\">.</span><p data-pt=\"Filas travadas por transferências esquecidas e abandono não detectado. Satisfação medida tarde ou nunca.\" data-en=\"Queues stuck by forgotten transfers and undetected abandonment. Satisfaction measured late, or never.\" data-zh=\"队列被遗忘的转接与未检测的弃单拖垮。满意度测得太晚，甚至从不测。\">.</p></div><div class=\"ug-col ug-new\"><span class=\"ug-k\" data-pt=\"Com Data²\" data-en=\"With Data²\">.</span><p data-pt=\"Rush mantém a fila saudável sozinho e dispara o CSAT na hora certa — melhoria contínua com dado.\" data-en=\"Rush keeps the queue healthy on its own and fires CSAT at the right time — continuous improvement, data-driven.\" data-zh=\"Rush 自动维持队列健康，并在恰当时机发起 CSAT —— 数据驱动的持续改进。\">.</p></div></div><div class=\"ud-res\"><span class=\"r\"><b>85%</b> <span data-pt=\"retenção\" data-en=\"retention\" data-zh=\"留存率\">retenção</span></span><span class=\"r\"><b>+26</b> <span data-pt=\"NPS\" data-en=\"NPS\" data-zh=\"NPS\">NPS</span></span></div></div></section>\n    <section class=\"uni-more\"><div class=\"glow\"></div><h2 data-pt=\"E isso é só o começo. <em>Qualquer coisa</em> pode ser construída.\" data-en=\"And this is just the start. <em>Anything</em> can be built.\" data-zh=\"而这只是开始。<em>任何东西</em>都能被构建。\">.</h2><p data-pt=\"Cada componente aqui é um módulo Data². Precisa de algo que ainda não existe? A gente constrói — no mesmo sistema, com o mesmo dado.\" data-en=\"Every component here is a Data² module. Need something that doesn’t exist yet? We build it — same system, same data.\" data-zh=\"这里的每个组件都是一个 Data² 模块。需要尚不存在的东西？我们构建它 —— 同一系统，同一数据。\">.</p><a href=\"#\" class=\"btn\"><span data-pt=\"Agendar uma demo\" data-en=\"Book a demo\">Agendar uma demo</span></a></section>\n    </div>\n  </div>\n</div>\n</div>`;\n  },\n  mounted(d2, root){\n    var mq = window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    var reduce = mq ? mq.matches : false;\n    var sc = root.querySelector(\".d2site\");\n    if(!sc) return;\n    var lang = \"pt\";\n    var ZH = {\n  \"Industries\": \"行业方案\",\n  \"Products\": \"产品\",\n  \"How we deliver\": \"交付方式\",\n  \"Customers\": \"客户\",\n  \"Demo\": \"演示\",\n  \"Sign in\": \"登录\",\n  \"EXPRESS YOURSELF<br>AT SCALE.\": \"尽情表达，<br>规模无限。\",\n  \"From a business problem to software in production. Data² is the suite that turns any team into the team that ships.\": \"从业务难题到上线软件。Data² 让每一个团队都成为能交付的团队。\",\n  \"See what's possible\": \"看看能实现什么\",\n  \"Book a demo\": \"预约演示\",\n  \"Imagery from the Data² Synthesys Project.\": \"图像来自 Data² Synthesys 项目。\",\n  \"Synthesys is a concept created and captured by Lívia Elektra, representing the power of expression and freedom that Data² provides.\": \"Synthesys 是 Lívia Elektra 创作并捕捉的概念，象征 Data² 所带来的表达力与自由。\",\n  \"SCROLL\": \"向下滚动\",\n  \"Data² in one screen\": \"一屏读懂 Data²\",\n  \"What we see, what we do, and who for.\": \"我们看见什么、我们做什么、为谁而做。\",\n  \"What we see\": \"我们看见什么\",\n  \"Every area has <em>software waiting to exist</em>.\": \"每个业务部门，都有<em>一款等待诞生的软件</em>。\",\n  \"Technology already lets us build almost anything. What was missing is the direct bridge between the people who know the problem and the solution running in production.\": \"技术早已能构建几乎一切。所缺的，是让懂问题的人与上线运行的方案之间，直接搭起的那座桥。\",\n  \"What we do\": \"我们做什么\",\n  \"A suite that becomes <em>real software</em>.\": \"一套真正<em>变成软件</em>的套件。\",\n  \"8 products with AI, omnichannel, real data, automation and dashboards — assembled in the visual builder and shipped to production. No code.\": \"8 款产品，涵盖 AI、全渠道、真实数据、自动化与仪表盘 —— 在可视化构建器中组装，直接上线生产。无需代码。\",\n  \"Who for\": \"为谁而做\",\n  \"For the area that <em>owns the problem</em>.\": \"为<em>真正面对问题</em>的那个部门。\",\n  \"Business teams at large companies that won't wait anymore. We are the enablers between the idea and production.\": \"为不愿再等待的大型企业业务团队。我们，是连接创意与生产的赋能者。\",\n  \"HR · Supply · Financial · CX · Retail · Sales · BI · Insurance · Procurement\": \"人力 · 供应 · 财务 · 客户体验 · 零售 · 销售 · 商业智能 · 保险 · 采购\",\n  \"Before\": \"过去\",\n  \"From idea to delivery: many hands, many translations, a lot of time.\": \"从创意到交付：经手无数、层层转译、耗时漫长。\",\n  \"With Data²\": \"有了 Data²\",\n  \"The business area itself designs, connects the real data, ships and operates. In production.\": \"业务部门亲手设计、接入真实数据、发布并运营。直接在生产环境。\",\n  \"At a glance\": \"概览\",\n  \"Where we already deliver\": \"我们已交付的领域\",\n  \"HR & People\": \"人力资源与员工\",\n  \"AI employee support\": \"AI 员工服务\",\n  \"Supply & Operations\": \"供应链与运营\",\n  \"Scenarios into production plans\": \"情景转化为生产计划\",\n  \"Financial Services\": \"金融服务\",\n  \"AI-personalized outreach\": \"AI 个性化触达\",\n  \"CX & Contact Center\": \"客户体验与呼叫中心\",\n  \"A contact center on one platform\": \"一体化呼叫中心\",\n  \"Retail & E-commerce\": \"零售与电商\",\n  \"From storefront to ERP\": \"从门店到 ERP\",\n  \"Sales Enablement\": \"销售赋能\",\n  \"A sales copilot for the field\": \"一线销售副驾\",\n  \"BI & Analytics\": \"商业智能与分析\",\n  \"Live data to action plan\": \"从实时数据到行动计划\",\n  \"Insurance & CX\": \"保险与客户体验\",\n  \"Semantic knowledge base\": \"语义知识库\",\n  \"Procurement\": \"采购\",\n  \"Sourcing modeling & planning\": \"采购建模与规划\",\n  \"Built on Data² by\": \"他们在 Data² 上构建\",\n  \"Business teams already build on Data²\": \"业务团队已在 Data² 上构建\",\n  \"What's possible\": \"无限可能\",\n  \"One platform. Every industry.\": \"一个平台，服务每个行业。\",\n  \"We don't sell slides. Each frontier below is real software, in production, built by the business area itself.\": \"我们不卖幻灯片。以下每一个领域，都是真实、上线、由业务部门亲手构建的软件。\",\n  \"An HR that answers <b>thousands of employees</b>, in multiple languages — instantly.\": \"一个能<b>即时回应数千名员工</b>、支持多语言的人力资源。\",\n  \"AI assistant for employees\": \"面向员工的 AI 助手\",\n  \"Handoff to human agents\": \"转接人工客服\",\n  \"Document reading (OCR)\": \"文档识别（OCR）\",\n  \"Answers & rules configured by the team\": \"答案与规则由业务团队配置\",\n  \"Analytics & CSAT\": \"分析与满意度（CSAT）\",\n  \"Turn <b>leftover stock into a prioritized production plan</b> — in minutes, not weeks.\": \"把<b>过剩库存变成有优先级的生产计划</b> —— 只需几分钟，而非数周。\",\n  \"Production scenario simulation\": \"生产情景模拟\",\n  \"Bill-of-materials explosion\": \"物料清单（BOM）展开\",\n  \"Savings & feasibility scoring\": \"节省与可行性评分\",\n  \"Self-service SQL over the data lake\": \"面向数据湖的自助 SQL\",\n  \"Export to spreadsheet\": \"导出到表格\",\n  \"<b>AI-personalized 1-to-1 outreach</b> at a scale of thousands — run by the commercial team itself.\": \"<b>AI 一对一个性化触达</b>，规模可达数千 —— 由商务团队自己操盘。\",\n  \"CRM + outreach automation\": \"CRM + 触达自动化\",\n  \"Omnichannel message waves\": \"全渠道消息波次\",\n  \"AI-written copy in the lead's tone\": \"以客户口吻由 AI 撜写文案\",\n  \"Offer & ROI modeling\": \"方案与 ROI 建模\",\n  \"Corporate SSO\": \"企业单点登录（SSO）\",\n  \"An <b>entire contact center</b> — from the on-site widget to queue automation — on a single platform.\": \"一个<b>完整的呼叫中心</b> —— 从网站挂件到队列自动化 —— 全在一个平台上。\",\n  \"Omnichannel webchat\": \"全渠道网页聊天\",\n  \"AI triage bot\": \"AI 分流机器人\",\n  \"Bot → human handoff\": \"机器人 → 人工转接\",\n  \"Agent workspace + supervisor console\": \"坐席工作台 + 主管控制台\",\n  \"Queue automation & CSAT\": \"队列自动化与满意度（CSAT）\",\n  \"From <b>storefront to ERP</b>: tailor-made buying experiences, with your e-commerce's real data.\": \"从<b>门店到 ERP</b>：量身定制的购物体验，用你电商的真实数据驱动。\",\n  \"Catalog & product experiences\": \"目录与商品体验\",\n  \"VTEX / GraphQL integration\": \"VTEX / GraphQL 集成\",\n  \"AI photo studio\": \"AI 影像工作室\",\n  \"ERP & store operations\": \"ERP 与门店运营\",\n  \"A <b>sales copilot</b> that tells each rep the next best action — in natural language.\": \"一个<b>销售副驾</b>，用自然语言告诉每位销售下一步的最佳行动。\",\n  \"Sales copilot in natural language\": \"自然语言销售副驾\",\n  \"Next-best-action recommendation\": \"下一最佳行动推荐\",\n  \"AI search over customers & segments\": \"面向客户与细分的 AI 搜索\",\n  \"Portfolio performance dashboards\": \"客户组合业绩仪表盘\",\n  \"AI content & image generation\": \"AI 内容与图像生成\",\n  \"From <b>live data to an action plan</b> — dashboards the team reads and acts on, no spreadsheet export.\": \"从<b>实时数据到行动计划</b> —— 业务团队看得懂、能行动的仪表盘，无需导出表格。\",\n  \"Executive dashboards on live data\": \"基于实时数据的高管仪表盘\",\n  \"Automated daily ingestion\": \"每日自动数据接入\",\n  \"Targets & action plan tracked\": \"目标与行动计划全程追踪\",\n  \"Alerts & monitoring\": \"告警与监控\",\n  \"Support that <b>answers from the right source</b> — a semantic knowledge base with AI triage.\": \"从<b>正确来源作答</b>的客服 —— 配备语义知识库与 AI 分流。\",\n  \"Semantic-search knowledge base\": \"语义搜索知识库\",\n  \"AI triage & support\": \"AI 分流与客服\",\n  \"Answers grounded in the source\": \"答案有据可依，源自原文\",\n  \"Support analytics\": \"客服分析\",\n  \"<b>Procurement excellence</b>: financial modeling and supply planning, simulated in minutes.\": \"<b>采购卓越</b>：财务建模与供应规划，几分钟即可模拟完成。\",\n  \"Supply planning\": \"供应规划\",\n  \"Financial scenario modeling\": \"财务情景建模\",\n  \"Decision simulators & builders\": \"决策模拟器与构建器\",\n  \"Data-driven sourcing\": \"数据驱动的采购\",\n  \"Across every industry\": \"贯穿每个行业\",\n  \"The same engine, whatever the problem\": \"无论什么问题，都是同一套引擎\",\n  \"AI built in\": \"内置 AI\",\n  \"Detection, classification, generation and vision — in natural language.\": \"检测、分类、生成与视觉 —— 皆以自然语言驱动。\",\n  \"Omnichannel\": \"全渠道\",\n  \"WhatsApp, voice, webchat and email in one flow.\": \"WhatsApp、语音、网页聊天与邮件，统一于一条流程。\",\n  \"Real data + integrations\": \"真实数据 + 集成\",\n  \"Databricks, VTEX, CRMs, SSO — genuinely connected.\": \"Databricks、VTEX、各类 CRM、SSO —— 真正打通连接。\",\n  \"Automation\": \"自动化\",\n  \"Events, webhooks and schedulers reacting in real time.\": \"事件、Webhook 与定时任务，实时响应。\",\n  \"Dashboards\": \"仪表盘\",\n  \"Panels and analytics over the operation's live data.\": \"基于业务实时数据的面板与分析。\",\n  \"No code\": \"无需代码\",\n  \"All assembled in the visual builder — by the business team itself.\": \"全部在可视化构建器中组装 —— 由业务团队亲手完成。\",\n  \"The Suite\": \"套件\",\n  \"Eight products. One system.\": \"八款产品，同一个系统。\",\n  \"8 products · 1 system\": \"8 款产品 · 1 个系统\",\n  \"Interface\": \"界面\",\n  \"Design the app, not a picture of it.\": \"设计真正的应用，而非它的一张图。\",\n  \"Data\": \"数据\",\n  \"Model, store and analyze at scale. Goodbye Lorem Ipsum.\": \"大规模建模、存储与分析。告别占位假数据。\",\n  \"Media\": \"媒体\",\n  \"Optimize and distribute files, in the cloud.\": \"在云端优化与分发文件。\",\n  \"Identity\": \"身份\",\n  \"Full lifecycles, from onboarding to password reset.\": \"完整的生命周期，从注册入门到密码重置。\",\n  \"Integrations\": \"集成\",\n  \"Connect to any external service.\": \"连接任何外部服务。\",\n  \"Domain · AI\": \"领域 · AI\",\n  \"Your model, never hidden in code. Multimodal AI.\": \"你的模型，绝不藏在代码里。多模态 AI。\",\n  \"Automation\": \"自动化\",\n  \"React to events in real time. Webhooks and schedulers.\": \"实时响应事件。Webhook 与定时任务。\",\n  \"Payments\": \"支付\",\n  \"Charge and get paid — any value transaction.\": \"收款与入账 —— 任何价值交易。\",\n  \"Our stack. Our services.\": \"我们的技术栈。我们的服务。\",\n  \"Our Forward Deployed Engineers embed with your area: they learn the pain, prototype and build with you — from first step to production.\": \"我们的前置部署工程师入驻你的部门：读懂痛点，与你一起做原型、共同构建 —— 从第一步到生产上线。\",\n  \"Ideation\": \"创意构思\",\n  \"Prototype\": \"原型\",\n  \"<em>Own</em> your data.\": \"<em>掌控</em>你的数据。\",\n  \"The Data Framework keeps your model and infrastructure under your control — never hidden in code, never hostage to a vendor.\": \"数据框架让你的模型与基础设施始终在你掌控之中 —— 绝不藏于代码，绝不受制于供应商。\",\n  \"Domain-Driven\": \"领域驱动\",\n  \"Single Data Language\": \"统一数据语言\",\n  \"From problem<br>to production.\": \"从问题<br>到生产。\",\n  \"Bring your area's challenge. We turn it into software — in production.\": \"带来你部门的挑战，我们把它变成软件 —— 直接上线生产。\",\n  \"The Digital Expression Suite. From problem to production.\": \"数字表达套件。从问题到生产。\",\n  \"Product\": \"产品\",\n  \"Company\": \"公司\",\n  \"About\": \"关于我们\",\n  \"People\": \"团队\",\n  \"Contact\": \"联系我们\",\n  \"Made on Data². Without a single line of code.\": \"在 Data² 上打造。未写一行代码。\",\n  \"Already in production with\": \"已上线客户\",\n  \"we map where it hurts\": \"我们找出痛点所在\",\n  \"2–4 weeks\": \"2–4 周\",\n  \"sprint with an embedded engineer\": \"工程师入驻的冲刺\",\n  \"In production\": \"上线生产\",\n  \"your team owns it\": \"你的团队主导\"\n};\n    function unesc(s){ return String(s).replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&amp;/g,\"&\"); }\n    var ZH2 = {}; for(var zk in ZH){ ZH2[unesc(zk)] = unesc(ZH[zk]); }\n    var nodes = root.querySelectorAll(\"[data-pt],[data-en]\");\n    function applyLang(l){\n      lang = l;\n      nodes.forEach(function(n){ var v; if(l===\"zh\"){ v=n.getAttribute(\"data-zh\")||ZH2[n.getAttribute(\"data-en\")]||n.getAttribute(\"data-en\"); } else { v=n.getAttribute(\"data-\"+l)||n.getAttribute(\"data-en\"); } if(v!=null) n.innerHTML=v; });\n      root.querySelectorAll(\"#lang button\").forEach(function(b){ b.classList.toggle(\"on\", b.dataset.l===l); });\n    }\n    root.querySelectorAll(\"#lang button\").forEach(function(b){\n      b.addEventListener(\"click\", function(){ applyLang(b.dataset.l); renderProduct(); if(window.__reRenderUni) window.__reRenderUni(); });\n    });\n\n    var nav = root.querySelector(\"#nav\");\n    var burger = root.querySelector(\"#burger\");\n    if(burger) burger.addEventListener(\"click\", function(){ nav.classList.toggle(\"open\"); });\n\n    sc.addEventListener(\"click\", function(e){\n      var a = e.target.closest ? e.target.closest('a[href^=\"#\"]') : null;\n      if(!a) return;\n      var id = a.getAttribute(\"href\").slice(1);\n      if(!id){ e.preventDefault(); return; }\n      var t = root.getElementById ? root.getElementById(id) : root.querySelector(\"#\"+id);\n      if(t){ e.preventDefault(); if(nav) nav.classList.remove(\"open\");\n        sc.scrollTo({ top: Math.max(0, t.offsetTop - 66), behavior: reduce ? \"auto\" : \"smooth\" }); }\n    });\n\n    var secs = [\"hero\",\"essence\",\"glance\",\"proof\",\"levers\",\"products\",\"platform\",\"deliver\",\"cta\"];\n    var rail = root.querySelector(\"#rail\");\n    secs.forEach(function(id){ var a=document.createElement(\"a\"); a.href=\"#\"+id; rail.appendChild(a); });\n    var railDots = rail.querySelectorAll(\"a\");\n    function placeRail(){ rail.style.top = (sc.scrollTop + sc.clientHeight/2) + \"px\"; }\n    sc.addEventListener(\"scroll\", function(){ if(nav) nav.classList.toggle(\"scrolled\", sc.scrollTop>40); placeRail(); }, {passive:true});\n    placeRail();\n\n    if(\"IntersectionObserver\" in window && !reduce){\n      var io = new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add(\"in\"); io.unobserve(e.target); } }); }, {root:sc, threshold:.18});\n      root.querySelectorAll(\".reveal\").forEach(function(el){ io.observe(el); });\n    } else {\n      root.querySelectorAll(\".reveal\").forEach(function(el){ el.classList.add(\"in\"); });\n    }\n    if(\"IntersectionObserver\" in window){\n      var io2 = new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ var i=secs.indexOf(e.target.id); railDots.forEach(function(d2n,di){ d2n.classList.toggle(\"on\", di===i); }); } }); }, {root:sc, threshold:.5});\n      secs.forEach(function(id){ var el=root.querySelector(\"#\"+id); if(el) io2.observe(el); });\n    }\n\n    var PRODUCTS = [\n      {code:\"UI\", color:\"#5b86ff\", what_pt:\"Interface do usuário\", what_en:\"User Interface\", t_pt:\"Design the app, not a picture of it.\", t_en:\"Design the app, not a picture of it.\", d_pt:\"Interface de verdade, com dados reais — não um mockup estático.\", d_en:\"A real interface, with real data — not a static mockup.\"},\n      {code:\"REGISTRY\", color:\"#ff5a4d\", what_pt:\"Seu banco de dados\", what_en:\"Your database\", t_pt:\"Adeus, Lorem Ipsum.\", t_en:\"Say goodbye to Lorem Ipsum.\", d_pt:\"Modele, armazene e analise dados em escala, com uma linguagem única.\", d_en:\"Model, store and analyze data at scale, with a single data language.\"},\n      {code:\"MEDIA\", color:\"#e8e84d\", what_pt:\"Seu storage, na nuvem\", what_en:\"Your storage, in the cloud\", t_pt:\"Arquivos, distribuídos.\", t_en:\"Files, distributed.\", d_pt:\"Todas as ferramentas pra otimizar e distribuir arquivos em escala.\", d_en:\"Every tool you need to optimize and distribute files at scale.\"},\n      {code:\"ID\", color:\"#4de0a1\", what_pt:\"Segurança, identidade e privacidade\", what_en:\"Security, identity & privacy\", t_pt:\"Ciclos de identidade completos.\", t_en:\"Full identity lifecycles.\", d_pt:\"Do onboarding ao reset de senha — em pouquíssimo tempo.\", d_en:\"From onboarding to password reset — in no time.\"},\n      {code:\"CONNECT\", color:\"#4ddfe6\", what_pt:\"APIs e serviços externos\", what_en:\"APIs & external services\", t_pt:\"Conecte-se a qualquer coisa.\", t_en:\"Connect to anything.\", d_pt:\"O framework de aplicação da Data² — seus servidores de back-end.\", d_en:\"Data²'s application framework — your back-end servers.\"},\n      {code:\"DOMAIN\", color:\"#ff4d9e\", what_pt:\"O coração do seu sistema\", what_en:\"The heart of your system\", t_pt:\"Seu modelo, nunca escondido em código.\", t_en:\"Your model, never hidden in code.\", d_pt:\"AI multimodal out-of-the-box, ajustada em linguagem natural. Domain-Driven.\", d_en:\"Multimodal AI out of the box, tuned in natural language. Domain-Driven.\"},\n      {code:\"RUSH\", color:\"#9b5cff\", what_pt:\"Webhooks, requisições, eventos\", what_en:\"Webhooks, requests, events\", t_pt:\"Reaja a eventos em tempo real.\", t_en:\"React to events in real time.\", d_pt:\"Agende, receba e automatize. Automação e monitoramento embutidos.\", d_en:\"Schedule, receive and automate. Automation and monitoring built in.\"},\n      {code:\"CASHIER\", color:\"#84e05a\", what_pt:\"Transações de valor\", what_en:\"Value transactions\", soon:true, t_pt:\"Just charge.\", t_en:\"Just charge.\", d_pt:\"Compre e venda qualquer coisa que dinheiro possa pagar.\", d_en:\"Buy and sell anything money can buy.\"}\n    ];\n    var ring = root.querySelector(\"#ring\");\n    var current = 0;\n    PRODUCTS.forEach(function(p,i){\n      var o = document.createElement(\"div\");\n      o.className = \"orb\"; o.style.color = p.color; o.style.background = p.color;\n      o.setAttribute(\"data-code\", p.code);\n      o.style.animationDelay = (-i*0.5) + \"s\";\n      var ang = (i/PRODUCTS.length)*Math.PI*2 - Math.PI/2, R = 42;\n      o.style.left = (50 + Math.cos(ang)*R) + \"%\";\n      o.style.top  = (50 + Math.sin(ang)*R) + \"%\";\n      o.addEventListener(\"mouseenter\", function(){ current=i; renderProduct(); });\n      o.addEventListener(\"click\", function(){ current=i; renderProduct(); });\n      ring.appendChild(o);\n    });\n    var orbs = ring.querySelectorAll(\".orb\");\n    function renderProduct(){\n      orbs.forEach(function(o,i){ o.classList.toggle(\"on\", i===current); });\n    }\n\n    function initFlow(canvas){\n      var ctx = canvas.getContext && canvas.getContext(\"2d\");\n      if(!ctx) return;\n      var hue = (getComputedStyle(canvas.parentElement).getPropertyValue(\"--hue\")||\"#5b86ff\").trim();\n      var w=0, h=0, dpr = Math.min(window.devicePixelRatio||1, 2);\n      function size(){ w=canvas.clientWidth; h=canvas.clientHeight; if(!w||!h) return; canvas.width=w*dpr; canvas.height=h*dpr; ctx.setTransform(dpr,0,0,dpr,0,0); }\n      size();\n      window.addEventListener(\"resize\", size);\n      var lines = 3;\n      function draw(t){\n        if(!w||!h){ size(); if(!w||!h) return; }\n        ctx.clearRect(0,0,w,h);\n        for(var i=0;i<lines;i++){\n          var yb=h*(0.32+i*0.16), amp=h*0.10+i*8, ph=t*0.00016*(1+i*0.35)+i*1.7;\n          ctx.beginPath();\n          for(var x=0;x<=w;x+=14){ var y=yb+Math.sin(x*0.0045+ph)*amp+Math.sin(x*0.0011-ph*0.7)*amp*0.5; if(x===0) ctx.moveTo(x,y); else ctx.lineTo(x,y); }\n          ctx.strokeStyle=hue; ctx.globalAlpha=0.16-i*0.03; ctx.lineWidth=1.4; ctx.stroke();\n        }\n        ctx.globalAlpha=1;\n      }\n      var raf=null;\n      function loop(t){ draw(t||0); raf=requestAnimationFrame(loop); }\n      if(reduce){ draw(0); }\n      else if(\"IntersectionObserver\" in window){\n        new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting && !raf){ raf=requestAnimationFrame(loop); } else if(!e.isIntersecting && raf){ cancelAnimationFrame(raf); raf=null; } }); }, {root:sc, threshold:.02}).observe(canvas);\n      } else { loop(0); }\n    }\n    root.querySelectorAll(\"canvas.flow\").forEach(initFlow);\n\n    root.querySelectorAll(\".acc-head\").forEach(function(h){\n      h.addEventListener(\"click\", function(){\n        var item=h.parentElement, willOpen=!item.classList.contains(\"open\");\n        root.querySelectorAll(\".acc-item\").forEach(function(it){ it.classList.remove(\"open\"); });\n        if(willOpen) item.classList.add(\"open\");\n      });\n    });\n\n    var hero = root.querySelector(\"#hero\");\n    var hfx = root.querySelector(\".herofx\");\n    if(hfx && hfx.getContext){\n      var hctx = hfx.getContext(\"2d\");\n      var HSTOPS=[[155,92,255],[91,134,255],[77,223,230],[77,224,161],[132,224,90],[232,232,77],[255,106,77],[255,77,158]];\n      var hw=0,hh=0,hdpr=Math.min(window.devicePixelRatio||1,2);\n      var mx=0.5,my=0.42,tx=0.5,ty=0.42,idle=999;\n      function hsize(){ hw=hfx.clientWidth; hh=hfx.clientHeight; if(!hw||!hh)return; hfx.width=hw*hdpr; hfx.height=hh*hdpr; hctx.setTransform(hdpr,0,0,hdpr,0,0); }\n      hsize(); window.addEventListener(\"resize\", hsize);\n      if(hero) hero.addEventListener(\"pointermove\", function(e){ var r=hero.getBoundingClientRect(); tx=(e.clientX-r.left)/r.width; ty=(e.clientY-r.top)/r.height; idle=0; });\n      function wrgb(t){ var p=((t*0.00003)%1)*8; var i=Math.floor(p), f=p-i; var a=HSTOPS[i%8], b=HSTOPS[(i+1)%8]; return [Math.round(a[0]+(b[0]-a[0])*f),Math.round(a[1]+(b[1]-a[1])*f),Math.round(a[2]+(b[2]-a[2])*f)]; }\n      function hdraw(t){\n        if(!hw||!hh){ hsize(); if(!hw||!hh) return; }\n        idle++;\n        if(reduce){ tx=0.5; ty=0.42; }\n        else if(idle>110){ tx=0.5+Math.cos(t*0.00015)*0.18; ty=0.42+Math.sin(t*0.0002)*0.12; }\n        mx+=(tx-mx)*0.045; my+=(ty-my)*0.045;\n        hctx.clearRect(0,0,hw,hh);\n        var c=wrgb(t), gx=mx*hw, gy=my*hh, R=Math.max(hw,hh)*0.55;\n        var g=hctx.createRadialGradient(gx,gy,0,gx,gy,R);\n        g.addColorStop(0,\"rgba(\"+c[0]+\",\"+c[1]+\",\"+c[2]+\",0.11)\");\n        g.addColorStop(0.5,\"rgba(\"+c[0]+\",\"+c[1]+\",\"+c[2]+\",0.04)\");\n        g.addColorStop(1,\"rgba(\"+c[0]+\",\"+c[1]+\",\"+c[2]+\",0)\");\n        hctx.fillStyle=g; hctx.fillRect(0,0,hw,hh);\n        for(var i=0;i<3;i++){ var yb=hh*(0.3+i*0.2), amp=hh*0.07+i*10, ph=t*0.00011*(1+i*0.3)+i*2; hctx.beginPath();\n          for(var x=0;x<=hw;x+=16){ var y=yb+Math.sin(x*0.004+ph)*amp+Math.sin(x*0.0012-ph*0.6)*amp*0.5; if(x===0)hctx.moveTo(x,y); else hctx.lineTo(x,y);} \n          hctx.strokeStyle=\"rgba(255,255,255,\"+(0.05-i*0.012)+\")\"; hctx.lineWidth=1.2; hctx.stroke(); }\n      }\n      if(reduce){ hdraw(0); } else { (function hloop(t){ hdraw(t||0); requestAnimationFrame(hloop); })(0); }\n    }\n\n    var UNIS = [\n  {hue:\"#5b86ff\", name:{pt:\"RH & Pessoas\",en:\"HR & People\",zh:\"人力资源与员工\"}, tagline:{pt:\"Um RH que responde milhares de colaboradores, em vários idiomas — na hora. Cada peça, um módulo Data².\",en:\"An HR that answers thousands of employees, in many languages — instantly. Each piece, a Data² module.\",zh:\"一个能即时回应数千名员工、支持多语言的人力资源 —— 每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m0\", label:{pt:\"Assistente de AI\",en:\"AI assistant\",zh:\"AI 助手\"}, title:{pt:\"Assistente de AI ao colaborador\",en:\"AI assistant for employees\",zh:\"面向员工的 AI 助手\"}, desc:{pt:\"Um assistente que responde dúvidas de RH — benefícios, férias, políticas — em linguagem natural e em vários idiomas, 24/7.\",en:\"An assistant that answers HR questions — benefits, vacation, policies — in natural language and many languages, 24/7.\",zh:\"一个用自然语言、多语言全天候回答人力资源问题（福利、休假、政策）的助手。\"}, points:[{pt:\"Chat com AI treinada nas políticas da empresa\",en:\"Chat with AI trained on company policy\",zh:\"基于公司政策训练的 AI 聊天\"},{pt:\"Respostas ancoradas em documentos internos\",en:\"Answers grounded in internal documents\",zh:\"答案有据可依，源自内部文档\"},{pt:\"Multi-idioma para operações globais\",en:\"Multi-language for global operations\",zh:\"面向全球运营的多语言支持\"},{pt:\"Disponível no portal, WhatsApp e Teams\",en:\"Available on portal, WhatsApp and Teams\",zh:\"支持门户、WhatsApp 与 Teams\"}], oldModel:{pt:\"Colaborador espera dias por uma resposta de RH; o time se afoga em perguntas repetidas.\",en:\"Employees wait days for an HR reply; the team drowns in repeated questions.\",zh:\"员工等待数日才得到人力资源回复；团队被重复问题淹没。\"}, withData2:{pt:\"Resposta na hora, a qualquer hora — e o time de RH foca no que é humano.\",en:\"Instant answers, any time — and the HR team focuses on what's human.\",zh:\"随时即时作答 —— 人力资源团队专注于真正需要人的事。\"}, kpis:[{num:\"24/7\",cap:{pt:\"disponibilidade\",en:\"availability\",zh:\"全天候可用\"}},{num:\"−70%\",cap:{pt:\"perguntas repetidas\",en:\"repeat questions\",zh:\"重复提问\"}}]},\n    {motif:\"m2\", label:{pt:\"Transbordo\",en:\"Handoff\",zh:\"转接\"}, title:{pt:\"Transbordo para atendimento humano\",en:\"Handoff to a human agent\",zh:\"转接人工客服\"}, desc:{pt:\"Quando o caso é sensível, a conversa passa para o analista de RH certo — com todo o histórico.\",en:\"When a case is sensitive, the conversation moves to the right HR analyst — with the full history.\",zh:\"遇到敏感事项时，对话转交给合适的人力资源分析师 —— 携带完整历史。\"}, points:[{pt:\"Escalonamento por assunto e sensibilidade\",en:\"Escalation by topic and sensitivity\",zh:\"按主题与敏感度升级\"},{pt:\"Contexto completo entregue ao analista\",en:\"Full context handed to the analyst\",zh:\"向分析师交付完整上下文\"},{pt:\"Fila e status de atendimento\",en:\"Queue and handling status\",zh:\"队列与处理状态\"},{pt:\"Confidencialidade por perfil de acesso\",en:\"Confidentiality by access profile\",zh:\"按访问权限保密\"}], oldModel:{pt:\"Casos delicados se perdem em e-mails; ninguém sabe quem está tratando o quê.\",en:\"Delicate cases get lost in email; no one knows who is handling what.\",zh:\"敏感事项淹没在邮件里；无人知晓谁在处理什么。\"}, withData2:{pt:\"Cada caso vai para a pessoa certa, com contexto e rastreabilidade.\",en:\"Each case reaches the right person, with context and traceability.\",zh:\"每个事项都送达对的人，带上下文与可追溯。\"}, kpis:[{num:\"100%\",cap:{pt:\"contexto preservado\",en:\"context preserved\",zh:\"上下文保留\"}}]},\n    {motif:\"m3\", label:{pt:\"Leitura de docs\",en:\"Doc reading\",zh:\"文档识别\"}, title:{pt:\"Leitura de documentos (OCR)\",en:\"Document reading (OCR)\",zh:\"文档识别（OCR）\"}, desc:{pt:\"Atestados, comprovantes e formulários lidos automaticamente pela AI — sem digitação manual.\",en:\"Certificates, receipts and forms read automatically by AI — no manual typing.\",zh:\"证明、凭证与表单由 AI 自动识别 —— 无需人工录入。\"}, points:[{pt:\"Extração de dados de imagens e PDFs\",en:\"Data extraction from images and PDFs\",zh:\"从图像与 PDF 中提取数据\"},{pt:\"Validação automática de campos\",en:\"Automatic field validation\",zh:\"字段自动校验\"},{pt:\"Classificação do tipo de documento\",en:\"Document-type classification\",zh:\"文档类型分类\"},{pt:\"Arquivo seguro no storage da empresa\",en:\"Secure filing in company storage\",zh:\"安全归档至公司存储\"}], oldModel:{pt:\"Alguém relê cada atestado e redigita à mão — lento e sujeito a erro.\",en:\"Someone rereads each certificate and retypes it by hand — slow and error-prone.\",zh:\"有人逐一重读证明并手动录入 —— 缓慢且易错。\"}, withData2:{pt:\"A AI lê, valida e arquiva em segundos.\",en:\"AI reads, validates and files in seconds.\",zh:\"AI 数秒内完成识别、校验与归档。\"}, kpis:[{num:\"−90%\",cap:{pt:\"tempo de digitação\",en:\"data-entry time\",zh:\"录入时间\"}}]},\n    {motif:\"m1\", label:{pt:\"Regras\",en:\"Rules\",zh:\"规则\"}, title:{pt:\"Respostas e regras configuráveis pela área\",en:\"Answers & rules configured by the team\",zh:\"答案与规则由业务团队配置\"}, desc:{pt:\"O próprio RH ajusta respostas, fluxos e políticas — sem depender de TI ou de código.\",en:\"HR itself adjusts answers, flows and policies — with no dependency on IT or code.\",zh:\"人力资源团队自行调整答案、流程与政策 —— 无需依赖 IT 或代码。\"}, points:[{pt:\"Editor de respostas e fluxos sem código\",en:\"No-code answer and flow editor\",zh:\"无代码的答案与流程编辑器\"},{pt:\"Regras por país, área e cargo\",en:\"Rules by country, area and role\",zh:\"按国家、部门与岗位设置规则\"},{pt:\"Versões e publicação controladas\",en:\"Versioning and controlled publishing\",zh:\"版本管理与受控发布\"},{pt:\"Testes antes de ir ao ar\",en:\"Tested before going live\",zh:\"上线前测试\"}], oldModel:{pt:\"Cada mudança de política vira um chamado de TI que demora semanas.\",en:\"Every policy change becomes an IT ticket that takes weeks.\",zh:\"每次政策变更都变成耗时数周的 IT 工单。\"}, withData2:{pt:\"A área muda a regra e publica no mesmo dia.\",en:\"The team changes the rule and ships the same day.\",zh:\"业务团队当天即可修改规则并发布。\"}, kpis:[{num:\"0\",cap:{pt:\"dependência de código\",en:\"code dependency\",zh:\"代码依赖\"}}]},\n    {motif:\"m4\", label:{pt:\"Analytics & CSAT\",en:\"Analytics & CSAT\",zh:\"分析与 CSAT\"}, title:{pt:\"Analytics e CSAT\",en:\"Analytics & CSAT\",zh:\"分析与满意度（CSAT）\"}, desc:{pt:\"Painéis mostram volume, temas, tempo de resposta e satisfação — para melhorar continuamente.\",en:\"Dashboards show volume, topics, response time and satisfaction — to improve continuously.\",zh:\"仪表盘呈现工单量、主题、响应时间与满意度 —— 持续改进。\"}, points:[{pt:\"Métricas de volume e tempo de resposta\",en:\"Volume and response-time metrics\",zh:\"工单量与响应时间指标\"},{pt:\"Temas mais perguntados\",en:\"Most-asked topics\",zh:\"最常被问的主题\"},{pt:\"Pesquisa de satisfação (CSAT)\",en:\"Satisfaction survey (CSAT)\",zh:\"满意度调查（CSAT）\"},{pt:\"Alertas de picos e gargalos\",en:\"Alerts for spikes and bottlenecks\",zh:\"峰值与瓶颈告警\"}], oldModel:{pt:\"Ninguém sabe o que mais consome o RH; decisão no achismo.\",en:\"No one knows what consumes HR most; decisions by guesswork.\",zh:\"无人知晓什么最耗费人力资源精力；决策靠猜。\"}, withData2:{pt:\"Dados mostram onde agir — e a experiência do colaborador melhora.\",en:\"Data shows where to act — and the employee experience improves.\",zh:\"数据指明行动方向 —— 员工体验随之提升。\"}, kpis:[{num:\"+CSAT\",cap:{pt:\"satisfação medida\",en:\"satisfaction measured\",zh:\"满意度可量\"}}]}\n  ]},\n  {hue:\"#4de0a1\", name:{pt:\"Supply & Operações\",en:\"Supply & Operations\",zh:\"供应链与运营\"}, tagline:{pt:\"Transformar sobra de estoque em plano de produção priorizado — em minutos, não semanas. Cada peça, um módulo Data².\",en:\"Turn leftover stock into a prioritized production plan — in minutes, not weeks. Each piece, a Data² module.\",zh:\"把过剩库存变成有优先级的生产计划 —— 只需几分钟，而非数周。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m6\", label:{pt:\"Cenários\",en:\"Scenarios\",zh:\"情景\"}, title:{pt:\"Simulação de cenários de produção\",en:\"Production scenario simulation\",zh:\"生产情景模拟\"}, desc:{pt:\"Rode dezenas de cenários 'e se' sobre o dado real de estoque e demanda — e compare resultados lado a lado.\",en:\"Run dozens of 'what-if' scenarios over real stock and demand data — and compare results side by side.\",zh:\"基于真实库存与需求数据运行数十种'假设'情景 —— 并逐一对比结果。\"}, points:[{pt:\"Parâmetros ajustáveis pela área\",en:\"Parameters adjustable by the team\",zh:\"参数由业务团队调整\"},{pt:\"Cálculo sobre dado vivo do data lake\",en:\"Computed over live data-lake data\",zh:\"基于数据湖实时数据计算\"},{pt:\"Comparação de cenários lado a lado\",en:\"Side-by-side scenario comparison\",zh:\"情景并排对比\"},{pt:\"Do cenário ao plano em um clique\",en:\"From scenario to plan in one click\",zh:\"一键从情景到计划\"}], oldModel:{pt:\"Cada simulação é uma planilha nova, feita à mão — e ninguém confia no número.\",en:\"Each simulation is a new hand-made spreadsheet — and no one trusts the number.\",zh:\"每次模拟都是一张新的手工表格 —— 没人信得过那个数字。\"}, withData2:{pt:\"Cenários em minutos sobre o dado real, comparáveis e auditáveis.\",en:\"Scenarios in minutes over real data, comparable and auditable.\",zh:\"几分钟内基于真实数据生成情景，可对比、可审计。\"}, kpis:[{num:\"5min\",cap:{pt:\"por cenário\",en:\"per scenario\",zh:\"每个情景\"}}]},\n    {motif:\"m3\", label:{pt:\"Estrutura (BOM)\",en:\"BOM\",zh:\"物料清单\"}, title:{pt:\"Explosão de estrutura (BOM)\",en:\"Bill-of-materials explosion\",zh:\"物料清单（BOM）展开\"}, desc:{pt:\"A partir de um produto, o Rush explode toda a árvore de componentes — recursivamente, com quantidades.\",en:\"From a product, Rush explodes the whole component tree — recursively, with quantities.\",zh:\"从一个成品出发，Rush 递归展开整棵组件树 —— 带数量。\"}, points:[{pt:\"Explosão recursiva multi-nível\",en:\"Recursive multi-level explosion\",zh:\"多层级递归展开\"},{pt:\"Quantidades e perdas por etapa\",en:\"Quantities and losses per step\",zh:\"每步的用量与损耗\"},{pt:\"Disponibilidade cruzada com estoque\",en:\"Cross-checked with stock availability\",zh:\"与库存可用量交叉核对\"},{pt:\"Reprocessamento em tempo real\",en:\"Real-time recomputation\",zh:\"实时重算\"}], oldModel:{pt:\"Explodir uma BOM à mão leva dias e erra — e some quando o engenheiro sai.\",en:\"Exploding a BOM by hand takes days and errs — and vanishes when the engineer leaves.\",zh:\"手工展开 BOM 耗时数天且易错 —— 工程师一走就没了。\"}, withData2:{pt:\"A estrutura explode sozinha, com quantidades e disponibilidade, em segundos.\",en:\"The structure explodes itself, with quantities and availability, in seconds.\",zh:\"结构自动展开，带数量与可用量，只需数秒。\"}, kpis:[{num:\"−95%\",cap:{pt:\"tempo de cálculo\",en:\"calc time\",zh:\"计算时间\"}}]},\n    {motif:\"m1\", label:{pt:\"Score\",en:\"Score\",zh:\"评分\"}, title:{pt:\"Score de economia e viabilidade\",en:\"Savings & feasibility scoring\",zh:\"节省与可行性评分\"}, desc:{pt:\"Cada plano recebe um score de economia potencial e de viabilidade — para priorizar o que vale a pena.\",en:\"Each plan gets a score for potential savings and feasibility — to prioritize what's worth it.\",zh:\"每个计划都获得潜在节省与可行性评分 —— 优先执行最值得的方案。\"}, points:[{pt:\"Score de economia por cenário\",en:\"Savings score per scenario\",zh:\"每情景节省评分\"},{pt:\"Viabilidade por restrição de capacidade\",en:\"Feasibility by capacity constraints\",zh:\"按产能约束评估可行性\"},{pt:\"Ranking automático de prioridade\",en:\"Automatic priority ranking\",zh:\"自动优先级排序\"},{pt:\"Regras de negócio configuráveis\",en:\"Configurable business rules\",zh:\"可配置业务规则\"}], oldModel:{pt:\"Prioridade definida por intuição; oportunidades de economia passam batido.\",en:\"Priority set by intuition; savings opportunities slip by.\",zh:\"优先级靠直觉；节省机会白白溜走。\"}, withData2:{pt:\"O sistema ranqueia por economia e viabilidade — a área age no que rende mais.\",en:\"The system ranks by savings and feasibility — the team acts on what pays most.\",zh:\"系统按节省与可行性排序 —— 团队优先处理最有回报的。\"}, kpis:[{num:\"×10\",cap:{pt:\"oportunidades vistas\",en:\"opportunities surfaced\",zh:\"发现的机会\"}}]},\n    {motif:\"m2\", label:{pt:\"SQL self-service\",en:\"Self-service SQL\",zh:\"自助 SQL\"}, title:{pt:\"SQL self-service sobre o data lake\",en:\"Self-service SQL over the data lake\",zh:\"面向数据湖的自助 SQL\"}, desc:{pt:\"A área consulta o data lake direto — em SQL ou em linguagem natural — sem abrir chamado para o time de dados.\",en:\"The team queries the data lake directly — in SQL or natural language — with no ticket to the data team.\",zh:\"业务团队直接查询数据湖 —— 用 SQL 或自然语言 —— 无需向数据团队开工单。\"}, points:[{pt:\"Conexão governada ao data lake (Databricks)\",en:\"Governed connection to the data lake (Databricks)\",zh:\"受治理地连接数据湖（Databricks）\"},{pt:\"Consulta em SQL ou linguagem natural\",en:\"Query in SQL or natural language\",zh:\"用 SQL 或自然语言查询\"},{pt:\"Resultados em tabela e gráfico\",en:\"Results as table and chart\",zh:\"结果以表格与图表呈现\"},{pt:\"Permissões por perfil de acesso\",en:\"Permissions by access profile\",zh:\"按访问权限授权\"}], oldModel:{pt:\"Toda pergunta vira chamado para o time de dados; a resposta chega dias depois.\",en:\"Every question becomes a ticket to the data team; the answer arrives days later.\",zh:\"每个问题都变成给数据团队的工单；答案数天后才到。\"}, withData2:{pt:\"A própria área pergunta e recebe na hora — sem fila, com governança.\",en:\"The team asks and gets it instantly — no queue, with governance.\",zh:\"业务团队自行提问即时得到结果 —— 无排队、有治理。\"}, kpis:[{num:\"0\",cap:{pt:\"chamados ao time de dados\",en:\"tickets to the data team\",zh:\"给数据团队的工单\"}}]},\n    {motif:\"m7\", label:{pt:\"Exportação\",en:\"Export\",zh:\"导出\"}, title:{pt:\"Exportação para planilha\",en:\"Export to spreadsheet\",zh:\"导出到表格\"}, desc:{pt:\"Qualquer plano ou consulta vira planilha ou relatório com um clique — para compartilhar com quem ainda vive no Excel.\",en:\"Any plan or query becomes a spreadsheet or report in one click — to share with whoever still lives in Excel.\",zh:\"任何计划或查询一键变成表格或报表 —— 分享给仍离不开 Excel 的人。\"}, points:[{pt:\"Export em um clique (XLSX/CSV)\",en:\"One-click export (XLSX/CSV)\",zh:\"一键导出（XLSX/CSV）\"},{pt:\"Relatórios formatados prontos\",en:\"Ready formatted reports\",zh:\"格式化报表即取即用\"},{pt:\"Agendamento de envios recorrentes\",en:\"Scheduled recurring sends\",zh:\"定时循环发送\"},{pt:\"Histórico de versões exportadas\",en:\"Version history of exports\",zh:\"导出版本历史\"}], oldModel:{pt:\"Copiar e colar entre sistemas e planilhas — retrabalho e erro garantidos.\",en:\"Copy-paste between systems and spreadsheets — guaranteed rework and error.\",zh:\"在系统与表格间复制粘贴 —— 返工与错误在所难免。\"}, withData2:{pt:\"Um clique gera a planilha certa, sempre atualizada.\",en:\"One click generates the right spreadsheet, always up to date.\",zh:\"一键生成正确的表格，始终最新。\"}, kpis:[{num:\"1\",cap:{pt:\"clique para exportar\",en:\"click to export\",zh:\"点击即导出\"}}]}\n  ]},\n  {hue:\"#e8b84d\", name:{pt:\"Serviços Financeiros\",en:\"Financial Services\",zh:\"金融服务\"}, tagline:{pt:\"Prospecção 1-a-1 personalizada por AI, em escala de milhares — operada pelo próprio time comercial. Cada peça, um módulo Data².\",en:\"AI-personalized 1-to-1 outreach at a scale of thousands — run by the commercial team itself. Each piece, a Data² module.\",zh:\"AI 一对一个性化触达，规模可达数千 —— 由商务团队自己操盘。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m3\", label:{pt:\"CRM + outreach\",en:\"CRM + outreach\",zh:\"CRM + 触达\"}, title:{pt:\"CRM + automação de outreach\",en:\"CRM + outreach automation\",zh:\"CRM + 触达自动化\"}, desc:{pt:\"Um CRM próprio da área com automação de prospecção — leads, estágios e cadências, tudo num sistema só.\",en:\"The team's own CRM with outreach automation — leads, stages and cadences, all in one system.\",zh:\"业务团队自有的 CRM，内置触达自动化 —— 线索、阶段与节奏，尽在一个系统。\"}, points:[{pt:\"Base de leads com estágios e dono\",en:\"Lead base with stages and owner\",zh:\"含阶段与负责人的线索库\"},{pt:\"Cadências de contato automatizadas\",en:\"Automated contact cadences\",zh:\"自动化联系节奏\"},{pt:\"Regras de disparo por evento (Rush)\",en:\"Event-triggered sending (Rush)\",zh:\"按事件触发发送（Rush）\"},{pt:\"Histórico completo por lead\",en:\"Full history per lead\",zh:\"每条线索完整历史\"}], oldModel:{pt:\"Prospecção em planilha + envio manual — sem escala e sem rastreio.\",en:\"Outreach in a spreadsheet + manual sending — no scale, no tracking.\",zh:\"用表格做触达 + 手动发送 —— 无规模、无追踪。\"}, withData2:{pt:\"O CRM dispara a cadência certa sozinho e registra tudo.\",en:\"The CRM fires the right cadence on its own and logs everything.\",zh:\"CRM 自动触发正确节奏并记录一切。\"}, kpis:[{num:\"1000s\",cap:{pt:\"leads em cadência\",en:\"leads in cadence\",zh:\"进入节奏的线索\"}}]},\n    {motif:\"m1\", label:{pt:\"Ondas omnichannel\",en:\"Omnichannel waves\",zh:\"全渠道波次\"}, title:{pt:\"Ondas de mensagens omnichannel\",en:\"Omnichannel message waves\",zh:\"全渠道消息波次\"}, desc:{pt:\"Campanhas em ondas por e-mail, WhatsApp e SMS — com controle de volume, horário e resposta.\",en:\"Wave campaigns over email, WhatsApp and SMS — with control of volume, timing and reply.\",zh:\"通过邮件、WhatsApp 与短信分波次投放 —— 掌控数量、时机与回复。\"}, points:[{pt:\"Disparo em ondas com controle de volume\",en:\"Wave sending with volume control\",zh:\"分波次发送并控制数量\"},{pt:\"E-mail, WhatsApp e SMS no mesmo fluxo\",en:\"Email, WhatsApp and SMS in one flow\",zh:\"邮件、WhatsApp 与短信统一流程\"},{pt:\"Janela de horário e frequência\",en:\"Time window and frequency\",zh:\"时间窗口与频次\"},{pt:\"Captura de respostas de volta ao CRM\",en:\"Replies captured back into the CRM\",zh:\"回复自动回流至 CRM\"}], oldModel:{pt:\"Disparo em massa único, sem ritmo — vira spam e queima a base.\",en:\"A single mass blast, no rhythm — becomes spam and burns the base.\",zh:\"一次性群发、毫无节奏 —— 沦为垃圾信息并烧毁客户池。\"}, withData2:{pt:\"Ondas ritmadas e multicanal — mais entrega, menos queima.\",en:\"Paced, multichannel waves — more delivery, less burn.\",zh:\"有节奏的多渠道波次 —— 送达更高、损耗更低。\"}, kpis:[{num:\"3\",cap:{pt:\"canais num fluxo\",en:\"channels in one flow\",zh:\"渠道合一\"}}]},\n    {motif:\"m5\", label:{pt:\"Copy por AI\",en:\"AI copy\",zh:\"AI 文案\"}, title:{pt:\"Copy gerada por AI no tom do lead\",en:\"AI-written copy in the lead's tone\",zh:\"以客户口吻由 AI 撰写文案\"}, desc:{pt:\"A AI escreve cada mensagem no tom e no contexto de cada lead — personalização real, não 'Olá [NOME]'.\",en:\"AI writes each message in each lead's tone and context — real personalization, not 'Hi [NAME]'.\",zh:\"AI 依据每位客户的语气与情境撰写每条消息 —— 真正的个性化，而非'你好 [姓名]'。\"}, points:[{pt:\"Geração de copy por AI multimodal\",en:\"Copy generation via multimodal AI\",zh:\"多模态 AI 生成文案\"},{pt:\"Personalização por perfil e histórico\",en:\"Personalization by profile and history\",zh:\"按画像与历史个性化\"},{pt:\"Tom e idioma ajustáveis\",en:\"Adjustable tone and language\",zh:\"可调语气与语言\"},{pt:\"Aprovação humana antes do envio\",en:\"Human approval before sending\",zh:\"发送前人工审批\"}], oldModel:{pt:\"Template único para todos — genérico, ignorado, baixa resposta.\",en:\"One template for everyone — generic, ignored, low reply.\",zh:\"所有人一个模板 —— 千篇一律、被无视、回复率低。\"}, withData2:{pt:\"Cada lead recebe uma mensagem que parece escrita só para ele.\",en:\"Each lead gets a message that feels written just for them.\",zh:\"每位客户收到的消息，仿佛专为他而写。\"}, kpis:[{num:\"+2×\",cap:{pt:\"taxa de resposta\",en:\"reply rate\",zh:\"回复率\"}}]},\n    {motif:\"m6\", label:{pt:\"Proposta & ROI\",en:\"Offer & ROI\",zh:\"方案与 ROI\"}, title:{pt:\"Modelagem de proposta e ROI\",en:\"Offer & ROI modeling\",zh:\"方案与 ROI 建模\"}, desc:{pt:\"Simule propostas e mostre o ROI para o cliente na hora — números que fecham negócio.\",en:\"Simulate offers and show the client the ROI on the spot — numbers that close deals.\",zh:\"即时模拟方案并向客户展示 ROI —— 用数字促成交易。\"}, points:[{pt:\"Simulador de proposta com parâmetros\",en:\"Offer simulator with parameters\",zh:\"带参数的方案模拟器\"},{pt:\"Cálculo de ROI e payback\",en:\"ROI and payback calculation\",zh:\"ROI 与回收期计算\"},{pt:\"Comparação de opções para o cliente\",en:\"Option comparison for the client\",zh:\"为客户对比多种选项\"},{pt:\"Proposta exportável em PDF\",en:\"Offer exportable to PDF\",zh:\"方案可导出 PDF\"}], oldModel:{pt:\"Proposta feita à mão depois da reunião — o timing passa e o lead esfria.\",en:\"Offer built by hand after the meeting — the timing passes and the lead cools.\",zh:\"会后手工制作方案 —— 时机已过，客户变冷。\"}, withData2:{pt:\"Proposta e ROI na hora, dentro da conversa — o lead decide quente.\",en:\"Offer and ROI on the spot, inside the conversation — the lead decides while hot.\",zh:\"对话中即时给出方案与 ROI —— 趁热促成决策。\"}, kpis:[{num:\"1\",cap:{pt:\"reunião para fechar\",en:\"meeting to close\",zh:\"一次会议成交\"}}]},\n    {motif:\"m2\", label:{pt:\"SSO\",en:\"SSO\",zh:\"单点登录\"}, title:{pt:\"SSO corporativo\",en:\"Corporate SSO\",zh:\"企业单点登录（SSO）\"}, desc:{pt:\"Login integrado ao provedor de identidade da empresa — seguro, auditável e sem senha nova.\",en:\"Login integrated with the company's identity provider — secure, auditable, no new password.\",zh:\"与企业身份提供商集成的登录 —— 安全、可审计、无需新密码。\"}, points:[{pt:\"Integração com IdP corporativo (SSO/SAML/OAuth)\",en:\"Corporate IdP integration (SSO/SAML/OAuth)\",zh:\"对接企业 IdP（SSO/SAML/OAuth）\"},{pt:\"Perfis e permissões por papel\",en:\"Roles and permissions by profile\",zh:\"按角色的权限配置\"},{pt:\"Trilhas de auditoria de acesso\",en:\"Access audit trails\",zh:\"访问审计日志\"},{pt:\"Provisionamento e revogação central\",en:\"Central provisioning and revocation\",zh:\"集中开通与撤销\"}], oldModel:{pt:\"Mais um sistema, mais uma senha — e um buraco de segurança e compliance.\",en:\"One more system, one more password — and a security and compliance hole.\",zh:\"又一个系统、又一个密码 —— 还多一个安全与合规漏洞。\"}, withData2:{pt:\"Entra com a identidade da empresa — seguro e auditável desde o primeiro dia.\",en:\"Sign in with the company identity — secure and auditable from day one.\",zh:\"用企业身份登录 —— 从第一天起即安全可审计。\"}, kpis:[{num:\"SSO\",cap:{pt:\"sem senha nova\",en:\"no new password\",zh:\"无需新密码\"}}]}\n  ]},\n  {hue:\"#4ddfe6\", name:{pt:\"CX & Contact Center\",en:\"CX & Contact Center\",zh:\"客户体验与呼叫中心\"}, tagline:{pt:\"Um contact center inteiro, funcionando como um sistema vivo — cada componente é um módulo Data². Passe o mouse. Role para os detalhes.\",en:\"An entire contact center, running as a living system — each component is a Data² module. Hover. Scroll for the details.\",zh:\"一个完整的呼叫中心，如同一个活的系统在运行 —— 每个组件都是一个 Data² 模块。悬停查看，下滚了解详情。\"}, layout:[[108,86],[345,38],[355,236],[612,84],[556,246]], comps:[\n    {motif:\"m0\", label:{pt:\"Webchat\",en:\"Webchat\",zh:\"网页聊天\"}, title:{pt:\"Webchat omnichannel\",en:\"Omnichannel webchat\",zh:\"全渠道网页聊天\"}, desc:{pt:\"Um widget no seu site conversa no mesmo fluxo que WhatsApp, voz e e-mail. O cliente começa onde quiser e a conversa nunca se perde.\",en:\"A widget on your site talks in the same flow as WhatsApp, voice and email. Customers start anywhere and the conversation is never lost.\",zh:\"网站挂件与 WhatsApp、语音和邮件处于同一流程。客户可从任何渠道开始，对话永不丢失。\"}, points:[{pt:\"Widget embutido via iframe + websockets\",en:\"Embedded widget via iframe + websockets\",zh:\"通过 iframe + websockets 嵌入挂件\"},{pt:\"Ponte com provedor de mensageria e voz (CPaaS)\",en:\"Bridge to a messaging/voice provider (CPaaS)\",zh:\"对接消息/语音服务商（CPaaS）\"},{pt:\"Sessões, mensagens e transferências unificadas por cliente\",en:\"Sessions, messages and transfers unified per customer\",zh:\"按客户统一会话、消息与转接\"},{pt:\"Continuidade de contexto ao trocar de canal\",en:\"Context continuity across channels\",zh:\"跨渠道保持上下文连续\"}], oldModel:{pt:\"Canais soltos, sem histórico compartilhado. O cliente repete tudo a cada troca; o atendente trabalha às cegas.\",en:\"Disconnected channels, no shared history. Customers repeat everything on each switch; agents work blind.\",zh:\"渠道割裂、无共享历史。客户每次切换都要重复，坐席只能盲目应对。\"}, withData2:{pt:\"Um só fluxo, um só histórico. Menos repetição, respostas mais rápidas, e o cliente começa onde for mais fácil.\",en:\"One flow, one history. Less repetition, faster answers, and customers start wherever is easiest.\",zh:\"统一流程、统一历史。更少重复、更快响应，客户从最方便的渠道开始。\"}, kpis:[{num:\"100k+\",cap:{pt:\"atendimentos/dia\",en:\"interactions/day\",zh:\"次服务/天\"}}]},\n    {motif:\"m1\", label:{pt:\"Bot de triagem\",en:\"Triage bot\",zh:\"分流机器人\"}, title:{pt:\"Bot de triagem com AI\",en:\"AI triage bot\",zh:\"AI 分流机器人\"}, desc:{pt:\"A AI entende a intenção, resolve na hora o que é simples e classifica o resto para a fila certa — antes de qualquer humano tocar.\",en:\"AI reads intent, instantly resolves the simple, and routes the rest to the right queue — before any human touches it.\",zh:\"AI 理解意图，即时解决简单问题，并将其余分流到正确队列 —— 无需任何人工介入。\"}, points:[{pt:\"Detecção de caso de uso por AI\",en:\"AI use-case detection\",zh:\"AI 用例识别\"},{pt:\"Fluxos guiados: cancelamento, troca, reembolso, atraso\",en:\"Guided flows: cancel, exchange, refund, delay\",zh:\"引导式流程：取消、换货、退款、延迟\"},{pt:\"Leitura de imagem e classificação de texto livre\",en:\"Image reading and free-text classification\",zh:\"图像识别与自由文本分类\"},{pt:\"Abertura de ticket no CRM externo\",en:\"Ticket creation in the external CRM\",zh:\"在外部 CRM 中创建工单\"}], oldModel:{pt:\"Todo contato cai na fila humana, até os triviais. A fila cresce e o custo por contato dispara.\",en:\"Every contact hits the human queue, even trivial ones. The queue grows and cost-per-contact soars.\",zh:\"所有联系都进入人工队列，连琐事也是。队列膨胀，单次联系成本飙升。\"}, withData2:{pt:\"A AI resolve o repetitivo na hora e só encaminha o que precisa de gente — menos fila, menos custo, 24/7.\",en:\"AI resolves the repetitive instantly and only routes what needs a human — less queue, less cost, 24/7.\",zh:\"AI 即时解决重复问题，只转交需人工的部分 —— 更短队列、更低成本、7×24。\"}, kpis:[{num:\"−50%\",cap:{pt:\"tempo de resolução\",en:\"resolution time\",zh:\"解决时间\"}}]},\n    {motif:\"m2\", label:{pt:\"Transbordo\",en:\"Handoff\",zh:\"转接\"}, title:{pt:\"Transbordo bot → humano\",en:\"Bot → human handoff\",zh:\"机器人 → 人工转接\"}, desc:{pt:\"Quando o humano precisa entrar, entra com todo o histórico e o contexto na mão. Zero 'reconte tudo de novo'.\",en:\"When a human is needed, they step in with the full history and context in hand. Zero 'tell me everything again'.\",zh:\"当需要人工时，坐席携带完整历史与上下文接手。无需'重新说一遍'。\"}, points:[{pt:\"Handoff com histórico e contexto completos\",en:\"Handoff with full history and context\",zh:\"携带完整历史与上下文的转接\"},{pt:\"Transferência entre filas e times\",en:\"Transfer across queues and teams\",zh:\"跨队列与团队转接\"},{pt:\"Detecção de inatividade e abandono\",en:\"Inactivity and abandonment detection\",zh:\"闲置与弃单检测\"},{pt:\"Respostas prontas + atalhos do atendente\",en:\"Canned replies + agent shortcuts\",zh:\"预设回复 + 坐席快捷方式\"}], oldModel:{pt:\"A passagem pro humano perde o contexto. 'Me conta tudo de novo' vira regra e a satisfação despenca.\",en:\"The handoff loses context. 'Tell me everything again' becomes the rule and satisfaction drops.\",zh:\"转人工时丢失上下文。'请再说一遍'成常态，满意度骤降。\"}, withData2:{pt:\"O atendente entra com histórico e contexto completos. Transição invisível pro cliente.\",en:\"The agent steps in with full history and context. An invisible transition for the customer.\",zh:\"坐席携带完整历史与上下文接手。对客户而言，转接无感。\"}, kpis:[{num:\"100%\",cap:{pt:\"do contexto preservado\",en:\"context preserved\",zh:\"上下文保留\"}}]},\n    {motif:\"m3\", label:{pt:\"Console\",en:\"Console\",zh:\"控制台\"}, title:{pt:\"Console de agente + supervisor\",en:\"Agent workspace + supervisor console\",zh:\"坐席工作台 + 主管控制台\"}, desc:{pt:\"Fila, transferências, status dos agentes e supervisão ao vivo — tudo num painel só, sobre o dado real da operação.\",en:\"Queue, transfers, agent status and live supervision — all in one console, over the operation's real data.\",zh:\"队列、转接、坐席状态与实时督导 —— 全部集于一个控制台，基于运营真实数据。\"}, points:[{pt:\"Workspace do agente: status, presets, chatrooms\",en:\"Agent workspace: status, presets, chatrooms\",zh:\"坐席工作台：状态、预设、聊天室\"},{pt:\"Console do supervisor: fila e métricas ao vivo\",en:\"Supervisor console: live queue and metrics\",zh:\"主管控制台：实时队列与指标\"},{pt:\"Classificação de transferências\",en:\"Transfer classification\",zh:\"转接分类\"},{pt:\"Fechamentos mensais e sync de metadados\",en:\"Monthly closings and metadata sync\",zh:\"月度结算与元数据同步\"}], oldModel:{pt:\"Supervisão por planilha e telas espalhadas. Ninguém enxerga a operação ao vivo; decisão no achismo.\",en:\"Supervision by spreadsheet and scattered screens. No one sees the live operation; decisions by guesswork.\",zh:\"靠表格与零散界面督导。无人实时掌控，决策靠猜。\"}, withData2:{pt:\"Uma tela com fila, status, transferências e métricas ao vivo — decisão sobre o dado real.\",en:\"One screen with live queue, status, transfers and metrics — decisions on real data.\",zh:\"一屏掌握实时队列、状态、转接与指标 —— 基于真实数据决策。\"}, kpis:[{num:\"1\",cap:{pt:\"tela para toda a operação\",en:\"screen for the whole operation\",zh:\"一屏掌控全局\"}}]},\n    {motif:\"m4\", label:{pt:\"Filas & CSAT\",en:\"Queues & CSAT\",zh:\"队列与 CSAT\"}, title:{pt:\"Automação de filas & CSAT\",en:\"Queue automation & CSAT\",zh:\"队列自动化与满意度（CSAT）\"}, desc:{pt:\"Filas que se auto-gerenciam: detecção de abandono, repriorização e pesquisa de satisfação disparada na hora certa.\",en:\"Self-managing queues: abandonment detection, re-prioritization and CSAT surveys fired at the right moment.\",zh:\"自我管理的队列：弃单检测、重新优先级排序，并在恰当时机发起满意度调查。\"}, points:[{pt:\"Agendadores (Rush) mantêm a fila saudável\",en:\"Schedulers (Rush) keep the queue healthy\",zh:\"调度器（Rush）维持队列健康\"},{pt:\"Detecção de abandono + auto-cura da fila\",en:\"Abandonment detection + queue self-healing\",zh:\"弃单检测 + 队列自愈\"},{pt:\"CSAT disparado no momento certo\",en:\"CSAT fired at the right moment\",zh:\"在恰当时机发起 CSAT\"},{pt:\"Analytics de custo por caso de uso + export\",en:\"Cost analytics by use-case + export\",zh:\"按用例的成本分析 + 导出\"}], oldModel:{pt:\"Filas travadas por transferências esquecidas e abandono não detectado. Satisfação medida tarde ou nunca.\",en:\"Queues stuck by forgotten transfers and undetected abandonment. Satisfaction measured late, or never.\",zh:\"队列被遗忘的转接与未检测的弃单拖垮。满意度测得太晚，甚至从不测。\"}, withData2:{pt:\"Rush mantém a fila saudável sozinho e dispara o CSAT na hora certa — melhoria contínua com dado.\",en:\"Rush keeps the queue healthy on its own and fires CSAT at the right time — continuous improvement, data-driven.\",zh:\"Rush 自动维持队列健康，并在恰当时机发起 CSAT —— 数据驱动的持续改进。\"}, kpis:[{num:\"85%\",cap:{pt:\"retenção\",en:\"retention\",zh:\"留存率\"}},{num:\"+26\",cap:{pt:\"NPS\",en:\"NPS\",zh:\"NPS\"}}]}\n  ]},\n  {hue:\"#ff4d9e\", name:{pt:\"Varejo & E-commerce\",en:\"Retail & E-commerce\",zh:\"零售与电商\"}, tagline:{pt:\"Da vitrine ao ERP: experiências de compra sob medida, com os dados reais do seu e-commerce. Cada peça, um módulo Data².\",en:\"From storefront to ERP: tailor-made buying experiences, with your e-commerce's real data. Each piece, a Data² module.\",zh:\"从门店到 ERP：量身定制的购物体验，用你电商的真实数据驱动。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m6\", label:{pt:\"Catálogo\",en:\"Catalog\",zh:\"目录\"}, title:{pt:\"Experiências de catálogo e produto\",en:\"Catalog & product experiences\",zh:\"目录与商品体验\"}, desc:{pt:\"Vitrines, páginas de produto e coleções montadas pela área — com o catálogo real, sempre sincronizado.\",en:\"Storefronts, product pages and collections built by the team — with the real catalog, always in sync.\",zh:\"由业务团队搭建的门店、商品页与专题 —— 使用真实目录，始终同步。\"}, points:[{pt:\"Páginas de produto sobre catálogo real\",en:\"Product pages over the real catalog\",zh:\"基于真实目录的商品页\"},{pt:\"Coleções e curadoria pela área\",en:\"Collections and curation by the team\",zh:\"由团队策划专题与选品\"},{pt:\"Busca e filtros configuráveis\",en:\"Configurable search and filters\",zh:\"可配置搜索与筛选\"},{pt:\"Publicação sem depender de TI\",en:\"Publish without depending on IT\",zh:\"发布无需依赖 IT\"}], oldModel:{pt:\"Cada campanha depende da fila de TI; a vitrine nunca acompanha o momento.\",en:\"Every campaign waits in the IT queue; the storefront never keeps up with the moment.\",zh:\"每次活动都要排 IT 队列；门店永远跟不上节奏。\"}, withData2:{pt:\"A área publica a vitrine que quiser, na hora, com o dado real.\",en:\"The team publishes any storefront it wants, instantly, with real data.\",zh:\"团队即时发布想要的门店，用真实数据。\"}, kpis:[{num:\"live\",cap:{pt:\"catálogo sincronizado\",en:\"catalog in sync\",zh:\"目录实时同步\"}}]},\n    {motif:\"m1\", label:{pt:\"VTEX / GraphQL\",en:\"VTEX / GraphQL\",zh:\"VTEX / GraphQL\"}, title:{pt:\"Integração VTEX / GraphQL\",en:\"VTEX / GraphQL integration\",zh:\"VTEX / GraphQL 集成\"}, desc:{pt:\"Conexão direta com a plataforma de e-commerce — produtos, preços e estoque ao vivo via GraphQL.\",en:\"Direct connection to the e-commerce platform — live products, prices and stock via GraphQL.\",zh:\"与电商平台直连 —— 通过 GraphQL 获取实时商品、价格与库存。\"}, points:[{pt:\"Cliente HTTP para VTEX / GraphQL\",en:\"HTTP client for VTEX / GraphQL\",zh:\"面向 VTEX / GraphQL 的 HTTP 客户端\"},{pt:\"Produtos, preços e estoque ao vivo\",en:\"Live products, prices and stock\",zh:\"实时商品、价格与库存\"},{pt:\"Parametrização de queries por variável\",en:\"Query parametrization by variable\",zh:\"按变量参数化查询\"},{pt:\"Cache e resiliência a falhas\",en:\"Caching and failure resilience\",zh:\"缓存与容错\"}], oldModel:{pt:\"Dados de produto colados à mão ou defasados — preço errado, venda perdida.\",en:\"Product data pasted by hand or stale — wrong price, lost sale.\",zh:\"商品数据靠手工粘贴或已过期 —— 价格出错、错失销售。\"}, withData2:{pt:\"Tudo ao vivo, direto da fonte — preço e estoque sempre certos.\",en:\"Everything live, straight from the source — price and stock always right.\",zh:\"一切实时、直取源头 —— 价格与库存始终准确。\"}, kpis:[{num:\"real-time\",cap:{pt:\"preço & estoque\",en:\"price & stock\",zh:\"价格与库存\"}}]},\n    {motif:\"m5\", label:{pt:\"Estúdio de foto\",en:\"Photo studio\",zh:\"影像工作室\"}, title:{pt:\"Estúdio de foto com AI\",en:\"AI photo studio\",zh:\"AI 影像工作室\"}, desc:{pt:\"Gere fotos de produto e cenas com AI — try-on, ângulos e catálogo, sem estúdio físico.\",en:\"Generate product photos and scenes with AI — try-on, angles and catalog, no physical studio.\",zh:\"用 AI 生成商品照片与场景 —— 试穿、角度与目录，无需实体影棚。\"}, points:[{pt:\"Geração de imagem por AI (multimodal)\",en:\"Image generation via AI (multimodal)\",zh:\"多模态 AI 图像生成\"},{pt:\"Try-on e cenas configuráveis\",en:\"Try-on and configurable scenes\",zh:\"试穿与可配置场景\"},{pt:\"Múltiplos ângulos a partir de uma foto\",en:\"Multiple angles from one photo\",zh:\"由一张照片生成多角度\"},{pt:\"Storage e distribuição de mídia (MEDIA)\",en:\"Media storage and distribution (MEDIA)\",zh:\"媒体存储与分发（MEDIA）\"}], oldModel:{pt:\"Cada foto exige estúdio, modelo e dias de produção — caro e lento.\",en:\"Every photo needs a studio, a model and days of production — costly and slow.\",zh:\"每张照片都需影棚、模特与数天制作 —— 昂贵又缓慢。\"}, withData2:{pt:\"Fotos de qualidade em minutos, a um custo marginal.\",en:\"Quality photos in minutes, at a marginal cost.\",zh:\"几分钟出高质量照片，成本极低。\"}, kpis:[{num:\"−90%\",cap:{pt:\"custo de produção\",en:\"production cost\",zh:\"制作成本\"}}]},\n    {motif:\"m3\", label:{pt:\"ERP & loja\",en:\"ERP & store\",zh:\"ERP 与门店\"}, title:{pt:\"ERP e operações de loja\",en:\"ERP & store operations\",zh:\"ERP 与门店运营\"}, desc:{pt:\"Estoque, pedidos, recebimento e produção — o ERP da operação de loja, feito sob medida.\",en:\"Stock, orders, receiving and production — the store operation's ERP, tailor-made.\",zh:\"库存、订单、收货与生产 —— 量身定制的门店运营 ERP。\"}, points:[{pt:\"Estoque e movimentações por local\",en:\"Stock and movements per location\",zh:\"按地点的库存与出入库\"},{pt:\"Pedidos de compra e recebimento\",en:\"Purchase orders and receiving\",zh:\"采购订单与收货\"},{pt:\"Ordens de produção e BOM\",en:\"Production orders and BOM\",zh:\"生产订单与 BOM\"},{pt:\"Fluxos e status configuráveis\",en:\"Configurable flows and statuses\",zh:\"可配置流程与状态\"}], oldModel:{pt:\"ERP genérico que não encaixa na operação — gambiarra em planilha por fora.\",en:\"A generic ERP that doesn't fit the operation — spreadsheet workarounds on the side.\",zh:\"通用 ERP 无法贴合运营 —— 只能在表格里打补丁。\"}, withData2:{pt:\"Um ERP que encaixa exatamente na sua operação — e evolui com ela.\",en:\"An ERP that fits your operation exactly — and evolves with it.\",zh:\"完全贴合你运营的 ERP —— 并随之进化。\"}, kpis:[{num:\"1\",cap:{pt:\"sistema da vitrine ao estoque\",en:\"system from storefront to stock\",zh:\"从门店到库存一体\"}}]}\n  ]},\n  {hue:\"#9b5cff\", name:{pt:\"Força de Vendas\",en:\"Sales Enablement\",zh:\"销售赋能\"}, tagline:{pt:\"Um copiloto de vendas que diz a cada vendedor a próxima melhor ação — em linguagem natural. Cada peça, um módulo Data².\",en:\"A sales copilot that tells each rep the next best action — in natural language. Each piece, a Data² module.\",zh:\"一个销售副驾，用自然语言告诉每位销售下一步的最佳行动。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m1\", label:{pt:\"Copiloto\",en:\"Copilot\",zh:\"副驾\"}, title:{pt:\"Copiloto de vendas em linguagem natural\",en:\"Sales copilot in natural language\",zh:\"自然语言销售副驾\"}, desc:{pt:\"O vendedor pergunta em português e o copiloto responde sobre carteira, clientes e metas — sobre o dado real.\",en:\"The rep asks in plain language and the copilot answers about portfolio, customers and targets — over real data.\",zh:\"销售用自然语言提问，副驾基于真实数据回答客户组合、客户与目标相关问题。\"}, points:[{pt:\"Chat sobre dado vivo da carteira\",en:\"Chat over the portfolio's live data\",zh:\"基于客户组合实时数据的聊天\"},{pt:\"Respostas com números e fontes\",en:\"Answers with numbers and sources\",zh:\"答案带数字与来源\"},{pt:\"Entende perguntas de negócio\",en:\"Understands business questions\",zh:\"理解业务问题\"},{pt:\"No celular, em campo\",en:\"On mobile, in the field\",zh:\"手机端、可在一线使用\"}], oldModel:{pt:\"O vendedor não acha o dado; ou espera BI, ou decide no escuro.\",en:\"The rep can't find the data; either waits for BI, or decides in the dark.\",zh:\"销售找不到数据；要么等 BI，要么摸黑决策。\"}, withData2:{pt:\"Pergunta e recebe na hora, em campo — decisão com base em dado.\",en:\"Ask and get it instantly, in the field — decisions based on data.\",zh:\"在一线即时提问即时得到答案 —— 基于数据决策。\"}, kpis:[{num:\"NL\",cap:{pt:\"pergunta em linguagem natural\",en:\"ask in natural language\",zh:\"自然语言提问\"}}]},\n    {motif:\"m6\", label:{pt:\"Próxima ação\",en:\"Next action\",zh:\"下一步\"}, title:{pt:\"Recomendação de próxima melhor ação\",en:\"Next-best-action recommendation\",zh:\"下一最佳行动推荐\"}, desc:{pt:\"O sistema aponta, por cliente, a próxima ação de maior retorno — quem visitar, o que oferecer, quando.\",en:\"The system points out, per customer, the next highest-return action — who to visit, what to offer, when.\",zh:\"系统针对每位客户指出回报最高的下一步行动 —— 拜访谁、推什么、何时。\"}, points:[{pt:\"Recomendação por cliente e momento\",en:\"Recommendation by customer and timing\",zh:\"按客户与时机推荐\"},{pt:\"Priorização por retorno esperado\",en:\"Prioritization by expected return\",zh:\"按预期回报排序\"},{pt:\"Regras e modelos configuráveis\",en:\"Configurable rules and models\",zh:\"可配置规则与模型\"},{pt:\"Ação a um clique do copiloto\",en:\"Action one click from the copilot\",zh:\"从副驾一键行动\"}], oldModel:{pt:\"Todo cliente tratado igual; o vendedor gasta tempo onde não rende.\",en:\"Every customer treated the same; the rep spends time where it doesn't pay.\",zh:\"所有客户一视同仁；销售把时间花在不出成果的地方。\"}, withData2:{pt:\"Cada visita mira o cliente e a oferta de maior retorno.\",en:\"Every visit targets the customer and offer with the highest return.\",zh:\"每次拜访都瞄准回报最高的客户与方案。\"}, kpis:[{num:\"+20%\",cap:{pt:\"conversão\",en:\"conversion\",zh:\"转化率\"}}]},\n    {motif:\"m2\", label:{pt:\"Busca com AI\",en:\"AI search\",zh:\"AI 搜索\"}, title:{pt:\"Busca de clientes e segmentos com AI\",en:\"AI search over customers & segments\",zh:\"面向客户与细分的 AI 搜索\"}, desc:{pt:\"'Me mostre clientes que compraram X e sumiram' — a AI monta o segmento na hora, sem SQL.\",en:\"'Show me customers who bought X and vanished' — AI builds the segment instantly, no SQL.\",zh:\"'找出买过 X 后消失的客户' —— AI 即时生成细分，无需 SQL。\"}, points:[{pt:\"Segmentação por linguagem natural\",en:\"Segmentation by natural language\",zh:\"自然语言细分\"},{pt:\"Busca semântica sobre a base\",en:\"Semantic search over the base\",zh:\"对客户库的语义搜索\"},{pt:\"Salva e reusa segmentos\",en:\"Save and reuse segments\",zh:\"保存并复用细分\"},{pt:\"Aciona ondas de contato a partir do segmento\",en:\"Trigger contact waves from a segment\",zh:\"从细分触发联系波次\"}], oldModel:{pt:\"Segmentar exige o time de dados e um SQL — dias para uma lista.\",en:\"Segmenting needs the data team and SQL — days for a list.\",zh:\"细分需要数据团队与 SQL —— 一张名单要等数天。\"}, withData2:{pt:\"A força monta o segmento em segundos, com uma frase.\",en:\"The field builds the segment in seconds, with one sentence.\",zh:\"一线用一句话数秒生成细分。\"}, kpis:[{num:\"0\",cap:{pt:\"SQL necessário\",en:\"SQL required\",zh:\"无需 SQL\"}}]},\n    {motif:\"m4\", label:{pt:\"Performance\",en:\"Performance\",zh:\"业绩\"}, title:{pt:\"Painéis de performance da carteira\",en:\"Portfolio performance dashboards\",zh:\"客户组合业绩仪表盘\"}, desc:{pt:\"Metas, ranking e evolução da carteira ao vivo — para o vendedor e para o gestor, na mesma fonte.\",en:\"Targets, ranking and portfolio evolution live — for the rep and the manager, from the same source.\",zh:\"目标、排名与客户组合演变实时呈现 —— 销售与管理者共用同一数据源。\"}, points:[{pt:\"Metas e realizado por vendedor\",en:\"Target vs actual per rep\",zh:\"每位销售目标 vs 实际\"},{pt:\"Ranking e evolução no tempo\",en:\"Ranking and evolution over time\",zh:\"排名与时间演变\"},{pt:\"Drill-down por cliente e produto\",en:\"Drill-down by customer and product\",zh:\"按客户与商品下钻\"},{pt:\"Mesmo dado para campo e gestão\",en:\"Same data for field and management\",zh:\"一线与管理同源数据\"}], oldModel:{pt:\"Cada um com sua planilha; gestor e vendedor discutem número, não cliente.\",en:\"Everyone with their own spreadsheet; manager and rep argue over numbers, not customers.\",zh:\"各持一张表格；管理者与销售争论数字，而非客户。\"}, withData2:{pt:\"Uma fonte só, ao vivo — a conversa vira sobre o cliente.\",en:\"One live source — the conversation shifts to the customer.\",zh:\"唯一实时数据源 —— 对话回归客户本身。\"}, kpis:[{num:\"1\",cap:{pt:\"fonte de verdade\",en:\"source of truth\",zh:\"唯一真相源\"}}]},\n    {motif:\"m5\", label:{pt:\"Conteúdo com AI\",en:\"AI content\",zh:\"AI 内容\"}, title:{pt:\"Geração de conteúdo e imagem com AI\",en:\"AI content & image generation\",zh:\"AI 内容与图像生成\"}, desc:{pt:\"O vendedor gera o material de vendas — texto e imagem — no tom da marca, na hora do contato.\",en:\"The rep generates sales material — text and image — in the brand's tone, at the moment of contact.\",zh:\"销售即时生成销售素材 —— 文本与图像 —— 契合品牌语气。\"}, points:[{pt:\"Geração de texto e imagem por AI\",en:\"AI text and image generation\",zh:\"AI 文本与图像生成\"},{pt:\"No tom e na identidade da marca\",en:\"In the brand's tone and identity\",zh:\"契合品牌语气与识别\"},{pt:\"Personalizado por cliente\",en:\"Personalized per customer\",zh:\"按客户个性化\"},{pt:\"Pronto para enviar em qualquer canal\",en:\"Ready to send on any channel\",zh:\"随时可在任一渠道发送\"}], oldModel:{pt:\"Material genérico do marketing, desatualizado — o vendedor improvisa.\",en:\"Generic, outdated marketing material — the rep improvises.\",zh:\"市场部的通用素材已过时 —— 销售只能临场发挥。\"}, withData2:{pt:\"Conteúdo sob medida na hora, sempre na marca.\",en:\"Tailored content on the spot, always on brand.\",zh:\"即时定制内容，始终契合品牌。\"}, kpis:[{num:\"1\",cap:{pt:\"clique para o material\",en:\"click to material\",zh:\"一键出素材\"}}]}\n  ]},\n  {hue:\"#84e05a\", name:{pt:\"BI & Analytics\",en:\"BI & Analytics\",zh:\"商业智能与分析\"}, tagline:{pt:\"Do dado vivo ao plano de ação — painéis que a área lê e age, sem exportar pra planilha. Cada peça, um módulo Data².\",en:\"From live data to an action plan — dashboards the team reads and acts on, no spreadsheet export. Each piece, a Data² module.\",zh:\"从实时数据到行动计划 —— 业务团队看得懂、能行动的仪表盘，无需导出表格。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m4\", label:{pt:\"Painéis\",en:\"Dashboards\",zh:\"仪表盘\"}, title:{pt:\"Painéis executivos sobre dado vivo\",en:\"Executive dashboards on live data\",zh:\"基于实时数据的高管仪表盘\"}, desc:{pt:\"KPIs, tendências e drill-down sobre o dado vivo da operação — não um print de ontem.\",en:\"KPIs, trends and drill-down over the operation's live data — not a screenshot from yesterday.\",zh:\"基于运营实时数据的 KPI、趋势与下钻 —— 而非昨天的截图。\"}, points:[{pt:\"KPIs e tendências ao vivo\",en:\"Live KPIs and trends\",zh:\"实时 KPI 与趋势\"},{pt:\"Drill-down por dimensão\",en:\"Drill-down by dimension\",zh:\"按维度下钻\"},{pt:\"Painéis por perfil de usuário\",en:\"Dashboards by user profile\",zh:\"按用户画像定制仪表盘\"},{pt:\"Renderização no servidor (SSR), rápida\",en:\"Server-side rendering (SSR), fast\",zh:\"服务端渲染（SSR），快速\"}], oldModel:{pt:\"Relatório em PDF que nasce velho; decisão sobre foto do passado.\",en:\"A PDF report born stale; decisions on a photo of the past.\",zh:\"生来就过时的 PDF 报表；对着过去的快照做决策。\"}, withData2:{pt:\"Painel vivo, sempre atual — decisão sobre o agora.\",en:\"A live panel, always current — decisions on the now.\",zh:\"实时面板、始终最新 —— 对着当下做决策。\"}, kpis:[{num:\"live\",cap:{pt:\"dado sempre atual\",en:\"always-current data\",zh:\"数据始终最新\"}}]},\n    {motif:\"m1\", label:{pt:\"Ingestão\",en:\"Ingestion\",zh:\"数据接入\"}, title:{pt:\"Ingestão diária automatizada\",en:\"Automated daily ingestion\",zh:\"每日自动数据接入\"}, desc:{pt:\"O Rush puxa e consolida os dados todo dia — de Databricks, APIs e planilhas — sem ninguém apertar botão.\",en:\"Rush pulls and consolidates the data every day — from Databricks, APIs and spreadsheets — with no one pressing a button.\",zh:\"Rush 每天自动拉取并整合数据 —— 来自 Databricks、API 与表格 —— 无需任何人点按钮。\"}, points:[{pt:\"Agendadores (Rush) diários\",en:\"Daily schedulers (Rush)\",zh:\"每日调度器（Rush）\"},{pt:\"Fontes: Databricks, APIs, planilhas\",en:\"Sources: Databricks, APIs, spreadsheets\",zh:\"数据源：Databricks、API、表格\"},{pt:\"Consolidação e limpeza automática\",en:\"Automatic consolidation and cleanup\",zh:\"自动整合与清洗\"},{pt:\"Logs e reprocessamento de falhas\",en:\"Logs and failure reprocessing\",zh:\"日志与失败重跑\"}], oldModel:{pt:\"Alguém baixa, junta e corrige planilhas toda manhã — e às vezes esquece.\",en:\"Someone downloads, merges and fixes spreadsheets every morning — and sometimes forgets.\",zh:\"每天早上有人下载、合并并修正表格 —— 有时还会忘。\"}, withData2:{pt:\"Os dados chegam prontos todo dia, sozinhos.\",en:\"The data arrives ready every day, on its own.\",zh:\"数据每天自动就绪。\"}, kpis:[{num:\"0\",cap:{pt:\"trabalho manual diário\",en:\"daily manual work\",zh:\"每日手工\"}}]},\n    {motif:\"m3\", label:{pt:\"Metas & plano\",en:\"Targets & plan\",zh:\"目标与计划\"}, title:{pt:\"Metas e plano de ação acompanhados\",en:\"Targets & action plan tracked\",zh:\"目标与行动计划全程追踪\"}, desc:{pt:\"Metas por área e um plano de ação vivo — cada iniciativa com dono, prazo e status, sobre o mesmo dado.\",en:\"Targets per area and a live action plan — each initiative with owner, deadline and status, over the same data.\",zh:\"按部门设定目标 + 实时行动计划 —— 每项举措都有负责人、期限与状态，同源数据。\"}, points:[{pt:\"Metas por área e período\",en:\"Targets by area and period\",zh:\"按部门与周期设目标\"},{pt:\"Plano de ação com dono e prazo\",en:\"Action plan with owner and deadline\",zh:\"含负责人与期限的行动计划\"},{pt:\"Status e progresso ao vivo\",en:\"Live status and progress\",zh:\"实时状态与进度\"},{pt:\"Ligação direta metas ↔ dado\",en:\"Direct link targets ↔ data\",zh:\"目标与数据直接挂钩\"}], oldModel:{pt:\"Metas numa apresentação e plano num e-mail — ninguém acompanha até o fim do tri.\",en:\"Targets in a slide and plan in an email — no one tracks until quarter-end.\",zh:\"目标在幻灯片、计划在邮件 —— 无人跟进，直到季度末。\"}, withData2:{pt:\"Meta, plano e dado num lugar só — acompanhamento contínuo.\",en:\"Target, plan and data in one place — continuous tracking.\",zh:\"目标、计划与数据合一 —— 持续跟进。\"}, kpis:[{num:\"1\",cap:{pt:\"lugar para meta e ação\",en:\"place for target and action\",zh:\"目标与行动一处\"}}]},\n    {motif:\"m8\", label:{pt:\"Alertas\",en:\"Alerts\",zh:\"告警\"}, title:{pt:\"Alertas e monitoramento\",en:\"Alerts & monitoring\",zh:\"告警与监控\"}, desc:{pt:\"Regras que vigiam o dado e avisam na hora — por WhatsApp, e-mail ou no painel — quando algo sai do trilho.\",en:\"Rules that watch the data and warn instantly — via WhatsApp, email or in the panel — when something goes off track.\",zh:\"规则守护数据并即时预警 —— 通过 WhatsApp、邮件或面板 —— 一旦偏离轨道即刻通知。\"}, points:[{pt:\"Regras de alerta por limite/variação\",en:\"Alert rules by threshold/variation\",zh:\"按阈值/波动的告警规则\"},{pt:\"Notificação em WhatsApp, e-mail, painel\",en:\"Notification via WhatsApp, email, panel\",zh:\"WhatsApp、邮件、面板通知\"},{pt:\"Detecção de anomalia\",en:\"Anomaly detection\",zh:\"异常检测\"},{pt:\"Histórico e reconhecimento de alertas\",en:\"Alert history and acknowledgment\",zh:\"告警历史与确认\"}], oldModel:{pt:\"O problema só aparece no relatório do mês seguinte — tarde demais.\",en:\"The problem only shows up in next month's report — too late.\",zh:\"问题直到下月报表才浮现 —— 为时已晚。\"}, withData2:{pt:\"O sistema avisa na hora — a área age antes de virar prejuízo.\",en:\"The system warns instantly — the team acts before it becomes a loss.\",zh:\"系统即时预警 —— 团队在其造成损失前行动。\"}, kpis:[{num:\"real-time\",cap:{pt:\"alerta na hora\",en:\"instant alert\",zh:\"即时告警\"}}]}\n  ]},\n  {hue:\"#ff6a4d\", name:{pt:\"Seguros & CX\",en:\"Insurance & CX\",zh:\"保险与客户体验\"}, tagline:{pt:\"Atendimento que responde na fonte certa — base de conhecimento com busca semântica e triagem por AI. Cada peça, um módulo Data².\",en:\"Support that answers from the right source — a semantic knowledge base with AI triage. Each piece, a Data² module.\",zh:\"从正确来源作答的客服 —— 配备语义知识库与 AI 分流。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m2\", label:{pt:\"Base semântica\",en:\"Semantic KB\",zh:\"语义知识库\"}, title:{pt:\"Base de conhecimento com busca semântica\",en:\"Semantic-search knowledge base\",zh:\"语义搜索知识库\"}, desc:{pt:\"Apólices, cláusulas e FAQs indexadas por significado — encontra a resposta certa mesmo sem a palavra exata.\",en:\"Policies, clauses and FAQs indexed by meaning — finds the right answer even without the exact word.\",zh:\"保单、条款与 FAQ 按语义索引 —— 即使措辞不同也能找到正确答案。\"}, points:[{pt:\"Indexação por embeddings (semantic search)\",en:\"Embedding indexing (semantic search)\",zh:\"向量索引（语义搜索）\"},{pt:\"Busca por significado, não palavra-chave\",en:\"Search by meaning, not keyword\",zh:\"按语义而非关键词搜索\"},{pt:\"Fontes versionadas e atualizáveis\",en:\"Versioned, updatable sources\",zh:\"可版本化、可更新的来源\"},{pt:\"Cobertura multilíngue\",en:\"Multilingual coverage\",zh:\"多语言覆盖\"}], oldModel:{pt:\"O atendente caça em PDFs e intranet — resposta lenta e às vezes errada.\",en:\"The agent hunts through PDFs and the intranet — slow answers, sometimes wrong.\",zh:\"坐席在 PDF 与内网里翻找 —— 回答缓慢，有时出错。\"}, withData2:{pt:\"A resposta certa aparece na hora, ancorada na fonte oficial.\",en:\"The right answer appears instantly, grounded in the official source.\",zh:\"正确答案即时呈现，源自官方来源。\"}, kpis:[{num:\"semantic\",cap:{pt:\"busca por significado\",en:\"search by meaning\",zh:\"按语义搜索\"}}]},\n    {motif:\"m1\", label:{pt:\"Triagem\",en:\"Triage\",zh:\"分流\"}, title:{pt:\"Triagem e atendimento com AI\",en:\"AI triage & support\",zh:\"AI 分流与客服\"}, desc:{pt:\"A AI entende o pedido — sinistro, dúvida, 2ª via — resolve o simples e encaminha o resto com contexto.\",en:\"AI understands the request — claim, question, reissue — resolves the simple and routes the rest with context.\",zh:\"AI 理解诉求 —— 理赔、咨询、补发 —— 解决简单问题，其余带上下文分流。\"}, points:[{pt:\"Detecção de intenção e caso de uso\",en:\"Intent and use-case detection\",zh:\"意图与用例识别\"},{pt:\"Resolução automática do simples\",en:\"Automatic resolution of the simple\",zh:\"简单诉求自动解决\"},{pt:\"Roteamento com contexto para o humano\",en:\"Context-rich routing to a human\",zh:\"带上下文转人工\"},{pt:\"Leitura de documentos do segurado\",en:\"Reading the insured's documents\",zh:\"识别投保人文档\"}], oldModel:{pt:\"Todo pedido vira fila humana; o segurado espera por qualquer coisa.\",en:\"Every request becomes a human queue; the insured waits for anything.\",zh:\"所有诉求都进人工队列；投保人事事都要等。\"}, withData2:{pt:\"A AI resolve na hora o que dá e prioriza o que precisa de gente.\",en:\"AI instantly resolves what it can and prioritizes what needs a human.\",zh:\"AI 能解决的即时解决，需人工的优先处理。\"}, kpis:[{num:\"−50%\",cap:{pt:\"tempo de resposta\",en:\"response time\",zh:\"响应时间\"}}]},\n    {motif:\"m3\", label:{pt:\"Ancorada na fonte\",en:\"Grounded\",zh:\"源自原文\"}, title:{pt:\"Respostas ancoradas na fonte\",en:\"Answers grounded in the source\",zh:\"答案有据可依，源自原文\"}, desc:{pt:\"Toda resposta cita a cláusula ou o documento de origem — nada de 'a AI inventou'.\",en:\"Every answer cites the source clause or document — no 'the AI made it up'.\",zh:\"每个答案都引用来源条款或文档 —— 杜绝'AI 编造'。\"}, points:[{pt:\"Citação da fonte em cada resposta\",en:\"Source citation in every answer\",zh:\"每个答案标注来源\"},{pt:\"Rastreabilidade cláusula → resposta\",en:\"Traceability clause → answer\",zh:\"条款→答案可追溯\"},{pt:\"Redução de alucinação (grounding)\",en:\"Hallucination reduction (grounding)\",zh:\"降低幻觉（grounding）\"},{pt:\"Conformidade e auditoria\",en:\"Compliance and audit\",zh:\"合规与审计\"}], oldModel:{pt:\"Resposta sem lastro vira risco jurídico e retrabalho.\",en:\"An unsupported answer becomes legal risk and rework.\",zh:\"无依据的回答带来法律风险与返工。\"}, withData2:{pt:\"Cada resposta é rastreável à fonte — confiável e auditável.\",en:\"Every answer is traceable to the source — trustworthy and auditable.\",zh:\"每个答案都可追溯到来源 —— 可信、可审计。\"}, kpis:[{num:\"100%\",cap:{pt:\"respostas com fonte\",en:\"answers with a source\",zh:\"答案均有来源\"}}]},\n    {motif:\"m7\", label:{pt:\"Analytics\",en:\"Analytics\",zh:\"分析\"}, title:{pt:\"Analytics de atendimento\",en:\"Support analytics\",zh:\"客服分析\"}, desc:{pt:\"Volume, temas, resolução e satisfação — para melhorar a base e o atendimento continuamente.\",en:\"Volume, topics, resolution and satisfaction — to continuously improve the base and the service.\",zh:\"工单量、主题、解决率与满意度 —— 持续改进知识库与服务。\"}, points:[{pt:\"Métricas de volume e resolução\",en:\"Volume and resolution metrics\",zh:\"工单量与解决率指标\"},{pt:\"Lacunas na base de conhecimento\",en:\"Knowledge-base gaps\",zh:\"知识库缺口\"},{pt:\"Satisfação (CSAT) por tema\",en:\"Satisfaction (CSAT) by topic\",zh:\"按主题的满意度（CSAT）\"},{pt:\"Alertas de pico e degradação\",en:\"Spike and degradation alerts\",zh:\"峰值与劣化告警\"}], oldModel:{pt:\"Não se sabe o que a base não cobre; os mesmos erros se repetem.\",en:\"No one knows what the base doesn't cover; the same errors repeat.\",zh:\"无人知晓知识库遗漏了什么；同样的错误反复出现。\"}, withData2:{pt:\"Os dados mostram as lacunas — a base melhora sozinha, com curadoria.\",en:\"The data shows the gaps — the base improves with curation.\",zh:\"数据揭示缺口 —— 知识库在策展中持续改善。\"}, kpis:[{num:\"+CSAT\",cap:{pt:\"satisfação medida\",en:\"satisfaction measured\",zh:\"满意度可量\"}}]}\n  ]},\n  {hue:\"#e8e84d\", name:{pt:\"Compras & Procurement\",en:\"Procurement\",zh:\"采购\"}, tagline:{pt:\"Excelência em compras: modelagem financeira e planejamento de fornecimento, simulados em minutos. Cada peça, um módulo Data².\",en:\"Procurement excellence: financial modeling and supply planning, simulated in minutes. Each piece, a Data² module.\",zh:\"采购卓越：财务建模与供应规划，几分钟即可模拟完成。每个环节都是一个 Data² 模块。\"}, comps:[\n    {motif:\"m3\", label:{pt:\"Planejamento\",en:\"Planning\",zh:\"规划\"}, title:{pt:\"Planejamento de fornecimento\",en:\"Supply planning\",zh:\"供应规划\"}, desc:{pt:\"Consolida demanda, contratos e capacidade de fornecedores num plano de fornecimento — sobre o dado real.\",en:\"Consolidates demand, contracts and supplier capacity into a supply plan — over real data.\",zh:\"将需求、合同与供应商产能整合成供应计划 —— 基于真实数据。\"}, points:[{pt:\"Demanda e contratos consolidados\",en:\"Consolidated demand and contracts\",zh:\"整合需求与合同\"},{pt:\"Capacidade e lead time por fornecedor\",en:\"Capacity and lead time per supplier\",zh:\"每供应商产能与交期\"},{pt:\"Plano de fornecimento priorizado\",en:\"Prioritized supply plan\",zh:\"有优先级的供应计划\"},{pt:\"Sobre o dado real (data lake)\",en:\"Over real data (data lake)\",zh:\"基于真实数据（数据湖）\"}], oldModel:{pt:\"Plano em planilha que não fala com contrato nem com estoque real.\",en:\"A spreadsheet plan that talks to neither the contract nor the real stock.\",zh:\"表格里的计划既不对接合同也不对接真实库存。\"}, withData2:{pt:\"Um plano vivo, ligado a contrato, demanda e capacidade.\",en:\"A live plan, linked to contract, demand and capacity.\",zh:\"一份实时计划，联通合同、需求与产能。\"}, kpis:[{num:\"1\",cap:{pt:\"plano sobre dado real\",en:\"plan on real data\",zh:\"基于真实数据的计划\"}}]},\n    {motif:\"m8\", label:{pt:\"Modelagem\",en:\"Modeling\",zh:\"建模\"}, title:{pt:\"Modelagem financeira de cenários\",en:\"Financial scenario modeling\",zh:\"财务情景建模\"}, desc:{pt:\"Modele o impacto financeiro de cada decisão de compra — preço, câmbio, volume — antes de assinar.\",en:\"Model the financial impact of each purchasing decision — price, FX, volume — before signing.\",zh:\"在签约前对每项采购决策的财务影响建模 —— 价格、汇率、数量。\"}, points:[{pt:\"Modelo financeiro por cenário\",en:\"Financial model per scenario\",zh:\"按情景的财务模型\"},{pt:\"Sensibilidade a preço, câmbio e volume\",en:\"Sensitivity to price, FX and volume\",zh:\"对价格、汇率、数量的敏感性\"},{pt:\"Comparação de fornecedores e prazos\",en:\"Comparison of suppliers and terms\",zh:\"供应商与条款对比\"},{pt:\"Números auditáveis\",en:\"Auditable numbers\",zh:\"可审计的数字\"}], oldModel:{pt:\"Modelo financeiro numa planilha frágil que só uma pessoa entende.\",en:\"A financial model in a fragile spreadsheet only one person understands.\",zh:\"脆弱表格里的财务模型，只有一个人看得懂。\"}, withData2:{pt:\"Modelo robusto e auditável — qualquer cenário em minutos.\",en:\"A robust, auditable model — any scenario in minutes.\",zh:\"稳健可审计的模型 —— 任何情景几分钟出结果。\"}, kpis:[{num:\"MM\",cap:{pt:\"economizados por mês\",en:\"saved per month\",zh:\"每月节省\"}}]},\n    {motif:\"m5\", label:{pt:\"Simuladores\",en:\"Simulators\",zh:\"模拟器\"}, title:{pt:\"Simuladores e croquis de decisão\",en:\"Decision simulators & builders\",zh:\"决策模拟器与构建器\"}, desc:{pt:\"A área monta seus próprios simuladores de decisão — sem código — e testa alternativas na hora.\",en:\"The team builds its own decision simulators — no code — and tests alternatives on the spot.\",zh:\"业务团队无代码搭建自己的决策模拟器 —— 即时测试各种方案。\"}, points:[{pt:\"Simuladores montados pela área (no-code)\",en:\"Simulators built by the team (no-code)\",zh:\"由团队搭建的模拟器（无代码）\"},{pt:\"Parâmetros e regras ajustáveis\",en:\"Adjustable parameters and rules\",zh:\"可调参数与规则\"},{pt:\"Resultado visual imediato\",en:\"Immediate visual result\",zh:\"即时可视化结果\"},{pt:\"Compartilháveis com stakeholders\",en:\"Shareable with stakeholders\",zh:\"可与相关方共享\"}], oldModel:{pt:\"Cada análise depende de um especialista e de uma planilha nova.\",en:\"Every analysis depends on a specialist and a new spreadsheet.\",zh:\"每次分析都依赖一位专家与一张新表格。\"}, withData2:{pt:\"A área simula sozinha e decide na hora, com confiança.\",en:\"The team simulates on its own and decides on the spot, with confidence.\",zh:\"团队自主模拟、即时决策，充满信心。\"}, kpis:[{num:\"0\",cap:{pt:\"código para simular\",en:\"code to simulate\",zh:\"模拟无需代码\"}}]},\n    {motif:\"m1\", label:{pt:\"Orientado a dado\",en:\"Data-driven\",zh:\"数据驱动\"}, title:{pt:\"Compras orientadas a dado\",en:\"Data-driven sourcing\",zh:\"数据驱动的采购\"}, desc:{pt:\"Cada decisão de compra apoiada em dado — histórico, mercado e performance de fornecedor.\",en:\"Every purchasing decision backed by data — history, market and supplier performance.\",zh:\"每项采购决策都有数据支撑 —— 历史、市场与供应商表现。\"}, points:[{pt:\"Histórico de compras e preços\",en:\"Purchase and price history\",zh:\"采购与价格历史\"},{pt:\"Performance e risco de fornecedor\",en:\"Supplier performance and risk\",zh:\"供应商表现与风险\"},{pt:\"Recomendação de melhor opção\",en:\"Best-option recommendation\",zh:\"最优选项推荐\"},{pt:\"Trilha de decisão auditável\",en:\"Auditable decision trail\",zh:\"可审计的决策链路\"}], oldModel:{pt:\"Decisão de compra no relacionamento e no achismo — dinheiro na mesa.\",en:\"Purchasing by relationship and gut feel — money left on the table.\",zh:\"凭关系与直觉采购 —— 白白流失利润。\"}, withData2:{pt:\"Decisão com dado — melhor preço, melhor fornecedor, rastreável.\",en:\"Decisions with data — best price, best supplier, traceable.\",zh:\"用数据决策 —— 最优价格、最优供应商、可追溯。\"}, kpis:[{num:\"−%\",cap:{pt:\"custo de aquisição\",en:\"acquisition cost\",zh:\"采购成本\"}}]}\n  ]}\n];\n    var uni = root.querySelector(\"#uni\");\n    var uniScroll = uni ? uni.querySelector(\".uni-scroll\") : null;\n    var uniBody = root.querySelector(\"#uniBody\");\n    var gcards = root.querySelectorAll(\".gcard\");\n    var currentUni = -1;\n    function L(o){ if(!o) return \"\"; return lang===\"zh\" ? (o.zh||o.en||o.pt||\"\") : (o[lang]||o.en||o.pt||\"\"); }\n    var UNI_META = {\n      eyebrow:{pt:\"Universo\",en:\"Universe\",zh:\"宇宙\"},\n      hint:{pt:\"Passe o mouse · clique um componente · role\",en:\"Hover · click a component · scroll\",zh:\"悬停 · 点击组件 · 下滚\"},\n      old:{pt:\"O modelo não digitalizado\",en:\"The non-digitized model\",zh:\"未数字化的模式\"},\n      wd:{pt:\"Com Data²\",en:\"With Data²\",zh:\"有了 Data²\"},\n      moreH:{pt:\"E isso é só o começo. <em>Qualquer coisa</em> pode ser construída.\",en:\"And this is just the start. <em>Anything</em> can be built.\",zh:\"而这只是开始。<em>任何东西</em>都能被构建。\"},\n      moreP:{pt:\"Cada componente aqui é um módulo Data². Precisa de algo que ainda não existe? A gente constrói — no mesmo sistema, com o mesmo dado.\",en:\"Every component here is a Data² module. Need something that doesn't exist yet? We build it — same system, same data.\",zh:\"这里的每个组件都是一个 Data² 模块。需要尚不存在的东西？我们构建它 —— 同一系统，同一数据。\"},\n      demo:{pt:\"Agendar uma demo\",en:\"Book a demo\",zh:\"预约演示\"}\n    };\n    function uniLayout(u){\n      if(u.layout) return u.layout;\n      var n=u.comps.length, pts=[], pad=40, spanX=(820-100)-pad*2;\n      for(var i=0;i<n;i++){ var fx=n>1?i/(n-1):0.5; pts.push([Math.round(pad+fx*spanX), i%2===0?60:210]); }\n      return pts;\n    }\n    function esc(s){ return String(s); }\n    function parseIso(text){\n      var spec={cell:50,hue:\"#4ddfe6\",blocks:[],wires:[]};\n      (text||\"\").split(\"\\n\").forEach(function(ln){\n        ln=ln.trim(); if(!ln||ln.charAt(0)===\"#\") return;\n        if(ln.indexOf(\"hue \")===0){ spec.hue=ln.slice(4).trim(); return; }\n        if(ln.indexOf(\"cell \")===0){ spec.cell=+ln.slice(5)||50; return; }\n        var w=ln.match(/^([\\w-]+)\\s*->\\s*([\\w-]+)(.*)$/);\n        if(w){ var wi={from:w[1],to:w[2],flow:/\\bflow\\b/.test(w[3])}; var du=w[3].match(/dur:([\\d.]+)/); if(du)wi.dur=+du[1]; var wh=w[3].match(/#([0-9a-fA-F]{3,8})/); if(wh)wi.hue=\"#\"+wh[1]; spec.wires.push(wi); return; }\n        var m=ln.match(/^([\\w-]+)\\s+@(-?\\d+),(-?\\d+)(.*)$/);\n        if(m){ var b={id:m[1],at:[+m[2],+m[3]]}; var rest=m[4]||\"\";\n          var hh=rest.match(/\\bh(\\d+)/); b.h=hh?+hh[1]:1;\n          var an=rest.match(/\\b(float|pulse|bob)\\b/); if(an)b.anim=an[1];\n          var lb=rest.match(/\"([^\"]*)\"/); if(lb)b.label=lb[1];\n          var hu=rest.match(/#([0-9a-fA-F]{3,8})/); if(hu)b.hue=\"#\"+hu[1];\n          if(/\\bwin\\b/.test(rest)) b.detail=\"win\";\n          spec.blocks.push(b);\n        }\n      });\n      return spec;\n    }\n    function isoScene(spec){\n      var s=spec.cell||50, hw=s/2, q=s/4, fh=s*0.5;\n      var minX=1e9,maxX=-1e9,minY=1e9,maxY=-1e9, anchors={}, blocks=[];\n      spec.blocks.forEach(function(b,i){\n        var c=b.at[0], r=b.at[1], h=b.h||1;\n        var X=(c-r)*hw, Ybase=(c+r)*q, topY=Ybase-h*fh, hue=b.hue||spec.hue;\n        anchors[b.id!=null?b.id:i]={x:X,y:topY};\n        blocks.push({b:b,X:X,Ybase:Ybase,topY:topY,h:h,hue:hue,i:i});\n        if(X-hw<minX)minX=X-hw; if(X+hw>maxX)maxX=X+hw;\n        if(topY-q<minY)minY=topY-q; if(Ybase+q+22>maxY)maxY=Ybase+q+22;\n      });\n      var out=\"\";\n      (spec.wires||[]).forEach(function(w){\n        var a=anchors[w.from], z=anchors[w.to]; if(!a||!z) return;\n        var d=\"M\"+a.x.toFixed(1)+\",\"+a.y.toFixed(1)+\" L\"+z.x.toFixed(1)+\",\"+z.y.toFixed(1);\n        out+='<path class=\"iso-wire\" d=\"'+d+'\" style=\"--h:'+(w.hue||spec.hue)+'\"></path>';\n        if(w.flow) out+='<circle class=\"iso-flow\" r=\"3.2\" style=\"--h:'+(w.hue||spec.hue)+'\"><animateMotion dur=\"'+(w.dur||2.6)+'s\" repeatCount=\"indefinite\" path=\"'+d+'\"></animateMotion></circle>';\n      });\n      blocks.sort(function(p,q2){return p.Ybase-q2.Ybase});\n      blocks.forEach(function(bl){\n        var X=bl.X,topY=bl.topY,h=bl.h,hue=bl.hue,b=bl.b;\n        var top=[X+\",\"+(topY-q),(X+hw)+\",\"+topY,X+\",\"+(topY+q),(X-hw)+\",\"+topY].join(\" \");\n        var left=[(X-hw)+\",\"+topY,X+\",\"+(topY+q),X+\",\"+(topY+q+h*fh),(X-hw)+\",\"+(topY+h*fh)].join(\" \");\n        var right=[(X+hw)+\",\"+topY,X+\",\"+(topY+q),X+\",\"+(topY+q+h*fh),(X+hw)+\",\"+(topY+h*fh)].join(\" \");\n        var cls=\"iso-blk\"+(b.anim?(\" iso-\"+b.anim):\"\")+(b.dataI!=null?\" comp\":\"\");\n        var di=(b.dataI!=null?' data-i=\"'+b.dataI+'\"':'');\n        var g='<g class=\"'+cls+'\"'+di+' style=\"--h:'+hue+';animation-delay:'+(-bl.i*0.4).toFixed(2)+'s\">';\n        g+='<polygon class=\"fl\" points=\"'+left+'\"></polygon><polygon class=\"fr\" points=\"'+right+'\"></polygon><polygon class=\"ft\" points=\"'+top+'\"></polygon>';\n        for(var k=1;k<h;k++){ var yy=topY+k*fh; g+='<line class=\"seam\" x1=\"'+(X-hw)+'\" y1=\"'+yy+'\" x2=\"'+X+'\" y2=\"'+(yy+q)+'\"></line><line class=\"seam\" x1=\"'+X+'\" y1=\"'+(yy+q)+'\" x2=\"'+(X+hw)+'\" y2=\"'+yy+'\"></line>'; }\n        if(b.detail===\"win\"){ g+='<line class=\"det\" x1=\"'+(X-hw*0.5)+'\" y1=\"'+(topY-q*0.1)+'\" x2=\"'+(X+hw*0.1)+'\" y2=\"'+(topY+q*0.4)+'\"></line><line class=\"det\" x1=\"'+(X-hw*0.15)+'\" y1=\"'+(topY-q*0.4)+'\" x2=\"'+(X+hw*0.5)+'\" y2=\"'+(topY+q*0.1)+'\"></line>'; }\n        g+='</g>';\n        out+=g;\n        if(b.label) out+='<text class=\"iso-lbl\" x=\"'+X.toFixed(1)+'\" y=\"'+(bl.Ybase+q+18).toFixed(1)+'\">'+b.label+'</text>';\n      });\n      var pad=34, vbx=(minX-pad), vby=(minY-pad), vbw=(maxX-minX)+pad*2, vbh=(maxY-minY)+pad*2;\n      if(!isFinite(vbw)||vbw<=0) return '<svg class=\"iso-svg\" viewBox=\"0 0 100 100\"></svg>';\n      return '<svg class=\"iso-svg\" viewBox=\"'+vbx.toFixed(1)+\" \"+vby.toFixed(1)+\" \"+vbw.toFixed(1)+\" \"+vbh.toFixed(1)+'\" preserveAspectRatio=\"xMidYMid meet\">'+out+'</svg>';\n    }\n    function sceneFor(u){\n      if(u.scene) return u.scene;\n      var n=u.comps.length, anims=[\"float\",\"pulse\",\"bob\"], heights=[2,3,1,2,4,2], lines=[\"hue \"+u.hue,\"cell 52\"];\n      for(var i=0;i<n;i++){ var col=i*2, row=(i%2===0)?0:2, h=heights[i%heights.length], anim=anims[i%3], win=(i%2===0)?\" win\":\"\"; lines.push(i+\" @\"+col+\",\"+row+\" h\"+h+\" \"+anim+win); }\n      for(var jj=1;jj<n;jj++){ lines.push((jj-1)+\" -> \"+jj+\" flow\"); }\n      return lines.join(\"\\n\");\n    }\n    function isoMini(u,j){\n      var a=[\"float\",\"pulse\",\"bob\"][j%3], b2=[\"pulse\",\"bob\",\"float\"][j%3];\n      var dsl=\"hue \"+u.hue+\"\\ncell 44\\na @0,0 h2 \"+a+\" win\\nb @2,1 h1 \"+b2+\"\\na -> b flow\";\n      return isoScene(parseIso(dsl));\n    }\n    // === isolab neon renderer (ported verbatim, namespaced *2) ===\n    var ICONS2={\n      chat:'<path class=\"ic\" d=\"M4 6a2 2 0 012-2h12a2 2 0 012 2v6a2 2 0 01-2 2H9l-4 3v-3H6a2 2 0 01-2-2z\"></path>',\n      ai:'<path class=\"ic\" d=\"M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z\"></path>',\n      user:'<circle class=\"ic\" cx=\"12\" cy=\"8\" r=\"3.2\"></circle><path class=\"ic\" d=\"M5.5 20c0-3.6 3-6 6.5-6s6.5 2.4 6.5 6\"></path>',\n      screen:'<rect class=\"ic\" x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\"></rect><path class=\"ic\" d=\"M8 20h8M12 16v4\"></path>',\n      gear:'<circle class=\"ic\" cx=\"12\" cy=\"12\" r=\"3\"></circle><path class=\"ic\" d=\"M12 3.5v3M12 17.5v3M3.5 12h3M17.5 12h3M6 6l2 2M16 16l2 2M18 6l-2 2M8 16l-2 2\"></path>',\n      bolt:'<path class=\"ic\" d=\"M13 3L5 13h6l-1 8 8-11h-6z\"></path>',\n      plug:'<path class=\"ic\" d=\"M9 3v4M15 3v4M7 7h10v2a5 5 0 01-10 0zM12 16v5\"></path>',\n      db:'<ellipse class=\"ic\" cx=\"12\" cy=\"6\" rx=\"7\" ry=\"2.6\"></ellipse><path class=\"ic\" d=\"M5 6v12c0 1.4 3.1 2.6 7 2.6s7-1.2 7-2.6V6\"></path><path class=\"ic\" d=\"M5 12c0 1.4 3.1 2.6 7 2.6s7-1.2 7-2.6\"></path>',\n      chart:'<path class=\"ic\" d=\"M4 20h16M7 20v-6M12 20V8M17 20v-9\"></path>',\n      doc:'<path class=\"ic\" d=\"M7 3h7l4 4v14H7z\"></path><path class=\"ic\" d=\"M14 3v4h4M10 12h5M10 16h5\"></path>',\n      shield:'<path class=\"ic\" d=\"M12 3l7 3v6c0 4.8-3.4 7.8-7 9-3.6-1.2-7-4.2-7-9V6z\"></path>',\n      cart:'<circle class=\"ic\" cx=\"9.5\" cy=\"20\" r=\"1.3\"></circle><circle class=\"ic\" cx=\"17\" cy=\"20\" r=\"1.3\"></circle><path class=\"ic\" d=\"M3 4h2.5l2.2 11h9.8l1.8-8H7\"></path>',\n      node:'<circle class=\"ic\" cx=\"5\" cy=\"12\" r=\"2\"></circle><circle class=\"ic\" cx=\"19\" cy=\"6\" r=\"2\"></circle><circle class=\"ic\" cx=\"19\" cy=\"18\" r=\"2\"></circle><path class=\"ic\" d=\"M6.8 11l10.4-4M6.8 13l10.4 4\"></path>'\n    };\n    function parseIso2(text){\n      var spec={cell:50,hue:\"#4ddfe6\",blocks:[],wires:[],context:false};\n      (text||\"\").split(\"\\n\").forEach(function(ln){\n        ln=ln.trim(); if(!ln||ln.charAt(0)===\"#\") return;\n        if(ln.indexOf(\"hue \")===0){ spec.hue=ln.slice(4).trim(); return; }\n        if(ln.indexOf(\"cell \")===0){ spec.cell=+ln.slice(5)||50; return; }\n        if(ln===\"context\"||ln.indexOf(\"context \")===0){ spec.context=true; return; }\n        var w=ln.match(/^([\\w-]+)\\s*->\\s*([\\w-]+)(.*)$/);\n        if(w){ var wi={from:w[1],to:w[2],flow:/\\bflow\\b/.test(w[3])}; var du=w[3].match(/dur:([\\d.]+)/); if(du)wi.dur=+du[1]; var wh=w[3].match(/#([0-9a-fA-F]{3,8})/); if(wh)wi.hue=\"#\"+wh[1]; spec.wires.push(wi); return; }\n        var m=ln.match(/^([\\w-]+)\\s+@(-?\\d+),(-?\\d+)(.*)$/);\n        if(m){ var b={id:m[1],at:[+m[2],+m[3]]}; var rest=m[4]||\"\";\n          var hh=rest.match(/\\bh(\\d+)/); b.h=hh?+hh[1]:1;\n          var an=rest.match(/\\b(float|pulse|bob)\\b/); if(an)b.anim=an[1];\n          var lb=rest.match(/\"([^\"]*)\"/); if(lb)b.label=lb[1];\n          var hu=rest.match(/#([0-9a-fA-F]{3,8})/); if(hu)b.hue=\"#\"+hu[1];\n          if(/\\bwin\\b/.test(rest)) b.detail=\"win\";\n          var sh=rest.match(/\\bshape:(\\w+)/); if(sh)b.shape=sh[1];\n          var ic=rest.match(/\\bicon:([a-z]+)/); if(ic)b.icon=ic[1];\n          var cp=rest.match(/\\bcomp:(\\d+)/); if(cp)b.dataI=+cp[1];\n          spec.blocks.push(b);\n        }\n      });\n      return spec;\n    }\n    function poly2(a){ return a.map(function(p){return p[0].toFixed(1)+\",\"+p[1].toFixed(1)}).join(\" \"); }\n    function shapeGeo2(shape,X,topY,Ybase,hw,q,H){\n      var g={faces:[],edges:\"\",topC:[X,topY],floor:[X,Ybase,hw*1.3,q*1.25],contact:[X,Ybase,hw*0.95,q*0.85]};\n      function seg(a,b){ return \"M\"+a[0].toFixed(1)+\",\"+a[1].toFixed(1)+\" L\"+b[0].toFixed(1)+\",\"+b[1].toFixed(1)+\" \"; }\n      if(shape===\"cyl\"){\n        var bot=topY+H;\n        var body=\"M\"+(X-hw)+\",\"+topY+\" L\"+(X-hw)+\",\"+bot+\" A\"+hw+\",\"+q+\" 0 0 0 \"+(X+hw)+\",\"+bot+\" L\"+(X+hw)+\",\"+topY+\" A\"+hw+\",\"+q+\" 0 0 1 \"+(X-hw)+\",\"+topY+\" Z\";\n        var topE=\"M\"+(X-hw)+\",\"+topY+\" A\"+hw+\",\"+q+\" 0 1 0 \"+(X+hw)+\",\"+topY+\" A\"+hw+\",\"+q+\" 0 1 0 \"+(X-hw)+\",\"+topY+\" Z\";\n        g.faces.push({cls:\"fl\",d:body});\n        g.faces.push({cls:\"ft\",d:topE});\n        g.edges=topE+\" M\"+(X-hw)+\",\"+topY+\" L\"+(X-hw)+\",\"+bot+\" M\"+(X+hw)+\",\"+topY+\" L\"+(X+hw)+\",\"+bot+\" M\"+(X-hw)+\",\"+bot+\" A\"+hw+\",\"+q+\" 0 0 0 \"+(X+hw)+\",\"+bot;\n        g.floor=[X,bot,hw*1.2,q*1.15]; g.contact=[X,bot,hw*0.9,q*0.78];\n        return g;\n      }\n      if(shape===\"pyr\"){\n        var apex=[X,topY],pl=[X-hw,Ybase],pf=[X,Ybase+q],pr=[X+hw,Ybase];\n        g.faces.push({cls:\"fl\",pts:[apex,pl,pf]});\n        g.faces.push({cls:\"fr\",pts:[apex,pf,pr]});\n        g.edges=seg(apex,pl)+seg(apex,pf)+seg(apex,pr)+seg(pl,pf)+seg(pf,pr);\n        g.topC=[X,topY+(Ybase-topY)*0.42];\n        g.floor=[X,Ybase+q*0.2,hw*1.15,q*1.1]; g.contact=[X,Ybase+q*0.12,hw*0.8,q*0.7];\n        return g;\n      }\n      if(shape===\"hex\"){\n        var bt=topY+H;\n        var R=[X+hw,topY],TR=[X+hw*0.5,topY-q],TL=[X-hw*0.5,topY-q],L=[X-hw,topY],BL=[X-hw*0.5,topY+q],BR=[X+hw*0.5,topY+q];\n        var Ld=[X-hw,bt],BLd=[X-hw*0.5,bt+q],BRd=[X+hw*0.5,bt+q],Rd=[X+hw,bt];\n        g.faces.push({cls:\"ft\",pts:[R,TR,TL,L,BL,BR]});\n        g.faces.push({cls:\"fl\",pts:[L,BL,BLd,Ld]});\n        g.faces.push({cls:\"fm\",pts:[BL,BR,BRd,BLd]});\n        g.faces.push({cls:\"fr\",pts:[BR,R,Rd,BRd]});\n        g.edges=seg(R,TR)+seg(TR,TL)+seg(TL,L)+seg(L,BL)+seg(BL,BR)+seg(BR,R)+seg(L,Ld)+seg(BL,BLd)+seg(BR,BRd)+seg(R,Rd)+seg(Ld,BLd)+seg(BLd,BRd)+seg(BRd,Rd);\n        g.floor=[X,bt,hw*1.25,q*1.2]; g.contact=[X,bt,hw*0.95,q*0.82];\n        return g;\n      }\n      var T=[X,topY-q],Rr=[X+hw,topY],B=[X,topY+q],Ll=[X-hw,topY],fb=[X,topY+q+H],lb=[X-hw,topY+H],rb=[X+hw,topY+H];\n      g.faces.push({cls:\"ft\",pts:[T,Rr,B,Ll]});\n      g.faces.push({cls:\"fl\",pts:[Ll,B,fb,lb]});\n      g.faces.push({cls:\"fr\",pts:[Rr,B,fb,rb]});\n      g.edges=seg(T,Rr)+seg(Rr,B)+seg(B,Ll)+seg(Ll,T)+seg(Ll,lb)+seg(B,fb)+seg(Rr,rb)+seg(lb,fb)+seg(fb,rb);\n      g.floor=[X,topY+q+H,hw*1.3,q*1.25]; g.contact=[X,topY+q+H,hw*0.95,q*0.82];\n      return g;\n    }\n    function isoScene2(spec){\n      var s=spec.cell||50, hw=s/2, q=s/4, fh=s*0.5;\n      var minX=1e9,maxX=-1e9,minY=1e9,maxY=-1e9, anchors={}, blocks=[];\n      spec.blocks.forEach(function(b,i){\n        var c=b.at[0], r=b.at[1], h=b.h||1;\n        var X=(c-r)*hw, Ybase=(c+r)*q, topY=Ybase-h*fh, hue=b.hue||spec.hue;\n        anchors[b.id!=null?b.id:i]={x:X,y:topY};\n        blocks.push({b:b,X:X,Ybase:Ybase,topY:topY,h:h,hue:hue,i:i});\n        if(X-hw*1.3<minX)minX=X-hw*1.3; if(X+hw*1.3>maxX)maxX=X+hw*1.3;\n        if(topY-q<minY)minY=topY-q; if(Ybase+q+s*0.62+16>maxY)maxY=Ybase+q+s*0.62+16;\n      });\n      var minYb=1e9,maxYb=-1e9;\n      blocks.forEach(function(bl){ if(bl.Ybase<minYb)minYb=bl.Ybase; if(bl.Ybase>maxYb)maxYb=bl.Ybase; });\n      var GRID=\"\",GHOSTS=\"\";\n      if(blocks.length){\n        var _cs=spec.blocks.map(function(b){return b.at[0]}),_rs=spec.blocks.map(function(b){return b.at[1]});\n        var minC=Math.min.apply(null,_cs),maxC=Math.max.apply(null,_cs),minR=Math.min.apply(null,_rs),maxR=Math.max.apply(null,_rs);\n        var g0=minC-1,g1=maxC+1,r0=minR-1,r1=maxR+1;\n        var occ={}; spec.blocks.forEach(function(b){occ[b.at[0]+\"_\"+b.at[1]]=1;});\n        var maxCR=Math.max.apply(null,spec.blocks.map(function(b){return b.at[0]+b.at[1]}));\n        var sd=9176,rand=function(){ sd=(sd*1103515245+12345)&0x7fffffff; return sd/0x7fffffff; };\n        var gl=\"\";\n        for(var gc=g0;gc<=g1;gc++){ gl+=\"M\"+((gc-r0)*hw).toFixed(1)+\",\"+((gc+r0)*q).toFixed(1)+\" L\"+((gc-r1)*hw).toFixed(1)+\",\"+((gc+r1)*q).toFixed(1)+\" \"; }\n        for(var gr=r0;gr<=r1;gr++){ gl+=\"M\"+((g0-gr)*hw).toFixed(1)+\",\"+((g0+gr)*q).toFixed(1)+\" L\"+((g1-gr)*hw).toFixed(1)+\",\"+((g1+gr)*q).toFixed(1)+\" \"; }\n        GRID='<path class=\"grid\" style=\"--h:'+spec.hue+'\" d=\"'+gl+'\"></path>';\n        if(spec.context){\n          var gh=[];\n          for(var cc=g0;cc<=g1;cc++){ for(var rr=r0;rr<=r1;rr++){ if(occ[cc+\"_\"+rr]) continue; if(cc+rr>maxCR) continue; if(rand()>0.36) continue; gh.push({c:cc,r:rr,h:1+Math.floor(rand()*3)}); } }\n          gh.sort(function(a,b){return (a.c+a.r)-(b.c+b.r)});\n          gh.forEach(function(o){ var X=(o.c-o.r)*hw,Ybase=(o.c+o.r)*q,topY=Ybase-o.h*fh,H=o.h*fh; var geo=shapeGeo2(\"cube\",X,topY,Ybase,hw,q,H); var gg='<g class=\"ghost\" style=\"--h:'+spec.hue+'\">'; geo.faces.forEach(function(f){ gg+='<polygon class=\"gface\" points=\"'+poly2(f.pts)+'\"></polygon>'; }); gg+='<path class=\"gedge\" d=\"'+geo.edges+'\"></path></g>'; GHOSTS+=gg; if(X-hw<minX)minX=X-hw; if(X+hw>maxX)maxX=X+hw; if(topY-q<minY)minY=topY-q; if(Ybase+q>maxY)maxY=Ybase+q; });\n        }\n        var _xs=[(g0-r0)*hw,(g0-r1)*hw,(g1-r0)*hw,(g1-r1)*hw];\n        minX=Math.min(minX,Math.min.apply(null,_xs)); maxX=Math.max(maxX,Math.max.apply(null,_xs));\n        minY=Math.min(minY,(g0+r0)*q-q); maxY=Math.max(maxY,(g1+r1)*q+q);\n      }\n      var DEFS='<defs><radialGradient id=\"shG\"><stop offset=\"0\" stop-color=\"#000\" stop-opacity=\".55\"/><stop offset=\".72\" stop-color=\"#000\" stop-opacity=\".16\"/><stop offset=\"1\" stop-color=\"#000\" stop-opacity=\"0\"/></radialGradient></defs>';\n      var out=GRID+GHOSTS;\n      (spec.wires||[]).forEach(function(w){\n        var a=anchors[w.from], z=anchors[w.to]; if(!a||!z) return;\n        var d=\"M\"+a.x.toFixed(1)+\",\"+a.y.toFixed(1)+\" L\"+z.x.toFixed(1)+\",\"+z.y.toFixed(1);\n        out+='<path class=\"iso-wire\" style=\"--h:'+(w.hue||spec.hue)+'\" d=\"'+d+'\"></path>';\n        if(w.flow) out+='<circle class=\"iso-flow\" r=\"3.4\" style=\"--h:'+(w.hue||spec.hue)+'\"><animateMotion dur=\"'+(w.dur||2.6)+'s\" repeatCount=\"indefinite\" path=\"'+d+'\"></animateMotion></circle>';\n      });\n      blocks.sort(function(p,q2){return p.Ybase-q2.Ybase});\n      blocks.forEach(function(bl){\n        var X=bl.X,topY=bl.topY,Ybase=bl.Ybase,h=bl.h,hue=bl.hue,b=bl.b,H=h*fh,i=bl.i;\n        var shape=b.shape||\"cube\";\n        var geo=shapeGeo2(shape,X,topY,Ybase,hw,q,H);\n        var dep=maxYb>minYb?(Ybase-minYb)/(maxYb-minYb):1, op=(0.78+0.22*dep).toFixed(3);\n        var mix=function(p,base){ return \"color-mix(in srgb,\"+hue+\" \"+p+\"%,\"+base+\")\"; };\n        var gd='<defs><linearGradient id=\"ftg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(42,\"#0d0e15\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(20,\"#08090f\")+'\"/></linearGradient><linearGradient id=\"flg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(24,\"#0a0b12\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(9,\"#050609\")+'\"/></linearGradient><linearGradient id=\"frg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(13,\"#08080e\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(4,\"#040406\")+'\"/></linearGradient><linearGradient id=\"fmg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(30,\"#0b0c13\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(12,\"#060710\")+'\"/></linearGradient><radialGradient id=\"glowG'+i+'\"><stop offset=\"0\" stop-color=\"'+hue+'\" stop-opacity=\".36\"/><stop offset=\"1\" stop-color=\"'+hue+'\" stop-opacity=\"0\"/></radialGradient></defs>';\n        var cls=\"iso-blk\"+(b.anim?(\" iso-\"+b.anim):\"\")+(b.dataI!=null?\" comp\":\"\");\n        var di=(b.dataI!=null?' data-i=\"'+b.dataI+'\"':'');\n        var g='<g class=\"'+cls+'\"'+di+' style=\"--h:'+hue+';opacity:'+op+';animation-delay:'+(-i*0.4).toFixed(2)+'s\">'+gd;\n        g+='<ellipse class=\"contact\" fill=\"url(#shG)\" cx=\"'+geo.contact[0].toFixed(1)+'\" cy=\"'+geo.contact[1].toFixed(1)+'\" rx=\"'+geo.contact[2].toFixed(1)+'\" ry=\"'+geo.contact[3].toFixed(1)+'\"></ellipse>';\n        g+='<ellipse class=\"floor-glow\" fill=\"url(#glowG'+i+')\" cx=\"'+geo.floor[0].toFixed(1)+'\" cy=\"'+geo.floor[1].toFixed(1)+'\" rx=\"'+geo.floor[2].toFixed(1)+'\" ry=\"'+geo.floor[3].toFixed(1)+'\"></ellipse>';\n        geo.faces.forEach(function(f){ var fill=\"url(#\"+f.cls+\"g\"+i+\")\"; if(f.d) g+='<path class=\"face\" fill=\"'+fill+'\" d=\"'+f.d+'\"></path>'; else g+='<polygon class=\"face\" fill=\"'+fill+'\" points=\"'+poly2(f.pts)+'\"></polygon>'; });\n        if(shape===\"cube\"&&h>1){ for(var k=1;k<h;k++){ var yy=topY+k*fh; g+='<line class=\"det\" x1=\"'+(X-hw)+'\" y1=\"'+yy+'\" x2=\"'+X+'\" y2=\"'+(yy+q)+'\"></line><line class=\"det\" x1=\"'+X+'\" y1=\"'+(yy+q)+'\" x2=\"'+(X+hw)+'\" y2=\"'+yy+'\"></line>'; } }\n        if(b.detail===\"win\"&&shape===\"cube\"){\n          for(var o2=fh*0.5;o2<H;o2+=fh){ g+='<line class=\"det\" x1=\"'+(X-hw)+'\" y1=\"'+(topY+o2)+'\" x2=\"'+X+'\" y2=\"'+(topY+q+o2)+'\"></line><line class=\"det\" x1=\"'+X+'\" y1=\"'+(topY+q+o2)+'\" x2=\"'+(X+hw)+'\" y2=\"'+(topY+o2)+'\"></line>'; }\n          g+='<line class=\"det\" x1=\"'+(X-hw*0.5)+'\" y1=\"'+(topY+q*0.5)+'\" x2=\"'+(X-hw*0.5)+'\" y2=\"'+(topY+q*0.5+H)+'\"></line><line class=\"det\" x1=\"'+(X+hw*0.5)+'\" y1=\"'+(topY+q*0.5)+'\" x2=\"'+(X+hw*0.5)+'\" y2=\"'+(topY+q*0.5+H)+'\"></line>';\n        }\n        g+='<path class=\"glow2\" d=\"'+geo.edges+'\"></path><path class=\"glow1\" d=\"'+geo.edges+'\"></path><path class=\"edge\" d=\"'+geo.edges+'\"></path><path class=\"core\" d=\"'+geo.edges+'\"></path>';\n        if(b.icon&&ICONS2[b.icon]){ var isc=(hw/30).toFixed(3); g+='<g class=\"iso-ic\" transform=\"translate('+geo.topC[0].toFixed(1)+','+geo.topC[1].toFixed(1)+') scale('+isc+') matrix(1,0.5,-1,0.5,0,0) translate(-12,-12)\">'+ICONS2[b.icon]+'</g>'; }\n        g+='</g>';\n        out+=g;\n        if(b.label){ var lf=Math.max(10,Math.round(s*0.26)); var lw=(b.label.length*lf*0.6+18); var ly=(Ybase+q+lf+12); out+='<rect class=\"lbl-bg\" x=\"'+(X-lw/2).toFixed(1)+'\" y=\"'+(ly-lf*0.85).toFixed(1)+'\" width=\"'+lw.toFixed(1)+'\" height=\"'+(lf*1.7).toFixed(1)+'\" rx=\"'+(lf*0.85).toFixed(1)+'\"></rect><text class=\"iso-lbl\" x=\"'+X.toFixed(1)+'\" y=\"'+ly.toFixed(1)+'\" style=\"font-size:'+lf+'px\">'+b.label+'</text>'; }\n      });\n      var pad=42, vbx=(minX-pad), vby=(minY-pad), vbw=(maxX-minX)+pad*2, vbh=(maxY-minY)+pad*2;\n      var sd2=4231,rnd=function(){ sd2=(sd2*1103515245+12345)&0x7fffffff; return sd2/0x7fffffff; };\n      for(var di2=0;di2<14;di2++){ out+='<circle class=\"dust\" cx=\"'+(vbx+rnd()*vbw).toFixed(1)+'\" cy=\"'+(vby+rnd()*vbh).toFixed(1)+'\" r=\"'+(0.6+rnd()*1.5).toFixed(2)+'\" style=\"animation-delay:-'+(rnd()*6).toFixed(2)+'s;animation-duration:'+(5+rnd()*6).toFixed(2)+'s\"></circle>'; }\n      if(!isFinite(vbw)||vbw<=0) return '<svg class=\"iso-svg\" viewBox=\"0 0 100 100\"></svg>';\n      return '<svg class=\"iso-svg\" viewBox=\"'+vbx.toFixed(1)+\" \"+vby.toFixed(1)+\" \"+vbw.toFixed(1)+\" \"+vbh.toFixed(1)+'\" preserveAspectRatio=\"xMidYMid meet\">'+DEFS+out+'</svg>';\n    }\n    var ICON_MAP2=[\n      [/webchat|widget/i,\"chat\"],\n      [/transbordo|handoff|humano|human|\\bsso\\b|identidade|onboard|colaborador|segurad/i,\"user\"],\n      [/\\bbot\\b|triag|copilot|copiloto|assistent|\\bai\\b|recomenda|next-best|semantic|semânt|busca|search/i,\"ai\"],\n      [/console|workspace|supervis|vitrine|storefront|catalog|catálogo|experiência/i,\"screen\"],\n      [/alerta|alert|evento|gatilho|monitor|anomal/i,\"bolt\"],\n      [/integr|vtex|graphql|connect|\\bapi\\b|outreach|ondas|waves|\\bcrm\\b/i,\"plug\"],\n      [/\\bsql\\b|data lake|knowledge|conhecimento|registry|banco|\\bbom\\b|estrutura|planejamento|supply|fornec/i,\"db\"],\n      [/score|analytics|performance|\\bbi\\b|painéis|painel|dashboard|metas|targets|modelagem|modeling|roi|financ|simulad|scenario|cenário/i,\"chart\"],\n      [/fila|queue|csat|automa|\\brush\\b|agendad|scheduler|regras|rules|fluxo|ingest/i,\"gear\"],\n      [/\\bocr\\b|leitura|documento|\\bdoc\\b|proposta|relatóri|export|planilha/i,\"doc\"],\n      [/segment|\\bnode\\b|\\bkb\\b/i,\"node\"],\n      [/foto|photo|imagem|image|estúdio|studio|conteúdo|content|mídia|media/i,\"screen\"],\n      [/erp|loja|store|compra|procurement|sourcing/i,\"cart\"]\n    ];\n    function pickIcon2(comp){\n      var s=((comp.title&&comp.title.en)||\"\")+\" \"+((comp.label&&comp.label.en)||\"\");\n      for(var i=0;i<ICON_MAP2.length;i++){ if(ICON_MAP2[i][0].test(s)) return ICON_MAP2[i][1]; }\n      return \"gear\";\n    }\n    function pickShape2(ic){\n      if(ic===\"db\") return \"cyl\";\n      if(ic===\"plug\"||ic===\"node\") return \"hex\";\n      if(ic===\"bolt\") return \"pyr\";\n      if(ic===\"gear\") return \"hex\";\n      return \"cube\";\n    }\n    var SYS_POS=[[-2,6],[2,6],[2,2],[6,2],[6,-2],[10,-2]];\n    var SYS_H=[2,3,1,2,3,2], SYS_AN=[\"float\",\"pulse\",\"bob\",\"float\",\"pulse\",\"bob\"];\n    function sysmapSpec(u){\n      var n=u.comps.length, lines=[\"hue \"+u.hue,\"cell 58\",\"context\"];\n      for(var i=0;i<n;i++){\n        var c=u.comps[i], ic=pickIcon2(c), sh=pickShape2(ic), p=SYS_POS[i%SYS_POS.length];\n        var lbl=String(L(c.label)||\"\").replace(/\"/g,\"\");\n        lines.push(\"c\"+i+\" @\"+p[0]+\",\"+p[1]+\" h\"+SYS_H[i%SYS_H.length]+\" \"+SYS_AN[i%SYS_AN.length]+\" shape:\"+sh+\" icon:\"+ic+\" comp:\"+i+' \"'+lbl+'\"');\n      }\n      for(var j=1;j<n;j++){ lines.push(\"c\"+(j-1)+\" -> c\"+j+\" flow\"); }\n      return lines.join(\"\\n\");\n    }\n    function detailSpec(u,c,j){\n      var ic=pickIcon2(c), sh=pickShape2(ic);\n      var a=[\"float\",\"pulse\",\"bob\"][j%3], b2=[\"pulse\",\"bob\",\"float\"][j%3];\n      var sh2=[\"hex\",\"cyl\",\"cube\",\"pyr\"][j%4], h1=[2,3,2][j%3];\n      var lines=[\"hue \"+u.hue,\"cell 48\"];\n      lines.push(\"m @0,0 h\"+h1+\" \"+a+\" shape:\"+sh+\" icon:\"+ic);\n      lines.push(\"s @2,1 h1 \"+b2+\" shape:\"+sh2);\n      lines.push(\"m -> s flow\");\n      return lines.join(\"\\n\");\n    }\n    var __dio = null;\n    function hxRgb(h){ h=(h||'#888888').replace('#',''); if(h.length===3) h=h[0]+h[0]+h[1]+h[1]+h[2]+h[2]; return [parseInt(h.substr(0,2),16)/255,parseInt(h.substr(2,2),16)/255,parseInt(h.substr(4,2),16)/255]; }\n    function rgbHsl(r,g,b){ var mx=Math.max(r,g,b),mn=Math.min(r,g,b),h,s,l=(mx+mn)/2; if(mx===mn){h=0;s=0;} else { var d=mx-mn; s=l>0.5?d/(2-mx-mn):d/(mx+mn); h=(mx===r)?((g-b)/d+(g<b?6:0)):(mx===g)?((b-r)/d+2):((r-g)/d+4); h/=6; } return [h,s,l]; }\n    function hslRgb(h,s,l){ function f(p,q,t){ if(t<0)t+=1; if(t>1)t-=1; if(t<1/6)return p+(q-p)*6*t; if(t<1/2)return q; if(t<2/3)return p+(q-p)*(2/3-t)*6; return p; } if(s===0)return [l,l,l]; var q=l<0.5?l*(1+s):l+s-l*s,p=2*l-q; return [f(p,q,h+1/3),f(p,q,h),f(p,q,h-1/3)]; }\n    function neon(rgb,rotDeg,li){ var hsl=rgbHsl(rgb[0],rgb[1],rgb[2]); var h=(hsl[0]+(rotDeg||0)/360+1)%1; var s=Math.max(hsl[1],0.85); return hslRgb(h,s,li||0.6); }\n    function kanjiFor(c,i){ var key=((((c&&c.label&&c.label.en)||'')+' '+((c&&c.label&&c.label.pt)||'')).toLowerCase()); var MAP=[[['webchat','chat','conversa'],'会話'],[['triage','triagem','bot'],'分流'],[['handoff','transbordo'],'引継'],[['console'],'制御'],[['queue','fila'],'待列'],[['csat','satisf'],'満足'],[['analytic','analy','painel','dashboard','painéis'],'分析'],[['copilot','copiloto','assist','ai '],'知能'],[['search','busca'],'検索'],[['crm','outreach','cadência','lead'],'顧客'],[['sql','query'],'問合'],[['export','planilha','spreadsheet'],'出力'],[['rush','ingest'],'取込'],[['store','record','erp','estoque'],'記録'],[['rule','regra','score'],'規則'],[['bom','estrutura'],'展開'],[['photo','foto','image','imagem','conteúdo','content'],'生成'],[['catalog','catálogo','produto','product'],'商品'],[['vtex','graphql','integr'],'接続'],[['sso','auth','login'],'認証'],[['alert','monitor'],'警報'],[['target','meta','plan'],'目標'],[['scenario','cenário','simul','model'],'模擬'],[['omnichannel','onda','wave','canal'],'波信'],[['semant','semânt','conhecimento','ground','ancorada','fonte','kb'],'知識'],[['next','próxima','ação','action','performance'],'行動'],[['supply','fornecimento','planejamento'],'供給']]; for(var m=0;m<MAP.length;m++){ for(var w=0;w<MAP[m][0].length;w++){ if(key.indexOf(MAP[m][0][w])>=0) return MAP[m][1]; } } var pool=['都','光','夜','街','電','網','機','塔']; return pool[(i||0)%pool.length]; }\n\n    // ---- data-driven scene: each component => one neon building, tinted in the universe hue ----\n    function dioramaScene(u){\n      var boxes=[], sg=[], lamps=[], beacons=[];\n      var ground=[.11,.12,.15], roofC=[.15,.15,.19];\n      function bx(p,s,c,seed){ return {p:p,s:s,c:c,win:0,g:0,seed:seed||0}; }\n      function em(p,s,c){ return {p:p,s:s,c:c,win:2,g:0,seed:0}; }\n      function bld(p,s,tint,seed){ var t=tint||1.0; return {p:p,s:s,c:[0.26*t,0.25*t,0.31*t],win:1,g:0,seed:seed||0}; }\n      function grd(p,s){ return {p:p,s:s,c:ground,win:0,g:1,seed:0}; }\n      function roof(b,seed){ var ty=b.p[1]+b.s[1]/2; boxes.push(bx([b.p[0]-b.s[0]*0.18,ty+0.32,b.p[2]+b.s[2]*0.16],[b.s[0]*0.34,0.64,b.s[2]*0.34],roofC,seed)); boxes.push(bx([b.p[0]+b.s[0]*0.26,ty+0.75,b.p[2]-b.s[2]*0.2],[0.05,1.5,0.05],[.09,.09,.12],seed)); boxes.push(bx([b.p[0]+b.s[0]*0.12,ty+0.16,b.p[2]+b.s[2]*0.3],[b.s[0]*0.3,0.3,b.s[2]*0.22],roofC,seed)); beacons.push([b.p[0]+b.s[0]*0.26,ty+1.55,b.p[2]-b.s[2]*0.2]); }\n      function detail(b,seed){ var fz=b.p[2]+b.s[2]/2, base=b.p[1]-b.s[1]/2, cx=b.p[0]; boxes.push(em([cx,base+0.42,fz+0.04],[b.s[0]*0.66,0.52,0.04],[1.0,0.72,0.36])); boxes.push({p:[cx,base+0.66,fz+0.28],s:[b.s[0]*0.72,0.09,0.5],c:(seed>0.5?[.5,.12,.14]:[.12,.32,.18]),win:0,g:0,seed:0}); boxes.push(bx([cx-b.s[0]/2-0.11,base+b.s[1]*0.58,b.p[2]+0.35],[0.22,0.3,0.36],[.1,.1,.13],0)); boxes.push(bx([cx-b.s[0]/2-0.11,base+b.s[1]*0.34,b.p[2]-0.35],[0.2,0.26,0.32],[.1,.1,.13],0)); }\n      function lamp(x,zz){ boxes.push(bx([x,0.9,zz],[0.06,1.8,0.06],[.08,.08,.10],0)); boxes.push(bx([x-0.13,1.78,zz],[0.28,0.06,0.1],[.08,.08,.10],0)); boxes.push(em([x-0.24,1.72,zz],[0.14,0.1,0.14],[1.0,0.72,0.34])); lamps.push([x-0.2,1.45,zz]); }\n      function road(cx,cz,sx,sz){ boxes.push({p:[cx,0.02,cz],s:[sx,0.06,sz],c:[.05,.055,.075],win:0,g:0,seed:0}); }\n      function paint(cx,cz,sx,sz){ boxes.push({p:[cx,0.055,cz],s:[sx,0.02,sz],c:[.3,.31,.34],win:2,g:0,seed:0}); }\n      function vending(x,z,col){ boxes.push(bx([x,0.45,z],[0.5,0.9,0.42],[.08,.08,.1],0)); boxes.push(em([x,0.52,z+0.22],[0.36,0.64,0.03],col)); }\n      function figure(x,z){ boxes.push(bx([x,0.27,z],[0.16,0.42,0.14],[.05,.05,.07],0)); boxes.push(bx([x,0.55,z],[0.12,0.13,0.12],[.06,.06,.08],0)); }\n      function lanternWire(x1,x2,z,y,n,col){ boxes.push(bx([(x1+x2)*0.5,y+0.04,z],[Math.abs(x2-x1),0.02,0.02],[.06,.06,.07],0)); for(var i=0;i<n;i++){ var f=(i+0.5)/n; boxes.push(em([x1+(x2-x1)*f,y-Math.sin(f*3.14159)*0.3,z],[0.11,0.16,0.11],col)); } }\n      function onZ(b,hy,k,n,c,sc){ sc=sc||1; return {p:[b.p[0],b.p[1]-b.s[1]/2+hy*b.s[1],b.p[2]+b.s[2]/2+0.05],w:1.5*sc,h:1.0*sc,axis:'z',k:k,n:n,c:c,port:false}; }\n      function bladeZ(b,hy,k,n,c,sc){ sc=sc||1; return {p:[b.p[0]-b.s[0]*0.22,b.p[1]-b.s[1]/2+hy*b.s[1],b.p[2]+b.s[2]/2+0.5*sc],w:1.0*sc,h:2.0*sc,axis:'x',k:k,n:n,c:c,port:true}; }\n      // street framework (roads, curbs, crosswalk, lamps, L traffic-light pole) — matches engine coords so the animated heads align\n      boxes.push(grd([0,-0.3,1.0],[19,0.6,15]));\n      boxes.push({p:[0,0.06,1.0],s:[11,0.12,7],c:[.15,.16,.2],win:0,g:1,seed:0});\n      road(0,5.5,17,1.9); road(0,-3.5,17,1.9); road(-6.6,1.0,1.9,11); road(6.6,1.0,1.9,11);\n      boxes.push({p:[0,0.14,4.5],s:[11.2,0.06,0.16],c:[.22,.23,.28],win:0,g:0,seed:0});\n      boxes.push({p:[0,0.14,-2.5],s:[11.2,0.06,0.16],c:[.22,.23,.28],win:0,g:0,seed:0});\n      boxes.push({p:[-5.5,0.14,1.0],s:[0.16,0.06,7.2],c:[.22,.23,.28],win:0,g:0,seed:0});\n      boxes.push({p:[5.5,0.14,1.0],s:[0.16,0.06,7.2],c:[.22,.23,.28],win:0,g:0,seed:0});\n      for(var dx=-7.5;dx<=7.5;dx+=1.5){ paint(dx,5.5,0.6,0.08); paint(dx,-3.5,0.6,0.08); }\n      for(var dz=-3.5;dz<=5.5;dz+=1.5){ paint(-6.6,dz,0.08,0.6); paint(6.6,dz,0.08,0.6); }\n      for(var cz2=4.6;cz2<=6.4;cz2+=0.42) paint(-2.0,cz2,0.9,0.16);\n      lamp(-5.3,4.3); lamp(5.3,4.3); lamp(-5.3,-2.3); lamp(5.3,-2.3);\n      boxes.push(bx([-3.0,1.5,4.4],[0.1,3.0,0.1],[.06,.06,.08],0)); boxes.push(bx([-3.0,2.85,5.02],[0.1,0.1,1.3],[.05,.05,.07],0)); boxes.push(bx([-3.0,2.7,5.62],[0.2,0.44,0.16],[.04,.04,.06],0));\n      // buildings from components\n      var main=neon(hxRgb(u.hue),0,0.6), acc1=neon(hxRgb(u.hue),34,0.62), acc2=neon(hxRgb(u.hue),-30,0.6);\n      var accents=[main,main,acc1,main,acc2,acc1,main,acc2];\n      var slots=[[-3.5,0.4],[-1.1,1.7],[1.3,0.2],[3.6,1.5],[0.2,2.3],[-3.5,2.2],[2.0,2.6],[3.7,-0.5]];\n      var comps=u.comps||[];\n      function hash(i){ var xx=Math.sin(i*12.9898+4.7)*43758.5453; return xx-Math.floor(xx); }\n      for(var i=0;i<comps.length && i<slots.length;i++){\n        var c=comps[i], h1=hash(i), h2=hash(i+9.3);\n        var hgt=2.7+h1*2.1, w=1.55+h2*0.5;\n        var b=bld([slots[i][0], hgt/2, slots[i][1]],[w,hgt,w],(i%2?1.06:0.9), i*0.31);\n        boxes.push(b); roof(b, i*0.31); detail(b,(i%2)?1:0);\n        var lab=L(c.label)||(('0'+(i+1)).slice(-2)), kj=kanjiFor(c,i), col=accents[i%accents.length];\n        if(lab.length<=8 && hgt>3.4) sg.push(bladeZ(b,0.6,kj,lab,col,1.0));\n        else sg.push(onZ(b,0.62,kj,lab,col,0.98));\n      }\n      lanternWire(-5.2,5.2,4.35,2.5,7,[1.0,0.52,0.2]);\n      vending(-4.9,3.7,main); vending(4.7,-1.4,acc1);\n      figure(-2.2,3.95); figure(0.9,4.05);\n      return {boxes:boxes,signs:sg,lamps:lamps,beacons:beacons};\n    }\n\n    // ---- render core: inlined VERBATIM from the isoshader engine (lab UI stripped) ----\n    function mountDiorama(canvas, scene, opts){\n      opts=opts||{};\n      var gl=canvas.getContext('webgl2',{antialias:true,alpha:false,premultipliedAlpha:false});\n      if(!gl){ if(window.console)console.warn('[diorama] WebGL2 indisponivel'); return {destroy:function(){}}; }\n      var CJK='\"Hiragino Sans\",\"Hiragino Kaku Gothic ProN\",\"PingFang SC\",\"Noto Sans CJK JP\",\"Yu Gothic\",sans-serif';\n      var CUBE=[]; (function(){\n        var F=[\n          [[.5,-.5,-.5],[.5,.5,-.5],[.5,.5,.5],[.5,-.5,.5],[1,0,0]],\n          [[-.5,-.5,.5],[-.5,.5,.5],[-.5,.5,-.5],[-.5,-.5,-.5],[-1,0,0]],\n          [[-.5,.5,-.5],[-.5,.5,.5],[.5,.5,.5],[.5,.5,-.5],[0,1,0]],\n          [[-.5,-.5,.5],[-.5,-.5,-.5],[.5,-.5,-.5],[.5,-.5,.5],[0,-1,0]],\n          [[-.5,-.5,.5],[.5,-.5,.5],[.5,.5,.5],[-.5,.5,.5],[0,0,1]],\n          [[.5,-.5,-.5],[-.5,-.5,-.5],[-.5,.5,-.5],[.5,.5,-.5],[0,0,-1]]\n        ];\n        F.forEach(function(f){ [f[0],f[1],f[2],f[0],f[2],f[3]].forEach(function(v){ CUBE.push(v[0],v[1],v[2],f[4][0],f[4][1],f[4][2]); }); });\n      })();\n      function bx(p,s,c,seed){ return {p:p,s:s,c:c,win:0,g:0,seed:seed||0}; }\n      function em(p,s,c){ return {p:p,s:s,c:c,win:2,g:0,seed:0}; }\n      function car(boxes,x,zz,col,ax,dir){ ax=ax||'x'; dir=dir||1;\n        boxes.push(em([x,0.066,zz],[ax==='x'?1.4:0.86,0.02,ax==='x'?0.86:1.4],[.009,.009,.013]));\n        if(ax==='x'){\n          boxes.push(bx([x,0.26,zz],[1.0,0.26,0.52],col,0)); boxes.push(bx([x,0.48,zz],[0.52,0.22,0.48],[col[0]*0.55,col[1]*0.55,col[2]*0.6],0));\n          boxes.push(em([x+dir*0.47,0.28,zz],[0.06,0.12,0.44],[1.,0.95,0.72])); boxes.push(em([x-dir*0.47,0.28,zz],[0.06,0.1,0.44],[1.,0.18,0.12]));\n          boxes.push(bx([x-0.32,0.12,zz-0.29],[0.18,0.18,0.09],[.04,.04,.05],0)); boxes.push(bx([x-0.32,0.12,zz+0.29],[0.18,0.18,0.09],[.04,.04,.05],0)); boxes.push(bx([x+0.32,0.12,zz-0.29],[0.18,0.18,0.09],[.04,.04,.05],0)); boxes.push(bx([x+0.32,0.12,zz+0.29],[0.18,0.18,0.09],[.04,.04,.05],0));\n        } else {\n          boxes.push(bx([x,0.26,zz],[0.52,0.26,1.0],col,0)); boxes.push(bx([x,0.48,zz],[0.48,0.22,0.52],[col[0]*0.55,col[1]*0.55,col[2]*0.6],0));\n          boxes.push(em([x,0.28,zz+dir*0.47],[0.44,0.12,0.06],[1.,0.95,0.72])); boxes.push(em([x,0.28,zz-dir*0.47],[0.44,0.1,0.06],[1.,0.18,0.12]));\n          boxes.push(bx([x-0.29,0.12,zz-0.32],[0.09,0.18,0.18],[.04,.04,.05],0)); boxes.push(bx([x-0.29,0.12,zz+0.32],[0.09,0.18,0.18],[.04,.04,.05],0)); boxes.push(bx([x+0.29,0.12,zz-0.32],[0.09,0.18,0.18],[.04,.04,.05],0)); boxes.push(bx([x+0.29,0.12,zz+0.32],[0.09,0.18,0.18],[.04,.04,.05],0));\n        }\n      }\n      var RA=-6.6,RB=6.6,RF=5.5,RK=-3.5,L0=RB-RA,L1=RF-RK,L2=RB-RA,L3=RF-RK,RP=L0+L1+L2+L3;\n      function ringPos(d){ d=((d%RP)+RP)%RP;\n        if(d<L0) return [RA+d,RF,'x',1];\n        d-=L0; if(d<L1) return [RB,RF-d,'z',-1];\n        d-=L1; if(d<L2) return [RB-d,RK,'x',-1];\n        d-=L2; return [RA,RK+d,'z',1]; }\n\n      function sh(t,s){ var o=gl.createShader(t); gl.shaderSource(o,s); gl.compileShader(o); if(!gl.getShaderParameter(o,gl.COMPILE_STATUS)) throw new Error(gl.getShaderInfoLog(o)); return o; }\n      function prog(vs,fs){ var p=gl.createProgram(); gl.attachShader(p,sh(gl.VERTEX_SHADER,vs)); gl.attachShader(p,sh(gl.FRAGMENT_SHADER,fs)); gl.linkProgram(p); if(!gl.getProgramParameter(p,gl.LINK_STATUS)) throw new Error(gl.getProgramInfoLog(p)); return p; }\n      var VS=`#version 300 es\nlayout(location=0) in vec3 aPos; layout(location=1) in vec3 aNormal;\nlayout(location=2) in vec3 iPos; layout(location=3) in vec3 iSize; layout(location=4) in vec3 iCol; layout(location=5) in float iWin; layout(location=6) in float iSeed;\nuniform mat4 uVP;\nout vec3 vN; out vec3 vObj; out vec3 vCol; out float vWin; out vec3 vW; out float vSeed;\nvoid main(){ vec3 p=aPos*iSize+iPos; gl_Position=uVP*vec4(p,1.0); vN=aNormal; vObj=aPos*iSize; vCol=iCol; vWin=iWin; vW=p; vSeed=iSeed; }`;\n      var FS=`#version 300 es\nprecision highp float;\nin vec3 vN; in vec3 vObj; in vec3 vCol; in float vWin; in vec3 vW; in float vSeed;\nuniform float uWinI; uniform int uNL; uniform vec3 uLP[16]; uniform vec3 uLC[16];\nuniform sampler2D uShadow; uniform mat4 uLVP; uniform float uShAmt; uniform vec3 uLDir; uniform vec3 uEye;\nout vec4 O;\nfloat hash(vec2 p){ p=fract(p*vec2(123.34,456.21)); p+=dot(p,p+45.32); return fract(p.x*p.y); }\nfloat shadow(vec3 w){\n  vec4 lp=uLVP*vec4(w,1.0); vec3 c=lp.xyz/lp.w*0.5+0.5;\n  if(c.x<0.0||c.x>1.0||c.y<0.0||c.y>1.0||c.z>1.0) return 1.0;\n  float bias=0.0025, s=0.0, tx=1.0/1024.0;\n  for(int i=-1;i<=1;i++)for(int j=-1;j<=1;j++){ float d=texture(uShadow,c.xy+vec2(float(i),float(j))*tx).r; s+=(c.z-bias>d)?0.0:1.0; }\n  return s/9.0;\n}\nvoid main(){\n  if(vWin>1.5){ O=vec4(vCol*3.2,1.0); return; }\n  vec3 n=normalize(vN); vec3 an=abs(n);\n  float up=n.y*0.5+0.5;\n  vec3 amb=mix(vec3(0.018,0.022,0.038),vec3(0.08,0.11,0.19),up);\n  float face=(an.y>=an.x&&an.y>=an.z)?1.0:((an.x>an.z)?(n.x>0.0?0.92:0.72):(n.z>0.0?0.84:0.66));\n  float shf=mix(1.0-uShAmt,1.0,shadow(vW));\n  float ndl=max(dot(n,uLDir),0.0);\n  vec3 col=vCol*(amb*face + vec3(0.55,0.62,0.82)*ndl*shf)*1.3;\n  if(vWin>0.5) col*=0.82+0.18*smoothstep(0.0,4.0,vW.y);\n  if(vWin>0.5 && an.y<0.5){\n    vec2 uv=(an.x>0.5)? vObj.zy : vObj.xy;\n    vec2 cell=floor(uv/0.5); vec2 f=fract(uv/0.5);\n    float box=step(0.2,f.x)*step(f.x,0.8)*step(0.28,f.y)*step(f.y,0.86);\n    float h=hash(cell+vSeed*17.0+7.3);\n    float on=step(0.30+0.22*fract(vSeed*5.3),h);\n    float br=0.4+1.0*hash(cell+vSeed*9.0+3.1);\n    vec3 wc=mix(vec3(1.0,0.78,0.44),vec3(1.0,0.94,0.8),hash(cell+9.9));\n    col+=wc*box*on*br*uWinI;\n  }\n  for(int i=0;i<16;i++){ if(i>=uNL) break; vec3 dl=uLP[i]-vW; float d=length(dl); vec3 ld=dl/max(d,0.001); float at=1.0/(1.0+d*d*3.4); col+=uLC[i]*at*(0.28+0.72*max(dot(n,ld),0.0)); }\n  col=mix(col, vec3(0.02,0.028,0.055), (1.0-exp(-max(length(vW-uEye)-22.0,0.0)*0.03))*0.72);\n  O=vec4(col,1.0);\n}`;\n      var DVS=`#version 300 es\nlayout(location=0) in vec3 aPos; layout(location=2) in vec3 iPos; layout(location=3) in vec3 iSize;\nuniform mat4 uLVP;\nvoid main(){ gl_Position=uLVP*vec4(aPos*iSize+iPos,1.0); }`;\n      var DFS=`#version 300 es\nprecision highp float; void main(){}`;\n      var SVS=`#version 300 es\nlayout(location=0) in vec2 aPos; layout(location=1) in vec2 aUv;\nuniform mat4 uVP; uniform mat4 uModel; out vec2 vUv;\nvoid main(){ vUv=aUv; gl_Position=uVP*uModel*vec4(aPos,0.0,1.0); }`;\n      var SFS=`#version 300 es\nprecision highp float;\nin vec2 vUv; out vec4 O; uniform sampler2D uTex; uniform float uGlow;\nvoid main(){ vec4 t=texture(uTex,vUv); if(t.a<0.02) discard; O=vec4(t.rgb*uGlow, t.a); }`;\n      var PVS=`#version 300 es\nlayout(location=0) in vec2 aP; out vec2 vUv; void main(){ vUv=aP*0.5+0.5; gl_Position=vec4(aP,0.,1.); }`;\n      var BLURFS=`#version 300 es\nprecision highp float; in vec2 vUv; out vec4 O; uniform sampler2D uTex; uniform vec2 uDir; uniform float uBright;\nvoid main(){ float w[5]=float[5](0.227,0.194,0.121,0.054,0.016); vec3 c=texture(uTex,vUv).rgb*w[0];\n  for(int i=1;i<5;i++){ c+=texture(uTex,vUv+uDir*float(i)).rgb*w[i]; c+=texture(uTex,vUv-uDir*float(i)).rgb*w[i]; }\n  if(uBright>0.5){ float l=max(c.r,max(c.g,c.b)); c*=smoothstep(0.55,1.0,l); } O=vec4(c,1.); }`;\n      var COMPFS=`#version 300 es\nprecision highp float; in vec2 vUv; out vec4 O; uniform sampler2D uScene; uniform sampler2D uBloom; uniform float uBloomI,uExp,uSat;\nvec3 aces(vec3 x){ return clamp((x*(2.51*x+0.03))/(x*(2.43*x+0.59)+0.14),0.,1.); }\nfloat hash(vec2 p){ p=fract(p*vec2(123.34,456.21)); p+=dot(p,p+45.32); return fract(p.x*p.y); }\nvoid main(){\n  float ca=0.0016; vec3 s=vec3(texture(uScene,vUv+vec2(ca,0.)).r,texture(uScene,vUv).g,texture(uScene,vUv-vec2(ca,0.)).b), b=texture(uBloom,vUv).rgb;\n  vec3 col=aces((s+b*uBloomI)*uExp);\n  float lu=dot(col,vec3(.299,.587,.114));\n  col=mix(col*vec3(0.88,0.96,1.12), col*vec3(1.08,1.0,0.9), smoothstep(0.2,0.7,lu));\n  col=clamp((col-0.5)*1.12+0.5,0.0,1.0);\n  col=mix(vec3(lu),col,uSat); col+=vec3(0.006,0.011,0.02)*(1.0-col);\n  col+=vec3(0.4,0.5,0.72)*exp(-length((vUv-vec2(0.74,0.8))*vec2(1.0,1.25))*3.2)*0.13;\n  vec2 vg=vUv; col*=0.40+0.60*pow(16.0*vg.x*vg.y*(1.0-vg.x)*(1.0-vg.y),0.28);\n  col+=(hash(vUv*vec2(1600.,900.))-0.5)*0.012;\n  col=pow(max(col,0.),vec3(0.4545));\n  O=vec4(col,1.);\n}`;\n      var mainP, depthP, signP, blurP, compP;\n      try{ mainP=prog(VS,FS); depthP=prog(DVS,DFS); signP=prog(SVS,SFS); blurP=prog(PVS,BLURFS); compP=prog(PVS,COMPFS); }\n      catch(err){ if(window.console)console.error('[diorama] shader',(err&&err.message)||String(err)); return {destroy:function(){}}; }\n\n      var cubeVBO=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,cubeVBO); gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(CUBE),gl.STATIC_DRAW);\n      function instData(list){ var a=[]; list.forEach(function(o){ a.push(o.p[0],o.p[1],o.p[2],o.s[0],o.s[1],o.s[2],o.c[0],o.c[1],o.c[2],o.win,o.seed||0); }); return new Float32Array(a); }\n      function buildVAO(list){\n        var vao=gl.createVertexArray(); gl.bindVertexArray(vao);\n        gl.bindBuffer(gl.ARRAY_BUFFER,cubeVBO);\n        gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,3,gl.FLOAT,false,24,0);\n        gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1,3,gl.FLOAT,false,24,12);\n        var ib=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,ib); gl.bufferData(gl.ARRAY_BUFFER,instData(list),gl.STATIC_DRAW);\n        var S=44;\n        gl.enableVertexAttribArray(2); gl.vertexAttribPointer(2,3,gl.FLOAT,false,S,0);  gl.vertexAttribDivisor(2,1);\n        gl.enableVertexAttribArray(3); gl.vertexAttribPointer(3,3,gl.FLOAT,false,S,12); gl.vertexAttribDivisor(3,1);\n        gl.enableVertexAttribArray(4); gl.vertexAttribPointer(4,3,gl.FLOAT,false,S,24); gl.vertexAttribDivisor(4,1);\n        gl.enableVertexAttribArray(5); gl.vertexAttribPointer(5,1,gl.FLOAT,false,S,36); gl.vertexAttribDivisor(5,1);\n        gl.enableVertexAttribArray(6); gl.vertexAttribPointer(6,1,gl.FLOAT,false,S,40); gl.vertexAttribDivisor(6,1);\n        gl.bindVertexArray(null);\n        return {vao:vao,n:list.length};\n      }\n      var SQ=new Float32Array([-.5,-.5,0,1, .5,-.5,1,1, .5,.5,1,0, -.5,-.5,0,1, .5,.5,1,0, -.5,.5,0,0]);\n      var sqVBO=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,sqVBO); gl.bufferData(gl.ARRAY_BUFFER,SQ,gl.STATIC_DRAW);\n      var sqVAO=gl.createVertexArray(); gl.bindVertexArray(sqVAO); gl.bindBuffer(gl.ARRAY_BUFFER,sqVBO); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,2,gl.FLOAT,false,16,0); gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1,2,gl.FLOAT,false,16,8); gl.bindVertexArray(null);\n      var quadVBO=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,quadVBO); gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);\n      var quadVAO=gl.createVertexArray(); gl.bindVertexArray(quadVAO); gl.bindBuffer(gl.ARRAY_BUFFER,quadVBO); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,2,gl.FLOAT,false,0,0); gl.bindVertexArray(null);\n      var carIB=gl.createBuffer();\n      var carVAO=gl.createVertexArray(); gl.bindVertexArray(carVAO);\n      gl.bindBuffer(gl.ARRAY_BUFFER,cubeVBO); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,3,gl.FLOAT,false,24,0); gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1,3,gl.FLOAT,false,24,12);\n      gl.bindBuffer(gl.ARRAY_BUFFER,carIB); var CS=44;\n      gl.enableVertexAttribArray(2); gl.vertexAttribPointer(2,3,gl.FLOAT,false,CS,0); gl.vertexAttribDivisor(2,1);\n      gl.enableVertexAttribArray(3); gl.vertexAttribPointer(3,3,gl.FLOAT,false,CS,12); gl.vertexAttribDivisor(3,1);\n      gl.enableVertexAttribArray(4); gl.vertexAttribPointer(4,3,gl.FLOAT,false,CS,24); gl.vertexAttribDivisor(4,1);\n      gl.enableVertexAttribArray(5); gl.vertexAttribPointer(5,1,gl.FLOAT,false,CS,36); gl.vertexAttribDivisor(5,1);\n      gl.enableVertexAttribArray(6); gl.vertexAttribPointer(6,1,gl.FLOAT,false,CS,40); gl.vertexAttribDivisor(6,1);\n      gl.bindVertexArray(null);\n\n      function signTex(s){\n        var W=s.port?230:400, H=s.port?432:270;\n        var cv=document.createElement('canvas'); cv.width=W; cv.height=H; var x=cv.getContext('2d');\n        var col='rgb('+Math.round(s.c[0]*255)+','+Math.round(s.c[1]*255)+','+Math.round(s.c[2]*255)+')';\n        var m=24, rr=26;\n        function rrect(){ x.beginPath(); x.moveTo(m+rr,m); x.arcTo(W-m,m,W-m,H-m,rr); x.arcTo(W-m,H-m,m,H-m,rr); x.arcTo(m,H-m,m,m,rr); x.arcTo(m,m,W-m,m,rr); x.closePath(); }\n        rrect(); x.fillStyle='rgba(9,10,14,0.74)'; x.fill();\n        x.shadowColor=col; x.strokeStyle=col; x.shadowBlur=22; x.lineWidth=9; rrect(); x.stroke(); rrect(); x.stroke();\n        x.shadowBlur=3; x.strokeStyle='rgba(255,255,255,0.85)'; x.lineWidth=2.4; rrect(); x.stroke(); x.shadowBlur=0;\n        x.textAlign='center'; x.textBaseline='middle';\n        function glow(txt,px,py,fs){ x.font='600 '+fs+'px '+CJK; x.shadowColor=col; x.fillStyle=col; x.shadowBlur=fs*0.55; x.fillText(txt,px,py); x.fillText(txt,px,py); x.shadowBlur=fs*0.1; x.fillStyle='#ffffff'; x.fillText(txt,px,py); }\n        function fitFs(txt,fs,maxw){ x.font='600 '+fs+'px '+CJK; var tw=x.measureText(txt||'').width; if(tw>maxw) return Math.max(12,Math.floor(fs*maxw/tw)); return fs; }\n        if(s.port){ var ch=(s.k||'').split(''), n=Math.max(1,ch.length), step=Math.min(74,(H-150)/n);\n          for(var i=0;i<n;i++) glow(ch[i], W/2, 66+step*(i+0.5), Math.round(step*0.78)); glow(s.n, W/2, H-46, fitFs(s.n,24,W-46));\n        } else { glow(s.k, W/2, H*0.38, 92); glow(s.n, W/2, H*0.76, fitFs(s.n,36,W-70)); }\n        var t=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,t); gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,false);\n        gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,cv);\n        gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);\n        gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE); return t;\n      }\n      function signModel(s){ var px=s.p[0],py=s.p[1],pz=s.p[2],w=s.w,h=s.h;\n        if(s.axis==='z') return new Float32Array([w,0,0,0, 0,h,0,0, 0,0,1,0, px,py,pz,1]);\n        return new Float32Array([0,0,-w,0, 0,h,0,0, 1,0,0,0, px,py,pz,1]); }\n      function signBack(s){ if(s.axis==='z') return {p:[s.p[0],s.p[1],s.p[2]-0.07],s:[s.w*1.04,s.h*1.04,0.12],c:[.05,.05,.07],win:0,g:0,seed:0};\n        return {p:[s.p[0]-0.07,s.p[1],s.p[2]],s:[0.12,s.h*1.04,s.w*1.04],c:[.05,.05,.07],win:0,g:0,seed:0}; }\n\n      var boxGeo, signList=[], lampList=[], carState=[], lastT=0, beaconList=[];\n      function loadScene(sc){ var boxes=sc.boxes.slice(); sc.signs.forEach(function(s){ boxes.push(signBack(s)); }); boxGeo=buildVAO(boxes);\n        signList=sc.signs.map(function(s){ return {model:signModel(s), tex:signTex(s), p:s.p, c:s.c}; }); lampList=sc.lamps||[];\n        carState=[{d:0,spd:2.6,c:[.2,.36,.72]},{d:11,spd:2.1,c:[.62,.15,.22]},{d:22,spd:2.8,c:[.78,.62,.2]},{d:33,spd:2.3,c:[.75,.3,.55]}]; beaconList=sc.beacons||[]; }\n      loadScene(scene);\n\n      var SM=1024, shDepth=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,shDepth);\n      gl.texImage2D(gl.TEXTURE_2D,0,gl.DEPTH_COMPONENT24,SM,SM,0,gl.DEPTH_COMPONENT,gl.UNSIGNED_INT,null);\n      gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);\n      var shColorRB=gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER,shColorRB); gl.renderbufferStorage(gl.RENDERBUFFER,gl.RGBA8,SM,SM);\n      var shFBO=gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER,shFBO); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.TEXTURE_2D,shDepth,0); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.RENDERBUFFER,shColorRB); gl.bindFramebuffer(gl.FRAMEBUFFER,null);\n\n      var sceneFBO,sceneTex,sceneRB,bloomFBO=[],bloomTex=[],fbw=0,fbh=0,bw=0,bh=0;\n      function mktex(w,h){ var t=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,t); gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,w,h,0,gl.RGBA,gl.UNSIGNED_BYTE,null); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE); return t; }\n      function allocFBO(w,h){ fbw=Math.floor(w*1.35); fbh=Math.floor(h*1.35); bw=Math.max(1,fbw>>1); bh=Math.max(1,fbh>>1);\n        sceneTex=mktex(fbw,fbh); sceneRB=gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER,sceneRB); gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,fbw,fbh);\n        sceneFBO=gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER,sceneFBO); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,sceneTex,0); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,sceneRB);\n        bloomTex=[mktex(bw,bh),mktex(bw,bh)]; bloomFBO=[gl.createFramebuffer(),gl.createFramebuffer()];\n        for(var i=0;i<2;i++){ gl.bindFramebuffer(gl.FRAMEBUFFER,bloomFBO[i]); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,bloomTex[i],0); }\n        gl.bindFramebuffer(gl.FRAMEBUFFER,null); }\n\n      function mul(a,b){ var o=new Float32Array(16); for(var c=0;c<4;c++)for(var r=0;r<4;r++){ var s=0; for(var k=0;k<4;k++)s+=a[k*4+r]*b[c*4+k]; o[c*4+r]=s; } return o; }\n      function ortho(l,r,b,t,n,f){ return new Float32Array([2/(r-l),0,0,0, 0,2/(t-b),0,0, 0,0,-2/(f-n),0, -(r+l)/(r-l),-(t+b)/(t-b),-(f+n)/(f-n),1]); }\n      function lookAt(e,c,u){ var z=[e[0]-c[0],e[1]-c[1],e[2]-c[2]]; var zl=Math.hypot(z[0],z[1],z[2]); z=[z[0]/zl,z[1]/zl,z[2]/zl];\n        var x=[u[1]*z[2]-u[2]*z[1],u[2]*z[0]-u[0]*z[2],u[0]*z[1]-u[1]*z[0]]; var xl=Math.hypot(x[0],x[1],x[2])||1; x=[x[0]/xl,x[1]/xl,x[2]/xl];\n        var y=[z[1]*x[2]-z[2]*x[1],z[2]*x[0]-z[0]*x[2],z[0]*x[1]-z[1]*x[0]];\n        return new Float32Array([x[0],y[0],z[0],0, x[1],y[1],z[1],0, x[2],y[2],z[2],0, -(x[0]*e[0]+x[1]*e[1]+x[2]*e[2]),-(y[0]*e[0]+y[1]*e[1]+y[2]*e[2]),-(z[0]*e[0]+z[1]*e[1]+z[2]*e[2]),1]); }\n      var LVP=mul(ortho(-12,12,-12,12,1,64), lookAt([-13,26,-11],[0,2.8,0],[0,1,0]));\n\n      var P={exp:1.12,sat:1.08,rot:0,zoom:5.6,glow:1.15,bloom:0.9,win:1,plc:1,shad:0.78};\n\n      var uVP=gl.getUniformLocation(mainP,'uVP'), uWinI=gl.getUniformLocation(mainP,'uWinI'), uNL=gl.getUniformLocation(mainP,'uNL'), uLP=gl.getUniformLocation(mainP,'uLP'), uLC=gl.getUniformLocation(mainP,'uLC'), uSh=gl.getUniformLocation(mainP,'uShadow'), uLVPm=gl.getUniformLocation(mainP,'uLVP'), uShAmt=gl.getUniformLocation(mainP,'uShAmt'), uLDir=gl.getUniformLocation(mainP,'uLDir'), uEye=gl.getUniformLocation(mainP,'uEye');\n      var dLVP=gl.getUniformLocation(depthP,'uLVP');\n      var sVP=gl.getUniformLocation(signP,'uVP'), sModel=gl.getUniformLocation(signP,'uModel'), sTex=gl.getUniformLocation(signP,'uTex'), sGlow=gl.getUniformLocation(signP,'uGlow');\n      var bTex=gl.getUniformLocation(blurP,'uTex'), bDir=gl.getUniformLocation(blurP,'uDir'), bBr=gl.getUniformLocation(blurP,'uBright');\n      var cSc=gl.getUniformLocation(compP,'uScene'), cBl=gl.getUniformLocation(compP,'uBloom'), cBi=gl.getUniformLocation(compP,'uBloomI'), cEx=gl.getUniformLocation(compP,'uExp'), cSa=gl.getUniformLocation(compP,'uSat');\n      function flick(tt,i){ var b=0.84+0.16*Math.sin(tt*6.0+i*1.7); var s=Math.sin(tt*41.0+i*3.1)*Math.sin(tt*11.0+i*0.7); return b*((s>0.985)?0.35:1.0); }\n\n      var t0=0, alive=true, raf=0, cw=0, ch=0;\n      function resize(){ var dpr=Math.min(window.devicePixelRatio||1,1.25); var w=Math.max(2,Math.floor(canvas.clientWidth*dpr)), h=Math.max(2,Math.floor(canvas.clientHeight*dpr)); if(canvas.width!==w||canvas.height!==h){ canvas.width=w; canvas.height=h; cw=w; ch=h; allocFBO(w,h); } }\n      function frame(ts){\n        if(!alive||!canvas.isConnected){ alive=false; if(raf)cancelAnimationFrame(raf); return; }\n        if(!t0)t0=ts; var t=(ts-t0)/1000; resize();\n        var dt=Math.min(0.05,Math.max(0,t-lastT)); lastT=t;\n        var tcyc=t%12.0, tRed=(tcyc>=7.5), tYel=(tcyc>=6.0&&tcyc<7.5);\n        var cb=[];\n        for(var ci=0;ci<carState.length;ci++){ var cc=carState[ci]; var stop=false; var dd=((cc.d%RP)+RP)%RP;\n          if((tRed||tYel) && dd>3.3 && dd<4.7) stop=true;\n          for(var cj=0;cj<carState.length;cj++){ if(cj!==ci){ var g2=((carState[cj].d-cc.d)%RP+RP)%RP; if(g2>0.01 && g2<2.3) stop=true; } }\n          if(!stop) cc.d+=cc.spd*dt;\n          var rp=ringPos(cc.d); car(cb,rp[0],rp[1],cc.c,rp[2],rp[3]); }\n        var toff=[.02,.02,.03];\n        cb.push(em([-3.0,2.82,5.62],[0.14,0.14,0.06],tRed?[1.,.16,.12]:toff));\n        cb.push(em([-3.0,2.68,5.62],[0.14,0.14,0.06],tYel?[1.,.78,.16]:toff));\n        cb.push(em([-3.0,2.54,5.62],[0.14,0.14,0.06],(!tRed&&!tYel)?[.2,1.,.32]:toff));\n        var bon=(t%1.4)<0.55;\n        for(var bi=0;bi<beaconList.length;bi++){ var bp=beaconList[bi]; cb.push(em([bp[0],bp[1],bp[2]],[0.1,0.1,0.1], bon?[1.,.09,.06]:[.03,.006,.006])); }\n        gl.bindBuffer(gl.ARRAY_BUFFER,carIB); gl.bufferData(gl.ARRAY_BUFFER,instData(cb),gl.DYNAMIC_DRAW); var carN=cb.length;\n        var W=cw,H=ch, asp=W/H, z=P.zoom;\n        var ang=0.72+Math.sin(t*0.12*P.rot)*0.28;\n        var dist=40, eye=[Math.sin(ang)*dist,dist*0.72,Math.cos(ang)*dist], ctr=[0,2.6,0];\n        var VP=mul(ortho(-asp*z,asp*z,-z,z,0.1,160), lookAt(eye,ctr,[0,1,0]));\n\n        gl.bindFramebuffer(gl.FRAMEBUFFER,shFBO); gl.viewport(0,0,SM,SM); gl.clear(gl.DEPTH_BUFFER_BIT|gl.COLOR_BUFFER_BIT);\n        gl.useProgram(depthP); gl.uniformMatrix4fv(dLVP,false,LVP); gl.disable(gl.CULL_FACE); gl.enable(gl.DEPTH_TEST); gl.depthMask(true); gl.disable(gl.BLEND);\n        gl.bindVertexArray(boxGeo.vao); gl.drawArraysInstanced(gl.TRIANGLES,0,36,boxGeo.n); if(carN){ gl.bindVertexArray(carVAO); gl.drawArraysInstanced(gl.TRIANGLES,0,36,carN); }\n\n        gl.bindFramebuffer(gl.FRAMEBUFFER,sceneFBO); gl.viewport(0,0,fbw,fbh);\n        gl.clearColor(0.012,0.016,0.032,1); gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);\n        gl.useProgram(mainP); gl.uniformMatrix4fv(uVP,false,VP); gl.uniform1f(uWinI,P.win); gl.uniformMatrix4fv(uLVPm,false,LVP); gl.uniform1f(uShAmt,P.shad); gl.uniform3f(uLDir,-0.4515,0.8088,-0.3762); gl.uniform3f(uEye,eye[0],eye[1],eye[2]);\n        gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D,shDepth); gl.uniform1i(uSh,1);\n        var sigN=Math.min(signList.length,8), FK=[], LPa=new Float32Array(48), LCa=new Float32Array(48), NLt=0;\n        if(P.plc) for(var li=0;li<sigN;li++){ var sgl=signList[li]; var fk=flick(t,li); FK[li]=fk; var g=P.glow*fk*0.95; LPa[NLt*3]=sgl.p[0];LPa[NLt*3+1]=sgl.p[1];LPa[NLt*3+2]=sgl.p[2]; LCa[NLt*3]=sgl.c[0]*g;LCa[NLt*3+1]=sgl.c[1]*g;LCa[NLt*3+2]=sgl.c[2]*g; NLt++; }\n        for(var la=0; la<lampList.length && NLt<16; la++){ var lpp=lampList[la]; LPa[NLt*3]=lpp[0];LPa[NLt*3+1]=lpp[1];LPa[NLt*3+2]=lpp[2]; LCa[NLt*3]=1.15;LCa[NLt*3+1]=0.78;LCa[NLt*3+2]=0.38; NLt++; }\n        gl.uniform1i(uNL,NLt); gl.uniform3fv(uLP,LPa); gl.uniform3fv(uLC,LCa);\n        gl.enable(gl.DEPTH_TEST); gl.depthMask(true); gl.disable(gl.BLEND); gl.disable(gl.CULL_FACE);\n        gl.bindVertexArray(boxGeo.vao); gl.drawArraysInstanced(gl.TRIANGLES,0,36,boxGeo.n); if(carN){ gl.bindVertexArray(carVAO); gl.drawArraysInstanced(gl.TRIANGLES,0,36,carN); }\n        if(P.plc && signList.length){\n          gl.useProgram(signP); gl.uniformMatrix4fv(sVP,false,VP);\n          gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA); gl.depthMask(false); gl.bindVertexArray(sqVAO);\n          for(var i=0;i<signList.length;i++){ gl.uniform1f(sGlow,P.glow*(FK[i]||1.0)); gl.uniformMatrix4fv(sModel,false,signList[i].model); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D,signList[i].tex); gl.uniform1i(sTex,0); gl.drawArrays(gl.TRIANGLES,0,6); }\n          gl.depthMask(true); gl.disable(gl.BLEND);\n        }\n\n        gl.disable(gl.DEPTH_TEST); gl.bindVertexArray(quadVAO); gl.useProgram(blurP);\n        var src=sceneTex, spread=2.0;\n        for(var it=0;it<3;it++){\n          gl.bindFramebuffer(gl.FRAMEBUFFER,bloomFBO[0]); gl.viewport(0,0,bw,bh); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D,src); gl.uniform1i(bTex,0); gl.uniform2f(bDir,spread/bw,0); gl.uniform1f(bBr,it===0?1.0:0.0); gl.drawArrays(gl.TRIANGLES,0,3);\n          gl.bindFramebuffer(gl.FRAMEBUFFER,bloomFBO[1]); gl.viewport(0,0,bw,bh); gl.bindTexture(gl.TEXTURE_2D,bloomTex[0]); gl.uniform2f(bDir,0,spread/bh); gl.uniform1f(bBr,0.0); gl.drawArrays(gl.TRIANGLES,0,3); src=bloomTex[1];\n        }\n\n        gl.bindFramebuffer(gl.FRAMEBUFFER,null); gl.viewport(0,0,W,H); gl.useProgram(compP);\n        gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D,sceneTex); gl.uniform1i(cSc,0);\n        gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D,bloomTex[1]); gl.uniform1i(cBl,1);\n        gl.uniform1f(cBi,P.bloom); gl.uniform1f(cEx,P.exp); gl.uniform1f(cSa,P.sat); gl.drawArrays(gl.TRIANGLES,0,3);\n        gl.bindVertexArray(null);\n        raf=requestAnimationFrame(frame);\n      }\n      function destroy(){ alive=false; if(raf) cancelAnimationFrame(raf); try{ var lc=gl.getExtension('WEBGL_lose_context'); if(lc) lc.loseContext(); }catch(e){} }\n      raf=requestAnimationFrame(frame);\n      return { destroy: destroy };\n    }\n\n    function renderUniverse(idx){\n      if(!uniBody || !UNIS[idx]) return;\n      currentUni = idx;\n      var u = UNIS[idx];\n      if(uni) uni.style.setProperty(\"--hue\", u.hue);\n      var n = u.comps.length;\n      var hero = '<section class=\"uni-hero\"><div class=\"glow\"></div>'\n        + '<div class=\"uni-eyebrow\">'+L(UNI_META.eyebrow)+'</div>'\n        + '<h1>'+L(u.name)+'</h1>'\n        + '<p class=\"lead\">'+L(u.tagline)+'</p>'\n        + '<div class=\"sysmap gl\"><canvas class=\"dioramaGL\"></canvas></div>'\n        + '<div class=\"sys-hint\">'+L(UNI_META.hint)+'</div></section>';\n      var details=\"\";\n      for(var j=0;j<n;j++){\n        var c=u.comps[j];\n        var pts_html=\"\";\n        for(var p=0;p<c.points.length;p++){ pts_html += '<div class=\"ud-point\"><span class=\"pk\">▸</span><span>'+L(c.points[p])+'</span></div>'; }\n        var res_html=\"\";\n        for(var k=0;k<c.kpis.length;k++){ res_html += '<span class=\"r\"><b>'+esc(c.kpis[k].num)+'</b> <span>'+L(c.kpis[k].cap)+'</span></span>'; }\n        var num = (\"0\"+(j+1)).slice(-2)+\" / \"+(\"0\"+n).slice(-2);\n        details += '<section class=\"uni-detail\" data-i=\"'+j+'\">'\n          + '<div class=\"ud-viz\"><div class=\"iso\">'+isoScene2(parseIso2(detailSpec(u,c,j)))+'</div></div>'\n          + '<div class=\"ud-tx\"><div class=\"ud-num\">'+num+'</div>'\n          + '<div class=\"ud-t\">'+L(c.title)+'</div>'\n          + '<div class=\"ud-d\">'+L(c.desc)+'</div>'\n          + '<div class=\"ud-points\">'+pts_html+'</div>'\n          + '<div class=\"ud-gain\"><div class=\"ug-col ug-old\"><span class=\"ug-k\">'+L(UNI_META.old)+'</span><p>'+L(c.oldModel)+'</p></div>'\n          + '<div class=\"ug-col ug-new\"><span class=\"ug-k\">'+L(UNI_META.wd)+'</span><p>'+L(c.withData2)+'</p></div></div>'\n          + '<div class=\"ud-res\">'+res_html+'</div></div></section>';\n      }\n      var more = '<section class=\"uni-more\"><div class=\"glow\"></div>'\n        + '<h2>'+L(UNI_META.moreH)+'</h2><p>'+L(UNI_META.moreP)+'</p>'\n        + '<div style=\"display:flex;justify-content:center\"><a href=\"#\" class=\"btn\"><span>'+L(UNI_META.demo)+'</span></a></div></section>';\n      uniBody.innerHTML = hero + details + more;\n      if(__dio){ try{__dio.destroy();}catch(e){} __dio=null; }\n      var __glc = uniBody.querySelector(\".dioramaGL\");\n      if(__glc){ try{ __dio = mountDiorama(__glc, dioramaScene(u), {hue:u.hue}); }catch(e){ if(window.console)console.error('[diorama]',e); } }\n      uniBody.querySelectorAll(\".sysmap .comp\").forEach(function(cc){\n        cc.addEventListener(\"click\", function(){\n          var t=uniBody.querySelector('.uni-detail[data-i=\"'+cc.getAttribute(\"data-i\")+'\"]');\n          if(t && uniScroll) uniScroll.scrollTo({top:t.offsetTop-24, behavior:\"smooth\"});\n        });\n      });\n    }\n    function openUni(i){ if(!uni) return; renderUniverse(i); uni.classList.add(\"on\"); if(uniScroll) uniScroll.scrollTop=0; }\n    function closeUni(){ if(uni) uni.classList.remove(\"on\"); if(__dio){ try{__dio.destroy();}catch(e){} __dio=null; } }\n    gcards.forEach(function(g,i){ g.addEventListener(\"click\", function(){ openUni(i); }); });\n    var uclose = root.querySelector(\"#uniClose\"); if(uclose) uclose.addEventListener(\"click\", closeUni);\n    window.addEventListener(\"keydown\", function(e){ if(e.key===\"Escape\") closeUni(); });\n    window.__reRenderUni = function(){ if(uni && uni.classList.contains(\"on\") && currentUni>=0) renderUniverse(currentUni); };\n\n    applyLang(\"pt\");\n    renderProduct();\n  }\n}"}}}}}}}},{"_id":"6a62fe01dc1fded10bf6d32b","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"d2deck","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host,.deck{\n  --worm:linear-gradient(90deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e,#ff6a4d,#e8e84d,#84e05a,#4de0a1,#4ddfe6,#5b86ff,#9b5cff);\n  --worm-mesh:linear-gradient(125deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e,#ff6a4d,#e8e84d,#84e05a,#4de0a1,#4ddfe6,#5b86ff,#9b5cff);\n  --tile:1100px; --bg:#000; --panel:#0b0b0d; --panel2:#101013;\n  --line:rgba(255,255,255,.09); --line2:rgba(255,255,255,.055);\n  --ink:#f2f2f5; --mut:#8a8a93; --faint:#55555e; --blue:#3a7bff; --warn:#e8e84d;\n  --sans:\"Helvetica Neue\",Helvetica,Arial,\"PingFang SC\",\"Hiragino Sans GB\",\"Microsoft YaHei\",\"Noto Sans CJK SC\",\"Noto Sans SC\",system-ui,sans-serif;\n  --mono:ui-monospace,\"SF Mono\",Menlo,Consolas,monospace;\n  --out:cubic-bezier(.22,1,.36,1); --soft:cubic-bezier(.4,0,.2,1); --spring:cubic-bezier(.34,1.4,.5,1);\n  --hue:#5b86ff;\n}\n*{box-sizing:border-box;margin:0;padding:0}\n.deck{position:relative;height:100%;overflow:hidden;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;line-height:1.5}\n.deck .mark{font-weight:500;letter-spacing:-.015em;line-height:1;display:inline-flex;align-items:center;justify-content:center}\n.deck .logo{display:block;width:auto;height:24px}\n.deck .mark sup{font-size:.46em;font-weight:500;vertical-align:super;margin-left:.5px}\n@keyframes flow{to{background-position:var(--tile) 0}}\n@keyframes drift{0%{background-position:0% 30%}100%{background-position:100% 70%}}\n.topbar{position:absolute;top:0;left:0;right:0;z-index:30;display:flex;align-items:center;justify-content:space-between;padding:26px 40px}\n.topbar .mark{font-size:24px}\n.lang{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;font-family:var(--mono);font-size:11px}\n.lang button{background:none;border:0;color:var(--mut);cursor:pointer;padding:6px 11px;font:inherit;letter-spacing:.06em}\n.lang button.on{background:var(--blue);color:#fff}\n.stage{position:absolute;inset:0}\n.slide{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;padding:12vh 8vw;opacity:0;visibility:hidden;transform:translateY(22px);transition:opacity .55s var(--out),transform .55s var(--out),visibility .55s;pointer-events:none;overflow:hidden}\n.slide.on{opacity:1;visibility:visible;transform:none;pointer-events:auto}\n.slide .glow{position:absolute;inset:0;pointer-events:none;background:radial-gradient(58% 68% at 80% 32%,color-mix(in srgb,var(--hue) 40%,transparent),transparent 66%)}\n.slide canvas.flow{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen;z-index:1}\n.slide .mesh{position:absolute;inset:0;background:var(--worm-mesh);background-size:360% 360%;animation:drift 40s ease-in-out infinite alternate}\n.slide .vig{position:absolute;inset:0;background:radial-gradient(140% 120% at 50% 30%,transparent 40%,rgba(4,8,7,.66) 100%)}\n.slide .c{position:relative;z-index:2;max-width:1120px;margin:0 auto;width:100%}\n.kicker{font-family:var(--mono);font-size:13px;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);margin-bottom:22px}\n.slide .stmt{font-size:clamp(34px,6.4vw,84px);font-weight:800;letter-spacing:-.02em;line-height:.98;text-wrap:balance}\n.slide .stmt em{font-style:normal;background:var(--worm);background-size:280%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 15s linear infinite}\n.slide .stmt b{color:var(--hue);font-weight:800}\n.slide .body{margin-top:26px;font-size:clamp(17px,2vw,23px);color:var(--mut);max-width:40ch;line-height:1.5}\n.cover{text-align:center;align-items:center}\n.cover .c{text-align:center}\n.cover .stmt{text-transform:uppercase}\n.cover .mark{font-size:clamp(30px,4vw,52px);margin-bottom:30px}\n.chips{display:flex;gap:9px;flex-wrap:wrap;margin-top:30px}\n.chip{font-family:var(--mono);font-size:12px;letter-spacing:.08em;border:1px solid var(--line);border-radius:999px;padding:8px 14px;background:var(--panel2);color:var(--ink)}\n.thread-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}\n.thread-row span{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}\n.ind-top{display:flex;align-items:baseline;gap:18px;margin-bottom:10px}\n.ind-num{font-family:var(--mono);font-size:14px;letter-spacing:.2em;color:var(--hue)}\n.ind-num span{color:var(--faint)}\n.caps{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px;max-width:760px}\n.cap{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:12px;background:rgba(12,12,15,.5);padding:11px 15px;font-size:14px}\n.cap .dot{width:7px;height:7px;border-radius:50%;background:var(--hue);box-shadow:0 0 9px var(--hue);flex:none}\n.proofline{margin-top:30px;font-size:14px;color:var(--mut)}\n.proofline b{color:#fff;font-weight:600}\n.two{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:38px}\n.card{border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:28px}\n.card .accent{height:6px;width:52px;border-radius:999px;background:var(--worm);background-size:var(--tile) 100%;animation:flow 15s linear infinite;margin-bottom:18px}\n.card h3{font-size:22px;font-weight:700;margin-bottom:10px}\n.card p{color:var(--mut);font-size:15px;margin-bottom:16px}\n.logos{display:flex;flex-wrap:wrap;gap:16px 44px;margin-top:34px;align-items:center}\n.logos .lg{font-size:22px;font-weight:600;color:rgba(255,255,255,.66)}\n.foot{position:absolute;bottom:0;left:0;right:0;z-index:30;display:flex;align-items:center;justify-content:space-between;padding:24px 40px}\n.dots{display:flex;gap:9px}\n.dots i{width:8px;height:8px;border-radius:50%;border:1.3px solid rgba(255,255,255,.4);cursor:pointer;transition:.3s var(--spring)}\n.dots i.on{background:#fff;border-color:#fff;transform:scale(1.2)}\n.counter{font-family:var(--mono);font-size:15px;color:var(--mut);font-variant-numeric:tabular-nums}\n.counter em{font-style:normal;color:var(--faint)}\n.arrows{display:flex;gap:12px}\n.arrows button{width:44px;height:44px;border-radius:999px;border:1px solid var(--line);background:var(--panel);color:#fff;cursor:pointer;font-size:18px;transition:.3s var(--out)}\n.arrows button:hover{border-color:var(--blue);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.arrows button:disabled{opacity:.3;cursor:default}\n.hintkey{position:absolute;bottom:26px;left:50%;transform:translateX(-50%);z-index:30;font-family:var(--mono);font-size:10px;letter-spacing:.18em;color:var(--faint);text-transform:uppercase}\n@media(max-width:820px){.two{grid-template-columns:1fr}.slide{padding:14vh 7vw}.hintkey{display:none}}\n`,\n  render(d2){\n    var INDS = [\n      {hue:\"#5b86ff\", n:\"01\", name_pt:\"RH & Pessoas\", name_en:\"HR & People\", s_pt:\"Um RH que responde <b>milhares de colaboradores</b>, em vários idiomas — na hora.\", s_en:\"An HR that answers <b>thousands of employees</b>, in many languages — instantly.\", caps_pt:[\"Assistente de AI ao colaborador\",\"Transbordo humano\",\"Leitura de documentos (OCR)\",\"Regras configuráveis pela área\",\"Analytics e CSAT\"], caps_en:[\"AI assistant for employees\",\"Human handoff\",\"Document reading (OCR)\",\"Rules configured by the team\",\"Analytics & CSAT\"], who:\"Natura\"},\n      {hue:\"#4de0a1\", n:\"02\", name_pt:\"Supply & Operações\", name_en:\"Supply & Operations\", s_pt:\"Transformar <b>sobra de estoque em plano de produção</b> — em minutos, não semanas.\", s_en:\"Turn <b>leftover stock into a production plan</b> — in minutes, not weeks.\", caps_pt:[\"Simulação de cenários\",\"Explosão de estrutura (BOM)\",\"Score de economia e viabilidade\",\"SQL self-service no data lake\",\"Exportação\"], caps_en:[\"Scenario simulation\",\"Bill-of-materials explosion\",\"Savings & feasibility scoring\",\"Self-service SQL on the data lake\",\"Export\"], who:\"Natura\"},\n      {hue:\"#e8b84d\", n:\"03\", name_pt:\"Serviços Financeiros\", name_en:\"Financial Services\", s_pt:\"Prospecção <b>1-a-1 personalizada por AI</b>, em escala de milhares — operada pelo comercial.\", s_en:\"<b>AI-personalized 1-to-1 outreach</b> at scale — run by the commercial team.\", caps_pt:[\"CRM + automação de outreach\",\"Ondas omnichannel\",\"Copy gerada por AI no tom do lead\",\"Modelagem de proposta e ROI\",\"SSO corporativo\"], caps_en:[\"CRM + outreach automation\",\"Omnichannel waves\",\"AI copy in the lead's tone\",\"Offer & ROI modeling\",\"Corporate SSO\"], who:\"XP\"},\n      {hue:\"#4ddfe6\", n:\"04\", name_pt:\"CX & Contact Center\", name_en:\"CX & Contact Center\", s_pt:\"Um <b>contact center inteiro</b> — do widget no site à automação de fila — numa plataforma só.\", s_en:\"An <b>entire contact center</b> — from the on-site widget to queue automation — on one platform.\", caps_pt:[\"Webchat omnichannel\",\"Bot de triagem com AI\",\"Transbordo bot → humano\",\"Agente + console de supervisor\",\"Automação de filas e CSAT\"], caps_en:[\"Omnichannel webchat\",\"AI triage bot\",\"Bot → human handoff\",\"Agent + supervisor console\",\"Queue automation & CSAT\"], who:\"Natura\"},\n      {hue:\"#ff4d9e\", n:\"05\", name_pt:\"Varejo & E-commerce\", name_en:\"Retail & E-commerce\", s_pt:\"Da <b>vitrine ao ERP</b>: experiências de compra sob medida, com o dado real do e-commerce.\", s_en:\"From <b>storefront to ERP</b>: tailor-made buying experiences on real e-commerce data.\", caps_pt:[\"Catálogo e produto\",\"Integração VTEX / GraphQL\",\"Estúdio de foto com AI\",\"ERP e operações de loja\"], caps_en:[\"Catalog & product\",\"VTEX / GraphQL integration\",\"AI photo studio\",\"ERP & store operations\"], who:\"Americanas · Vivara · Roue\"},\n      {hue:\"#9b5cff\", n:\"06\", name_pt:\"Força de Vendas\", name_en:\"Sales Enablement\", s_pt:\"Um <b>copiloto de vendas</b> que entrega a próxima melhor ação — em linguagem natural.\", s_en:\"A <b>sales copilot</b> that surfaces the next best action — in natural language.\", caps_pt:[\"Copiloto em linguagem natural\",\"Recomendação de próxima melhor ação\",\"Busca de clientes e segmentos com AI\",\"Painéis de performance da carteira\",\"Geração de conteúdo com AI\"], caps_en:[\"Copilot in natural language\",\"Next-best-action recommendation\",\"AI search over customers & segments\",\"Portfolio performance dashboards\",\"AI content generation\"]},\n      {hue:\"#84e05a\", n:\"07\", name_pt:\"BI & Analytics\", name_en:\"BI & Analytics\", s_pt:\"Do <b>dado vivo ao plano de ação</b> — painéis que a área lê e age, sem exportar pra planilha.\", s_en:\"From <b>live data to an action plan</b> — dashboards the team reads and acts on, no spreadsheet export.\", caps_pt:[\"Painéis executivos sobre dado vivo\",\"Ingestão diária automatizada\",\"Metas e plano de ação acompanhados\",\"Alertas e monitoramento\"], caps_en:[\"Executive dashboards on live data\",\"Automated daily ingestion\",\"Targets & action plan tracked\",\"Alerts & monitoring\"]},\n      {hue:\"#ff6a4d\", n:\"08\", name_pt:\"Seguros & CX\", name_en:\"Insurance & CX\", s_pt:\"Atendimento que <b>responde na fonte certa</b> — base de conhecimento com busca semântica e triagem por AI.\", s_en:\"Support that <b>answers from the right source</b> — a semantic knowledge base with AI triage.\", caps_pt:[\"Base de conhecimento semântica\",\"Triagem e atendimento com AI\",\"Respostas ancoradas na fonte\",\"Analytics de atendimento\"], caps_en:[\"Semantic knowledge base\",\"AI triage & support\",\"Answers grounded in the source\",\"Support analytics\"]},\n      {hue:\"#e8e84d\", n:\"09\", name_pt:\"Compras & Procurement\", name_en:\"Procurement\", s_pt:\"<b>Excelência em compras</b>: modelagem financeira e planejamento de fornecimento, simulados em minutos.\", s_en:\"<b>Procurement excellence</b>: financial modeling and supply planning, simulated in minutes.\", caps_pt:[\"Planejamento de fornecimento\",\"Modelagem financeira de cenários\",\"Simuladores e croquis de decisão\",\"Compras orientadas a dado\"], caps_en:[\"Supply planning\",\"Financial scenario modeling\",\"Decision simulators & builders\",\"Data-driven sourcing\"]}\n    ];\n    function tt(pt,en){ return 'data-pt=\"'+pt+'\" data-en=\"'+en+'\"'; }\n    var indSlides = INDS.map(function(x){\n      var caps = x.caps_pt.map(function(c,i){ return '<div class=\"cap\"><span class=\"dot\"></span><span data-pt=\"'+c+'\" data-en=\"'+x.caps_en[i]+'\">'+c+'</span></div>'; }).join(\"\");\n      return '<section class=\"slide industry\" data-kind=\"ind\" style=\"--hue:'+x.hue+'\">'\n        +'<div class=\"glow\"></div><canvas class=\"flow\"></canvas>'\n        +'<div class=\"c\">'\n        +'<div class=\"ind-top\"><span class=\"ind-num\">'+x.n+' <span>/ 09</span></span><span class=\"kicker\" style=\"margin:0\" data-pt=\"O que é possível\" data-en=\"What is possible\">O que é possível</span></div>'\n        +'<div class=\"stmt\" '+tt(x.name_pt,x.name_en)+'>'+x.name_pt+'</div>'\n        +'<div class=\"body\" style=\"color:#fff;max-width:24ch\" '+tt(x.s_pt,x.s_en)+'>.</div>'\n        +'<div class=\"caps\">'+caps+'</div>'\n        +'</div></section>';\n    }).join(\"\");\n\n    return `<div class=\"deck\" id=\"deck\" tabindex=\"0\">\n<svg width=\"0\" height=\"0\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><symbol id=\"d2wm\" viewBox=\"0 0 459.554 148.471\"><g transform=\"translate(-678.859 -300.605)\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\" fill=\"#fff\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\" fill=\"#fff\"/></g></symbol></svg>\n<div class=\"topbar\">\n  <span class=\"mark\"><svg class=\"logo\" viewBox=\"0 0 459.554 148.471\" style=\"height:22px\"><use href=\"#d2wm\"></use></svg></span>\n  <div class=\"lang\" id=\"lang\"><button data-l=\"pt\" class=\"on\">PT</button><button data-l=\"en\">EN</button><button data-l=\"zh\">中文</button></div>\n</div>\n<div class=\"stage\" id=\"stage\">\n  <section class=\"slide cover on\" data-kind=\"cover\">\n    <div class=\"mesh\"></div><div class=\"vig\"></div>\n    <div class=\"c\">\n      <div class=\"mark\"><svg class=\"logo\" viewBox=\"0 0 459.554 148.471\" style=\"height:44px\"><use href=\"#d2wm\"></use></svg></div>\n      <div class=\"kicker\" style=\"text-align:center\" data-pt=\"A Digital Expression Suite\" data-en=\"The Digital Expression Suite\">A Digital Expression Suite</div>\n      <div class=\"stmt\" data-pt=\"Do problema<br>à produção.\" data-en=\"From problem<br>to production.\">Do problema à produção.</div>\n      <div class=\"body\" style=\"margin-left:auto;margin-right:auto\" data-pt=\"A suíte que aproxima a área de negócio da tecnologia — e a transforma no time que entrega.\" data-en=\"The suite that brings the business area close to technology — and turns it into the team that ships.\">.</div>\n    </div>\n  </section>\n  <section class=\"slide\" data-kind=\"see\">\n    <div class=\"c\">\n      <div class=\"kicker\" data-pt=\"O que vemos\" data-en=\"What we see\">O que vemos</div>\n      <div class=\"stmt\" data-pt=\"Toda área tem um<br><em>software esperando pra existir</em>.\" data-en=\"Every area has<br><em>software waiting to exist</em>.\">.</div>\n      <div class=\"body\" data-pt=\"A tecnologia já permite construir quase tudo. Faltava a ponte entre o problema e a solução em produção.\" data-en=\"Technology already lets us build almost anything. The missing piece was the bridge between the problem and the solution in production.\">.</div>\n    </div>\n  </section>\n  <section class=\"slide\" data-kind=\"shift\">\n    <div class=\"c\">\n      <div class=\"kicker\" data-pt=\"A virada\" data-en=\"The shift\">A virada</div>\n      <div class=\"stmt\" data-pt=\"Nós somos os <em>enablers</em>.\" data-en=\"We are the <em>enablers</em>.\">.</div>\n      <div class=\"two\">\n        <div class=\"card\"><div class=\"accent\" style=\"background:#3a3a3a;animation:none\"></div><h3 data-pt=\"Antes\" data-en=\"Before\">Antes</h3><p data-pt=\"Da ideia à entrega: muitas mãos, muitas traduções, muito tempo.\" data-en=\"From idea to delivery: many hands, many translations, a lot of time.\">.</p></div>\n        <div class=\"card\"><div class=\"accent\"></div><h3 data-pt=\"Com a Data²\" data-en=\"With Data²\">Com a Data²</h3><p data-pt=\"A própria área desenha, conecta o dado real, publica e opera. Em produção.\" data-en=\"The business area itself designs, connects real data, ships and operates. In production.\">.</p></div>\n      </div>\n    </div>\n  </section>\n  <section class=\"slide\" data-kind=\"do\">\n    <div class=\"c\">\n      <div class=\"kicker\" data-pt=\"O que fazemos\" data-en=\"What we do\">O que fazemos</div>\n      <div class=\"stmt\" data-pt=\"Uma suíte que vira <em>software de verdade</em>.\" data-en=\"A suite that becomes <em>real software</em>.\">.</div>\n      <div class=\"chips\"><span class=\"chip\">UI</span><span class=\"chip\">REGISTRY</span><span class=\"chip\">MEDIA</span><span class=\"chip\">ID</span><span class=\"chip\">CONNECT</span><span class=\"chip\">DOMAIN</span><span class=\"chip\">RUSH</span><span class=\"chip\">CASHIER</span></div>\n      <div class=\"thread-row\"><span data-pt=\"AI embutida\" data-en=\"AI built in\">AI embutida</span><span>·</span><span>Omnichannel</span><span>·</span><span data-pt=\"Dados reais\" data-en=\"Real data\">Dados reais</span><span>·</span><span data-pt=\"Automação\" data-en=\"Automation\">Automação</span><span>·</span><span>Dashboards</span><span>·</span><span data-pt=\"Sem código\" data-en=\"No code\">Sem código</span></div>\n    </div>\n  </section>\n  ${indSlides}\n  <section class=\"slide\" data-kind=\"deliver\">\n    <div class=\"c\">\n      <div class=\"kicker\" data-pt=\"Como entregamos\" data-en=\"How we deliver\">Como entregamos</div>\n      <div class=\"stmt\" data-pt=\"Nossa stack.<br>Nossos serviços.\" data-en=\"Our stack.<br>Our services.\">.</div>\n      <div class=\"two\">\n        <div class=\"card\"><div class=\"accent\"></div><h3>Sprints</h3><p data-pt=\"Não sabe por onde começar? Nosso time conduz sua área nos primeiros passos — e pode construir por você.\" data-en=\"Don't know where to start? Our team walks your area through the first steps — and can build it for you.\">.</p><div class=\"chips\"><span class=\"chip\" data-pt=\"Ideação\" data-en=\"Ideation\">Ideação</span><span class=\"chip\">Design</span><span class=\"chip\" data-pt=\"Protótipo\" data-en=\"Prototype\">Protótipo</span></div></div>\n        <div class=\"card\"><div class=\"accent\"></div><h3 data-pt=\"Seus dados são seus\" data-en=\"Own your data\">Seus dados são seus</h3><p data-pt=\"O Data Framework mantém seu modelo e sua infra sob seu domínio — nunca escondidos em código.\" data-en=\"The Data Framework keeps your model and infra under your control — never hidden in code.\">.</p><div class=\"chips\"><span class=\"chip\">Domain-Driven</span><span class=\"chip\" data-pt=\"Linguagem única\" data-en=\"Single Data Language\">Linguagem única</span></div></div>\n      </div>\n    </div>\n  </section>\n  <section class=\"slide\" data-kind=\"proof\">\n    <div class=\"c\">\n      <div class=\"kicker\" data-pt=\"Prova\" data-en=\"Proof\">Prova</div>\n      <div class=\"stmt\" data-pt=\"Já estão construindo<br>na Data².\" data-en=\"Already building<br>on Data².\">.</div>\n      <div class=\"logos\"><span class=\"lg\">Natura</span><span class=\"lg\">XP</span><span class=\"lg\">Americanas</span><span class=\"lg\">Whirlpool</span><span class=\"lg\">Arcadis</span><span class=\"lg\">Raízen</span><span class=\"lg\">Aramis</span><span class=\"lg\">Vivara</span></div>\n    </div>\n  </section>\n  <section class=\"slide cover\" data-kind=\"cta\">\n    <div class=\"mesh\"></div><div class=\"vig\"></div>\n    <div class=\"c\">\n      <div class=\"kicker\" style=\"text-align:center\" data-pt=\"Vamos começar\" data-en=\"Let's start\">Vamos começar</div>\n      <div class=\"stmt\" data-pt=\"Traga o problema<br>da sua área.\" data-en=\"Bring your area's<br>problem.\">.</div>\n      <div class=\"body\" style=\"margin-left:auto;margin-right:auto\" data-pt=\"A gente transforma em software — em produção. www.data2.app\" data-en=\"We turn it into software — in production. www.data2.app\">.</div>\n    </div>\n  </section>\n</div>\n<div class=\"foot\">\n  <div class=\"dots\" id=\"dots\"></div>\n  <div class=\"counter\"><span id=\"cur\">01</span><em id=\"tot\"> / 12</em></div>\n  <div class=\"arrows\"><button id=\"prev\" aria-label=\"prev\">‹</button><button id=\"next\" aria-label=\"next\">›</button></div>\n</div>\n<div class=\"hintkey\" data-pt=\"Use ← → ou espaço\" data-en=\"Use ← → or space\">Use ← → ou espaço</div>\n</div>`;\n  },\n  mounted(d2, root){\n    var reduce = (window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) || false;\n    var deck = root.querySelector(\"#deck\");\n    var slides = Array.prototype.slice.call(root.querySelectorAll(\".slide\"));\n    var n = slides.length, idx = 0;\n    var lang = \"pt\";\n\n    var nodes = root.querySelectorAll(\"[data-pt],[data-en]\");\n    var ZH = {\n  \"Industries\":\"行业方案\",\"Products\":\"产品\",\"How we deliver\":\"交付方式\",\"Customers\":\"客户\",\"Demo\":\"演示\",\"Sign in\":\"登录\",\n  \"A Digital Expression Suite\":\"数字表达套件\",\n  \"From problem<br>to production.\":\"从问题<br>到生产。\",\n  \"The suite that brings the business area close to technology — and turns it into the team that ships.\":\"让业务部门贴近技术的套件 —— 并把它变成能交付的团队。\",\n  \"What we see\":\"我们看见什么\",\n  \"Every area has<br><em>software waiting to exist</em>.\":\"每个部门，都有<br><em>一款等待诞生的软件</em>。\",\n  \"Technology already lets us build almost anything. The missing piece was the bridge between the problem and the solution in production.\":\"技术早已能构建几乎一切。所缺的一环，是问题与上线方案之间的那座桥。\",\n  \"The shift\":\"转变\",\n  \"We are the <em>enablers</em>.\":\"我们，是<em>赋能者</em>。\",\n  \"Before\":\"过去\",\n  \"From idea to delivery: many hands, many translations, a lot of time.\":\"从创意到交付：经手无数、层层转译、耗时漫长。\",\n  \"With Data²\":\"有了 Data²\",\n  \"The business area itself designs, connects real data, ships and operates. In production.\":\"业务部门亲手设计、接入真实数据、发布并运营。直接在生产环境。\",\n  \"What we do\":\"我们做什么\",\n  \"A suite that becomes <em>real software</em>.\":\"一套真正<em>变成软件</em>的套件。\",\n  \"AI built in\":\"内置 AI\",\"Real data\":\"真实数据\",\"Automation\":\"自动化\",\"No code\":\"无需代码\",\n  \"What is possible\":\"无限可能\",\n  \"HR & People\":\"人力资源与员工\",\"Supply & Operations\":\"供应链与运营\",\"Financial Services\":\"金融服务\",\"CX & Contact Center\":\"客户体验与呼叫中心\",\"Retail & E-commerce\":\"零售与电商\",\"Sales Enablement\":\"销售赋能\",\"BI & Analytics\":\"商业智能与分析\",\"Insurance & CX\":\"保险与客户体验\",\"Procurement\":\"采购\",\n  \"An HR that answers <b>thousands of employees</b>, in many languages — instantly.\":\"一个能<b>即时回应数千名员工</b>、支持多语言的人力资源。\",\n  \"AI assistant for employees\":\"面向员工的 AI 助手\",\"Human handoff\":\"人工转接\",\"Document reading (OCR)\":\"文档识别（OCR）\",\"Rules configured by the team\":\"规则由业务团队配置\",\"Analytics & CSAT\":\"分析与满意度（CSAT）\",\n  \"Turn <b>leftover stock into a production plan</b> — in minutes, not weeks.\":\"把<b>过剩库存变成生产计划</b> —— 只需几分钟，而非数周。\",\n  \"Scenario simulation\":\"情景模拟\",\"Bill-of-materials explosion\":\"物料清单（BOM）展开\",\"Savings & feasibility scoring\":\"节省与可行性评分\",\"Self-service SQL on the data lake\":\"面向数据湖的自助 SQL\",\"Export\":\"导出\",\n  \"<b>AI-personalized 1-to-1 outreach</b> at scale — run by the commercial team.\":\"<b>AI 一对一个性化触达</b>，规模化运行 —— 由商务团队操盘。\",\n  \"CRM + outreach automation\":\"CRM + 触达自动化\",\"Omnichannel waves\":\"全渠道波次\",\"AI copy in the lead's tone\":\"以客户口吻的 AI 文案\",\"Offer & ROI modeling\":\"方案与 ROI 建模\",\"Corporate SSO\":\"企业单点登录（SSO）\",\n  \"An <b>entire contact center</b> — from the on-site widget to queue automation — on one platform.\":\"一个<b>完整的呼叫中心</b> —— 从网站挂件到队列自动化 —— 全在一个平台上。\",\n  \"Omnichannel webchat\":\"全渠道网页聊天\",\"AI triage bot\":\"AI 分流机器人\",\"Bot → human handoff\":\"机器人 → 人工转接\",\"Agent + supervisor console\":\"坐席 + 主管控制台\",\"Queue automation & CSAT\":\"队列自动化与满意度（CSAT）\",\n  \"From <b>storefront to ERP</b>: tailor-made buying experiences on real e-commerce data.\":\"从<b>门店到 ERP</b>：基于电商真实数据的量身购物体验。\",\n  \"Catalog & product\":\"目录与商品\",\"VTEX / GraphQL integration\":\"VTEX / GraphQL 集成\",\"AI photo studio\":\"AI 影像工作室\",\"ERP & store operations\":\"ERP 与门店运营\",\n  \"A <b>sales copilot</b> that surfaces the next best action — in natural language.\":\"一个<b>销售副驾</b>，用自然语言给出下一步的最佳行动。\",\n  \"Copilot in natural language\":\"自然语言副驾\",\"Next-best-action recommendation\":\"下一最佳行动推荐\",\"AI search over customers & segments\":\"面向客户与细分的 AI 搜索\",\"Portfolio performance dashboards\":\"客户组合业绩仪表盘\",\"AI content generation\":\"AI 内容生成\",\n  \"From <b>live data to an action plan</b> — dashboards the team reads and acts on, no spreadsheet export.\":\"从<b>实时数据到行动计划</b> —— 业务团队看得懂、能行动的仪表盘，无需导出表格。\",\n  \"Executive dashboards on live data\":\"基于实时数据的高管仪表盘\",\"Automated daily ingestion\":\"每日自动数据接入\",\"Targets & action plan tracked\":\"目标与行动计划全程追踪\",\"Alerts & monitoring\":\"告警与监控\",\n  \"Support that <b>answers from the right source</b> — a semantic knowledge base with AI triage.\":\"从<b>正确来源作答</b>的客服 —— 配备语义知识库与 AI 分流。\",\n  \"Semantic-search knowledge base\":\"语义搜索知识库\",\"AI triage & support\":\"AI 分流与客服\",\"Answers grounded in the source\":\"答案有据可依，源自原文\",\"Support analytics\":\"客服分析\",\n  \"<b>Procurement excellence</b>: financial modeling and supply planning, simulated in minutes.\":\"<b>采购卓越</b>：财务建模与供应规划，几分钟即可模拟完成。\",\n  \"Supply planning\":\"供应规划\",\"Financial scenario modeling\":\"财务情景建模\",\"Decision simulators & builders\":\"决策模拟器与构建器\",\"Data-driven sourcing\":\"数据驱动的采购\",\n  \"How we deliver\":\"交付方式\",\n  \"Our stack.<br>Our services.\":\"我们的技术栈。<br>我们的服务。\",\n  \"Sprints\":\"敏捷冲刺\",\n  \"Don't know where to start? Our team walks your area through the first steps — and can build it for you.\":\"不知从何开始？我们的团队会带着你的部门迈出前几步 —— 也能替你直接构建。\",\n  \"Ideation\":\"创意构思\",\"Prototype\":\"原型\",\n  \"Own your data\":\"掌控你的数据\",\n  \"The Data Framework keeps your model and infra under your control — never hidden in code.\":\"数据框架让你的模型与基础设施始终在你掌控之中 —— 绝不藏于代码。\",\n  \"Domain-Driven\":\"领域驱动\",\"Single Data Language\":\"统一数据语言\",\n  \"Proof\":\"实证\",\n  \"Already building<br>on Data².\":\"他们已在<br>Data² 上构建。\",\n  \"Let's start\":\"现在开始\",\n  \"Bring your area's<br>problem.\":\"带来你部门<br>的问题。\",\n  \"We turn it into software — in production. www.data2.app\":\"我们把它变成软件 —— 直接上线生产。www.data2.app\",\n  \"Use ← → or space\":\"使用 ← → 或空格\"\n};\n    function unesc(s){ return String(s).replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&amp;/g,\"&\"); }\n    var ZH2 = {}; for(var zk in ZH){ ZH2[unesc(zk)] = unesc(ZH[zk]); }\n    function applyLang(l){\n      lang = l;\n      nodes.forEach(function(nd){ var v; if(l===\"zh\"){ v=nd.getAttribute(\"data-zh\")||ZH2[nd.getAttribute(\"data-en\")]||nd.getAttribute(\"data-en\"); } else { v=nd.getAttribute(\"data-\"+l)||nd.getAttribute(\"data-en\"); } if(v!=null) nd.innerHTML=v; });\n      root.querySelectorAll(\"#lang button\").forEach(function(b){ b.classList.toggle(\"on\", b.dataset.l===l); });\n    }\n    root.querySelectorAll(\"#lang button\").forEach(function(b){ b.addEventListener(\"click\", function(e){ e.stopPropagation(); applyLang(b.dataset.l); }); });\n\n    var dotsWrap = root.querySelector(\"#dots\");\n    for(var i=0;i<n;i++){ var dd=document.createElement(\"i\"); dd.setAttribute(\"data-i\", i); dotsWrap.appendChild(dd); }\n    var dots = dotsWrap.querySelectorAll(\"i\");\n    dots.forEach(function(dd){ dd.addEventListener(\"click\", function(e){ e.stopPropagation(); go(parseInt(dd.getAttribute(\"data-i\"),10)); }); });\n\n    var curEl = root.querySelector(\"#cur\"), totEl = root.querySelector(\"#tot\");\n    totEl.textContent = \" / \" + (n<10?\"0\":\"\") + n;\n    var prevB = root.querySelector(\"#prev\"), nextB = root.querySelector(\"#next\");\n\n    function render(){\n      slides.forEach(function(s,i){ s.classList.toggle(\"on\", i===idx); });\n      dots.forEach(function(dd,i){ dd.classList.toggle(\"on\", i===idx); });\n      curEl.textContent = (idx+1<10?\"0\":\"\") + (idx+1);\n      prevB.disabled = idx===0; nextB.disabled = idx===n-1;\n    }\n    function go(i){ idx = Math.max(0, Math.min(n-1, i)); render(); }\n    prevB.addEventListener(\"click\", function(e){ e.stopPropagation(); go(idx-1); });\n    nextB.addEventListener(\"click\", function(e){ e.stopPropagation(); go(idx+1); });\n    deck.addEventListener(\"click\", function(e){\n      if(e.target.closest(\".foot\")||e.target.closest(\".topbar\")) return;\n      var r = deck.getBoundingClientRect();\n      if(e.clientX - r.left < r.width*0.33) go(idx-1); else go(idx+1);\n    });\n    window.addEventListener(\"keydown\", function(e){\n      if(e.key===\"ArrowRight\"||e.key===\" \"||e.key===\"PageDown\"){ e.preventDefault(); go(idx+1); }\n      else if(e.key===\"ArrowLeft\"||e.key===\"PageUp\"){ e.preventDefault(); go(idx-1); }\n      else if(e.key===\"Home\"){ go(0); } else if(e.key===\"End\"){ go(n-1); }\n    });\n\n    function initFlow(canvas){\n      var ctx = canvas.getContext && canvas.getContext(\"2d\"); if(!ctx) return;\n      var hue = (getComputedStyle(canvas.parentElement).getPropertyValue(\"--hue\")||\"#5b86ff\").trim();\n      var w=0,h=0,dpr=Math.min(window.devicePixelRatio||1,2);\n      function size(){ w=canvas.clientWidth; h=canvas.clientHeight; if(!w||!h)return; canvas.width=w*dpr; canvas.height=h*dpr; ctx.setTransform(dpr,0,0,dpr,0,0); }\n      size(); window.addEventListener(\"resize\", size);\n      function draw(t){ if(!w||!h){size(); if(!w||!h)return;} ctx.clearRect(0,0,w,h);\n        for(var i=0;i<3;i++){ var yb=h*(0.34+i*0.15),amp=h*0.09+i*8,ph=t*0.00015*(1+i*0.35)+i*1.7; ctx.beginPath();\n          for(var x=0;x<=w;x+=14){ var y=yb+Math.sin(x*0.0045+ph)*amp+Math.sin(x*0.0011-ph*0.7)*amp*0.5; if(x===0)ctx.moveTo(x,y); else ctx.lineTo(x,y);} \n          ctx.strokeStyle=hue; ctx.globalAlpha=0.15-i*0.03; ctx.lineWidth=1.4; ctx.stroke(); } ctx.globalAlpha=1; }\n      var raf=null;\n      function loop(t){ draw(t||0); raf=requestAnimationFrame(loop); }\n      if(reduce){ draw(0); } else { raf=requestAnimationFrame(loop); }\n    }\n    if(!reduce) root.querySelectorAll(\"canvas.flow\").forEach(initFlow);\n\n    applyLang(\"pt\");\n    render();\n    try{ deck.focus(); }catch(e){}\n  }\n}"}}}}}}}},{"_id":"6a65c513613e6e5132f33f76","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"isolab","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host,.lab{--bg:#06070a;--panel:#0d0e12;--line:rgba(255,255,255,.1);--ink:#eef;--mut:#8a8a93;--mono:ui-monospace,\"SF Mono\",Menlo,Consolas,monospace;--sans:\"Helvetica Neue\",Helvetica,Arial,sans-serif}\n*{box-sizing:border-box;margin:0;padding:0}\n.lab{height:100%;overflow:auto;background:var(--bg);color:var(--ink);font-family:var(--sans);padding:28px 30px;-webkit-font-smoothing:antialiased}\n.lab-head h1{font-family:var(--mono);font-size:14px;letter-spacing:.24em;text-transform:uppercase;color:var(--mut)}\n.lab-head p{color:var(--mut);font-size:14px;margin-top:8px;max-width:74ch;line-height:1.5}\n.lab-body{display:grid;grid-template-columns:340px 1fr;gap:20px;margin-top:22px;height:calc(100% - 96px);min-height:520px}\n.lab-editor{display:flex;flex-direction:column;gap:12px;min-height:0}\n#dsl{flex:1;min-height:340px;background:#0a0b0e;border:1px solid var(--line);border-radius:12px;color:#cfe6ff;font-family:var(--mono);font-size:13px;line-height:1.65;padding:16px;resize:none;outline:none;tab-size:2}\n#dsl:focus{border-color:#3a7bff;box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.presets{display:flex;gap:8px;flex-wrap:wrap}\n.presets button{font-family:var(--mono);font-size:12px;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:8px 14px;cursor:pointer;transition:.2s}\n.presets button:hover{border-color:#3a7bff}\n.lab-stage{border:1px solid var(--line);border-radius:16px;background:radial-gradient(130% 95% at 50% 14%,#0a0b11,#030304 72%);display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative;min-height:360px}\n.iso-svg{width:100%;height:100%;overflow:visible}\n.iso-svg .face{stroke:none}\n.iso-svg .glow2{fill:none;stroke:var(--h);stroke-width:11;opacity:.05;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .glow1{fill:none;stroke:var(--h);stroke-width:5.5;opacity:.13;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .edge{fill:none;stroke:var(--h);stroke-width:1.6;opacity:.95;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .core{fill:none;stroke:#fff;stroke-width:.7;opacity:.7;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}\n.iso-svg .contact{pointer-events:none}\n.iso-svg .floor-glow{pointer-events:none}\n.iso-svg .det{stroke:var(--h);opacity:.22;stroke-width:1;vector-effect:non-scaling-stroke;fill:none}\n.iso-svg .grid{fill:none;stroke:color-mix(in srgb,var(--h) 24%,transparent);stroke-width:.8;opacity:.13;vector-effect:non-scaling-stroke}\n.iso-svg .ghost{opacity:.22}\n.iso-svg .gface{stroke:none;fill:color-mix(in srgb,var(--h) 8%,#070810)}\n.iso-svg .gedge{fill:none;stroke:color-mix(in srgb,var(--h) 34%,#0a0b12);stroke-width:1;opacity:.7;vector-effect:non-scaling-stroke}\n.iso-svg .dust{fill:#cdd8f7;animation-name:dustf;animation-timing-function:linear;animation-iteration-count:infinite}\n@keyframes dustf{0%{opacity:0;transform:translateY(6px)}25%{opacity:.5}75%{opacity:.38}100%{opacity:0;transform:translateY(-10px)}}\n.lab-stage::after{content:\"\";position:absolute;inset:0;pointer-events:none;mix-blend-mode:overlay;opacity:.06;background:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"140\" height=\"140\"><filter id=\"n\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.85\" numOctaves=\"2\" stitchTiles=\"stitch\"/><feColorMatrix type=\"saturate\" values=\"0\"/></filter><rect width=\"140\" height=\"140\" filter=\"url(%23n)\"/></svg>')}\n.iso-svg .ic{fill:none;stroke:var(--h);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}\n.iso-svg .iso-lbl{fill:#fff;font-family:var(--sans);font-weight:600;text-anchor:middle;dominant-baseline:central;opacity:.96;letter-spacing:.01em}\n.iso-svg .lbl-bg{fill:rgba(6,7,10,.72);stroke:rgba(255,255,255,.06);stroke-width:1;vector-effect:non-scaling-stroke}\n.iso-svg .iso-wire{fill:none;stroke:color-mix(in srgb,var(--h) 55%,transparent);stroke-width:1.5;stroke-dasharray:5 7;animation:isowire 1.5s linear infinite}\n@keyframes isowire{to{stroke-dashoffset:-24}}\n.iso-svg .iso-flow{fill:var(--h);filter:drop-shadow(0 0 5px var(--h))}\n.iso-blk{transform-box:fill-box;transform-origin:center}\n.iso-float{animation:isofloat 3s ease-in-out infinite}\n@keyframes isofloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}\n.iso-bob{animation:isobob 3.4s ease-in-out infinite}\n@keyframes isobob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}\n.iso-pulse{animation:isopulse 2.4s ease-in-out infinite}\n@keyframes isopulse{0%,100%{opacity:.68}50%{opacity:1}}\n@media(max-width:820px){.lab-body{grid-template-columns:1fr;height:auto}}\n`,\n  render(d2){\n    return `<div class=\"lab\"><div class=\"lab-head\"><h1>Data² · Iso Scene DSL</h1><p>Ilustrações isométricas neon definidas numa expressão simples. Cada bloco é uma forma — cube · cyl · hex · pyr — com altura (h), animação independente (float / pulse / bob), detalhe (win), ícone (icon:) e fios de fluxo (->). Edite à esquerda; renderiza ao vivo à direita.</p></div><div class=\"lab-body\"><div class=\"lab-editor\"><textarea id=\"dsl\" spellcheck=\"false\"></textarea><div class=\"presets\"><button data-p=\"city\">Cidade</button><button data-p=\"flow\">Fluxo</button><button data-p=\"tower\">Torres</button></div></div><div class=\"lab-stage\" id=\"stage\"></div></div></div>`;\n  },\n  mounted(d2, root){\n    var PRESETS = {\n      city:\"hue #4ddfe6\\ncell 52\\ncontext\\na @0,0 h2 float icon:chat \\\"Webchat\\\"\\nb @2,0 h3 pulse icon:ai \\\"Bot AI\\\"\\nc @2,2 h1 bob shape:cyl icon:user \\\"Humano\\\"\\nd @4,1 h2 float shape:hex icon:screen \\\"Console\\\"\\ne @4,3 h4 win icon:gear \\\"Filas\\\"\\na -> b flow\\nb -> c flow\\nb -> d flow\\nd -> e flow\",\n      flow:\"hue #9b5cff\\ncell 54\\ncontext\\nin @0,1 h1 pulse shape:pyr icon:bolt \\\"Evento\\\"\\nr @2,1 h2 float icon:gear \\\"Rush\\\"\\nx @4,0 h1 shape:hex icon:plug \\\"Connect\\\"\\ny @4,2 h1 shape:hex icon:ai \\\"Domain\\\"\\ndb @6,1 h3 shape:cyl icon:db \\\"Registry\\\"\\nui @8,1 h2 float win icon:screen \\\"UI\\\"\\nin -> r flow\\nr -> x flow\\nr -> y flow\\nx -> db flow\\ny -> db flow\\ndb -> ui flow\",\n      tower:\"hue #4de0a1\\ncell 56\\ncontext\\nt1 @0,0 h5 float win shape:cyl icon:db \\\"Data Lake\\\"\\nt2 @2,0 h3 pulse icon:ai \\\"Modelo\\\"\\nt3 @2,2 h2 bob shape:pyr icon:chart \\\"Cenários\\\"\\nt1 -> t2 flow\\nt2 -> t3 flow\"\n    };\n    var ICONS={\n      chat:'<path class=\"ic\" d=\"M4 6a2 2 0 012-2h12a2 2 0 012 2v6a2 2 0 01-2 2H9l-4 3v-3H6a2 2 0 01-2-2z\"></path>',\n      ai:'<path class=\"ic\" d=\"M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z\"></path>',\n      user:'<circle class=\"ic\" cx=\"12\" cy=\"8\" r=\"3.2\"></circle><path class=\"ic\" d=\"M5.5 20c0-3.6 3-6 6.5-6s6.5 2.4 6.5 6\"></path>',\n      screen:'<rect class=\"ic\" x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\"></rect><path class=\"ic\" d=\"M8 20h8M12 16v4\"></path>',\n      gear:'<circle class=\"ic\" cx=\"12\" cy=\"12\" r=\"3\"></circle><path class=\"ic\" d=\"M12 3.5v3M12 17.5v3M3.5 12h3M17.5 12h3M6 6l2 2M16 16l2 2M18 6l-2 2M8 16l-2 2\"></path>',\n      bolt:'<path class=\"ic\" d=\"M13 3L5 13h6l-1 8 8-11h-6z\"></path>',\n      plug:'<path class=\"ic\" d=\"M9 3v4M15 3v4M7 7h10v2a5 5 0 01-10 0zM12 16v5\"></path>',\n      db:'<ellipse class=\"ic\" cx=\"12\" cy=\"6\" rx=\"7\" ry=\"2.6\"></ellipse><path class=\"ic\" d=\"M5 6v12c0 1.4 3.1 2.6 7 2.6s7-1.2 7-2.6V6\"></path><path class=\"ic\" d=\"M5 12c0 1.4 3.1 2.6 7 2.6s7-1.2 7-2.6\"></path>',\n      chart:'<path class=\"ic\" d=\"M4 20h16M7 20v-6M12 20V8M17 20v-9\"></path>',\n      doc:'<path class=\"ic\" d=\"M7 3h7l4 4v14H7z\"></path><path class=\"ic\" d=\"M14 3v4h4M10 12h5M10 16h5\"></path>',\n      shield:'<path class=\"ic\" d=\"M12 3l7 3v6c0 4.8-3.4 7.8-7 9-3.6-1.2-7-4.2-7-9V6z\"></path>',\n      cart:'<circle class=\"ic\" cx=\"9.5\" cy=\"20\" r=\"1.3\"></circle><circle class=\"ic\" cx=\"17\" cy=\"20\" r=\"1.3\"></circle><path class=\"ic\" d=\"M3 4h2.5l2.2 11h9.8l1.8-8H7\"></path>',\n      node:'<circle class=\"ic\" cx=\"5\" cy=\"12\" r=\"2\"></circle><circle class=\"ic\" cx=\"19\" cy=\"6\" r=\"2\"></circle><circle class=\"ic\" cx=\"19\" cy=\"18\" r=\"2\"></circle><path class=\"ic\" d=\"M6.8 11l10.4-4M6.8 13l10.4 4\"></path>'\n    };\n    function parseIso(text){\n      var spec={cell:50,hue:\"#4ddfe6\",blocks:[],wires:[],context:false};\n      (text||\"\").split(\"\\n\").forEach(function(ln){\n        ln=ln.trim(); if(!ln||ln.charAt(0)===\"#\") return;\n        if(ln.indexOf(\"hue \")===0){ spec.hue=ln.slice(4).trim(); return; }\n        if(ln.indexOf(\"cell \")===0){ spec.cell=+ln.slice(5)||50; return; }\n        if(ln===\"context\"||ln.indexOf(\"context \")===0){ spec.context=true; return; }\n        var w=ln.match(/^([\\w-]+)\\s*->\\s*([\\w-]+)(.*)$/);\n        if(w){ var wi={from:w[1],to:w[2],flow:/\\bflow\\b/.test(w[3])}; var du=w[3].match(/dur:([\\d.]+)/); if(du)wi.dur=+du[1]; var wh=w[3].match(/#([0-9a-fA-F]{3,8})/); if(wh)wi.hue=\"#\"+wh[1]; spec.wires.push(wi); return; }\n        var m=ln.match(/^([\\w-]+)\\s+@(-?\\d+),(-?\\d+)(.*)$/);\n        if(m){ var b={id:m[1],at:[+m[2],+m[3]]}; var rest=m[4]||\"\";\n          var hh=rest.match(/\\bh(\\d+)/); b.h=hh?+hh[1]:1;\n          var an=rest.match(/\\b(float|pulse|bob)\\b/); if(an)b.anim=an[1];\n          var lb=rest.match(/\"([^\"]*)\"/); if(lb)b.label=lb[1];\n          var hu=rest.match(/#([0-9a-fA-F]{3,8})/); if(hu)b.hue=\"#\"+hu[1];\n          if(/\\bwin\\b/.test(rest)) b.detail=\"win\";\n          var sh=rest.match(/\\bshape:(\\w+)/); if(sh)b.shape=sh[1];\n          var ic=rest.match(/\\bicon:([a-z]+)/); if(ic)b.icon=ic[1];\n          spec.blocks.push(b);\n        }\n      });\n      return spec;\n    }\n    function poly(a){ return a.map(function(p){return p[0].toFixed(1)+\",\"+p[1].toFixed(1)}).join(\" \"); }\n    function shapeGeo(shape,X,topY,Ybase,hw,q,H){\n      var g={faces:[],edges:\"\",topC:[X,topY],floor:[X,Ybase,hw*1.3,q*1.25],contact:[X,Ybase,hw*0.95,q*0.85]};\n      function seg(a,b){ return \"M\"+a[0].toFixed(1)+\",\"+a[1].toFixed(1)+\" L\"+b[0].toFixed(1)+\",\"+b[1].toFixed(1)+\" \"; }\n      if(shape===\"cyl\"){\n        var bot=topY+H;\n        var body=\"M\"+(X-hw)+\",\"+topY+\" L\"+(X-hw)+\",\"+bot+\" A\"+hw+\",\"+q+\" 0 0 0 \"+(X+hw)+\",\"+bot+\" L\"+(X+hw)+\",\"+topY+\" A\"+hw+\",\"+q+\" 0 0 1 \"+(X-hw)+\",\"+topY+\" Z\";\n        var topE=\"M\"+(X-hw)+\",\"+topY+\" A\"+hw+\",\"+q+\" 0 1 0 \"+(X+hw)+\",\"+topY+\" A\"+hw+\",\"+q+\" 0 1 0 \"+(X-hw)+\",\"+topY+\" Z\";\n        g.faces.push({cls:\"fl\",d:body});\n        g.faces.push({cls:\"ft\",d:topE});\n        g.edges=topE+\" M\"+(X-hw)+\",\"+topY+\" L\"+(X-hw)+\",\"+bot+\" M\"+(X+hw)+\",\"+topY+\" L\"+(X+hw)+\",\"+bot+\" M\"+(X-hw)+\",\"+bot+\" A\"+hw+\",\"+q+\" 0 0 0 \"+(X+hw)+\",\"+bot;\n        g.floor=[X,bot,hw*1.2,q*1.15]; g.contact=[X,bot,hw*0.9,q*0.78];\n        return g;\n      }\n      if(shape===\"pyr\"){\n        var apex=[X,topY],pl=[X-hw,Ybase],pf=[X,Ybase+q],pr=[X+hw,Ybase];\n        g.faces.push({cls:\"fl\",pts:[apex,pl,pf]});\n        g.faces.push({cls:\"fr\",pts:[apex,pf,pr]});\n        g.edges=seg(apex,pl)+seg(apex,pf)+seg(apex,pr)+seg(pl,pf)+seg(pf,pr);\n        g.topC=[X,topY+(Ybase-topY)*0.42];\n        g.floor=[X,Ybase+q*0.2,hw*1.15,q*1.1]; g.contact=[X,Ybase+q*0.12,hw*0.8,q*0.7];\n        return g;\n      }\n      if(shape===\"hex\"){\n        var bt=topY+H;\n        var R=[X+hw,topY],TR=[X+hw*0.5,topY-q],TL=[X-hw*0.5,topY-q],L=[X-hw,topY],BL=[X-hw*0.5,topY+q],BR=[X+hw*0.5,topY+q];\n        var Ld=[X-hw,bt],BLd=[X-hw*0.5,bt+q],BRd=[X+hw*0.5,bt+q],Rd=[X+hw,bt];\n        g.faces.push({cls:\"ft\",pts:[R,TR,TL,L,BL,BR]});\n        g.faces.push({cls:\"fl\",pts:[L,BL,BLd,Ld]});\n        g.faces.push({cls:\"fm\",pts:[BL,BR,BRd,BLd]});\n        g.faces.push({cls:\"fr\",pts:[BR,R,Rd,BRd]});\n        g.edges=seg(R,TR)+seg(TR,TL)+seg(TL,L)+seg(L,BL)+seg(BL,BR)+seg(BR,R)+seg(L,Ld)+seg(BL,BLd)+seg(BR,BRd)+seg(R,Rd)+seg(Ld,BLd)+seg(BLd,BRd)+seg(BRd,Rd);\n        g.floor=[X,bt,hw*1.25,q*1.2]; g.contact=[X,bt,hw*0.95,q*0.82];\n        return g;\n      }\n      var T=[X,topY-q],Rr=[X+hw,topY],B=[X,topY+q],Ll=[X-hw,topY],fb=[X,topY+q+H],lb=[X-hw,topY+H],rb=[X+hw,topY+H];\n      g.faces.push({cls:\"ft\",pts:[T,Rr,B,Ll]});\n      g.faces.push({cls:\"fl\",pts:[Ll,B,fb,lb]});\n      g.faces.push({cls:\"fr\",pts:[Rr,B,fb,rb]});\n      g.edges=seg(T,Rr)+seg(Rr,B)+seg(B,Ll)+seg(Ll,T)+seg(Ll,lb)+seg(B,fb)+seg(Rr,rb)+seg(lb,fb)+seg(fb,rb);\n      g.floor=[X,topY+q+H,hw*1.3,q*1.25]; g.contact=[X,topY+q+H,hw*0.95,q*0.82];\n      return g;\n    }\n    function isoScene(spec){\n      var s=spec.cell||50, hw=s/2, q=s/4, fh=s*0.5;\n      var minX=1e9,maxX=-1e9,minY=1e9,maxY=-1e9, anchors={}, blocks=[];\n      spec.blocks.forEach(function(b,i){\n        var c=b.at[0], r=b.at[1], h=b.h||1;\n        var X=(c-r)*hw, Ybase=(c+r)*q, topY=Ybase-h*fh, hue=b.hue||spec.hue;\n        anchors[b.id!=null?b.id:i]={x:X,y:topY};\n        blocks.push({b:b,X:X,Ybase:Ybase,topY:topY,h:h,hue:hue,i:i});\n        if(X-hw*1.3<minX)minX=X-hw*1.3; if(X+hw*1.3>maxX)maxX=X+hw*1.3;\n        if(topY-q<minY)minY=topY-q; if(Ybase+q+s*0.62+16>maxY)maxY=Ybase+q+s*0.62+16;\n      });\n      var minYb=1e9,maxYb=-1e9;\n      blocks.forEach(function(bl){ if(bl.Ybase<minYb)minYb=bl.Ybase; if(bl.Ybase>maxYb)maxYb=bl.Ybase; });\n      var GRID=\"\",GHOSTS=\"\";\n      if(blocks.length){\n        var _cs=spec.blocks.map(function(b){return b.at[0]}),_rs=spec.blocks.map(function(b){return b.at[1]});\n        var minC=Math.min.apply(null,_cs),maxC=Math.max.apply(null,_cs),minR=Math.min.apply(null,_rs),maxR=Math.max.apply(null,_rs);\n        var g0=minC-1,g1=maxC+1,r0=minR-1,r1=maxR+1;\n        var occ={}; spec.blocks.forEach(function(b){occ[b.at[0]+\"_\"+b.at[1]]=1;});\n        var maxCR=Math.max.apply(null,spec.blocks.map(function(b){return b.at[0]+b.at[1]}));\n        var sd=9176,rand=function(){ sd=(sd*1103515245+12345)&0x7fffffff; return sd/0x7fffffff; };\n        var gl=\"\";\n        for(var gc=g0;gc<=g1;gc++){ gl+=\"M\"+((gc-r0)*hw).toFixed(1)+\",\"+((gc+r0)*q).toFixed(1)+\" L\"+((gc-r1)*hw).toFixed(1)+\",\"+((gc+r1)*q).toFixed(1)+\" \"; }\n        for(var gr=r0;gr<=r1;gr++){ gl+=\"M\"+((g0-gr)*hw).toFixed(1)+\",\"+((g0+gr)*q).toFixed(1)+\" L\"+((g1-gr)*hw).toFixed(1)+\",\"+((g1+gr)*q).toFixed(1)+\" \"; }\n        GRID='<path class=\"grid\" style=\"--h:'+spec.hue+'\" d=\"'+gl+'\"></path>';\n        if(spec.context){\n          var gh=[];\n          for(var cc=g0;cc<=g1;cc++){ for(var rr=r0;rr<=r1;rr++){ if(occ[cc+\"_\"+rr]) continue; if(cc+rr>maxCR) continue; if(rand()>0.36) continue; gh.push({c:cc,r:rr,h:1+Math.floor(rand()*3)}); } }\n          gh.sort(function(a,b){return (a.c+a.r)-(b.c+b.r)});\n          gh.forEach(function(o){ var X=(o.c-o.r)*hw,Ybase=(o.c+o.r)*q,topY=Ybase-o.h*fh,H=o.h*fh; var geo=shapeGeo(\"cube\",X,topY,Ybase,hw,q,H); var gg='<g class=\"ghost\" style=\"--h:'+spec.hue+'\">'; geo.faces.forEach(function(f){ gg+='<polygon class=\"gface\" points=\"'+poly(f.pts)+'\"></polygon>'; }); gg+='<path class=\"gedge\" d=\"'+geo.edges+'\"></path></g>'; GHOSTS+=gg; if(X-hw<minX)minX=X-hw; if(X+hw>maxX)maxX=X+hw; if(topY-q<minY)minY=topY-q; if(Ybase+q>maxY)maxY=Ybase+q; });\n        }\n        var _xs=[(g0-r0)*hw,(g0-r1)*hw,(g1-r0)*hw,(g1-r1)*hw];\n        minX=Math.min(minX,Math.min.apply(null,_xs)); maxX=Math.max(maxX,Math.max.apply(null,_xs));\n        minY=Math.min(minY,(g0+r0)*q-q); maxY=Math.max(maxY,(g1+r1)*q+q);\n      }\n      var DEFS='<defs><radialGradient id=\"shG\"><stop offset=\"0\" stop-color=\"#000\" stop-opacity=\".55\"/><stop offset=\".72\" stop-color=\"#000\" stop-opacity=\".16\"/><stop offset=\"1\" stop-color=\"#000\" stop-opacity=\"0\"/></radialGradient></defs>';\n      var out=GRID+GHOSTS;\n      (spec.wires||[]).forEach(function(w){\n        var a=anchors[w.from], z=anchors[w.to]; if(!a||!z) return;\n        var d=\"M\"+a.x.toFixed(1)+\",\"+a.y.toFixed(1)+\" L\"+z.x.toFixed(1)+\",\"+z.y.toFixed(1);\n        out+='<path class=\"iso-wire\" style=\"--h:'+(w.hue||spec.hue)+'\" d=\"'+d+'\"></path>';\n        if(w.flow) out+='<circle class=\"iso-flow\" r=\"3.4\" style=\"--h:'+(w.hue||spec.hue)+'\"><animateMotion dur=\"'+(w.dur||2.6)+'s\" repeatCount=\"indefinite\" path=\"'+d+'\"></animateMotion></circle>';\n      });\n      blocks.sort(function(p,q2){return p.Ybase-q2.Ybase});\n      blocks.forEach(function(bl){\n        var X=bl.X,topY=bl.topY,Ybase=bl.Ybase,h=bl.h,hue=bl.hue,b=bl.b,H=h*fh,i=bl.i;\n        var shape=b.shape||\"cube\";\n        var geo=shapeGeo(shape,X,topY,Ybase,hw,q,H);\n        var dep=maxYb>minYb?(Ybase-minYb)/(maxYb-minYb):1, op=(0.78+0.22*dep).toFixed(3);\n        var mix=function(p,base){ return \"color-mix(in srgb,\"+hue+\" \"+p+\"%,\"+base+\")\"; };\n        var gd='<defs><linearGradient id=\"ftg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(42,\"#0d0e15\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(20,\"#08090f\")+'\"/></linearGradient><linearGradient id=\"flg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(24,\"#0a0b12\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(9,\"#050609\")+'\"/></linearGradient><linearGradient id=\"frg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(13,\"#08080e\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(4,\"#040406\")+'\"/></linearGradient><linearGradient id=\"fmg'+i+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"'+mix(30,\"#0b0c13\")+'\"/><stop offset=\"1\" stop-color=\"'+mix(12,\"#060710\")+'\"/></linearGradient><radialGradient id=\"glowG'+i+'\"><stop offset=\"0\" stop-color=\"'+hue+'\" stop-opacity=\".36\"/><stop offset=\"1\" stop-color=\"'+hue+'\" stop-opacity=\"0\"/></radialGradient></defs>';\n        var cls=\"iso-blk\"+(b.anim?(\" iso-\"+b.anim):\"\");\n        var g='<g class=\"'+cls+'\" style=\"--h:'+hue+';opacity:'+op+';animation-delay:'+(-i*0.4).toFixed(2)+'s\">'+gd;\n        g+='<ellipse class=\"contact\" fill=\"url(#shG)\" cx=\"'+geo.contact[0].toFixed(1)+'\" cy=\"'+geo.contact[1].toFixed(1)+'\" rx=\"'+geo.contact[2].toFixed(1)+'\" ry=\"'+geo.contact[3].toFixed(1)+'\"></ellipse>';\n        g+='<ellipse class=\"floor-glow\" fill=\"url(#glowG'+i+')\" cx=\"'+geo.floor[0].toFixed(1)+'\" cy=\"'+geo.floor[1].toFixed(1)+'\" rx=\"'+geo.floor[2].toFixed(1)+'\" ry=\"'+geo.floor[3].toFixed(1)+'\"></ellipse>';\n        geo.faces.forEach(function(f){ var fill=\"url(#\"+f.cls+\"g\"+i+\")\"; if(f.d) g+='<path class=\"face\" fill=\"'+fill+'\" d=\"'+f.d+'\"></path>'; else g+='<polygon class=\"face\" fill=\"'+fill+'\" points=\"'+poly(f.pts)+'\"></polygon>'; });\n        if(shape===\"cube\"&&h>1){ for(var k=1;k<h;k++){ var yy=topY+k*fh; g+='<line class=\"det\" x1=\"'+(X-hw)+'\" y1=\"'+yy+'\" x2=\"'+X+'\" y2=\"'+(yy+q)+'\"></line><line class=\"det\" x1=\"'+X+'\" y1=\"'+(yy+q)+'\" x2=\"'+(X+hw)+'\" y2=\"'+yy+'\"></line>'; } }\n        if(b.detail===\"win\"&&shape===\"cube\"){\n          for(var o2=fh*0.5;o2<H;o2+=fh){ g+='<line class=\"det\" x1=\"'+(X-hw)+'\" y1=\"'+(topY+o2)+'\" x2=\"'+X+'\" y2=\"'+(topY+q+o2)+'\"></line><line class=\"det\" x1=\"'+X+'\" y1=\"'+(topY+q+o2)+'\" x2=\"'+(X+hw)+'\" y2=\"'+(topY+o2)+'\"></line>'; }\n          g+='<line class=\"det\" x1=\"'+(X-hw*0.5)+'\" y1=\"'+(topY+q*0.5)+'\" x2=\"'+(X-hw*0.5)+'\" y2=\"'+(topY+q*0.5+H)+'\"></line><line class=\"det\" x1=\"'+(X+hw*0.5)+'\" y1=\"'+(topY+q*0.5)+'\" x2=\"'+(X+hw*0.5)+'\" y2=\"'+(topY+q*0.5+H)+'\"></line>';\n        }\n        g+='<path class=\"glow2\" d=\"'+geo.edges+'\"></path><path class=\"glow1\" d=\"'+geo.edges+'\"></path><path class=\"edge\" d=\"'+geo.edges+'\"></path><path class=\"core\" d=\"'+geo.edges+'\"></path>';\n        if(b.icon&&ICONS[b.icon]){ var isc=(hw/30).toFixed(3); g+='<g class=\"iso-ic\" transform=\"translate('+geo.topC[0].toFixed(1)+','+geo.topC[1].toFixed(1)+') scale('+isc+') matrix(1,0.5,-1,0.5,0,0) translate(-12,-12)\">'+ICONS[b.icon]+'</g>'; }\n        g+='</g>';\n        out+=g;\n        if(b.label){ var lf=Math.max(10,Math.round(s*0.26)); var lw=(b.label.length*lf*0.6+18); var ly=(Ybase+q+lf+12); out+='<rect class=\"lbl-bg\" x=\"'+(X-lw/2).toFixed(1)+'\" y=\"'+(ly-lf*0.85).toFixed(1)+'\" width=\"'+lw.toFixed(1)+'\" height=\"'+(lf*1.7).toFixed(1)+'\" rx=\"'+(lf*0.85).toFixed(1)+'\"></rect><text class=\"iso-lbl\" x=\"'+X.toFixed(1)+'\" y=\"'+ly.toFixed(1)+'\" style=\"font-size:'+lf+'px\">'+b.label+'</text>'; }\n      });\n      var pad=42, vbx=(minX-pad), vby=(minY-pad), vbw=(maxX-minX)+pad*2, vbh=(maxY-minY)+pad*2;\n      var sd2=4231,rnd=function(){ sd2=(sd2*1103515245+12345)&0x7fffffff; return sd2/0x7fffffff; };\n      for(var di=0;di<14;di++){ out+='<circle class=\"dust\" cx=\"'+(vbx+rnd()*vbw).toFixed(1)+'\" cy=\"'+(vby+rnd()*vbh).toFixed(1)+'\" r=\"'+(0.6+rnd()*1.5).toFixed(2)+'\" style=\"animation-delay:-'+(rnd()*6).toFixed(2)+'s;animation-duration:'+(5+rnd()*6).toFixed(2)+'s\"></circle>'; }\n      void 0;\n      if(!isFinite(vbw)||vbw<=0) return '<svg class=\"iso-svg\" viewBox=\"0 0 100 100\"></svg>';\n      return '<svg class=\"iso-svg\" viewBox=\"'+vbx.toFixed(1)+\" \"+vby.toFixed(1)+\" \"+vbw.toFixed(1)+\" \"+vbh.toFixed(1)+'\" preserveAspectRatio=\"xMidYMid meet\">'+DEFS+out+'</svg>';\n    }\n    var ta=root.querySelector(\"#dsl\"), stage=root.querySelector(\"#stage\");\n    function draw(){ if(!stage||!ta) return; try{ stage.innerHTML=isoScene(parseIso(ta.value)); }catch(e){ stage.innerHTML='<div style=\"color:#ff6a4d;font-family:monospace;padding:20px\">'+(e&&e.message||e)+'</div>'; } }\n    if(ta){ ta.value=PRESETS.city; ta.addEventListener(\"input\", draw); }\n    root.querySelectorAll(\".presets button\").forEach(function(bt){ bt.addEventListener(\"click\",function(){ if(ta){ta.value=PRESETS[bt.dataset.p]||\"\";} draw(); }); });\n    draw();\n  }\n}"}}}}}}}},{"_id":"6a6a3b5853635bade866228c","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"isoshader","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host,.sh{--bg:#04050a;--panel:#0a0c11;--line:rgba(255,255,255,.09);--ink:#dfe7ff;--mut:#7f8aa3;--acc:#3a7bff;--mono:ui-monospace,\"SF Mono\",Menlo,monospace;--sans:\"Helvetica Neue\",Arial,sans-serif}\n*{box-sizing:border-box;margin:0;padding:0}\n.sh{height:100%;overflow:hidden;background:var(--bg);color:var(--ink);font-family:var(--sans)}\n.sh-body{display:grid;grid-template-columns:280px 1fr;height:100%}\n.sh.collapsed .sh-body{grid-template-columns:1fr}\n.sh.collapsed .sh-panel{display:none}\n.sh-toggle{position:absolute;top:14px;left:14px;z-index:9;width:34px;height:34px;border-radius:9px;border:1px solid var(--line);background:rgba(10,12,17,.62);color:var(--ink);font-size:15px;cursor:pointer;transition:.15s}\n.sh-toggle:hover{border-color:var(--acc)}\n.sh-panel{border-right:1px solid var(--line);padding:18px 16px;overflow:auto;display:flex;flex-direction:column;gap:16px;background:var(--panel)}\n.sh-head h1{font-family:var(--mono);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--mut)}\n.sh-head p{color:var(--mut);font-size:12px;margin-top:6px;line-height:1.5}\n.grp .lbl{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mut);margin-bottom:8px}\n.btns{display:flex;flex-wrap:wrap;gap:6px}\n.btns button{font-family:var(--mono);font-size:11px;background:#0e1017;border:1px solid var(--line);color:var(--ink);border-radius:7px;padding:6px 10px;cursor:pointer;transition:.15s}\n.btns button:hover{border-color:var(--acc)}\n.btns button.on{border-color:var(--acc);background:rgba(58,123,255,.16);color:#fff}\n.sld{display:flex;align-items:center;gap:8px;margin-bottom:9px}\n.sld label{flex:0 0 88px;font-size:11px;color:var(--mut)}\n.sld input[type=range]{flex:1;accent-color:var(--acc);height:3px}\n.sld .val{flex:0 0 40px;text-align:right;font-family:var(--mono);font-size:10px;color:#aeb8d0}\n.sh-stage{position:relative;min-height:0;display:flex;align-items:center;justify-content:center;background:#04050a;overflow:hidden}\n.viewport{position:relative;width:100%;height:100%;overflow:hidden}\n.viewport.card{width:460px;height:300px;border-radius:14px;border:1px solid var(--line);box-shadow:0 24px 70px rgba(0,0,0,.65)}\n.viewport.thumb{width:260px;height:170px;border-radius:12px;border:1px solid var(--line);box-shadow:0 18px 44px rgba(0,0,0,.65)}\n#gl{display:block;width:100%;height:100%}\n.sh-err{position:absolute;inset:0;padding:20px;color:#ff6a4d;font-family:var(--mono);font-size:12px;white-space:pre-wrap;overflow:auto}\n@media(max-width:820px){.sh-body{grid-template-columns:1fr}}\n`,\n  render(d2){\n    var panel=`<div class=\"sh-panel\"><div class=\"sh-head\"><h1>Data² · Neon Diorama</h1><p>Passe artístico: sombra real, lua, bloom, grade cinematográfico, props de telhado, variação por prédio.</p></div><div class=\"grp\"><div class=\"lbl\">Cena</div><div class=\"btns\" id=\"scenes\"></div></div><div class=\"grp\"><div class=\"lbl\">Tamanho</div><div class=\"btns\" id=\"sizes\"></div></div><div class=\"grp\"><div class=\"lbl\">Camadas</div><div class=\"btns\" id=\"layers\"></div></div><div class=\"grp\"><div class=\"lbl\">Ajuste</div><div id=\"sliders\"></div></div></div>`;\n    return `<div class=\"sh\"><div class=\"sh-body\">${panel}<div class=\"sh-stage\"><button class=\"sh-toggle\" title=\"Controles\">☰</button><div class=\"viewport\" id=\"vp\"><canvas id=\"gl\"></canvas></div></div></div></div>`;\n  },\n  mounted(d2, root){\n    var vp=root.querySelector('#vp'), canvas=root.querySelector('#gl'), stage=root.querySelector('.sh-stage');\n    if(!vp||!canvas) return;\n    var gl=canvas.getContext('webgl2',{antialias:true,alpha:false,premultipliedAlpha:false});\n    function fail(m){ var e=document.createElement('div'); e.className='sh-err'; e.textContent='WebGL erro:\\n'+m; stage.appendChild(e); if(window.console)console.error('[isodiorama]',m); }\n    if(!gl){ fail('WebGL2 indisponível.'); return; }\n    var CJK='\"Hiragino Sans\",\"Hiragino Kaku Gothic ProN\",\"PingFang SC\",\"Noto Sans CJK JP\",\"Yu Gothic\",sans-serif';\n\n    var CUBE=[]; (function(){\n      var F=[\n        [[.5,-.5,-.5],[.5,.5,-.5],[.5,.5,.5],[.5,-.5,.5],[1,0,0]],\n        [[-.5,-.5,.5],[-.5,.5,.5],[-.5,.5,-.5],[-.5,-.5,-.5],[-1,0,0]],\n        [[-.5,.5,-.5],[-.5,.5,.5],[.5,.5,.5],[.5,.5,-.5],[0,1,0]],\n        [[-.5,-.5,.5],[-.5,-.5,-.5],[.5,-.5,-.5],[.5,-.5,.5],[0,-1,0]],\n        [[-.5,-.5,.5],[.5,-.5,.5],[.5,.5,.5],[-.5,.5,.5],[0,0,1]],\n        [[.5,-.5,-.5],[-.5,-.5,-.5],[-.5,.5,-.5],[.5,.5,-.5],[0,0,-1]]\n      ];\n      F.forEach(function(f){ [f[0],f[1],f[2],f[0],f[2],f[3]].forEach(function(v){ CUBE.push(v[0],v[1],v[2],f[4][0],f[4][1],f[4][2]); }); });\n    })();\n\n    var ground=[.11,.12,.15], roofC=[.15,.15,.19];\n    var RED=[1.,.20,.34], CYAN=[.18,.95,1.], GRN=[.32,1.,.5], MAG=[1.,.28,.78], YEL=[1.,.82,.22], BLU=[.4,.6,1.], ORG=[1.,.55,.2];\n    function bx(p,s,c,seed){ return {p:p,s:s,c:c,win:0,g:0,seed:seed||0}; }\n    function bld(p,s,tint,seed){ var t=tint||1.0; return {p:p,s:s,c:[0.26*t,0.25*t,0.31*t],win:1,g:0,seed:seed||0}; }\n    function grd(p,s){ return {p:p,s:s,c:ground,win:0,g:1,seed:0}; }\n    function roof(boxes,beacons,b,seed){\n      var ty=b.p[1]+b.s[1]/2;\n      boxes.push(bx([b.p[0]-b.s[0]*0.18,ty+0.32,b.p[2]+b.s[2]*0.16],[b.s[0]*0.34,0.64,b.s[2]*0.34],roofC,seed));\n      boxes.push(bx([b.p[0]+b.s[0]*0.26,ty+0.75,b.p[2]-b.s[2]*0.2],[0.05,1.5,0.05],[.09,.09,.12],seed));\n      boxes.push(bx([b.p[0]+b.s[0]*0.12,ty+0.16,b.p[2]+b.s[2]*0.3],[b.s[0]*0.3,0.3,b.s[2]*0.22],roofC,seed));\n      beacons.push([b.p[0]+b.s[0]*0.26,ty+1.55,b.p[2]-b.s[2]*0.2]);\n    }\n    function em(p,s,c){ return {p:p,s:s,c:c,win:2,g:0,seed:0}; }\n    function lamp(boxes,lamps,x,zz){ boxes.push(bx([x,0.9,zz],[0.06,1.8,0.06],[.08,.08,.10],0)); boxes.push(bx([x-0.13,1.78,zz],[0.28,0.06,0.1],[.08,.08,.10],0)); boxes.push(em([x-0.24,1.72,zz],[0.14,0.1,0.14],[1.0,0.72,0.34])); lamps.push([x-0.2,1.45,zz]); }\n    function car(boxes,x,zz,col,ax,dir){ ax=ax||'x'; dir=dir||1;\n      boxes.push(em([x,0.066,zz],[ax==='x'?1.4:0.86,0.02,ax==='x'?0.86:1.4],[.009,.009,.013]));\n      if(ax==='x'){\n        boxes.push(bx([x,0.26,zz],[1.0,0.26,0.52],col,0)); boxes.push(bx([x,0.48,zz],[0.52,0.22,0.48],[col[0]*0.55,col[1]*0.55,col[2]*0.6],0));\n        boxes.push(em([x+dir*0.47,0.28,zz],[0.06,0.12,0.44],[1.,0.95,0.72])); boxes.push(em([x-dir*0.47,0.28,zz],[0.06,0.1,0.44],[1.,0.18,0.12]));\n        boxes.push(bx([x-0.32,0.12,zz-0.29],[0.18,0.18,0.09],[.04,.04,.05],0)); boxes.push(bx([x-0.32,0.12,zz+0.29],[0.18,0.18,0.09],[.04,.04,.05],0)); boxes.push(bx([x+0.32,0.12,zz-0.29],[0.18,0.18,0.09],[.04,.04,.05],0)); boxes.push(bx([x+0.32,0.12,zz+0.29],[0.18,0.18,0.09],[.04,.04,.05],0));\n      } else {\n        boxes.push(bx([x,0.26,zz],[0.52,0.26,1.0],col,0)); boxes.push(bx([x,0.48,zz],[0.48,0.22,0.52],[col[0]*0.55,col[1]*0.55,col[2]*0.6],0));\n        boxes.push(em([x,0.28,zz+dir*0.47],[0.44,0.12,0.06],[1.,0.95,0.72])); boxes.push(em([x,0.28,zz-dir*0.47],[0.44,0.1,0.06],[1.,0.18,0.12]));\n        boxes.push(bx([x-0.29,0.12,zz-0.32],[0.09,0.18,0.18],[.04,.04,.05],0)); boxes.push(bx([x-0.29,0.12,zz+0.32],[0.09,0.18,0.18],[.04,.04,.05],0)); boxes.push(bx([x+0.29,0.12,zz-0.32],[0.09,0.18,0.18],[.04,.04,.05],0)); boxes.push(bx([x+0.29,0.12,zz+0.32],[0.09,0.18,0.18],[.04,.04,.05],0));\n      }\n    }\n    var RA=-6.6,RB=6.6,RF=5.5,RK=-3.5,L0=RB-RA,L1=RF-RK,L2=RB-RA,L3=RF-RK,RP=L0+L1+L2+L3;\n    function ringPos(d){ d=((d%RP)+RP)%RP;\n      if(d<L0) return [RA+d,RF,'x',1];\n      d-=L0; if(d<L1) return [RB,RF-d,'z',-1];\n      d-=L1; if(d<L2) return [RB-d,RK,'x',-1];\n      d-=L2; return [RA,RK+d,'z',1]; }\n    function road(boxes,cx,cz,sx,sz){ boxes.push({p:[cx,0.02,cz],s:[sx,0.06,sz],c:[.05,.055,.075],win:0,g:0,seed:0}); }\n    function curb(boxes,cx,cz,sx,sz){ boxes.push({p:[cx,0.08,cz],s:[sx,0.16,sz],c:[.15,.16,.2],win:0,g:0,seed:0}); }\n    function paint(boxes,cx,cz,sx,sz){ boxes.push({p:[cx,0.055,cz],s:[sx,0.02,sz],c:[.3,.31,.34],win:2,g:0,seed:0}); }\n    function detail(boxes,b,seed){\n      var fz=b.p[2]+b.s[2]/2, base=b.p[1]-b.s[1]/2, cx=b.p[0];\n      boxes.push(em([cx,base+0.42,fz+0.04],[b.s[0]*0.66,0.52,0.04],[1.0,0.72,0.36]));\n      boxes.push({p:[cx,base+0.66,fz+0.28],s:[b.s[0]*0.72,0.09,0.5],c:(seed>0.5?[.5,.12,.14]:[.12,.32,.18]),win:0,g:0,seed:0});\n      boxes.push(bx([cx-b.s[0]/2-0.11,base+b.s[1]*0.58,b.p[2]+0.35],[0.22,0.3,0.36],[.1,.1,.13],0));\n      boxes.push(bx([cx-b.s[0]/2-0.11,base+b.s[1]*0.34,b.p[2]-0.35],[0.2,0.26,0.32],[.1,.1,.13],0));\n    }\n    // sign: axis z|x, port(vertical), sc(scale)\n    function onZ(b,hy,k,n,c,sc){ sc=sc||1; return {p:[b.p[0],b.p[1]-b.s[1]/2+hy*b.s[1],b.p[2]+b.s[2]/2+0.05],w:1.5*sc,h:1.0*sc,axis:'z',k:k,n:n,c:c,port:false}; }\n    function onX(b,hy,k,n,c,sc){ sc=sc||1; return {p:[b.p[0]+b.s[0]/2+0.05,b.p[1]-b.s[1]/2+hy*b.s[1],b.p[2]],w:1.5*sc,h:1.0*sc,axis:'x',k:k,n:n,c:c,port:false}; }\n    function blade(b,hy,k,n,c,sc){ sc=sc||1; return {p:[b.p[0]+b.s[0]/2+0.5*sc,b.p[1]-b.s[1]/2+hy*b.s[1],b.p[2]+b.s[2]*0.2],w:1.0*sc,h:2.0*sc,axis:'z',k:k,n:n,c:c,port:true}; }\n    function bladeZ(b,hy,k,n,c,sc){ sc=sc||1; return {p:[b.p[0]-b.s[0]*0.22,b.p[1]-b.s[1]/2+hy*b.s[1],b.p[2]+b.s[2]/2+0.5*sc],w:1.0*sc,h:2.0*sc,axis:'x',k:k,n:n,c:c,port:true}; }\n    function vending(boxes,x,z,col){ boxes.push(bx([x,0.45,z],[0.5,0.9,0.42],[.08,.08,.1],0)); boxes.push(em([x,0.52,z+0.22],[0.36,0.64,0.03],col)); }\n    function figure(boxes,x,z){ boxes.push(bx([x,0.27,z],[0.16,0.42,0.14],[.05,.05,.07],0)); boxes.push(bx([x,0.55,z],[0.12,0.13,0.12],[.06,.06,.08],0)); }\n    function lanternWire(boxes,x1,x2,z,y,n,col){ boxes.push(bx([(x1+x2)*0.5,y+0.04,z],[Math.abs(x2-x1),0.02,0.02],[.06,.06,.07],0)); for(var i=0;i<n;i++){ var f=(i+0.5)/n; boxes.push(em([x1+(x2-x1)*f,y-Math.sin(f*3.14159)*0.3,z],[0.11,0.16,0.11],col)); } }\n    function streetFramework(boxes,lamps){\n      boxes.push(grd([0,-0.3,1.0],[19,0.6,15]));\n      boxes.push({p:[0,0.06,1.0],s:[11,0.12,7],c:[.15,.16,.2],win:0,g:1,seed:0});\n      road(boxes,0,5.5,17,1.9); road(boxes,0,-3.5,17,1.9); road(boxes,-6.6,1.0,1.9,11); road(boxes,6.6,1.0,1.9,11);\n      boxes.push({p:[0,0.14,4.5],s:[11.2,0.06,0.16],c:[.22,.23,.28],win:0,g:0,seed:0});\n      boxes.push({p:[0,0.14,-2.5],s:[11.2,0.06,0.16],c:[.22,.23,.28],win:0,g:0,seed:0});\n      boxes.push({p:[-5.5,0.14,1.0],s:[0.16,0.06,7.2],c:[.22,.23,.28],win:0,g:0,seed:0});\n      boxes.push({p:[5.5,0.14,1.0],s:[0.16,0.06,7.2],c:[.22,.23,.28],win:0,g:0,seed:0});\n      for(var dx=-7.5;dx<=7.5;dx+=1.5){ paint(boxes,dx,5.5,0.6,0.08); paint(boxes,dx,-3.5,0.6,0.08); }\n      for(var dz=-3.5;dz<=5.5;dz+=1.5){ paint(boxes,-6.6,dz,0.08,0.6); paint(boxes,6.6,dz,0.08,0.6); }\n      for(var cz2=4.6;cz2<=6.4;cz2+=0.42) paint(boxes,-2.0,cz2,0.9,0.16);\n      lamp(boxes,lamps,-5.3,4.3); lamp(boxes,lamps,5.3,4.3); lamp(boxes,lamps,-5.3,-2.3); lamp(boxes,lamps,5.3,-2.3);\n      boxes.push(bx([-3.0,1.5,4.4],[0.1,3.0,0.1],[.06,.06,.08],0)); boxes.push(bx([-3.0,2.85,5.02],[0.1,0.1,1.3],[.05,.05,.07],0)); boxes.push(bx([-3.0,2.7,5.62],[0.2,0.44,0.16],[.04,.04,.06],0));\n    }\n    function towerScene(){\n      var boxes=[], sg=[], lamps=[], beacons=[]; streetFramework(boxes,lamps);\n      var h1=bld([0,2.0,0],[2.6,4.0,2.6],1.05,0.2); boxes.push(h1); roof(boxes,beacons,h1,0.2);\n      var m=bld([-3.1,1.5,0.5],[2.0,3.0,2.0],0.9,0.6); boxes.push(m); roof(boxes,beacons,m,0.6);\n      var r=bld([3.0,1.15,-0.3],[1.9,2.3,1.9],1.12,0.35); boxes.push(r); roof(boxes,beacons,r,0.35);\n      var bk=bld([2.6,1.95,2.4],[1.6,3.9,1.6],0.82,0.8); boxes.push(bk); roof(boxes,beacons,bk,0.8);\n      detail(boxes,h1,0.2); detail(boxes,m,0.7); detail(boxes,r,0.35);\n      sg.push(bladeZ(h1,0.62,'力','RUSH',RED,1.25));\n      sg.push(bladeZ(m,0.64,'会話','CHAT',CYAN,1.0));\n      sg.push(bladeZ(r,0.68,'記録','STORE',BLU,0.8));\n      sg.push(onZ(bk,0.6,'画面','UI',GRN,0.95));\n      lanternWire(boxes,-5.2,5.2,4.35,2.5,7,[1.0,0.52,0.2]);\n      vending(boxes,-4.9,3.7,[0.3,0.85,1.0]); vending(boxes,4.7,-1.4,[1.0,0.4,0.55]);\n      figure(boxes,-2.2,3.95); figure(boxes,0.9,4.05);\n      return {boxes:boxes,signs:sg,lamps:lamps,beacons:beacons};\n    }\n    function cityScene(){\n      var boxes=[], sg=[], lamps=[], beacons=[]; streetFramework(boxes,lamps);\n      var defs=[['電気','POWER',RED,3.6,1.1],['情報','DATA',CYAN,4.8,0.85],['会話','CHAT',MAG,3.0,1.15],['雲','CLOUD',GRN,4.0,0.95],['画面','UI',BLU,5.6,1.0]];\n      var xs=[[-4.2,3.6],[-1.7,4.8],[1.1,3.0],[3.6,4.0],[0.3,5.6]];\n      defs.forEach(function(d,i){ var w=1.7+((i%3)*0.12), b=bld([xs[i][0],d[3]/2,0.2+(i%2)*1.3],[w,d[3],w],d[4],i*0.27); boxes.push(b); roof(boxes,beacons,b,i*0.27); detail(boxes,b,(i%2)?1:0);\n        sg.push(bladeZ(b,0.6,d[0],d[1],d[2],1.0)); });\n      lanternWire(boxes,-5.2,5.2,4.35,2.5,7,[1.0,0.52,0.2]);\n      vending(boxes,-4.9,3.6,[1.0,0.5,0.2]); vending(boxes,4.7,3.6,[0.3,0.8,1.0]);\n      figure(boxes,-1.5,4.0);\n      return {boxes:boxes,signs:sg,lamps:lamps,beacons:beacons};\n    }\n    function becoScene(){\n      var boxes=[], sg=[], lamps=[], beacons=[]; streetFramework(boxes,lamps);\n      var row=[[-3.6,2.7,3.6,RED,'力','RUSH'],[-1.2,2.7,4.4,CYAN,'会話','CHAT'],[1.2,2.7,3.0,MAG,'記録','STORE'],[3.6,2.7,4.0,GRN,'画面','UI'],[-3.6,-1.2,3.4,BLU,'',''],[-1.2,-1.2,4.6,YEL,'',''],[1.2,-1.2,3.2,MAG,'',''],[3.6,-1.2,3.8,CYAN,'','']];\n      row.forEach(function(q,i){ var b=bld([q[0],q[2]/2,q[1]],[1.7,q[2],1.7],(i%2?1.05:0.9),i*0.31); boxes.push(b); roof(boxes,beacons,b,i*0.31); detail(boxes,b,(i%2)?1:0); if(q[4]) sg.push(bladeZ(b,0.62,q[4],q[5],q[3],0.95)); });\n      lanternWire(boxes,-4.2,4.2,0.75,2.3,9,[1.0,0.5,0.2]);\n      vending(boxes,-4.7,0.75,[0.3,0.85,1.0]); vending(boxes,4.7,0.75,[1.0,0.4,0.6]);\n      figure(boxes,-0.8,3.95); figure(boxes,1.6,4.05);\n      return {boxes:boxes,signs:sg,lamps:lamps,beacons:beacons};\n    }\n    var SCENES={Torre:towerScene(),Cidade:cityScene(),Beco:becoScene()};\n    var curScene='Torre';\n    var P={exp:1.12,sat:1.08,rot:0,zoom:5.6,glow:1.15,bloom:0.9,win:1,plc:1,shad:0.78};\n\n    function sh(t,s){ var o=gl.createShader(t); gl.shaderSource(o,s); gl.compileShader(o); if(!gl.getShaderParameter(o,gl.COMPILE_STATUS)) throw new Error(gl.getShaderInfoLog(o)); return o; }\n    function prog(vs,fs){ var p=gl.createProgram(); gl.attachShader(p,sh(gl.VERTEX_SHADER,vs)); gl.attachShader(p,sh(gl.FRAGMENT_SHADER,fs)); gl.linkProgram(p); if(!gl.getProgramParameter(p,gl.LINK_STATUS)) throw new Error(gl.getProgramInfoLog(p)); return p; }\n    var VS=`#version 300 es\nlayout(location=0) in vec3 aPos; layout(location=1) in vec3 aNormal;\nlayout(location=2) in vec3 iPos; layout(location=3) in vec3 iSize; layout(location=4) in vec3 iCol; layout(location=5) in float iWin; layout(location=6) in float iSeed;\nuniform mat4 uVP;\nout vec3 vN; out vec3 vObj; out vec3 vCol; out float vWin; out vec3 vW; out float vSeed;\nvoid main(){ vec3 p=aPos*iSize+iPos; gl_Position=uVP*vec4(p,1.0); vN=aNormal; vObj=aPos*iSize; vCol=iCol; vWin=iWin; vW=p; vSeed=iSeed; }`;\n    var FS=`#version 300 es\nprecision highp float;\nin vec3 vN; in vec3 vObj; in vec3 vCol; in float vWin; in vec3 vW; in float vSeed;\nuniform float uWinI; uniform int uNL; uniform vec3 uLP[16]; uniform vec3 uLC[16];\nuniform sampler2D uShadow; uniform mat4 uLVP; uniform float uShAmt; uniform vec3 uLDir; uniform vec3 uEye;\nout vec4 O;\nfloat hash(vec2 p){ p=fract(p*vec2(123.34,456.21)); p+=dot(p,p+45.32); return fract(p.x*p.y); }\nfloat shadow(vec3 w){\n  vec4 lp=uLVP*vec4(w,1.0); vec3 c=lp.xyz/lp.w*0.5+0.5;\n  if(c.x<0.0||c.x>1.0||c.y<0.0||c.y>1.0||c.z>1.0) return 1.0;\n  float bias=0.0025, s=0.0, tx=1.0/1024.0;\n  for(int i=-1;i<=1;i++)for(int j=-1;j<=1;j++){ float d=texture(uShadow,c.xy+vec2(float(i),float(j))*tx).r; s+=(c.z-bias>d)?0.0:1.0; }\n  return s/9.0;\n}\nvoid main(){\n  if(vWin>1.5){ O=vec4(vCol*3.2,1.0); return; }\n  vec3 n=normalize(vN); vec3 an=abs(n);\n  float up=n.y*0.5+0.5;\n  vec3 amb=mix(vec3(0.018,0.022,0.038),vec3(0.08,0.11,0.19),up);\n  float face=(an.y>=an.x&&an.y>=an.z)?1.0:((an.x>an.z)?(n.x>0.0?0.92:0.72):(n.z>0.0?0.84:0.66));\n  float shf=mix(1.0-uShAmt,1.0,shadow(vW));\n  float ndl=max(dot(n,uLDir),0.0);\n  vec3 col=vCol*(amb*face + vec3(0.55,0.62,0.82)*ndl*shf)*1.3;\n  if(vWin>0.5) col*=0.82+0.18*smoothstep(0.0,4.0,vW.y);\n  if(vWin>0.5 && an.y<0.5){\n    vec2 uv=(an.x>0.5)? vObj.zy : vObj.xy;\n    vec2 cell=floor(uv/0.5); vec2 f=fract(uv/0.5);\n    float box=step(0.2,f.x)*step(f.x,0.8)*step(0.28,f.y)*step(f.y,0.86);\n    float h=hash(cell+vSeed*17.0+7.3);\n    float on=step(0.30+0.22*fract(vSeed*5.3),h);\n    float br=0.4+1.0*hash(cell+vSeed*9.0+3.1);\n    vec3 wc=mix(vec3(1.0,0.78,0.44),vec3(1.0,0.94,0.8),hash(cell+9.9));\n    col+=wc*box*on*br*uWinI;\n  }\n  for(int i=0;i<16;i++){ if(i>=uNL) break; vec3 dl=uLP[i]-vW; float d=length(dl); vec3 ld=dl/max(d,0.001); float at=1.0/(1.0+d*d*3.4); col+=uLC[i]*at*(0.28+0.72*max(dot(n,ld),0.0)); }\n  col=mix(col, vec3(0.02,0.028,0.055), (1.0-exp(-max(length(vW-uEye)-22.0,0.0)*0.03))*0.72);\n  O=vec4(col,1.0);\n}`;\n    var DVS=`#version 300 es\nlayout(location=0) in vec3 aPos; layout(location=2) in vec3 iPos; layout(location=3) in vec3 iSize;\nuniform mat4 uLVP;\nvoid main(){ gl_Position=uLVP*vec4(aPos*iSize+iPos,1.0); }`;\n    var DFS=`#version 300 es\nprecision highp float; void main(){}`;\n    var SVS=`#version 300 es\nlayout(location=0) in vec2 aPos; layout(location=1) in vec2 aUv;\nuniform mat4 uVP; uniform mat4 uModel; out vec2 vUv;\nvoid main(){ vUv=aUv; gl_Position=uVP*uModel*vec4(aPos,0.0,1.0); }`;\n    var SFS=`#version 300 es\nprecision highp float;\nin vec2 vUv; out vec4 O; uniform sampler2D uTex; uniform float uGlow;\nvoid main(){ vec4 t=texture(uTex,vUv); if(t.a<0.02) discard; O=vec4(t.rgb*uGlow, t.a); }`;\n    var PVS=`#version 300 es\nlayout(location=0) in vec2 aP; out vec2 vUv; void main(){ vUv=aP*0.5+0.5; gl_Position=vec4(aP,0.,1.); }`;\n    var BLURFS=`#version 300 es\nprecision highp float; in vec2 vUv; out vec4 O; uniform sampler2D uTex; uniform vec2 uDir; uniform float uBright;\nvoid main(){ float w[5]=float[5](0.227,0.194,0.121,0.054,0.016); vec3 c=texture(uTex,vUv).rgb*w[0];\n  for(int i=1;i<5;i++){ c+=texture(uTex,vUv+uDir*float(i)).rgb*w[i]; c+=texture(uTex,vUv-uDir*float(i)).rgb*w[i]; }\n  if(uBright>0.5){ float l=max(c.r,max(c.g,c.b)); c*=smoothstep(0.55,1.0,l); } O=vec4(c,1.); }`;\n    var COMPFS=`#version 300 es\nprecision highp float; in vec2 vUv; out vec4 O; uniform sampler2D uScene; uniform sampler2D uBloom; uniform float uBloomI,uExp,uSat;\nvec3 aces(vec3 x){ return clamp((x*(2.51*x+0.03))/(x*(2.43*x+0.59)+0.14),0.,1.); }\nfloat hash(vec2 p){ p=fract(p*vec2(123.34,456.21)); p+=dot(p,p+45.32); return fract(p.x*p.y); }\nvoid main(){\n  float ca=0.0016; vec3 s=vec3(texture(uScene,vUv+vec2(ca,0.)).r,texture(uScene,vUv).g,texture(uScene,vUv-vec2(ca,0.)).b), b=texture(uBloom,vUv).rgb;\n  vec3 col=aces((s+b*uBloomI)*uExp);\n  float lu=dot(col,vec3(.299,.587,.114));\n  col=mix(col*vec3(0.88,0.96,1.12), col*vec3(1.08,1.0,0.9), smoothstep(0.2,0.7,lu));  // split-tone\n  col=clamp((col-0.5)*1.12+0.5,0.0,1.0);                                                  // contraste\n  col=mix(vec3(lu),col,uSat); col+=vec3(0.006,0.011,0.02)*(1.0-col);\n  col+=vec3(0.4,0.5,0.72)*exp(-length((vUv-vec2(0.74,0.8))*vec2(1.0,1.25))*3.2)*0.13;\n  vec2 vg=vUv; col*=0.40+0.60*pow(16.0*vg.x*vg.y*(1.0-vg.x)*(1.0-vg.y),0.28);            // vignette\n  col+=(hash(vUv*vec2(1600.,900.))-0.5)*0.012;\n  col=pow(max(col,0.),vec3(0.4545));\n  O=vec4(col,1.);\n}`;\n    var mainP, depthP, signP, blurP, compP;\n    try{ mainP=prog(VS,FS); depthP=prog(DVS,DFS); signP=prog(SVS,SFS); blurP=prog(PVS,BLURFS); compP=prog(PVS,COMPFS); }\n    catch(err){ fail((err&&err.message)||String(err)); return; }\n\n    var cubeVBO=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,cubeVBO); gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(CUBE),gl.STATIC_DRAW);\n    function instData(list){ var a=[]; list.forEach(function(o){ a.push(o.p[0],o.p[1],o.p[2],o.s[0],o.s[1],o.s[2],o.c[0],o.c[1],o.c[2],o.win,o.seed||0); }); return new Float32Array(a); }\n    function buildVAO(list){\n      var vao=gl.createVertexArray(); gl.bindVertexArray(vao);\n      gl.bindBuffer(gl.ARRAY_BUFFER,cubeVBO);\n      gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,3,gl.FLOAT,false,24,0);\n      gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1,3,gl.FLOAT,false,24,12);\n      var ib=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,ib); gl.bufferData(gl.ARRAY_BUFFER,instData(list),gl.STATIC_DRAW);\n      var S=44;\n      gl.enableVertexAttribArray(2); gl.vertexAttribPointer(2,3,gl.FLOAT,false,S,0);  gl.vertexAttribDivisor(2,1);\n      gl.enableVertexAttribArray(3); gl.vertexAttribPointer(3,3,gl.FLOAT,false,S,12); gl.vertexAttribDivisor(3,1);\n      gl.enableVertexAttribArray(4); gl.vertexAttribPointer(4,3,gl.FLOAT,false,S,24); gl.vertexAttribDivisor(4,1);\n      gl.enableVertexAttribArray(5); gl.vertexAttribPointer(5,1,gl.FLOAT,false,S,36); gl.vertexAttribDivisor(5,1);\n      gl.enableVertexAttribArray(6); gl.vertexAttribPointer(6,1,gl.FLOAT,false,S,40); gl.vertexAttribDivisor(6,1);\n      gl.bindVertexArray(null);\n      return {vao:vao,n:list.length};\n    }\n    var SQ=new Float32Array([-.5,-.5,0,1, .5,-.5,1,1, .5,.5,1,0, -.5,-.5,0,1, .5,.5,1,0, -.5,.5,0,0]);\n    var sqVBO=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,sqVBO); gl.bufferData(gl.ARRAY_BUFFER,SQ,gl.STATIC_DRAW);\n    var sqVAO=gl.createVertexArray(); gl.bindVertexArray(sqVAO); gl.bindBuffer(gl.ARRAY_BUFFER,sqVBO); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,2,gl.FLOAT,false,16,0); gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1,2,gl.FLOAT,false,16,8); gl.bindVertexArray(null);\n    var quadVBO=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,quadVBO); gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);\n    var quadVAO=gl.createVertexArray(); gl.bindVertexArray(quadVAO); gl.bindBuffer(gl.ARRAY_BUFFER,quadVBO); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,2,gl.FLOAT,false,0,0); gl.bindVertexArray(null);\n    var carIB=gl.createBuffer();\n    var carVAO=gl.createVertexArray(); gl.bindVertexArray(carVAO);\n    gl.bindBuffer(gl.ARRAY_BUFFER,cubeVBO); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0,3,gl.FLOAT,false,24,0); gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1,3,gl.FLOAT,false,24,12);\n    gl.bindBuffer(gl.ARRAY_BUFFER,carIB); var CS=44;\n    gl.enableVertexAttribArray(2); gl.vertexAttribPointer(2,3,gl.FLOAT,false,CS,0); gl.vertexAttribDivisor(2,1);\n    gl.enableVertexAttribArray(3); gl.vertexAttribPointer(3,3,gl.FLOAT,false,CS,12); gl.vertexAttribDivisor(3,1);\n    gl.enableVertexAttribArray(4); gl.vertexAttribPointer(4,3,gl.FLOAT,false,CS,24); gl.vertexAttribDivisor(4,1);\n    gl.enableVertexAttribArray(5); gl.vertexAttribPointer(5,1,gl.FLOAT,false,CS,36); gl.vertexAttribDivisor(5,1);\n    gl.enableVertexAttribArray(6); gl.vertexAttribPointer(6,1,gl.FLOAT,false,CS,40); gl.vertexAttribDivisor(6,1);\n    gl.bindVertexArray(null);\n\n    function signTex(s){\n      var W=s.port?230:400, H=s.port?432:270;\n      var cv=document.createElement('canvas'); cv.width=W; cv.height=H; var x=cv.getContext('2d');\n      var col='rgb('+Math.round(s.c[0]*255)+','+Math.round(s.c[1]*255)+','+Math.round(s.c[2]*255)+')';\n      var m=24, rr=26;\n      function rrect(){ x.beginPath(); x.moveTo(m+rr,m); x.arcTo(W-m,m,W-m,H-m,rr); x.arcTo(W-m,H-m,m,H-m,rr); x.arcTo(m,H-m,m,m,rr); x.arcTo(m,m,W-m,m,rr); x.closePath(); }\n      rrect(); x.fillStyle='rgba(9,10,14,0.74)'; x.fill();\n      x.shadowColor=col; x.strokeStyle=col; x.shadowBlur=22; x.lineWidth=9; rrect(); x.stroke(); rrect(); x.stroke();\n      x.shadowBlur=3; x.strokeStyle='rgba(255,255,255,0.85)'; x.lineWidth=2.4; rrect(); x.stroke(); x.shadowBlur=0;\n      x.textAlign='center'; x.textBaseline='middle';\n      function glow(txt,px,py,fs){ x.font='600 '+fs+'px '+CJK; x.shadowColor=col; x.fillStyle=col; x.shadowBlur=fs*0.55; x.fillText(txt,px,py); x.fillText(txt,px,py); x.shadowBlur=fs*0.1; x.fillStyle='#ffffff'; x.fillText(txt,px,py); }\n      if(s.port){ var ch=(s.k||'').split(''), n=Math.max(1,ch.length), step=Math.min(74,(H-150)/n);\n        for(var i=0;i<n;i++) glow(ch[i], W/2, 66+step*(i+0.5), Math.round(step*0.78)); glow(s.n, W/2, H-46, 24);\n      } else { glow(s.k, W/2, H*0.38, 92); glow(s.n, W/2, H*0.76, 36); }\n      var t=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,t); gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,false);\n      gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,cv);\n      gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);\n      gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE); return t;\n    }\n    function signModel(s){ var px=s.p[0],py=s.p[1],pz=s.p[2],w=s.w,h=s.h;\n      if(s.axis==='z') return new Float32Array([w,0,0,0, 0,h,0,0, 0,0,1,0, px,py,pz,1]);\n      return new Float32Array([0,0,-w,0, 0,h,0,0, 1,0,0,0, px,py,pz,1]); }\n    function signBack(s){ if(s.axis==='z') return {p:[s.p[0],s.p[1],s.p[2]-0.07],s:[s.w*1.04,s.h*1.04,0.12],c:[.05,.05,.07],win:0,g:0,seed:0};\n      return {p:[s.p[0]-0.07,s.p[1],s.p[2]],s:[0.12,s.h*1.04,s.w*1.04],c:[.05,.05,.07],win:0,g:0,seed:0}; }\n\n    var boxGeo, signList=[], lampList=[], carState=[], lastT=0, beaconList=[];\n    function loadScene(name){ curScene=name; var sc=SCENES[name]; var boxes=sc.boxes.slice(); sc.signs.forEach(function(s){ boxes.push(signBack(s)); }); boxGeo=buildVAO(boxes);\n      signList=sc.signs.map(function(s){ return {model:signModel(s), tex:signTex(s), p:s.p, c:s.c}; }); lampList=sc.lamps||[];\n      carState=[{d:0,spd:2.6,c:[.2,.36,.72]},{d:11,spd:2.1,c:[.62,.15,.22]},{d:22,spd:2.8,c:[.78,.62,.2]},{d:33,spd:2.3,c:[.75,.3,.55]}]; beaconList=sc.beacons||[]; }\n    loadScene(curScene);\n\n    // shadow map\n    var SM=1024, shDepth=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,shDepth);\n    gl.texImage2D(gl.TEXTURE_2D,0,gl.DEPTH_COMPONENT24,SM,SM,0,gl.DEPTH_COMPONENT,gl.UNSIGNED_INT,null);\n    gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);\n    var shColorRB=gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER,shColorRB); gl.renderbufferStorage(gl.RENDERBUFFER,gl.RGBA8,SM,SM);\n    var shFBO=gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER,shFBO); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.TEXTURE_2D,shDepth,0); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.RENDERBUFFER,shColorRB); gl.bindFramebuffer(gl.FRAMEBUFFER,null);\n\n    // scene + bloom FBOs (resize-aware)\n    var sceneFBO,sceneTex,sceneRB,bloomFBO=[],bloomTex=[],fbw=0,fbh=0,bw=0,bh=0;\n    function mktex(w,h){ var t=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D,t); gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,w,h,0,gl.RGBA,gl.UNSIGNED_BYTE,null); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE); return t; }\n    function allocFBO(w,h){ fbw=Math.floor(w*1.35); fbh=Math.floor(h*1.35); bw=Math.max(1,fbw>>1); bh=Math.max(1,fbh>>1);\n      sceneTex=mktex(fbw,fbh); sceneRB=gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER,sceneRB); gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,fbw,fbh);\n      sceneFBO=gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER,sceneFBO); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,sceneTex,0); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,sceneRB);\n      bloomTex=[mktex(bw,bh),mktex(bw,bh)]; bloomFBO=[gl.createFramebuffer(),gl.createFramebuffer()];\n      for(var i=0;i<2;i++){ gl.bindFramebuffer(gl.FRAMEBUFFER,bloomFBO[i]); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,bloomTex[i],0); }\n      gl.bindFramebuffer(gl.FRAMEBUFFER,null); }\n\n    function mul(a,b){ var o=new Float32Array(16); for(var c=0;c<4;c++)for(var r=0;r<4;r++){ var s=0; for(var k=0;k<4;k++)s+=a[k*4+r]*b[c*4+k]; o[c*4+r]=s; } return o; }\n    function ortho(l,r,b,t,n,f){ return new Float32Array([2/(r-l),0,0,0, 0,2/(t-b),0,0, 0,0,-2/(f-n),0, -(r+l)/(r-l),-(t+b)/(t-b),-(f+n)/(f-n),1]); }\n    function lookAt(e,c,u){ var z=[e[0]-c[0],e[1]-c[1],e[2]-c[2]]; var zl=Math.hypot(z[0],z[1],z[2]); z=[z[0]/zl,z[1]/zl,z[2]/zl];\n      var x=[u[1]*z[2]-u[2]*z[1],u[2]*z[0]-u[0]*z[2],u[0]*z[1]-u[1]*z[0]]; var xl=Math.hypot(x[0],x[1],x[2])||1; x=[x[0]/xl,x[1]/xl,x[2]/xl];\n      var y=[z[1]*x[2]-z[2]*x[1],z[2]*x[0]-z[0]*x[2],z[0]*x[1]-z[1]*x[0]];\n      return new Float32Array([x[0],y[0],z[0],0, x[1],y[1],z[1],0, x[2],y[2],z[2],0, -(x[0]*e[0]+x[1]*e[1]+x[2]*e[2]),-(y[0]*e[0]+y[1]*e[1]+y[2]*e[2]),-(z[0]*e[0]+z[1]*e[1]+z[2]*e[2]),1]); }\n    var LVP=mul(ortho(-12,12,-12,12,1,64), lookAt([-13,26,-11],[0,2.8,0],[0,1,0]));\n\n    var scEl=root.querySelector('#scenes'), szEl=root.querySelector('#sizes'), lyEl=root.querySelector('#layers'), slEl=root.querySelector('#sliders');\n    if(scEl){\n    Object.keys(SCENES).forEach(function(name){ var b=document.createElement('button'); b.textContent=name; if(name===curScene)b.className='on'; b.onclick=function(){ loadScene(name); scEl.querySelectorAll('button').forEach(function(x){x.classList.toggle('on',x.textContent===name);}); }; scEl.appendChild(b); });\n    [['Cheio',''],['Card','card'],['Thumb','thumb']].forEach(function(s,i){ var b=document.createElement('button'); b.textContent=s[0]; if(i===0)b.className='on'; b.onclick=function(){ vp.className='viewport'+(s[1]?' '+s[1]:''); szEl.querySelectorAll('button').forEach(function(x){x.classList.remove('on');}); b.classList.add('on'); }; szEl.appendChild(b); });\n    [['Janelas','win',1],['Placas','plc',1],['Sombra','shad',0.78],['Órbita','rot',0.35]].forEach(function(L){ var b=document.createElement('button'); b.textContent=L[0]; if(P[L[1]])b.classList.add('on'); b.onclick=function(){ P[L[1]]=P[L[1]]?0:L[2]; b.classList.toggle('on',!!P[L[1]]); }; lyEl.appendChild(b); });\n    [['bloom','Bloom',0,1.6,.05],['glow','Brilho placa',0.3,2.5,.05],['exp','Exposição',.5,2,.02],['zoom','Zoom',3,10,.1]].forEach(function(s){ var row=document.createElement('div'); row.className='sld'; var lab=document.createElement('label'); lab.textContent=s[1]; var inp=document.createElement('input'); inp.type='range'; inp.min=s[2]; inp.max=s[3]; inp.step=s[4]; inp.value=P[s[0]]; var val=document.createElement('span'); val.className='val'; val.textContent=(+P[s[0]]).toFixed(2); inp.oninput=function(){ P[s[0]]=+inp.value; val.textContent=(+inp.value).toFixed(2); }; row.appendChild(lab); row.appendChild(inp); row.appendChild(val); slEl.appendChild(row); });\n    }\n    var shEl=root.querySelector('.sh'); if(shEl) shEl.classList.add('collapsed');\n    d2.on('.sh-toggle','click',function(){ if(shEl) shEl.classList.toggle('collapsed'); });\n\n    var uVP=gl.getUniformLocation(mainP,'uVP'), uWinI=gl.getUniformLocation(mainP,'uWinI'), uNL=gl.getUniformLocation(mainP,'uNL'), uLP=gl.getUniformLocation(mainP,'uLP'), uLC=gl.getUniformLocation(mainP,'uLC'), uSh=gl.getUniformLocation(mainP,'uShadow'), uLVPm=gl.getUniformLocation(mainP,'uLVP'), uShAmt=gl.getUniformLocation(mainP,'uShAmt'), uLDir=gl.getUniformLocation(mainP,'uLDir'), uEye=gl.getUniformLocation(mainP,'uEye');\n    var dLVP=gl.getUniformLocation(depthP,'uLVP');\n    var sVP=gl.getUniformLocation(signP,'uVP'), sModel=gl.getUniformLocation(signP,'uModel'), sTex=gl.getUniformLocation(signP,'uTex'), sGlow=gl.getUniformLocation(signP,'uGlow');\n    var bTex=gl.getUniformLocation(blurP,'uTex'), bDir=gl.getUniformLocation(blurP,'uDir'), bBr=gl.getUniformLocation(blurP,'uBright');\n    var cSc=gl.getUniformLocation(compP,'uScene'), cBl=gl.getUniformLocation(compP,'uBloom'), cBi=gl.getUniformLocation(compP,'uBloomI'), cEx=gl.getUniformLocation(compP,'uExp'), cSa=gl.getUniformLocation(compP,'uSat');\n    function flick(tt,i){ var b=0.84+0.16*Math.sin(tt*6.0+i*1.7); var s=Math.sin(tt*41.0+i*3.1)*Math.sin(tt*11.0+i*0.7); return b*((s>0.985)?0.35:1.0); }\n\n    var t0=0, alive=true, raf=0, cw=0, ch=0;\n    function resize(){ var dpr=Math.min(window.devicePixelRatio||1,1.25); var w=Math.max(2,Math.floor(vp.clientWidth*dpr)), h=Math.max(2,Math.floor(vp.clientHeight*dpr)); if(canvas.width!==w||canvas.height!==h){ canvas.width=w; canvas.height=h; cw=w; ch=h; allocFBO(w,h); } }\n    function frame(ts){\n      if(!alive||!root.isConnected){ alive=false; if(raf)cancelAnimationFrame(raf); return; }\n      if(!t0)t0=ts; var t=(ts-t0)/1000; resize();\n      var dt=Math.min(0.05,Math.max(0,t-lastT)); lastT=t;\n      var tcyc=t%12.0, tRed=(tcyc>=7.5), tYel=(tcyc>=6.0&&tcyc<7.5);\n      var cb=[];\n      for(var ci=0;ci<carState.length;ci++){ var cc=carState[ci]; var stop=false; var dd=((cc.d%RP)+RP)%RP;\n        if((tRed||tYel) && dd>3.3 && dd<4.7) stop=true;\n        for(var cj=0;cj<carState.length;cj++){ if(cj!==ci){ var g2=((carState[cj].d-cc.d)%RP+RP)%RP; if(g2>0.01 && g2<2.3) stop=true; } }\n        if(!stop) cc.d+=cc.spd*dt;\n        var rp=ringPos(cc.d); car(cb,rp[0],rp[1],cc.c,rp[2],rp[3]); }\n      var toff=[.02,.02,.03];\n      cb.push(em([-3.0,2.82,5.62],[0.14,0.14,0.06],tRed?[1.,.16,.12]:toff));\n      cb.push(em([-3.0,2.68,5.62],[0.14,0.14,0.06],tYel?[1.,.78,.16]:toff));\n      cb.push(em([-3.0,2.54,5.62],[0.14,0.14,0.06],(!tRed&&!tYel)?[.2,1.,.32]:toff));\n      var bon=(t%1.4)<0.55;\n      for(var bi=0;bi<beaconList.length;bi++){ var bp=beaconList[bi]; cb.push(em([bp[0],bp[1],bp[2]],[0.1,0.1,0.1], bon?[1.,.09,.06]:[.03,.006,.006])); }\n      gl.bindBuffer(gl.ARRAY_BUFFER,carIB); gl.bufferData(gl.ARRAY_BUFFER,instData(cb),gl.DYNAMIC_DRAW); var carN=cb.length;\n      var W=cw,H=ch, asp=W/H, z=P.zoom;\n      var ang=0.72+Math.sin(t*0.12*P.rot)*0.28;\n      var dist=40, eye=[Math.sin(ang)*dist,dist*0.72,Math.cos(ang)*dist], ctr=[0,2.6,0];\n      var VP=mul(ortho(-asp*z,asp*z,-z,z,0.1,160), lookAt(eye,ctr,[0,1,0]));\n\n      // 1. shadow depth\n      gl.bindFramebuffer(gl.FRAMEBUFFER,shFBO); gl.viewport(0,0,SM,SM); gl.clear(gl.DEPTH_BUFFER_BIT|gl.COLOR_BUFFER_BIT);\n      gl.useProgram(depthP); gl.uniformMatrix4fv(dLVP,false,LVP); gl.disable(gl.CULL_FACE); gl.enable(gl.DEPTH_TEST); gl.depthMask(true); gl.disable(gl.BLEND);\n      gl.bindVertexArray(boxGeo.vao); gl.drawArraysInstanced(gl.TRIANGLES,0,36,boxGeo.n); if(carN){ gl.bindVertexArray(carVAO); gl.drawArraysInstanced(gl.TRIANGLES,0,36,carN); }\n\n      // 2. scene → sceneFBO\n      gl.bindFramebuffer(gl.FRAMEBUFFER,sceneFBO); gl.viewport(0,0,fbw,fbh);\n      gl.clearColor(0.012,0.016,0.032,1); gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);\n      gl.useProgram(mainP); gl.uniformMatrix4fv(uVP,false,VP); gl.uniform1f(uWinI,P.win); gl.uniformMatrix4fv(uLVPm,false,LVP); gl.uniform1f(uShAmt,P.shad); gl.uniform3f(uLDir,-0.4515,0.8088,-0.3762); gl.uniform3f(uEye,eye[0],eye[1],eye[2]);\n      gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D,shDepth); gl.uniform1i(uSh,1);\n      var sigN=Math.min(signList.length,8), FK=[], LPa=new Float32Array(48), LCa=new Float32Array(48), NLt=0;\n      if(P.plc) for(var li=0;li<sigN;li++){ var sgl=signList[li]; var fk=flick(t,li); FK[li]=fk; var g=P.glow*fk*0.95; LPa[NLt*3]=sgl.p[0];LPa[NLt*3+1]=sgl.p[1];LPa[NLt*3+2]=sgl.p[2]; LCa[NLt*3]=sgl.c[0]*g;LCa[NLt*3+1]=sgl.c[1]*g;LCa[NLt*3+2]=sgl.c[2]*g; NLt++; }\n      for(var la=0; la<lampList.length && NLt<16; la++){ var lpp=lampList[la]; LPa[NLt*3]=lpp[0];LPa[NLt*3+1]=lpp[1];LPa[NLt*3+2]=lpp[2]; LCa[NLt*3]=1.15;LCa[NLt*3+1]=0.78;LCa[NLt*3+2]=0.38; NLt++; }\n      gl.uniform1i(uNL,NLt); gl.uniform3fv(uLP,LPa); gl.uniform3fv(uLC,LCa);\n      gl.enable(gl.DEPTH_TEST); gl.depthMask(true); gl.disable(gl.BLEND); gl.disable(gl.CULL_FACE);\n      gl.bindVertexArray(boxGeo.vao); gl.drawArraysInstanced(gl.TRIANGLES,0,36,boxGeo.n); if(carN){ gl.bindVertexArray(carVAO); gl.drawArraysInstanced(gl.TRIANGLES,0,36,carN); }\n      if(P.plc && signList.length){\n        gl.useProgram(signP); gl.uniformMatrix4fv(sVP,false,VP);\n        gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA); gl.depthMask(false); gl.bindVertexArray(sqVAO);\n        for(var i=0;i<signList.length;i++){ gl.uniform1f(sGlow,P.glow*(FK[i]||1.0)); gl.uniformMatrix4fv(sModel,false,signList[i].model); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D,signList[i].tex); gl.uniform1i(sTex,0); gl.drawArrays(gl.TRIANGLES,0,6); }\n        gl.depthMask(true); gl.disable(gl.BLEND);\n      }\n\n      // 3. bloom\n      gl.disable(gl.DEPTH_TEST); gl.bindVertexArray(quadVAO); gl.useProgram(blurP);\n      var src=sceneTex, spread=2.0;\n      for(var it=0;it<3;it++){\n        gl.bindFramebuffer(gl.FRAMEBUFFER,bloomFBO[0]); gl.viewport(0,0,bw,bh); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D,src); gl.uniform1i(bTex,0); gl.uniform2f(bDir,spread/bw,0); gl.uniform1f(bBr,it===0?1.0:0.0); gl.drawArrays(gl.TRIANGLES,0,3);\n        gl.bindFramebuffer(gl.FRAMEBUFFER,bloomFBO[1]); gl.viewport(0,0,bw,bh); gl.bindTexture(gl.TEXTURE_2D,bloomTex[0]); gl.uniform2f(bDir,0,spread/bh); gl.uniform1f(bBr,0.0); gl.drawArrays(gl.TRIANGLES,0,3); src=bloomTex[1];\n      }\n\n      // 4. composite → screen\n      gl.bindFramebuffer(gl.FRAMEBUFFER,null); gl.viewport(0,0,W,H); gl.useProgram(compP);\n      gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D,sceneTex); gl.uniform1i(cSc,0);\n      gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D,bloomTex[1]); gl.uniform1i(cBl,1);\n      gl.uniform1f(cBi,P.bloom); gl.uniform1f(cEx,P.exp); gl.uniform1f(cSa,P.sat); gl.drawArrays(gl.TRIANGLES,0,3);\n      gl.bindVertexArray(null);\n      raf=requestAnimationFrame(frame);\n    }\n    raf=requestAnimationFrame(frame);\n  }\n}\n"}}}}}}}},{"_id":"6a71faeb85bc55966bba5a17","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"nUYyYfWeNHEK6YeaD5kcd","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;height:100%}\n.car{--ink:#f4f5f8;--mut:#9aa0ad;--mut2:#5c6270;--line:rgba(255,255,255,.12);--sans:\"Helvetica Neue\",Helvetica,Arial,sans-serif;--mono:ui-monospace,\"SF Mono\",\"JetBrains Mono\",Menlo,monospace;\n  position:relative;width:100%;height:100%;min-height:560px;overflow:hidden;background:#04050a;font-family:var(--sans);color:var(--ink)}\n#bgcv{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}\n.scrim{position:absolute;inset:0;z-index:2;pointer-events:none;background:linear-gradient(100deg,rgba(3,4,6,.92) 0%,rgba(3,4,6,.68) 36%,rgba(3,4,6,.12) 64%,rgba(3,4,6,.5) 100%)}\n.vig{position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(135% 115% at 32% 44%,transparent 42%,rgba(0,0,0,.66) 100%)}\n.grain{position:absolute;inset:0;z-index:5;pointer-events:none;opacity:.06;mix-blend-mode:overlay;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\")}\n.slides{position:absolute;inset:0;z-index:3}\n.slide{position:absolute;inset:0;opacity:0;visibility:hidden;transition:opacity 1s cubic-bezier(.4,0,.2,1),visibility 0s linear 1s}\n.slide.on{opacity:1;visibility:visible;transition:opacity 1s cubic-bezier(.4,0,.2,1)}\n.content{position:absolute;left:clamp(24px,6vw,110px);top:50%;transform:translateY(-50%);max-width:min(56vw,720px)}\n.content>*{opacity:0;transform:translateY(18px)}\n.slide.on .content>*{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n.slide.on .content>*:nth-child(1){transition-delay:.2s}\n.slide.on .content>*:nth-child(2){transition-delay:.3s}\n.slide.on .content>*:nth-child(3){transition-delay:.4s}\n.slide.on .content>*:nth-child(4){transition-delay:.52s}\n.slide.on .content>*:nth-child(5){transition-delay:.64s}\n.eyebrow{display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--mut)}\n.eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--hue);box-shadow:0 0 14px var(--hue)}\n.eyebrow b{color:var(--hue);font-weight:600}\n.head{font-size:clamp(32px,5.4vw,62px);line-height:1.02;font-weight:720;letter-spacing:-.025em;margin:20px 0 0;text-wrap:balance;text-shadow:0 2px 40px rgba(0,0,0,.5)}\n.lede{margin:20px 0 0;color:#d3d7e0;font-size:clamp(14px,1.5vw,17px);line-height:1.62;max-width:44ch;text-shadow:0 1px 20px rgba(0,0,0,.6)}\n.metrics{display:flex;flex-wrap:wrap;gap:clamp(24px,4vw,60px);margin:38px 0 0}\n.metric .v{font-size:clamp(34px,4.6vw,56px);font-weight:780;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums;background:linear-gradient(160deg,#fff,var(--hue));-webkit-background-clip:text;background-clip:text;color:transparent}\n.metric .l{margin-top:10px;font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--mut2);max-width:16ch;line-height:1.5}\n.foot{display:flex;align-items:center;gap:16px;margin:44px 0 0;flex-wrap:wrap}\n.logo{font-family:var(--mono);font-size:12px;letter-spacing:.1em;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:8px 13px;background:rgba(255,255,255,.04)}\n.cap{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut2)}\n.brand{position:absolute;top:clamp(22px,4vh,40px);left:clamp(24px,6vw,110px);z-index:6;font-family:var(--mono);font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--mut)}\n.brand b{color:#fff;font-weight:600}\n.kctx{position:absolute;top:clamp(22px,4vh,40px);right:clamp(24px,5vw,64px);z-index:6;font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mut2)}\n.ui{position:absolute;left:clamp(24px,6vw,110px);right:clamp(24px,5vw,64px);bottom:clamp(26px,5vh,48px);z-index:6;display:flex;align-items:center;gap:24px}\n.dots{display:flex;gap:9px;flex:1}\n.dots button{height:3px;flex:1;max-width:64px;border:0;padding:0;cursor:pointer;background:rgba(255,255,255,.16);border-radius:3px;overflow:hidden;position:relative}\n.dots button i{position:absolute;inset:0;width:0;background:var(--hue,#fff);border-radius:3px}\n.arrows{display:flex;gap:8px}\n.arrows button{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--ink);cursor:pointer;font-size:16px;transition:.16s}\n.arrows button:hover{border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.09)}\n.count{font-family:var(--mono);font-size:12px;letter-spacing:.14em;color:var(--mut);font-variant-numeric:tabular-nums;min-width:64px}\n.count b{color:var(--ink)}\n@media(max-width:720px){.content{max-width:86vw}.scrim{background:linear-gradient(180deg,rgba(3,4,6,.45),rgba(3,4,6,.88))}.kctx{display:none}}\n`,\n  render(){\n    return `<div class=\"car\" id=\"car\"><canvas id=\"bgcv\"></canvas><div class=\"vig\"></div><div class=\"scrim\"></div><div class=\"slides\" id=\"slides\"></div><div class=\"grain\"></div><div class=\"brand\"><b>DATA²</b> · CASOS</div><div class=\"kctx\" id=\"kctx\"></div><div class=\"ui\"><div class=\"dots\" id=\"dots\"></div><div class=\"count\" id=\"count\"></div><div class=\"arrows\"><button id=\"prev\" aria-label=\"anterior\">‹</button><button id=\"next\" aria-label=\"próximo\">›</button></div></div></div>`;\n  },\n  mounted(d2, root){\n    var alive=true; d2.onUnmount(function(){alive=false;});\n    var CASES=[\n      {hue:'#4ddfe6',pal:['#4ddfe6','#5b86ff','#9b5cff'],sun:[0.80,0.22],sector:'CX & Contact Center',client:'Operação global de beleza',head:'Um contact center que aprende sozinho',lede:'Triagem por IA na entrada, roteamento em tempo real e uma base de conhecimento viva — o atendimento resolve mais, e mais rápido.',metrics:[{p:'+',v:100,s:'k',l:'chamados / dia'},{p:'−',v:50,s:'%',l:'tempo de resolução'},{p:'+',v:26,s:'pp',l:'NPS'}]},\n      {hue:'#ff4d9e',pal:['#ff4d9e','#9b5cff','#ff6a4d'],sun:[0.24,0.24],sector:'Varejo & E-commerce',client:'Rede varejista nacional',head:'Da vitrine ao ERP, um sistema só',lede:'Personalização, recomendação e pedidos orquestrados de ponta a ponta — sobre os dados reais do e-commerce.',metrics:[{p:'+',v:20,s:'%',l:'conversão'},{p:'−',v:85,s:'%',l:'tickets de suporte'},{p:'',v:30,s:' dias',l:'ideia → produção'}]},\n      {hue:'#e8c04d',pal:['#e8c04d','#ff6a4d','#84e05a'],sun:[0.78,0.3],sector:'Serviços Financeiros',client:'Insurtech / fintech',head:'A jornada que converte, ponta a ponta',lede:'Cada decisão movida pelos dados reais do cliente, num só fluxo governado — do primeiro toque à retenção.',metrics:[{p:'+',v:26,s:'pp',l:'NPS'},{p:'',v:85,s:'%',l:'retenção'},{p:'+',v:20,s:'%',l:'conversão'}]},\n      {hue:'#ff6a4d',pal:['#ff6a4d','#ff4d9e','#e8c04d'],sun:[0.28,0.2],sector:'Seguros & CX',client:'Seguradora digital',head:'Suporte que resolve na primeira',lede:'Atendimento e sinistro num fluxo único, com o contexto completo do cliente sempre à mão.',metrics:[{p:'−',v:50,s:'%',l:'tempo de resolução'},{p:'−',v:85,s:'%',l:'tickets'},{p:'+',v:26,s:'pp',l:'satisfação'}]},\n      {hue:'#4de0a1',pal:['#4de0a1','#84e05a','#4ddfe6'],sun:[0.80,0.28],sector:'Supply & Compras',client:'Indústria global',head:'Compras que economizam milhões',lede:'Modelagem financeira e excelência operacional automatizadas de ponta a ponta.',metrics:[{p:'R$ ',v:15,s:' M',l:'economizados / mês'},{p:'−',v:85,s:'%',l:'retrabalho'},{p:'',v:30,s:' dias',l:'ideia → produção'}]},\n      {hue:'#9b5cff',pal:['#9b5cff','#5b86ff','#ff4d9e'],sun:[0.30,0.24],sector:'Sales Enablement',client:'Venda direta LATAM',head:'Cada consultora com uma IA no bolso',lede:'Recomendações e respostas sobre os dados reais da operação, na palma da mão de milhares de vendedores.',metrics:[{p:'+',v:100,s:'k',l:'consultoras'},{p:'+',v:26,s:'pp',l:'ativação'},{p:'',v:24,s:'/7',l:'sempre disponível'}]}\n    ];\n    var N=CASES.length, idx=0, reduce=matchMedia('(prefers-reduced-motion: reduce)').matches;\n    var DELAY=7000, startT=0, paused=false;\n    function perf(){return (window.performance&&performance.now)?performance.now():Date.now();}\n    function hexRGB(h){var n=parseInt(h.slice(1),16);return[(n>>16)&255,(n>>8)&255,n&255];}\n    function lerp(a,b,t){return a+(b-a)*t;}\n    function mix(a,b,t){return [lerp(a[0],b[0],t),lerp(a[1],b[1],t),lerp(a[2],b[2],t)];}\n    function rgba(c,a){return 'rgba('+(c[0]|0)+','+(c[1]|0)+','+(c[2]|0)+','+a+')';}\n\n    var car=root.querySelector('#car'), bgcv=root.querySelector('#bgcv'); if(!car||!bgcv) return; var bx=bgcv.getContext('2d');\n    var BW=0,BH=0,bdpr=1,bok=[],mouse={x:.5,y:.5},par={x:0,y:0};\n    var curPal=[hexRGB('#4ddfe6'),hexRGB('#5b86ff'),hexRGB('#9b5cff')], tgtPal=curPal.map(function(a){return a.slice();});\n    var curSun=[0.8,0.22], tgtSun=[0.8,0.22];\n    function bresize(){var r=car.getBoundingClientRect();BW=Math.max(2,r.width);BH=Math.max(2,r.height);bdpr=Math.min(window.devicePixelRatio||1,2);bgcv.width=BW*bdpr;bgcv.height=BH*bdpr;bx.setTransform(bdpr,0,0,bdpr,0,0);genBokeh();}\n    function genBokeh(){bok=[];for(var i=0;i<38;i++)bok.push({x:Math.random()*BW,y:Math.random()*BH,r:24+Math.random()*220,a:0.03+Math.random()*0.16,ci:Math.floor(Math.random()*3),sp:0.08+Math.random()*0.5,ph:Math.random()*6.28,dof:Math.random()});}\n    function setPalette(c){tgtPal=c.pal.map(hexRGB);tgtSun=c.sun.slice();}\n\n    function paintBg(now){\n      if(!alive||!root.isConnected)return;\n      par.x=lerp(par.x,(mouse.x-.5),.05);par.y=lerp(par.y,(mouse.y-.5),.05);\n      for(var i=0;i<3;i++)curPal[i]=mix(curPal[i],tgtPal[i],0.03);\n      curSun[0]=lerp(curSun[0],tgtSun[0],0.03);curSun[1]=lerp(curSun[1],tgtSun[1],0.03);\n      var main=curPal[0],p2=curPal[1],p3=curPal[2];\n      var sx=curSun[0]*BW+par.x*40, sy=curSun[1]*BH+par.y*24, kx=reduce?0:Math.sin(now/9000)*10, ky=reduce?0:Math.cos(now/11000)*8;\n      var base=bx.createLinearGradient(0,0,0,BH);\n      base.addColorStop(0,rgba(mix([6,7,12],main,0.10),1));base.addColorStop(0.55,'rgba(4,5,9,1)');base.addColorStop(1,rgba(mix([3,4,8],p3,0.06),1));\n      bx.fillStyle=base;bx.fillRect(0,0,BW,BH);\n      bx.save();bx.globalCompositeOperation='lighter';\n      var gsun=bx.createRadialGradient(sx+kx,sy+ky,0,sx+kx,sy+ky,Math.max(BW,BH)*0.95);\n      gsun.addColorStop(0,rgba(main,0.42));gsun.addColorStop(.22,rgba(main,0.13));gsun.addColorStop(.55,rgba(p2,0.05));gsun.addColorStop(1,'rgba(0,0,0,0)');\n      bx.fillStyle=gsun;bx.fillRect(0,0,BW,BH);\n      var fx=BW-sx, fy=BH*0.82;var gf=bx.createRadialGradient(fx,fy,0,fx,fy,BW*0.7);\n      gf.addColorStop(0,rgba(p3,0.16));gf.addColorStop(.6,rgba(p3,0.03));gf.addColorStop(1,'rgba(0,0,0,0)');\n      bx.fillStyle=gf;bx.fillRect(0,0,BW,BH);\n      for(var k=0;k<3;k++){bx.save();bx.translate(sx+kx,sy+ky);bx.rotate((-0.62+k*0.34)+(reduce?0:Math.sin(now/6000+k*1.3)*0.05));\n        var L=Math.max(BW,BH)*1.6,w=90+k*70;var lg=bx.createLinearGradient(0,0,L,0);\n        lg.addColorStop(0,rgba(main,0.10));lg.addColorStop(.5,rgba(main,0.03));lg.addColorStop(1,'rgba(0,0,0,0)');\n        bx.fillStyle=lg;bx.beginPath();bx.moveTo(0,-w*0.25);bx.lineTo(L,-w);bx.lineTo(L,w);bx.lineTo(0,w*0.25);bx.closePath();bx.fill();bx.restore();}\n      for(var h=0;h<2;h++){var hy=BH*(0.5+h*0.22)+(reduce?0:Math.sin(now/5200+h*2)*30);\n        var hg=bx.createLinearGradient(0,hy-100,0,hy+100);hg.addColorStop(0,'rgba(0,0,0,0)');hg.addColorStop(.5,rgba(h?p3:p2,0.05));hg.addColorStop(1,'rgba(0,0,0,0)');\n        bx.fillStyle=hg;bx.fillRect(0,hy-100,BW,200);}\n      for(var b=0;b<bok.length;b++){var o=bok[b];if(!reduce){o.y-=o.sp*(0.4+o.dof);if(o.y<-o.r)o.y=BH+o.r;}\n        var ox=o.x+par.x*(30+o.dof*90)+(reduce?0:Math.sin(now/3000+o.ph)*10), oy=o.y+par.y*(20+o.dof*60)+ky*0.5;\n        var col=curPal[o.ci],ba=o.a*(0.5+o.dof*0.9);\n        var bg=bx.createRadialGradient(ox,oy,0,ox,oy,o.r);\n        bg.addColorStop(0,rgba(col,ba));bg.addColorStop(.7,rgba(col,ba*0.28));bg.addColorStop(1,'rgba(0,0,0,0)');\n        bx.fillStyle=bg;bx.beginPath();bx.arc(ox,oy,o.r,0,7);bx.fill();\n        if(o.dof<0.35){bx.fillStyle=rgba(col,Math.min(0.9,ba*3));bx.beginPath();bx.arc(ox,oy,o.r*0.14,0,7);bx.fill();}}\n      bx.restore();\n      requestAnimationFrame(paintBg);\n    }\n    car.addEventListener('pointermove',function(e){var r=car.getBoundingClientRect();mouse.x=(e.clientX-r.left)/BW;mouse.y=(e.clientY-r.top)/BH;});\n\n    var slidesEl=root.querySelector('#slides'), dotsEl=root.querySelector('#dots');\n    CASES.forEach(function(c,i){\n      var s=document.createElement('div');s.className='slide';s.style.setProperty('--hue',c.hue);\n      s.innerHTML='<div class=\"content\">'\n        +'<div class=\"eyebrow\"><span class=\"dot\"></span>'+c.sector+' · <b>CASE 0'+(i+1)+'</b></div>'\n        +'<h2 class=\"head\">'+c.head+'</h2>'\n        +'<p class=\"lede\">'+c.lede+'</p>'\n        +'<div class=\"metrics\">'+c.metrics.map(function(m){return '<div class=\"metric\"><div class=\"v\" data-p=\"'+m.p+'\" data-v=\"'+m.v+'\" data-s=\"'+m.s+'\">'+m.p+'0'+m.s+'</div><div class=\"l\">'+m.l+'</div></div>';}).join('')+'</div>'\n        +'<div class=\"foot\"><span class=\"logo\">'+c.client+'</span><span class=\"cap\">Capacidade Data² · resultado anonimizado</span></div>'\n        +'</div>';\n      slidesEl.appendChild(s);\n      var b=document.createElement('button');b.setAttribute('aria-label','caso '+(i+1));b.innerHTML='<i></i>';\n      b.addEventListener('click',function(){go(i);});dotsEl.appendChild(b);\n    });\n    var slideEls=slidesEl.querySelectorAll('.slide'), dotEls=dotsEl.querySelectorAll('button');\n\n    function countUp(el){var p=el.getAttribute('data-p'),v=+el.getAttribute('data-v'),s=el.getAttribute('data-s'),t0=null;\n      if(reduce){el.textContent=p+v+s;return;}\n      function step(ts){if(!alive)return;if(t0==null)t0=ts;var k=Math.min(1,(ts-t0)/1000),e=1-Math.pow(1-k,3);el.textContent=p+Math.round(v*e)+s;if(k<1)requestAnimationFrame(step);}\n      requestAnimationFrame(step);}\n\n    function go(n){idx=(n+N)%N;var c=CASES[idx];\n      slideEls.forEach(function(s,i){s.classList.toggle('on',i===idx);});\n      root.querySelector('#kctx').innerHTML=c.sector;\n      root.querySelector('#count').innerHTML='<b>0'+(idx+1)+'</b> / 0'+N;\n      car.style.setProperty('--hue',c.hue);dotsEl.style.setProperty('--hue',c.hue);\n      setPalette(c);\n      slideEls[idx].querySelectorAll('.metric .v').forEach(function(el){el.textContent=el.getAttribute('data-p')+'0'+el.getAttribute('data-s');});\n      setTimeout(function(){if(alive)slideEls[idx].querySelectorAll('.metric .v').forEach(countUp);},520);\n      startT=perf();}\n\n    function progLoop(){if(!alive||!root.isConnected)return;\n      if(!paused){var now=perf(),k=Math.min(1,(now-startT)/DELAY);\n        dotEls.forEach(function(d,i){d.querySelector('i').style.width=(i<idx?100:i>idx?0:k*100)+'%';});\n        if(!reduce&&now-startT>=DELAY)go(idx+1);}\n      requestAnimationFrame(progLoop);}\n\n    root.querySelector('#next').addEventListener('click',function(){go(idx+1);});\n    root.querySelector('#prev').addEventListener('click',function(){go(idx-1);});\n    d2.on(window,'keydown',function(e){if(e.key==='ArrowRight')go(idx+1);else if(e.key==='ArrowLeft')go(idx-1);});\n    car.addEventListener('pointerenter',function(){paused=true;});\n    car.addEventListener('pointerleave',function(){paused=false;startT=perf();});\n    var sx0=0;car.addEventListener('pointerdown',function(e){sx0=e.clientX;});\n    car.addEventListener('pointerup',function(e){var dx=e.clientX-sx0;if(Math.abs(dx)>60)go(idx+(dx<0?1:-1));});\n    if(typeof ResizeObserver!=='undefined'){var ro=new ResizeObserver(function(){bresize();});ro.observe(car);d2.onUnmount(function(){ro.disconnect();});}\n\n    bresize();go(0);requestAnimationFrame(paintBg);requestAnimationFrame(progLoop);\n  }\n}"}}}}}}}},{"_id":"6a73446fd35a328d9dce0b77","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"site-shell","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;height:100%}\n*{box-sizing:border-box}\n.wrap{--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;background:var(--surface-0);color:var(--ink-hi);font-family:var(--font-display);--verme:#E93355;height:100vh;width:100%;overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth;-webkit-overflow-scrolling:touch}\nheader.hd{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:22px;padding:14px 32px;background:rgba(6,7,8,.72);backdrop-filter:blur(20px);border-bottom:1px solid var(--hairline)}\n.logo{cursor:pointer;display:inline-flex;align-items:center}\n.wm{height:20px;width:auto;display:block}\n.fbrand .wm{height:26px;width:auto;display:block}\n.drawer-top .wm{height:22px}\nnav.top{display:flex;gap:22px;margin-left:12px}\nnav.top a{color:var(--ink-mid);text-decoration:none;font-size:14px;cursor:pointer}\nnav.top a.active,nav.top a:hover{color:var(--ink-hi)}\n.navitem{position:relative;display:inline-flex;align-items:center}\n.navitem .navlbl{color:var(--ink-mid);font-size:14px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:color .16s}\n.navitem .navlbl::after{content:'';width:5px;height:5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);margin-top:-2px;opacity:.45;transition:transform .18s,opacity .18s}\n.navitem:hover .navlbl,.navitem.mopen .navlbl,.navitem.active .navlbl,.navitem .navlbl.active{color:var(--ink-hi)}\n.navitem.mopen .navlbl::after{transform:rotate(-135deg);opacity:.9}\n.megapanel{position:absolute;top:100%;left:0;right:0;background:rgba(9,11,13,.92);backdrop-filter:blur(26px) saturate(1.1);border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);box-shadow:0 40px 90px rgba(0,0,0,.55);opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .18s ease,transform .18s ease,visibility .18s;pointer-events:none}\n.megapanel.open{opacity:1;visibility:visible;transform:none;pointer-events:auto}\n.megainner{max-width:1160px;margin:0 auto;padding:26px 32px 30px}\n.megahead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:18px}\n.megahead .mt{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-low)}\n.megahead .mall{color:var(--verme);font-size:13px;text-decoration:none;cursor:pointer}\n.megahead .mall:hover{opacity:.8}\n.mega-grid{display:grid;gap:14px}\n.mg-plat{grid-template-columns:1fr 1fr 1.15fr}\n.mcol{display:flex;flex-direction:column;gap:4px}\n.mcol-h{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low);margin-bottom:6px}\n.mitem{display:block;text-decoration:none;border-radius:10px;padding:9px 12px;transition:background .16s;cursor:pointer}\n.mitem:hover{background:rgba(255,255,255,.05)}\n.mitem .mi-t{color:var(--ink-hi);font-size:14.5px}\n.mitem .mi-d{color:var(--ink-mid);font-size:12.5px;line-height:1.4;margin-top:3px}\n.mcol-rt{border-left:1px solid var(--hairline);padding-left:18px}\n.mrt{display:flex;align-items:center;gap:10px;text-decoration:none;border-radius:10px;padding:8px 12px;cursor:pointer;transition:background .16s}\n.mrt:hover{background:rgba(255,255,255,.05)}\n.mrt .mrt-dot{width:9px;height:9px;border-radius:3px;flex:none;box-shadow:0 0 10px var(--accent)}\n.mrt .mrt-n{color:var(--ink-hi);font-family:var(--font-mono);font-size:13px;letter-spacing:.04em}\n.mrt .mrt-p{color:var(--ink-mid);font-size:11.5px;margin-left:auto;text-align:right;max-width:19ch;line-height:1.3}\n.mcol-rt .mrt{padding:6px 12px}\n.mcol-rt .mrt-cap{color:var(--ink-mid);font-size:11.5px;line-height:1.4;margin:-2px 0 9px;max-width:30ch}\n.mrt .mrt-live{color:var(--verme);font-size:11px;max-width:none;margin-left:auto}\n.mg-prod{grid-template-columns:repeat(4,1fr)}\n.mprod{display:block;text-decoration:none;border:1px solid var(--hairline);border-radius:12px;padding:14px 15px;background:rgba(255,255,255,.02);transition:.16s;cursor:pointer}\n.mprod:hover{border-color:var(--accent);transform:translateY(-2px)}\n.mprod.soon{cursor:default;opacity:.72}\n.mprod.soon:hover{transform:none;border-color:var(--hairline)}\n.mprod .mp-n{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:13px;letter-spacing:.08em;color:var(--ink-hi)}\n.mprod .mp-n .chip{width:9px;height:9px;border-radius:3px}\n.mprod .mp-soon{font-family:var(--font-mono);font-size:9px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 5px;margin-left:auto;letter-spacing:.04em}\n.mprod .mp-t{color:var(--ink-mid);font-size:12px;line-height:1.4;margin-top:8px}\n.mg-ind{grid-template-columns:repeat(3,1fr)}\n.mind{display:block;text-decoration:none;border:1px solid var(--hairline);border-radius:12px;padding:13px 15px;background:rgba(255,255,255,.02);transition:.16s;cursor:pointer}\n.mind:hover{border-color:var(--accent);transform:translateY(-2px)}\n.mind .mi2-n{display:flex;align-items:center;gap:8px;font-size:14.5px;color:var(--ink-hi)}\n.mind .mi2-n .chip{width:10px;height:10px;border-radius:3px}\n.mind .mi2-d{color:var(--ink-mid);font-size:12px;line-height:1.45;margin-top:7px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n@media(max-width:900px){.megapanel{display:none!important}}\n.spacer{flex:1}\n.lang{color:var(--ink-mid);font-size:13px;margin-right:6px}\n.cta{background:var(--action);color:#fff;border:none;border-radius:8px;padding:10px 16px;font-size:14px;cursor:pointer;font-family:inherit}\n.cta:hover{background:var(--action-hi)}\n.lang{display:inline-flex;align-items:center;gap:5px}\n.lang .glb{width:13px;height:13px;opacity:.65}\n.burger{display:none;flex-direction:column;justify-content:center;gap:4px;width:40px;height:40px;padding:0;border:1px solid var(--hairline);border-radius:9px;background:rgba(255,255,255,.03);cursor:pointer}\n.burger span{display:block;width:17px;height:1.6px;margin:0 auto;background:var(--ink-hi);transition:.2s}\n.drawer{position:fixed;inset:0;z-index:300;visibility:hidden;opacity:0;transition:opacity .22s ease}\n.drawer.open{visibility:visible;opacity:1}\n.drawer-scrim{position:absolute;inset:0;background:rgba(4,5,6,.62);backdrop-filter:blur(4px)}\n.drawer-inner{position:absolute;top:0;right:0;height:100%;width:min(86vw,340px);background:rgba(9,11,13,.98);border-left:1px solid var(--hairline);box-shadow:-30px 0 80px rgba(0,0,0,.6);transform:translateX(103%);transition:transform .28s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;padding:18px 20px 28px;overflow-y:auto}\n.drawer.open .drawer-inner{transform:none}\n.drawer-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}\n.drawer-x{background:none;border:none;color:var(--ink-mid);font-size:19px;cursor:pointer;width:40px;height:40px}\n.drawer-nav{display:flex;flex-direction:column}\n.drawer-nav a{color:var(--ink-hi);text-decoration:none;font-size:18px;padding:15px 4px;border-bottom:1px solid var(--hairline);cursor:pointer}\n.drawer-nav a:active{color:var(--action)}\n.drawer-cta{margin-top:22px;width:100%;padding:14px;font-size:15px;border-radius:10px}\nmain{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.eyebrow{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.display{font-size:clamp(40px,6vw,84px);line-height:1.02;letter-spacing:-.02em;margin:16px 0 20px;max-width:16ch}\n.sub{font-size:18px;color:var(--ink-mid);max-width:54ch;line-height:1.5}\n.hero-cta{margin-top:28px}\nsection.band{padding:38px 0;border-top:1px solid var(--hairline)}\n.h2{font-size:clamp(22px,2.4vw,32px);letter-spacing:-.01em;margin:10px 0 6px}\n.grid{display:grid;gap:16px;margin-top:24px}\n.g2{grid-template-columns:repeat(2,1fr)}\n.g3{grid-template-columns:repeat(3,1fr)}\n.g4{grid-template-columns:repeat(4,1fr)}\n.card{background:var(--surface-1);border:1px solid var(--hairline);border-radius:14px;padding:20px;cursor:pointer}\n.card:hover{border-color:rgba(255,255,255,.18)}\n.chip{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:8px;vertical-align:middle}\n.cardt{font-size:17px;margin:0 0 6px}\n.cardd{font-size:13px;color:var(--ink-mid);line-height:1.45}\n.metrics{display:flex;flex-wrap:wrap;gap:34px;margin-top:24px}\n.metric .v{font-family:var(--font-mono);font-size:clamp(28px,3vw,44px);color:var(--ink-hi);line-height:1}\n.metric .l{font-size:13px;color:var(--ink-mid);max-width:22ch;margin-top:8px}\n.logos{display:flex;flex-wrap:wrap;gap:12px;margin-top:20px}\n.logo-pill{border:1px solid var(--hairline);border-radius:999px;padding:8px 16px;color:var(--ink-mid);font-size:13px}\n.tag{display:inline-block;font-family:var(--font-mono);font-size:11px;color:var(--ink-low);border:1px solid var(--hairline);border-radius:6px;padding:2px 8px;margin:6px 6px 0 0}\n.ph{color:var(--ink-low);font-size:14px;margin-top:16px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\nul.caps{margin:14px 0 0;padding-left:18px}\nul.caps li{color:var(--ink-mid);font-size:14px;line-height:1.7}\nfooter{border-top:1px solid var(--hairline);background:var(--surface-1);padding:48px 32px}\n.fcols{max-width:1160px;margin:0 auto;display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr;gap:24px}\n.fbrand{font-weight:700;font-size:18px}\n.fcol h4{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-low);margin:0 0 12px}\n.fcol a{display:block;color:var(--ink-mid);text-decoration:none;font-size:14px;margin-bottom:8px;cursor:pointer}\n.fcol a:hover{color:var(--ink-hi)}\n.seal{max-width:1160px;margin:26px auto 0;font-size:12px;color:var(--ink-low);display:flex;gap:8px;align-items:center}\n.dot{width:6px;height:6px;border-radius:50%;background:var(--action);display:inline-block}\n.homemain{position:relative;width:100%;z-index:1}\n.d-atmos{position:sticky;top:0;height:100vh;margin-bottom:-100vh;z-index:0;pointer-events:none;overflow:hidden}\n.d-atmos::before{content:'';position:absolute;inset:-25%;background:radial-gradient(48% 38% at 18% 12%,rgba(58,123,255,.16),transparent 60%),radial-gradient(42% 34% at 84% 26%,rgba(233,51,85,.11),transparent 62%),radial-gradient(60% 50% at 62% 92%,rgba(58,123,255,.09),transparent 60%);filter:blur(24px)}\n.d-atmos::after{content:'';position:absolute;inset:0;background:radial-gradient(120% 90% at 50% -10%,transparent 52%,rgba(0,0,0,.55))}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;max-width:1240px;margin:0 auto;padding:clamp(60px,9vh,120px) 32px clamp(48px,7vh,92px)}\n.d-demoslot{width:100%}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-logos{display:flex;flex-wrap:wrap;gap:14px;margin-top:40px}\n.d-logo{border:1px solid var(--hairline);border-radius:12px;padding:16px 22px;color:var(--ink-mid);font-size:14px;font-family:var(--font-mono);letter-spacing:.03em;background:rgba(255,255,255,.02);min-width:150px;text-align:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-flow{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:56px;position:relative}\n.d-flow::before{content:'';position:absolute;top:8px;left:8px;right:calc(33.3333% - 24px);height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));opacity:.55}\n.d-node{width:16px;height:16px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);position:relative;z-index:1;margin:0 0 22px}\n.d-step:nth-child(2) .d-node{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.d-step:nth-child(3) .d-node{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.d-step .n{font-family:var(--font-mono);font-size:11px;color:var(--ink-low);letter-spacing:.14em}\n.d-step h4{font-size:20px;margin:8px 0 8px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-step p{color:var(--ink-mid);font-size:14px;line-height:1.55}\n.d-rts{display:flex;flex-wrap:wrap;gap:10px;margin-top:36px}\n.d-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.d-rt b{color:var(--ink-hi)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.d-carslot{margin-top:44px;border:1px solid var(--hairline);border-radius:20px;overflow:hidden;min-height:600px;background:#04050a}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-slots{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:48px}\n.d-slot{border:1px dashed var(--hairline);border-radius:16px;padding:30px;background:rgba(255,255,255,.012);min-height:150px;display:flex;flex-direction:column;justify-content:center}\n.d-slot .st{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--verme)}\n.d-slot h4{margin:12px 0 6px;font-size:18px;color:var(--ink-mid)}\n.d-slot p{color:var(--ink-low);font-size:13px;line-height:1.5}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n@media(max-width:900px){nav.top{display:none}.g2,.g3,.g4{grid-template-columns:1fr}.fcols{grid-template-columns:1fr 1fr}.d-hero{grid-template-columns:1fr}.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-flow{grid-template-columns:1fr;gap:14px}.d-flow::before{display:none}.d-inds{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}.d-slots{grid-template-columns:1fr}header.hd{padding:12px 16px;gap:10px}header.hd .cta{display:none}.burger{display:flex}.lang{margin-right:2px}main{padding:46px 18px 34px}.askwrap .row{flex-direction:column;align-items:stretch}.askwrap .row button.asksend{width:100%;padding:13px 16px}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.fcols{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n.askwrap{--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--action:#3A7BFF;--action-hi:#5B93FF;--verme:#E93355;--hairline:rgba(255,255,255,.10);--glass:rgba(16,19,23,.55);--mono:'IBM Plex Mono',ui-monospace,'SF Mono',Menlo,monospace;--sans:'Helvetica Neue',Helvetica,Arial,sans-serif;display:block;width:100%}\n.askwrap .ask{position:relative;width:100%;min-height:460px;display:flex;flex-direction:column;gap:14px;padding:20px;border:1px solid var(--hairline);border-radius:16px;background:var(--glass);backdrop-filter:blur(22px) saturate(1.1);font-family:var(--sans);color:var(--ink-hi);overflow:hidden}\n.askwrap .ask::before{content:'';position:absolute;left:0;top:0;height:2px;width:100%;background:linear-gradient(90deg,transparent,var(--verme),transparent);opacity:0;transition:opacity .3s}\n.askwrap .ask.think::before{opacity:1;animation:ask-sweep 1.1s cubic-bezier(.4,0,.2,1) infinite}\n@keyframes ask-sweep{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}\n.askwrap .hd{display:flex;align-items:center;gap:9px;font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-low)}\n.askwrap .hd .live{width:7px;height:7px;border-radius:50%;background:var(--action);box-shadow:0 0 12px var(--action)}\n.askwrap .row{display:flex;gap:8px;align-items:stretch}\n.askwrap .row input{flex:1;min-width:0;background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:12px 14px;color:var(--ink-hi);font-family:var(--sans);font-size:14px;outline:none;transition:.16s}\n.askwrap .row input::placeholder{color:var(--ink-low)}\n.askwrap .row input:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.askwrap .row button.asksend{border:0;border-radius:10px;padding:0 16px;background:var(--action);color:#fff;font-family:var(--sans);font-size:14px;font-weight:600;cursor:pointer;transition:.16s;white-space:nowrap}\n.askwrap .row button.asksend:hover{background:var(--action-hi)}\n.askwrap .row button.asksend:disabled{opacity:.5;cursor:default}\n.askwrap .chips{display:flex;flex-wrap:wrap;gap:8px}\n.askwrap .askchip{font-family:var(--mono);font-size:11.5px;letter-spacing:.01em;color:var(--ink-mid);border:1px solid var(--hairline);background:rgba(255,255,255,.03);border-radius:999px;padding:7px 13px;cursor:pointer;transition:.16s;text-align:left}\n.askwrap .askchip:hover{color:var(--ink-hi);border-color:rgba(255,255,255,.28)}\n.askwrap .askchip.on{color:#fff;border-color:var(--action);background:rgba(58,123,255,.14)}\n.askwrap .ansbox{position:relative;min-height:96px;border-top:1px solid var(--hairline);padding-top:14px;margin-top:2px}\n.askwrap .ans{font-family:var(--sans);font-size:14.5px;line-height:1.6;color:#dfe3ea;white-space:pre-wrap}\n.askwrap .ans .cur{display:inline-block;width:8px;height:16px;margin-left:2px;background:var(--verme);vertical-align:-2px;animation:ask-blink 1s steps(2) infinite}\n@keyframes ask-blink{50%{opacity:0}}\n.askwrap .thinking{display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.askwrap .thinking .flow{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--verme),transparent);background-size:200% 100%;animation:ask-flow 1.2s linear infinite}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.askwrap .askhint{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:var(--ink-low)}\n.askwrap .askhint b{color:var(--ink-mid)}\n.askwrap .fallback{display:flex;flex-direction:column;gap:10px}\n.askwrap .nf{position:relative;height:56px}\n.askwrap .nf i{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;transform:translateY(-50%);background:var(--action);box-shadow:0 0 14px var(--action)}\n.askwrap .nf i:nth-child(2){left:6%}.askwrap .nf i:nth-child(3){left:50%;background:var(--verme);box-shadow:0 0 14px var(--verme)}.askwrap .nf i:nth-child(4){left:92%;background:var(--action-hi);box-shadow:0 0 14px var(--action-hi)}\n.askwrap .nf .wire{position:absolute;top:50%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;left:6%;right:8%;transform:translateY(-50%);animation:ask-flow 2.2s linear infinite;opacity:.7}\n.d-logowall{margin-top:40px;position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}\n.d-mq{display:flex;width:max-content;align-items:center;gap:clamp(40px,5vw,72px);animation:d-marquee 46s linear infinite}\n.d-logowall:hover .d-mq{animation-play-state:paused}\n.d-mq img{height:30px;width:auto;max-width:158px;object-fit:contain;filter:grayscale(1) brightness(1.7);opacity:.5;transition:opacity .28s ease,filter .28s ease}\n.d-mq img:hover{opacity:1;filter:grayscale(0) brightness(1)}\n@keyframes d-marquee{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}\n@media(prefers-reduced-motion:reduce){.d-mq{animation:none;flex-wrap:wrap;width:auto;justify-content:center}}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.p-map{position:relative;margin-top:44px;padding:44px 0 8px}\n.p-rail{position:absolute;top:66px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.6}\n.p-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;position:relative;z-index:1}\n.p-stage{display:flex;flex-direction:column;align-items:flex-start}\n.p-node{width:18px;height:18px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);margin:0 0 20px}\n.p-node.n2,.p-node.n4{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.p-node.n3{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.p-st-n{font-size:16px;color:var(--ink-hi);letter-spacing:-.01em;margin-bottom:6px}\n.p-st-d{font-size:12.5px;color:var(--ink-mid);line-height:1.5}\n.p-triad{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.p-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.p-rt b{color:var(--ink-hi)}\n.p-substrate{display:flex;align-items:center;gap:14px;margin-top:20px;border:1px solid var(--hairline);border-radius:14px;padding:18px 20px;background:linear-gradient(180deg,rgba(58,123,255,.06),transparent)}\n.p-sub-k{width:10px;height:36px;border-radius:4px;background:linear-gradient(180deg,var(--action),var(--action-hi));flex:none;box-shadow:0 0 16px rgba(58,123,255,.4)}\n.p-sub-t{font-size:15px;color:var(--ink-hi)}\n.p-sub-d{font-size:13px;color:var(--ink-mid);margin-top:3px;line-height:1.5}\n.p-rtcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-rtcard{border:1px solid var(--hairline);border-left:3px solid var(--accent);border-radius:14px;padding:22px;background:var(--surface-1);cursor:pointer;transition:.18s}\n.p-rtcard:hover{transform:translateY(-3px);border-color:var(--accent)}\n.p-rtc-h{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;color:var(--ink-hi)}\n.p-rtc-dot{width:10px;height:10px;border-radius:3px}\n.p-rtc-p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:10px}\n.p-rtc-d{color:var(--ink-mid);font-size:13px;line-height:1.55;margin-top:10px}\n.p-agent{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-acard{border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1)}\n.p-acard .p-ac-k{font-family:var(--font-mono);font-size:12px;color:var(--verme);letter-spacing:.14em}\n.p-acard h4{margin:12px 0 8px;font-size:18px;color:var(--ink-hi)}\n.p-acard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n@media(max-width:900px){.p-flow{grid-template-columns:1fr;gap:14px}.p-rail{display:none}.p-rtcards,.p-agent{grid-template-columns:1fr}}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-caps{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:36px}\n.i-cap{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:22px 22px 22px 60px;background:var(--surface-1);transition:.18s}\n.i-cap:hover{border-color:rgba(255,255,255,.2);transform:translateY(-2px)}\n.i-cap .i-cnode{position:absolute;left:20px;top:22px;width:24px;height:24px}\n.i-cap .i-ct{font-size:14.5px;color:var(--ink-mid);line-height:1.55}\n.i-cap .i-ct b{color:var(--ink-hi);font-weight:600}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.i-case{position:relative;border:1px solid var(--hairline);border-radius:18px;padding:clamp(26px,3vw,38px);background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));overflow:hidden;margin-top:34px}\n.i-case::after{content:'';position:absolute;right:-46px;top:-46px;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,var(--ihue,#3A7BFF),transparent 70%);opacity:.14;pointer-events:none}\n.i-case .i-csetor{position:relative;z-index:1;font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase}\n.i-case .i-cline{position:relative;z-index:1;margin-top:16px;color:var(--ink-mid);font-size:15px;line-height:1.6;max-width:64ch}\n.i-case .i-cline b{color:var(--ink-hi);font-weight:600}\n.i-case .i-clev{position:relative;z-index:1;display:inline-block;margin-top:18px;font-family:var(--font-mono);font-size:12.5px;color:var(--ink-hi);border:1px solid var(--hairline);border-left:2px solid var(--action);border-radius:8px;padding:8px 14px}\n.i-caseslot{border:1px dashed var(--hairline);border-radius:18px;padding:34px;background:rgba(255,255,255,.012);margin-top:34px}\n.i-caseslot .st{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--verme)}\n.i-caseslot h4{margin:12px 0 6px;font-size:18px;color:var(--ink-mid)}\n.i-caseslot p{color:var(--ink-low);font-size:13px;line-height:1.5}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.i-caps{grid-template-columns:1fr}}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}}\n/* exp-domain */\n[data-exp=\"domain\"] .d2exp{display:block;width:100%}\n[data-exp=\"domain\"] .d2exp *{ box-sizing:border-box; }\n[data-exp=\"domain\"] .d2exp .st{ position:relative; width:100%; height:100%; min-height:860px; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #150a19 0%, #0b0711 46%, #070509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n[data-exp=\"domain\"] .d2exp .aura{ position:absolute; z-index:1; width:560px; height:560px; border-radius:50%; pointer-events:none;\n  background:radial-gradient(circle, rgba(250,72,220,.16) 0%, rgba(176,72,250,.06) 42%, rgba(120,40,200,0) 70%); filter:blur(12px); transition:transform .25s ease-out; }\n[data-exp=\"domain\"] .d2exp canvas.core{ position:absolute; z-index:2; display:block; }\n[data-exp=\"domain\"] .d2exp .grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n[data-exp=\"domain\"] .d2exp .hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n[data-exp=\"domain\"] .d2exp .head{ position:absolute; top:44px; left:56px; z-index:8; }\n[data-exp=\"domain\"] .d2exp .eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a7488; display:flex; align-items:center; gap:8px; }\n[data-exp=\"domain\"] .d2exp .dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 12px 2px #FA48DC; }\n[data-exp=\"domain\"] .d2exp .h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n[data-exp=\"domain\"] .d2exp .h1 .g{ color:#8a8490; }\n[data-exp=\"domain\"] .d2exp .h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:38ch; }\n[data-exp=\"domain\"] .d2exp .seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n[data-exp=\"domain\"] .d2exp .seed b{ color:#c98fbf; font-weight:400; font-variant-numeric:tabular-nums; }\n[data-exp=\"domain\"] .d2exp .stage{ position:absolute; z-index:7; width:min(38%,440px); }\n[data-exp=\"domain\"] .d2exp .st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#a86aa0; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n[data-exp=\"domain\"] .d2exp .st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n[data-exp=\"domain\"] .d2exp canvas.demo{ position:absolute; inset:0; width:100%; height:100%; }\n[data-exp=\"domain\"] .d2exp .dov{ position:absolute; inset:0; padding:18px; }\n[data-exp=\"domain\"] .d2exp .mono{ font-family:ui-monospace,Menlo,monospace; }\n[data-exp=\"domain\"] .d2exp .tw{ font-family:ui-monospace,Menlo,monospace; font-size:13px; line-height:1.7; color:#e8dce6; white-space:pre-wrap; }\n[data-exp=\"domain\"] .d2exp .tw .cur{ display:inline-block; width:8px; height:15px; background:#FA48DC; vertical-align:-2px; margin-left:1px; animation:bl 1s steps(2) infinite; }\n@keyframes bl{50%{opacity:0}}\n[data-exp=\"domain\"] .d2exp .bub{ max-width:80%; padding:9px 13px; border-radius:12px; font-size:13px; margin:6px 0; opacity:0; transform:translateY(6px); transition:.35s; }\n[data-exp=\"domain\"] .d2exp .bub.in{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.12); color:#cfc9d2; }\n[data-exp=\"domain\"] .d2exp .bub.out{ background:rgba(250,72,220,.14); border:1px solid rgba(250,72,220,.4); color:#f0d8ec; margin-left:auto; }\n[data-exp=\"domain\"] .d2exp .bub.show{ opacity:1; transform:none; }\n[data-exp=\"domain\"] .d2exp .tag2{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:9.5px; color:#fff; background:rgba(10,4,9,.82); border:1px solid; padding:2px 6px; border-radius:5px; opacity:0; transition:.25s; white-space:nowrap; }\n[data-exp=\"domain\"] .d2exp .tag2.show{ opacity:1; }\n[data-exp=\"domain\"] .d2exp .cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n[data-exp=\"domain\"] .d2exp .fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n[data-exp=\"domain\"] .d2exp .fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n[data-exp=\"domain\"] .d2exp .fc:hover{ background:rgba(255,255,255,.02); }\n[data-exp=\"domain\"] .d2exp .fc.on{ background:rgba(250,72,220,.06); }\n[data-exp=\"domain\"] .d2exp .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FA48DC; }\n[data-exp=\"domain\"] .d2exp .fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n[data-exp=\"domain\"] .d2exp .fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; }\n[data-exp=\"domain\"] .d2exp .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n[data-exp=\"domain\"] .d2exp .fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; }\n[data-exp=\"domain\"] .d2exp .fc.on .fs{ color:#a86aa0; }\n[data-exp=\"domain\"] .d2exp .payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; }\n[data-exp=\"domain\"] .d2exp .payoff b{ color:#c98fbf; }\n@media (max-width:1080px){ [data-exp=\"domain\"] .d2exp .cards{ flex-wrap:wrap; }\n[data-exp=\"domain\"] .d2exp .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); }\n[data-exp=\"domain\"] .d2exp .stage{ position:relative; width:auto; } }\n@media (prefers-reduced-motion:reduce){ [data-exp=\"domain\"] .d2exp .fc{ animation:none!important; } }\n.d2exp .d2wm-mini{width:46px;height:15px;vertical-align:-2px;display:inline-block;fill:#cfc9d2}\n/* exp-barramento */\n[data-exp=\"barramento\"] .d2exp{ display:block; width:100%; height:100%; }\n[data-exp=\"barramento\"] .d2exp *{ box-sizing:border-box; }\n[data-exp=\"barramento\"] .d2exp .st{ position:relative; width:100%; height:100%; min-height:860px; overflow:hidden;\n  background:radial-gradient(82% 70% at 50% 44%, #0e0a1c 0%, #0a0812 46%, #060509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n[data-exp=\"barramento\"] .d2exp canvas.pipe{ position:absolute; z-index:2; display:block; }\n[data-exp=\"barramento\"] .d2exp .grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n[data-exp=\"barramento\"] .d2exp .hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n[data-exp=\"barramento\"] .d2exp .head{ position:absolute; top:44px; left:56px; z-index:9; max-width:52%; }\n[data-exp=\"barramento\"] .d2exp .eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.28em; text-transform:uppercase; color:#8a86a2; display:flex; align-items:center; gap:8px; }\n[data-exp=\"barramento\"] .d2exp .eyebrow .d1{ width:8px; height:8px; border-radius:50%; background:#8448FA; box-shadow:0 0 12px 2px #8448FA; }\n[data-exp=\"barramento\"] .d2exp .eyebrow .arw{ color:#5a5570; }\n[data-exp=\"barramento\"] .d2exp .eyebrow .d2{ width:8px; height:8px; border-radius:50%; background:#48FAFA; box-shadow:0 0 12px 2px #48FAFA; }\n[data-exp=\"barramento\"] .d2exp .h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n[data-exp=\"barramento\"] .d2exp .h1 .g{ color:#8a8490; }\n[data-exp=\"barramento\"] .d2exp .h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:44ch; }\n[data-exp=\"barramento\"] .d2exp .seed{ position:absolute; top:50px; right:56px; z-index:9; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.13em; color:#544f5e; line-height:1.7; }\n[data-exp=\"barramento\"] .d2exp .seed b{ color:#9f8fd6; font-weight:400; font-variant-numeric:tabular-nums; }\n[data-exp=\"barramento\"] .d2exp .seed b.c{ color:#7fcdd6; }\n[data-exp=\"barramento\"] .d2exp .chip{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.04em; padding:5px 9px; border-radius:8px; border:1px solid rgba(255,255,255,.1); background:rgba(255,255,255,.03); color:#8f8a9c; white-space:nowrap; transition:.28s; }\n[data-exp=\"barramento\"] .d2exp .chip.src{ transform:translate(-100%,-50%); }\n[data-exp=\"barramento\"] .d2exp .chip.dst{ transform:translate(0,-50%); }\n[data-exp=\"barramento\"] .d2exp .chip.lit{ color:#EDECEF; border-color:rgba(72,250,250,.55); box-shadow:0 0 16px rgba(72,250,250,.25); }\n[data-exp=\"barramento\"] .d2exp .chip.litv.lit{ border-color:rgba(132,72,250,.6); box-shadow:0 0 16px rgba(132,72,250,.28); }\n[data-exp=\"barramento\"] .d2exp .nodelbl{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.16em; text-transform:uppercase; }\n[data-exp=\"barramento\"] .d2exp .nodelbl .t{ font-size:12.5px; font-weight:600; letter-spacing:.04em; text-transform:none; }\n[data-exp=\"barramento\"] .d2exp .nodelbl .s{ color:#6f6a7e; font-size:9.5px; }\n[data-exp=\"barramento\"] .d2exp .stage{ position:absolute; z-index:8; left:50%; transform:translateX(-50%); width:min(560px,64%); }\n[data-exp=\"barramento\"] .d2exp .st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7f9ad6; margin-bottom:10px; display:flex; align-items:center; gap:8px; justify-content:center; }\n[data-exp=\"barramento\"] .d2exp .st-box{ position:relative; display:flex; gap:10px; justify-content:center; flex-wrap:wrap; }\n[data-exp=\"barramento\"] .d2exp .row{ display:flex; align-items:center; gap:9px; font-family:ui-monospace,Menlo,monospace; font-size:12px; opacity:0; transform:translateY(6px); transition:.34s; }\n[data-exp=\"barramento\"] .d2exp .row.show{ opacity:1; transform:none; }\n[data-exp=\"barramento\"] .d2exp .row .k{ padding:5px 10px; border-radius:8px; border:1px solid; white-space:nowrap; }\n[data-exp=\"barramento\"] .d2exp .k.in{ background:rgba(132,72,250,.14); border-color:rgba(132,72,250,.45); color:#cbb8f4; }\n[data-exp=\"barramento\"] .d2exp .k.out{ background:rgba(72,250,250,.12); border-color:rgba(72,250,250,.4); color:#a8ecec; }\n[data-exp=\"barramento\"] .d2exp .k.ok{ background:rgba(102,250,72,.12); border-color:rgba(102,250,72,.4); color:#bff0a8; }\n[data-exp=\"barramento\"] .d2exp .k.err{ background:rgba(250,72,72,.13); border-color:rgba(250,72,72,.45); color:#f4b8b8; }\n[data-exp=\"barramento\"] .d2exp .row .ar{ color:#5a5570; }\n[data-exp=\"barramento\"] .d2exp .row .mut{ color:#7a7488; font-size:11px; }\n[data-exp=\"barramento\"] .d2exp .cards{ position:absolute; left:0; right:0; bottom:44px; z-index:9; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n[data-exp=\"barramento\"] .d2exp .fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n[data-exp=\"barramento\"] .d2exp .fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n[data-exp=\"barramento\"] .d2exp .fc:hover{ background:rgba(255,255,255,.02); }\n[data-exp=\"barramento\"] .d2exp .fc.on{ background:rgba(120,120,250,.06); }\n[data-exp=\"barramento\"] .d2exp .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:linear-gradient(90deg,#8448FA,#48FAFA); }\n[data-exp=\"barramento\"] .d2exp .fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n[data-exp=\"barramento\"] .d2exp .fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; }\n[data-exp=\"barramento\"] .d2exp .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n[data-exp=\"barramento\"] .d2exp .fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; }\n[data-exp=\"barramento\"] .d2exp .fc.on .fs{ color:#7f9ad6; }\n[data-exp=\"barramento\"] .d2exp .payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:9; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; }\n[data-exp=\"barramento\"] .d2exp .payoff b{ color:#9f8fd6; }\n[data-exp=\"barramento\"] .d2exp .payoff b.c{ color:#7fcdd6; }\n@media (max-width:1080px){ [data-exp=\"barramento\"] .d2exp .cards{ flex-wrap:wrap; } [data-exp=\"barramento\"] .d2exp .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); } [data-exp=\"barramento\"] .d2exp .stage{ position:relative; } }\n\n\n/* hero-magic */\n.d2hero{ display:block; width:100%; height:100%; }\n.d2hero *{ box-sizing:border-box; }\n.d2hero .st{ position:relative; width:100%; height:100%; min-height:max(600px,88vh); overflow:hidden; background:radial-gradient(70% 90% at 64% 42%, #12101c 0%, #0a0912 46%, #060509 100%); color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; align-items:center; }\n.d2hero .glow{ position:absolute; inset:0; width:100%; height:100%; z-index:1; }\n.d2hero .wrap{ position:relative; z-index:3; width:100%; height:auto; max-width:1200px; margin:0 auto; padding:0 56px; display:grid; grid-template-columns:1.02fr 1fr; gap:44px; align-items:center; background:transparent; overflow:visible; }\n.d2hero .eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.26em; text-transform:uppercase; color:#8a8496; display:flex; align-items:center; gap:8px; }\n.d2hero .eyebrow .d{ width:8px;height:8px;border-radius:50%;background:#FA48DC;box-shadow:0 0 12px 2px #FA48DC; }\n.d2hero .h1{ font-size:clamp(30px,3.6vw,52px); font-weight:500; letter-spacing:-.025em; line-height:1.04; margin:16px 0 0; color:#F4F2F6; }\n.d2hero .h1 .g{ color:#8a8490; display:block; }\n.d2hero .prompt{ margin-top:24px; border:1px solid rgba(255,255,255,.14); border-radius:14px; background:rgba(255,255,255,.03); padding:0 16px; display:flex; align-items:center; gap:10px; height:58px; box-shadow:0 8px 40px rgba(0,0,0,.4); transition:border-color .25s, box-shadow .25s; }\n.d2hero .prompt:focus-within{ border-color:rgba(250,72,220,.5); box-shadow:0 8px 44px rgba(250,72,220,.14); }\n.d2hero .prompt .q{ color:#8448FA; font-family:ui-monospace,Menlo,monospace; font-size:15px; }\n.d2hero .prompt .inp{ flex:1; background:transparent; border:0; outline:0; color:#EDECEF; font-size:15px; font-family:inherit; caret-color:#FA48DC; min-width:0; }\n.d2hero .prompt .inp::placeholder{ color:#5a5566; }\n.d2hero .prompt .go{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.08em; color:#0b0711; background:#FA48DC; border:0; border-radius:8px; padding:7px 12px; cursor:pointer; opacity:.9; transition:opacity .2s, transform .1s; }\n.d2hero .prompt .go:hover{ opacity:1; } .d2hero .prompt .go:active{ transform:scale(.97); }\n.d2hero .hint{ margin-top:13px; font-size:12px; color:#6b6675; font-family:ui-monospace,Menlo,monospace; }\n.d2hero .palette{ margin-top:24px; display:flex; gap:10px 12px; flex-wrap:wrap; }\n.d2hero .pd{ display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.04em; color:#615c6b; transition:color .3s; }\n.d2hero .pd .dot{ width:9px; height:9px; border-radius:50%; background:currentColor; opacity:.26; transition:opacity .3s, box-shadow .3s; }\n.d2hero .pd.lit{ color:#cfc9d6; } .d2hero .pd.lit .dot{ opacity:1; box-shadow:0 0 12px 2px var(--c); background:var(--c); }\n.d2hero .stage{ position:relative; height:440px; display:flex; align-items:center; justify-content:center; }\n.d2hero .screen{ position:relative; width:360px; border-radius:16px; background:linear-gradient(180deg,#141220,#0d0b16); border:1px solid rgba(255,255,255,.1); box-shadow:0 30px 80px rgba(0,0,0,.55); overflow:hidden; }\n.d2hero .sbar{ height:34px; display:flex; align-items:center; gap:6px; padding:0 12px; border-bottom:1px solid rgba(255,255,255,.07); }\n.d2hero .sbar i{ width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.16); }\n.d2hero .sbar .url{ margin-left:8px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#6b6675; opacity:0; transition:opacity .5s; }\n.d2hero .sbody{ position:relative; padding:14px; min-height:256px; }\n.d2hero .layer{ display:flex; flex-direction:column; gap:10px; }\n.d2hero .blk{ position:relative; border-radius:10px; padding:11px 12px; border:1px solid; opacity:0; transform:translateY(14px) scale(.96); transition:opacity .45s, transform .45s cubic-bezier(.34,1.56,.64,1); }\n.d2hero .blk.in{ opacity:1; transform:none; } .d2hero .blk.gone{ opacity:0; transform:translateY(-10px) scale(.97); transition:opacity .38s, transform .38s ease; }\n.d2hero .blk .tag{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.1em; text-transform:uppercase; }\n.d2hero .blk .lbl{ margin-top:4px; font-size:13px; color:#EDECEF; }\n.d2hero .blk .bar{ margin-top:9px; height:5px; border-radius:3px; background:rgba(255,255,255,.08); overflow:hidden; }\n.d2hero .blk .bar > i{ display:block; height:100%; width:0; border-radius:3px; transition:width .7s ease .1s; }\n.d2hero .badge{ position:absolute; top:12px; right:12px; z-index:5; display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.1em; color:#66FA48; background:rgba(102,250,72,.1); border:1px solid rgba(102,250,72,.4); border-radius:20px; padding:4px 10px; opacity:0; transform:translateY(-6px) scale(.9); transition:.4s cubic-bezier(.34,1.56,.64,1); }\n.d2hero .badge.on{ opacity:1; transform:none; }\n.d2hero .badge .p{ width:7px;height:7px;border-radius:50%;background:#66FA48;box-shadow:0 0 10px 2px #66FA48; animation:pp 1.4s ease-in-out infinite; }\n@keyframes pp{ 50%{ opacity:.4; transform:scale(.7) } }\n.d2hero .app{ display:flex; flex-direction:column; gap:9px; opacity:0; transform:translateY(12px); transition:opacity .55s, transform .55s cubic-bezier(.22,1,.36,1); }\n.d2hero .app.in{ opacity:1; transform:none; }\n.d2hero .app .ah{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:#8a8496; display:flex; align-items:center; gap:7px; }\n.d2hero .app .ah::before{ content:''; width:7px;height:7px;border-radius:50%; background:var(--acc); box-shadow:0 0 10px 1px var(--acc); flex:none; }\n.d2hero .chat{ display:flex; flex-direction:column; gap:6px; }\n.d2hero .bub{ max-width:84%; padding:8px 11px; border-radius:11px; font-size:12.5px; line-height:1.35; }\n.d2hero .bub.q{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.1); color:#cfc9d2; }\n.d2hero .bub.a{ margin-left:auto; color:#f2ecf1; }\n.d2hero .agent{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#66FA48; display:flex; align-items:center; gap:6px; }\n.d2hero .kpis{ display:flex; gap:8px; }\n.d2hero .kpis span{ flex:1; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.08); border-radius:8px; padding:8px 9px; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#d7d2dc; }\n.d2hero .chart{ display:flex; align-items:flex-end; gap:5px; height:62px; }\n.d2hero .chart i{ flex:1; background:linear-gradient(180deg,var(--acc),rgba(255,255,255,.03)); border-radius:3px 3px 0 0; opacity:.85; }\n.d2hero .alert{ font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#FADC48; }\n.d2hero .row2{ display:flex; justify-content:space-between; align-items:center; font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#d7d2dc; padding:8px 10px; background:rgba(255,255,255,.03); border-radius:8px; }\n.d2hero .row2 .ok{ color:#66FA48; }\n.d2hero .foot{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#6b6675; }\n.d2hero .gal{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; }\n.d2hero .gal i{ aspect-ratio:1; border-radius:8px; background:linear-gradient(135deg,var(--acc),rgba(255,255,255,.04)); opacity:.9; }\n@media (max-width:900px){ .d2hero .wrap{ grid-template-columns:1fr; gap:30px; } .d2hero .stage{ height:380px; } .d2hero .screen{ width:300px; } }\n@media (prefers-reduced-motion:reduce){ .d2hero .blk,.d2hero .app{ transition:none } .d2hero .badge .p{ animation:none } }\n.d2hero-sec{ position:relative; z-index:1; display:block; min-height:88vh; }\n`,\n  render(d2){\n    let R=null; try{ R = d2.router ? d2.router('site_router') : null; }catch(e){ R=null; }\n    let rpath = (R && typeof R.path === 'string') ? (R.path || '/') : null;\n    const path = rpath || d2.state.path || '/';\n    const params = (R && R.params) || {};\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const nav = dd('cms-nav-itemsDataSet');\n    const top = nav.filter(n=>n.kind==='top').sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const cta = nav.find(n=>n.kind==='cta') || {label:'Falar com a gente',href:'/consultoria'};\n    const foot = nav.filter(n=>n.kind==='footer').sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n\n    const megaKeys = {'/plataforma':'plataforma','/produtos':'produtos','/industrias':'industrias'};\n    const isActive = h => (h==='/'? path==='/' : (path===h || path.indexOf(h+'/')===0));\n    const navHtml = top.map(n=>{\n      const mk = megaKeys[n.href];\n      const cls = isActive(n.href)?'active':'';\n      if(mk){ return `<div class=\"navitem has-mega ${cls}\" data-mega=\"${mk}\"><span class=\"navlbl ${cls}\">${esc(n.label)}</span></div>`; }\n      return `<a data-nav data-href=\"${esc(n.href)}\" class=\"${cls}\">${esc(n.label)}</a>`;\n    }).join('');\n    const megaProds = (dd('cms-productsDataSet')||[]).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const megaInds = (dd('cms-industriesDataSet')||[]).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const megaRts = (dd('cms-runtimesDataSet')||[]);\n    const megaConcepts = nav.filter(n=>n.kind==='mega'&&n.href.indexOf('/runtimes/')<0).sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const megaRuntimes = nav.filter(n=>n.kind==='mega'&&n.href.indexOf('/runtimes/')>=0).sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const blurbs = {'/plataforma/como-funciona':'Do intent ao sistema em produção.','/plataforma/data2-lang':'A linguagem única do runtime.','/plataforma/data-framework':'DataSource → DataSet → o dado é seu.','/plataforma/agent-native':'O builder, também aberto a agentes.'};\n    const rtMeta = {}; megaRts.forEach(r=>{ rtMeta[r.name]={papel:r.papel,accent:r.accent}; });\n    const conceptCols = [megaConcepts.slice(0,2), megaConcepts.slice(2,4)];\n    const liveMap = {}; megaRuntimes.forEach(r=>{ liveMap[(r.label||'').toLowerCase()] = r.href; });\n    const megaPlat = `<div class=\"megapanel\" data-megapanel=\"plataforma\"><div class=\"megainner\"><div class=\"megahead\"><span class=\"mt\">A plataforma</span><a class=\"mall\" data-nav data-href=\"/plataforma\">Ver visão geral →</a></div><div class=\"mega-grid mg-plat\">${conceptCols.map(col=>`<div class=\"mcol\">${col.map(c=>`<a class=\"mitem\" data-nav data-href=\"${esc(c.href)}\"><div class=\"mi-t\">${esc(c.label)}</div><div class=\"mi-d\">${esc(blurbs[c.href]||'')}</div></a>`).join('')}</div>`).join('')}<div class=\"mcol mcol-rt\"><div class=\"mcol-h\">Os oito componentes</div><div class=\"mrt-cap\">Data² é a runtime — estes são os oito componentes dela.</div>${megaProds.map(p=>{const ac=esc(p.accent||'#3A7BFF');const live=liveMap[(p.key||'').toLowerCase()];const href=esc(live||'/produtos');return `<a class=\"mrt\" data-nav data-href=\"${href}\" style=\"--accent:${ac}\"><span class=\"mrt-dot\" style=\"background:${ac}\"></span><span class=\"mrt-n\">${esc(p.name)}</span>${live?'<span class=\"mrt-p mrt-live\">ao vivo →</span>':''}</a>`;}).join('')}</div></div></div></div>`;\n    const megaProd = `<div class=\"megapanel\" data-megapanel=\"produtos\"><div class=\"megainner\"><div class=\"megahead\"><span class=\"mt\">Oito produtos, um runtime</span><a class=\"mall\" data-nav data-href=\"/produtos\">Ver todos →</a></div><div class=\"mega-grid mg-prod\">${megaProds.map(p=>{const ac=esc(p.accent||'#3A7BFF');const soon=p.status==='em-breve';return `<a class=\"mprod${soon?' soon':''}\" ${soon?'':`data-nav data-href=\"/produtos\"`} style=\"--accent:${ac}\"><div class=\"mp-n\"><span class=\"chip\" style=\"background:${ac}\"></span>${esc(p.name)}${soon?'<span class=\"mp-soon\">em breve</span>':''}</div><div class=\"mp-t\">${esc(p.tagline)}</div></a>`;}).join('')}</div></div></div>`;\n    const megaInd = `<div class=\"megapanel\" data-megapanel=\"industrias\"><div class=\"megainner\"><div class=\"megahead\"><span class=\"mt\">Nove indústrias, um runtime</span><a class=\"mall\" data-nav data-href=\"/industrias\">Ver todas →</a></div><div class=\"mega-grid mg-ind\">${megaInds.map(i=>{const hue=esc(i.hue||'#3A7BFF');return `<a class=\"mind\" data-nav data-href=\"/industrias/${esc(i.slug)}\" style=\"--accent:${hue}\"><div class=\"mi2-n\"><span class=\"chip\" style=\"background:${hue}\"></span>${esc(i.name_pt)}</div><div class=\"mi2-d\">${esc(i.dor)}</div></a>`;}).join('')}</div></div></div>`;\n    const megaPanels = megaPlat + megaProd + megaInd;\n    const header = `${D2WM()}<header class=\"hd\">\n      <div class=\"logo\" data-nav data-href=\"/\"><svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><use href=\"#d2wm\"/></svg></div>\n      <nav class=\"top\">${navHtml}</nav>\n      <div class=\"spacer\"></div>\n      <span class=\"lang\"><svg class=\"glb\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18\"/><path d=\"M12 3c2.6 2.7 2.6 15.4 0 18M12 3c-2.6 2.7-2.6 15.4 0 18\"/></svg>PT</span>\n      <button class=\"cta\" data-nav data-href=\"${esc(cta.href)}\">${esc(cta.label)} →</button>\n      <button class=\"burger\" data-burger aria-label=\"Menu\" aria-expanded=\"false\"><span></span><span></span><span></span></button>\n      ${megaPanels}\n    </header>\n    <div class=\"drawer\" data-drawer><div class=\"drawer-scrim\" data-drawer-close></div><div class=\"drawer-inner\"><div class=\"drawer-top\"><svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><use href=\"#d2wm\"/></svg><button class=\"drawer-x\" data-drawer-close aria-label=\"Fechar\"><svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\"/></svg></button></div><nav class=\"drawer-nav\">${top.map(n=>`<a data-nav data-href=\"${esc(n.href)}\">${esc(n.label)}</a>`).join('')}</nav><button class=\"cta drawer-cta\" data-nav data-href=\"${esc(cta.href)}\">${esc(cta.label)} →</button></div></div>`;\n\n    const footer = `<footer><div class=\"fcols\">\n      <div class=\"fcol\"><div class=\"fbrand\"><svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><use href=\"#d2wm\"/></svg></div><div class=\"cardd\" style=\"margin-top:10px;max-width:30ch\">Necessidade elevada à produção.</div></div>\n      <div class=\"fcol\"><h4>Plataforma</h4><a data-nav data-href=\"/plataforma\">Como funciona</a><a data-nav data-href=\"/produtos\">Produtos</a><a data-nav data-href=\"/plataforma/data-framework\">Data Framework</a></div>\n      <div class=\"fcol\"><h4>Indústrias</h4><a data-nav data-href=\"/industrias\">Ver todas</a><a data-nav data-href=\"/casos\">Casos</a></div>\n      <div class=\"fcol\"><h4>Empresa</h4>${foot.map(f=>`<a data-nav data-href=\"${esc(f.href)}\">${esc(f.label)}</a>`).join('')}</div>\n      <div class=\"fcol\"><h4>Idioma</h4><a>PT</a><a>EN</a><a>ZH</a></div>\n    </div><div class=\"seal\"><span class=\"dot\"></span> Feito no runtime Data²</div></footer>`;\n\n    let body = '';\n    if (path === '/') {\n      body = renderHome(d2, esc, dd);\n    } else if (path.indexOf('/industrias/')===0 && (params.slug || path.split('/')[2])) {\n      const slug = params.slug || path.split('/')[2];\n      const i = (dd('cms-industriesDataSet')).find(x=>x.slug===slug) || {};\n      body = i.slug ? renderIndustriaDetail(d2, esc, dd, i) : renderIndustriaIndex(d2, esc, dd);\n    } else if (path === '/industrias') {\n      body = renderIndustriaIndex(d2, esc, dd);\n    } else if (path.indexOf('/produtos/')===0 && (params.slug || path.split('/')[2])) {\n      const pk = params.slug || path.split('/')[2];\n      const pp = (dd('cms-productsDataSet')).find(x=>x.key===pk) || {};\n      body = pp.key ? renderProdutoDetail(d2, esc, dd, pp) : renderProdutoIndex(d2, esc, dd);\n    } else if (path === '/produtos') {\n      body = renderProdutoIndex(d2, esc, dd);\n    } else if (path.indexOf('/casos/')===0 && (params.slug || path.split('/')[2])) {\n      const cslug = params.slug || path.split('/')[2];\n      const cc = (dd('cms-casesDataSet')).find(x=>x.slug===cslug) || {};\n      body = cc.slug ? renderCasoDetail(d2, esc, dd, cc) : renderCasosIndex(d2, esc, dd);\n    } else if (path === '/casos') {\n      body = renderCasosIndex(d2, esc, dd);\n    } else if (path === '/consultoria') {\n      body = renderConsultoria(d2, esc, dd);\n    } else if (path === '/precos') {\n      body = renderPrecos(d2, esc, dd);\n    } else if (path === '/empresa/contato') {\n      body = renderContato(d2, esc, dd);\n    } else if (path === '/empresa/carreiras') {\n      body = renderCarreiras(d2, esc, dd);\n    } else if (path === '/empresa') {\n      body = renderEmpresa(d2, esc, dd);\n    } else if (path === '/plataforma/como-funciona') {\n      body = renderComoFunciona(d2, esc, dd);\n    } else if (path === '/plataforma/data-framework') {\n      body = renderDataFramework(d2, esc, dd);\n    } else if (path === '/plataforma/agent-native') {\n      body = renderAgentNative(d2, esc, dd);\n    } else if (path === '/plataforma/data2-lang') {\n      body = renderData2Lang(d2, esc, dd);\n    } else if (path === '/plataforma/runtimes/rush' || path === '/plataforma/runtimes/connect' || path === '/plataforma/runtimes/domain') {\n      body = renderRuntimeDetail(d2, esc, dd, path.split('/').pop());\n    } else if (path === '/recursos') {\n      body = renderRecursos(d2, esc, dd);\n    } else if (path === '/plataforma') {\n      body = renderPlataforma(d2, esc, dd);\n    } else {\n      const titles = {'/consultoria':'Consultoria','/precos':'Preços','/empresa':'Empresa','/recursos':'Recursos'};\n      const t = titles[path] || (path.replace('/','').replace(/\\//g,' › ').replace(/-/g,' ') || 'Página');\n      body = `<div class=\"eyebrow\">Esqueleto · Fase 0</div><h1 class=\"display\" style=\"font-size:clamp(34px,4vw,60px);text-transform:capitalize\">${esc(t)}</h1>\n        <div class=\"sub\">Rota registrada no shell. O conteúdo rico desta seção entra na próxima sessão — lendo das Tables do CMS.</div>\n        <div class=\"ph\">path: <span style=\"font-family:var(--font-mono)\">${esc(path)}</span></div>`;\n    }\n\n    const isHome = path === '/';\n    return `<div class=\"wrap\" id=\"scrollwrap\">${header}${isHome?'<div class=\"homemain\">':'<main>'}${body}${isHome?'</div>':'</main>'}${footer}</div>`;\n  },\n  mounted(d2, root){\n    d2.on('[data-nav]','click',(e)=>{\n      const el = e.target.closest('[data-nav]');\n      if(!el) return;\n      const h = el.getAttribute('data-href');\n      if(h){ e.preventDefault(); d2.state.path = h; const w=d2.$('#scrollwrap'); if(w) w.scrollTop=0; try{ d2.router('site_router').goTo(h); }catch(_){} }\n    });\n    megaSetup(d2);\n    drawerSetup(d2);\n    askSetup(d2);\n    contatoSetup(d2);\n    setupReveal(d2);\n    expDispatch(d2);\n    heroDispatch(d2);\n  },\n  updated(d2){ setupReveal(d2); expDispatch(d2); heroDispatch(d2); }\n}\nfunction D2WM(){return '<svg width=\"0\" height=\"0\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><symbol id=\"d2wm\" viewBox=\"0 0 459.554 148.471\"><g transform=\"translate(-678.859 -300.605)\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\" fill=\"#fff\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\" fill=\"#fff\"/></g></symbol></svg>';}\nfunction megaSetup(d2){\n  const root = d2.root || (typeof document!=='undefined'?document:null);\n  if(!root) return;\n  let closeTimer=null;\n  const kill=()=>{ if(closeTimer){clearTimeout(closeTimer);closeTimer=null;} };\n  const panels = ()=> Array.prototype.slice.call(root.querySelectorAll('[data-megapanel]'));\n  const trigs = ()=> Array.prototype.slice.call(root.querySelectorAll('[data-mega]'));\n  const openMenu=(key)=>{ kill(); panels().forEach(p=>p.classList.toggle('open',p.getAttribute('data-megapanel')===key)); trigs().forEach(t=>t.classList.toggle('mopen',t.getAttribute('data-mega')===key)); };\n  const closeAll=()=>{ kill(); panels().forEach(p=>p.classList.remove('open')); trigs().forEach(t=>t.classList.remove('mopen')); };\n  const scheduleClose=()=>{ kill(); closeTimer=setTimeout(closeAll,180); };\n  d2.on(root,'mouseover',(e)=>{ const t=e.target.closest&&e.target.closest('[data-mega]'); if(t){ openMenu(t.getAttribute('data-mega')); return; } if(e.target.closest&&e.target.closest('[data-megapanel]')){ kill(); } });\n  d2.on(root,'mouseout',(e)=>{ const from=e.target.closest&&(e.target.closest('[data-mega]')||e.target.closest('[data-megapanel]')); if(!from) return; const to=e.relatedTarget; const stay=to&&to.closest&&(to.closest('[data-mega]')||to.closest('[data-megapanel]')); if(!stay) scheduleClose(); });\n  d2.on('[data-mega]','click',(e)=>{ const t=e.target.closest('[data-mega]'); if(!t) return; e.preventDefault(); const key=t.getAttribute('data-mega'); if(t.classList.contains('mopen')) closeAll(); else openMenu(key); });\n  d2.on(root,'click',(e)=>{ if(!(e.target.closest&&(e.target.closest('[data-mega]')||e.target.closest('[data-megapanel]')))) closeAll(); });\n  d2.on(root,'keydown',(e)=>{ if(e.key==='Escape'||e.keyCode===27) closeAll(); });\n}\nfunction drawerSetup(d2){\n  const root = d2.root || (typeof document!=='undefined'?document:null); if(!root) return;\n  const dr = function(){ return root.querySelector('[data-drawer]'); };\n  const close = function(){ const d=dr(); if(d) d.classList.remove('open'); };\n  d2.on('[data-burger]','click',function(e){ e.preventDefault(); const d=dr(); if(d) d.classList.toggle('open'); });\n  d2.on('[data-drawer-close]','click',function(e){ e.preventDefault(); close(); });\n  d2.on(root,'keydown',function(e){ if(e.key==='Escape'||e.keyCode===27) close(); });\n}\nvar REVEAL_CLEAN=null;\nfunction setupReveal(d2){\n  const wrap = d2.$('#scrollwrap');\n  const root = d2.root || (wrap && wrap.parentNode) || (typeof document!=='undefined'?document:null);\n  if(!root) return;\n  const all = () => Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n  const items = all();\n  if(!items.length) return;\n  const reduce = typeof window!=='undefined' && window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  if(reduce){ items.forEach(el=>el.classList.add('in')); return; }\n  const vhOf = () => (wrap ? wrap.clientHeight : (typeof window!=='undefined'?window.innerHeight:900)) || 900;\n  const wtop = () => wrap ? wrap.getBoundingClientRect().top : 0;\n  const check = () => { const lim = wtop() + vhOf()*0.9; all().forEach(el=>{ if(!el.classList.contains('in') && el.getBoundingClientRect().top < lim) el.classList.add('in'); }); };\n  check();\n  if(REVEAL_CLEAN){ try{REVEAL_CLEAN();}catch(e){} }\n  REVEAL_CLEAN = wrap ? d2.on(wrap,'scroll',check) : (typeof window!=='undefined'? d2.on(window,'scroll',check) : null);\n}\nfunction isoTile(hue){ return `<svg class=\"iso\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"${hue}\" opacity=\"0.34\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"${hue}\" opacity=\"0.16\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"${hue}\" opacity=\"0.24\"/></g></svg>`; }\nfunction renderHome(d2, esc, dd){\n  const hs = (dd('cms-home-sectionsDataSet')).filter(s=>s.ativo!==false).sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n  const D = {\n    lv: (dd('cms-leversDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n    inds: (dd('cms-industriesDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n    logos: (dd('cms-logosDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n    prods: (dd('cms-productsDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n    rts: (dd('cms-runtimesDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0))\n  };\n  const parts = ['<div class=\"d-atmos\"></div>'];\n  hs.forEach(s=>{ parts.push(dobra(s, D, esc, d2)); });\n  return parts.join('');\n}\nfunction dobra(s, D, esc, d2){\n  const __OV = ({\n    'hero + iso-shader': {eyebrow:'Necessidade elevada à produção.', headline:'Da necessidade à produção.', subhead:'O resto é demo.', cta_label:'', cta_href:''},\n    'metric band': {eyebrow:'Alavancas', headline:'Antes de produção, todo número é promessa.', subhead:''},\n    'logo-wall': {headline:'Já estão no ar.', subhead:''},\n    'split statement': {headline:'O difícil nunca foi a ideia.', subhead:'Foi chegar em produção.'},\n    'two-column': {headline:'Construímos com você. Não pra você.', subhead:'Semanas, não trimestres. Produção, não slides.'},\n    'runtime triad': {headline:'Em semanas, no ar.', subhead:''},\n    'industry grid 3x3': {headline:'O setor muda. A distância até produção, não.', subhead:''},\n    'case carousel': {headline:'Não são cases. Estão no ar.', subhead:'Cada um tem endereço. Abra qualquer um.'},\n    'product grid 4x2': {eyebrow:'A plataforma', headline:'Não é um stack. É uma runtime.', subhead:'Uma linguagem. Todo o software. Dados, telas, lógica, eventos, integrações e IA — tudo dito do mesmo jeito.'},\n    'code / mcp': {headline:'Feito para gente. Aberto a agentes.', subhead:'O mesmo builder de sempre — do seu lado, não no seu lugar.'},\n    'closing cta': {headline:'Chega de demo.', subhead:'Traga a necessidade. Devolvemos rodando.', cta_label:'Botar no ar', cta_href:'/consultoria'}\n  })[s.tipo];\n  if(__OV) s = Object.assign({}, s, __OV);\n  const clean = t => esc(String(t==null?'':t).replace(/\\s*\\[PH[^\\]]*\\]/g,''));\n  const eb = `<div class=\"d-eyebrow stag\"><span class=\"k\"></span>${esc(s.eyebrow||'')}</div>`;\n  const cta = s.cta_label?`<div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"${esc(s.cta_href||'#')}\">${esc(s.cta_label)} →</button></div>`:'';\n  const sub = s.subhead?`<div class=\"d-sub stag\">${esc(s.subhead)}</div>`:'';\n  switch(s.tipo){\n    case 'hero + iso-shader': return '<section class=\"d2hero-sec\"><div class=\"d2hero\">'+heroRender(d2)+'</div></section>';\n    case 'metric band': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-levers stag\">${D.lv.map(m=>`<div class=\"d-lever\"><div class=\"v\">${esc(m.valor)}${m.unidade?`<em>${esc(m.unidade)}</em>`:''}</div><div class=\"l\">${esc(m.label)}</div></div>`).join('')}</div></section>`;\n    case 'logo-wall': { const L=D.logos.filter(l=>l&&l.fileUrl&&l.publico!==false); const row=L.map(l=>`<img src=\"${esc(l.fileUrl)}\" alt=\"${esc(l.label||l.name||'')}\" loading=\"lazy\"/>`).join(''); return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-logowall stag\"><div class=\"d-mq\">${row}${row}</div></div></section>`; }\n    case 'split statement': return `<section class=\"d-sec d-tese\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}</section>`;\n    case 'two-column': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">Com você</div><h3>Do seu lado, no seu problema.</h3><p>Um time entra no seu contexto e escreve. O que se escreve já nasce rodando.</p></div><div class=\"d-face plat\"><div class=\"tag\">A runtime</div><h3>Uma runtime, não um stack.</h3><p>Data² é a runtime. UI, Rush, Connect, Domain e o resto são componentes dela — o que segura o sistema em produção.</p></div></div></section>`;\n    case 'runtime triad': { const steps=[{n:'01',h:'Embarcamos no seu time',p:'Um squad sênior entra no seu problema em dias, não meses — começando pelo resultado de negócio.'},{n:'02',h:'Entregamos em produção',p:'Em 2 a 4 semanas o sistema está rodando de verdade. Não é protótipo, não é slide.'},{n:'03',h:'No ar, de verdade.',p:'Endereço próprio, tráfego real. Não para quando a demo acaba — fica rodando em produção.'}]; return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-flow stag\">${steps.map(t=>`<div class=\"d-step\"><div class=\"d-node\"></div><div class=\"n\">${t.n}</div><h4>${t.h}</h4><p>${t.p}</p></div>`).join('')}</div><div class=\"d-rts stag\">${D.rts.map(r=>`<span class=\"d-rt\" style=\"--accent:${esc(r.accent||'#3A7BFF')}\"><b>${esc(r.name)}</b> · ${esc(r.papel)}</span>`).join('')}</div></section>`; }\n    case 'industry grid 3x3': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-inds stag\">${D.inds.map(i=>{const al=Array.isArray(i.alavancas)?(i.alavancas.find(x=>!/\\[PH\\]/.test(x))||i.alavancas[0]||''):'';const hue=esc(i.hue||'#3A7BFF');return `<div class=\"d-ind\" data-nav data-href=\"/industrias/${esc(i.slug)}\" style=\"--accent:${hue}\">${isoTile(hue)}<div class=\"name\"><span class=\"chip\" style=\"background:${hue}\"></span>${esc(i.name_pt)}</div><div class=\"dor\">${esc(i.dor)}</div>${i.construimos?`<div class=\"build\">${esc(i.construimos)}</div>`:''}<div class=\"lev\">${clean(al)}</div></div>`;}).join('')}</div></section>`;\n    case 'case carousel': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-carslot stag\">${d2.render('www@nUYyYfWeNHEK6YeaD5kcd',{},{key:'homeCasos',style:'display:block;width:100%;height:640px'})}</div></section>`;\n    case 'product grid 4x2': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-prods stag\">${D.prods.map(p=>`<div class=\"d-prod\"><div class=\"pn\"><span class=\"chip\" style=\"background:${esc(p.accent||'#3A7BFF')}\"></span>${esc(p.name)}${p.status==='em-breve'?'<span class=\"soon\">em breve</span>':''}</div><div class=\"pt\">${esc(p.tagline)}</div></div>`).join('')}</div>${cta}</section>`;\n    case 'data-framework diagram': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">Origem · DataSource</div><h4>Tabela, API ou IA</h4><p>De onde o dado vem é detalhe de implementação — tabela própria, API externa ou resposta de IA.</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">Acesso · DataSet</div><h4>Uma só interface</h4><p>Busca semântica, filtro e agregação sobre qualquer origem. A UI fala com o DataSet, nunca com a origem.</p></div><div class=\"d-dfcard\"><div class=\"lab\">Propriedade</div><h4>O dado é seu</h4><p>Nada sai do seu domínio. Own-your-data por construção, com governança e auditoria.</p></div></div></section>`;\n    case 'code / mcp': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-slots stag\"><div class=\"d-slot\"><div class=\"st\">Do seu lado</div><h4>Do seu lado, não no seu lugar.</h4><p>O mesmo builder de sempre. Gente e agentes na mesma superfície — você no comando.</p></div><div class=\"d-slot\"><div class=\"st\">Prova viva</div><h4>Você está dentro da prova.</h4><p>Este site roda na própria Data². Sem ensaio, sem mock.</p></div></div></section>`;\n    case 'closing cta': return `<section class=\"d-sec d-close\" data-reveal>${s.eyebrow?`<div class=\"d-eyebrow stag\" style=\"justify-content:center\"><span class=\"k\"></span>${esc(s.eyebrow)}</div>`:''}<h2 class=\"d-head big stag\">${esc(s.headline)}</h2>${sub}<div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"${esc(s.cta_href||'/consultoria')}\">${esc(s.cta_label||'Botar no ar')} →</button> <button class=\"d-btn\" data-nav data-href=\"/plataforma\" style=\"background:transparent;color:var(--ink-hi);border:1px solid var(--hairline);margin-left:10px\">Ver a plataforma →</button></div></section>`;\n    default: return '';\n  }\n}\nfunction renderPlataforma(d2, esc, dd){\n  const prods = (dd('cms-productsDataSet')).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n  const rts = (dd('cms-runtimesDataSet')).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n  const rtHref = {'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  const map = `<div class=\"p-map\" data-reveal><div class=\"p-rail\"></div><div class=\"p-flow\"><div class=\"p-stage stag\"><div class=\"p-node n1\"></div><div class=\"p-st-n\">Intenção</div><div class=\"p-st-d\">Você — ou um agente — descreve o que o sistema precisa fazer.</div></div><div class=\"p-stage stag\"><div class=\"p-node n2\"></div><div class=\"p-st-n\">Builder</div><div class=\"p-st-d\">O builder de sempre, do seu lado — e também aberto a agentes, com validação em tempo de escrita.</div></div><div class=\"p-stage stag\"><div class=\"p-node n3\"></div><div class=\"p-st-n\">data2-lang</div><div class=\"p-st-d\">Uma só linguagem descreve UI, dados, fluxos e regras — todo o runtime a fala.</div></div><div class=\"p-stage stag\"><div class=\"p-node n4\"></div><div class=\"p-st-n\">Componentes</div><div class=\"p-st-d\">Rush escuta, Connect integra, Domain decide — o motor que sustenta o sistema.</div></div><div class=\"p-stage stag\"><div class=\"p-node n5\"></div><div class=\"p-st-n\">Produção</div><div class=\"p-st-d\">Rodando de verdade, sob as suas regras — e o dado nunca sai do seu domínio.</div></div></div><div class=\"p-triad stag\">${rts.map(r=>`<span class=\"p-rt\" style=\"--accent:${esc(r.accent||'#3A7BFF')}\"><b>${esc(r.name)}</b> · ${esc(r.papel||'')}</span>`).join('')}</div><div class=\"p-substrate stag\"><span class=\"p-sub-k\"></span><div><div class=\"p-sub-t\">Data Framework</div><div class=\"p-sub-d\">A fundação por baixo de tudo: DataSource → DataSet, busca semântica e own-your-data por construção.</div></div></div></div>`;\n  const prodCards = `<div class=\"d-prods stag\">${prods.map(p=>`<div class=\"d-prod\"><div class=\"pn\"><span class=\"chip\" style=\"background:${esc(p.accent||'#3A7BFF')}\"></span>${esc(p.name)}${p.status==='em-breve'?'<span class=\"soon\">em breve</span>':''}</div><div class=\"pt\">${esc(p.description||p.tagline||'')}</div></div>`).join('')}</div>`;\n  const rtCards = `<div class=\"p-rtcards stag\">${rts.map(r=>{const ac=esc(r.accent||'#3A7BFF');return `<div class=\"p-rtcard\" data-nav data-href=\"${esc(rtHref[r.name]||'/plataforma')}\" style=\"--accent:${ac}\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:${ac}\"></span>${esc(r.name)}</div><div class=\"p-rtc-p\">${esc(r.papel||'')}</div><div class=\"p-rtc-d\">${esc(r.description||'')}</div></div>`;}).join('')}</div>`;\n  const df = `<div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">Origem · DataSource</div><h4>Tabela, API ou IA</h4><p>De onde o dado vem é detalhe de implementação — tabela própria, API externa ou resposta de IA.</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">Acesso · DataSet</div><h4>Uma só interface</h4><p>Busca semântica, filtro e agregação sobre qualquer origem. A UI fala com o DataSet, nunca com a origem.</p></div><div class=\"d-dfcard\"><div class=\"lab\">Propriedade</div><h4>O dado é seu</h4><p>Nada sai do seu domínio. Own-your-data por construção, com governança e auditoria por policy.</p></div></div>`;\n  const agent = `<div class=\"p-agent stag\"><div class=\"p-acard\"><div class=\"p-ac-k\">01</div><h4>Do seu lado</h4><p>O mesmo builder de sempre. Quem constrói é você — agentes entram como ajuda, não no seu lugar.</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">02</div><h4>Validação em tempo de escrita</h4><p>Cada mudança é checada quando é escrita — os footguns são barrados antes de virar bug em produção.</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">03</div><h4>Um sistema só</h4><p>UI, dados, fluxos e integrações na mesma linguagem — o sistema inteiro, não um fragmento.</p></div></div>`;\n  return `<span class=\"back\" data-nav data-href=\"/\">← Início</span><section class=\"p-hero\"><div class=\"d-eyebrow\"><span class=\"k\"></span>A plataforma · nós e fluxos</div><h1 class=\"d-head big\">Não é um stack. É uma runtime.</h1><div class=\"d-sub\">Uma linguagem. Todo o software. Dados, telas, lógica, eventos, integrações e IA — tudo dito do mesmo jeito.</div><div class=\"d-cta\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section><section class=\"d-sec\"><div class=\"d-eyebrow\"><span class=\"k\"></span>O mapa</div><h2 class=\"d-head\">Como um sistema nasce.</h2><div class=\"d-sub\">Da intenção à produção, num fluxo contínuo — cada nó é uma capacidade real do runtime.</div>${map}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Os produtos</div><h2 class=\"d-head stag\">Oito produtos, um só runtime.</h2><div class=\"d-sub stag\">Cada produto é uma face do mesmo motor — não SDKs soltos que você costura.</div>${prodCards}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Os componentes</div><h2 class=\"d-head stag\">Três motores, um sistema.</h2><div class=\"d-sub stag\">Rush escuta o mundo, Connect alcança o mundo, Domain decide. Juntos, sustentam o que foi construído.</div>${rtCards}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Data Framework</div><h2 class=\"d-head stag\">O dado é seu — por construção.</h2><div class=\"d-sub stag\">A origem é detalhe; o acesso é uniforme; a propriedade é sua.</div>${df}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Agent-native</div><h2 class=\"d-head stag\">Feito para gente. Aberto a agentes.</h2><div class=\"d-sub stag\">O mesmo builder de sempre — do seu lado, não no seu lugar. Também aberto a agentes, com validação em tempo de escrita.</div>${agent}</section><section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Do intent à produção — no seu domínio.</h2><div class=\"d-sub stag\">Construímos com você — semanas, não trimestres.</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section>`;\n}\nfunction d2RtCards(esc, dd){\n  var rtHref={'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Os componentes</div><h2 class=\"d-head stag\">Três motores, um sistema.</h2><div class=\"d-sub stag\">Rush escuta o mundo, Connect alcança o mundo, Domain decide.</div><div class=\"p-rtcards stag\">'+rts.map(function(r){var ac=esc(r.accent||'#3A7BFF');return '<div class=\"p-rtcard\" data-nav data-href=\"'+esc(rtHref[r.name]||'/plataforma')+'\" style=\"--accent:'+ac+'\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:'+ac+'\"></span>'+esc(r.name)+'</div><div class=\"p-rtc-p\">'+esc(r.papel||'')+'</div><div class=\"p-rtc-d\">'+esc(r.description||'')+'</div></div>';}).join('')+'</div></section>';\n}\nfunction d2ConceptHero(esc, hue, eyebrow, name, dor){\n  return '<span class=\"back\" data-nav data-href=\"/plataforma\">← A plataforma</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h1 class=\"i-name stag\">'+esc(name)+'</h1><div class=\"i-dor stag\"><b>'+esc(dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n}\nfunction d2Close(esc, head, sub){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section>';\n}\nfunction d2Faces(esc, eyebrow, head, a, b){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">'+esc(a.tag)+'</div><h3>'+esc(a.h)+'</h3><p>'+esc(a.p)+'</p></div><div class=\"d-face plat\"><div class=\"tag\">'+esc(b.tag)+'</div><h3>'+esc(b.h)+'</h3><p>'+esc(b.p)+'</p></div></div></section>';\n}\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction d2IFlow(esc, hue, nodes){\n  return '<div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+nodes.length+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes.map(function(n){return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+esc(n.c||hue)+'\"></div><div class=\"i-pn\">'+esc(n.n)+'</div><div class=\"i-pr\">'+esc(n.d||'')+'</div></div>';}).join('')+'</div>';\n}\nfunction renderComoFunciona(d2, esc, dd){\n  var hue='#3A7BFF';\n  var stages=[{n:'n1',t:'Intenção',d:'Você — ou um agente — descreve em linguagem natural o que o sistema precisa fazer.'},{n:'n2',t:'Builder',d:'O builder de sempre, do seu lado — e também aberto a agentes, com validação em tempo de escrita.'},{n:'n3',t:'data2-lang',d:'Uma só linguagem descreve UI, dados, fluxos e regras. Todo o runtime a fala.'},{n:'n4',t:'Componentes',d:'Rush escuta, Connect integra, Domain decide — o motor que sustenta o sistema.'},{n:'n5',t:'Produção',d:'Rodando de verdade, sob as suas regras. O dado nunca sai do seu domínio.'}];\n  var map='<section class=\"d-sec\"><div class=\"d-eyebrow\"><span class=\"k\"></span>O caminho</div><h2 class=\"d-head\">Da intenção à produção.</h2><div class=\"d-sub\">Um fluxo contínuo — cada nó é uma capacidade real do runtime.</div><div class=\"p-map\" data-reveal><div class=\"p-rail\"></div><div class=\"p-flow\">'+stages.map(function(s){return '<div class=\"p-stage stag\"><div class=\"p-node '+s.n+'\"></div><div class=\"p-st-n\">'+esc(s.t)+'</div><div class=\"p-st-d\">'+esc(s.d)+'</div></div>';}).join('')+'</div></div></section>';\n  return d2ConceptHero(esc,hue,'Plataforma · Como funciona','Construímos com você. Não pra você.','Semanas, não trimestres. Produção, não slides. Um time embarca no seu problema e entrega rodando.')+map+d2Faces(esc,'A virada','Por que é diferente.',{tag:'Antes',h:'Times, SDKs e integração',p:'Meses costurando frameworks, bancos, filas e telas — e um sistema que ninguém entende por inteiro.'},{tag:'No Data²',h:'Um runtime, uma conversa',p:'A intenção vira sistema em dias. Um runtime só, uma linguagem só.'})+d2LeverSec(esc,'O que muda','Em números.',['30 dias do intent à produção','sistemas em produção','menos retrabalho','runtime único'])+d2RtCards(esc,dd)+d2Close(esc,'Descreva. E veja nascer.','Construímos com você — semanas, não trimestres.');\n}\nfunction renderDataFramework(d2, esc, dd){\n  var hue='#1FD48F';\n  var df='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Origem → Acesso → Propriedade</div><h2 class=\"d-head stag\">Três camadas, um princípio.</h2><div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">Origem · DataSource</div><h4>Tabela, API ou IA</h4><p>De onde o dado vem é detalhe de implementação — tabela própria, API externa ou resposta de IA.</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">Acesso · DataSet</div><h4>Uma só interface</h4><p>Busca semântica, filtro e agregação sobre qualquer origem. A UI fala com o DataSet, nunca com a origem.</p></div><div class=\"d-dfcard\"><div class=\"lab\">Propriedade</div><h4>O dado é seu</h4><p>Nada sai do seu domínio. Own-your-data por construção, com governança e auditoria por policy.</p></div></div></section>';\n  var flow='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O pipeline</div><h2 class=\"d-head stag\">Como o dado flui.</h2>'+d2IFlow(esc,hue,[{n:'DataSource',d:'a origem',c:hue},{n:'DataSet',d:'acesso uniforme',c:hue},{n:'Consumo',d:'UI · agente · fluxo',c:hue}])+'</section>';\n  return d2ConceptHero(esc,hue,'Plataforma · Data Framework','O dado é seu.','DataSource → DataSet → propriedade. A origem é detalhe; o acesso é uniforme; o dado nunca sai do seu domínio.')+df+flow+d2Faces(esc,'A tese','Own-your-data por construção.',{tag:'SaaS tradicional',h:'Seu dado, nuvem de outro',p:'Você aluga acesso ao seu próprio dado, preso ao modelo de quem vendeu a ferramenta.'},{tag:'No Data²',h:'Seu dado, seu domínio',p:'A propriedade é sua por construção — governança, auditoria e portabilidade sem letra miúda.'})+d2LeverSec(esc,'O que fica','Em números.',['origens unificadas','busca semântica nativa','dado no seu domínio','governança por policy'])+d2RtCards(esc,dd)+d2Close(esc,'O dado é seu. Ponto.','Construímos com você — e o dado nunca sai do seu domínio.');\n}\nfunction renderAgentNative(d2, esc, dd){\n  var hue='#E93355';\n  var agent='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Agent-native</div><h2 class=\"d-head stag\">Do seu lado, não no seu lugar.</h2><div class=\"p-agent stag\"><div class=\"p-acard\"><div class=\"p-ac-k\">01</div><h4>Do seu lado</h4><p>O mesmo builder de sempre. Quem constrói é você — agentes entram como ajuda, não no seu lugar.</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">02</div><h4>Validação em tempo de escrita</h4><p>Cada mudança é checada quando é escrita — os footguns são barrados antes de virar bug em produção.</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">03</div><h4>Um sistema só</h4><p>UI, dados, fluxos e integrações na mesma linguagem — o sistema inteiro, não um fragmento.</p></div></div></section>';\n  return d2ConceptHero(esc,hue,'Plataforma · Agent-native','Feito para gente. Aberto a agentes.','O mesmo builder de sempre — do seu lado, não no seu lugar. Também aberto a agentes, com validação em tempo de escrita.')+agent+d2Faces(esc,'O que isso te dá','Velocidade sem caixa-preta.',{tag:'Black box',h:'Mágica que ninguém audita',p:'Ferramentas de IA que geram código opaco — rápido de começar, impossível de manter e confiar.'},{tag:'No Data²',h:'Rápido e legível',p:'Você constrói sobre um runtime tipado e validado — e agentes ajudam, do seu lado. Tudo legível, tudo auditável.'})+d2LeverSec(esc,'O que muda','Em números.',['mais rápido do intent ao ar','sem código opaco','validado em tempo de escrita','um só runtime'])+d2RtCards(esc,dd)+d2Close(esc,'Você constrói. Agentes ajudam.','Construímos com você — semanas, não trimestres.');\n}\nfunction renderData2Lang(d2, esc, dd){\n  var hue='#EBC43F';\n  var flow='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Uma língua, quatro domínios</div><h2 class=\"d-head stag\">Tudo na mesma linguagem.</h2><div class=\"d-sub stag\">UI, dados, fluxos e regras descritos de um jeito só — todo o runtime a fala.</div>'+d2IFlow(esc,hue,[{n:'UI',d:'as telas',c:hue},{n:'Dados',d:'o modelo',c:hue},{n:'Fluxos',d:'a automação',c:hue},{n:'Regras',d:'as policies',c:hue}])+'</section>';\n  return d2ConceptHero(esc,hue,'Plataforma · data2-lang','Data Runtime No Code.','No-code sem aspas. Escrito — não embrulhado. Uma linguagem, primitivos nativos, runtime de verdade — não wrapper, não codegen.')+flow+d2Faces(esc,'A tese','Uma língua, não dez.',{tag:'Stack tradicional',h:'Dez linguagens, dez costuras',p:'Front, back, banco, fila, regra — cada camada numa tecnologia, cada emenda um ponto de falha.'},{tag:'No Data²',h:'Uma só linguagem',p:'Uma descrição única do sistema inteiro. Legível para o negócio, executável pelo runtime.'})+d2LeverSec(esc,'O que fica','Em números.',['linguagens no stack','superfície de erro','sistema legível','tempo de onboarding'])+d2RtCards(esc,dd)+d2Close(esc,'Uma linguagem. Todo o sistema.','Construímos com você — semanas, não trimestres.');\n}\n\n/* ===== inline immersive experiences (domain / barramento) ===== */\nfunction expDomainHTML(){\n  var F=[\n      ['decisao','Raciocínio','decide com o porquê','texto · regras','M2 4h12M2 8h9M2 12h11'],\n      ['voz','Voz in/out','ouve e responde falando','STT+TTS · PT·EN·ES','M2 8h2l2-5 3 10 2-6 2 3h2'],\n      ['imagem','Imagem','gera a partir do texto','difusão · sob demanda','M2 3h12v10H2z M5 7l3 3 3-4'],\n      ['visao','Visão','lê documentos e fotos','OCR + detecção','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z'],\n      ['embeddings','Busca','encontra por significado','vetor · kNN','M7 7a4 4 0 105 5 M11 11l3 3'],\n      ['streaming','Streaming','tempo real, 128k','~2000 tok/s','M2 6h14M2 10h16M2 14h10']\n    ];\n    return '<section class=\"expsec\" data-exp=\"domain\"><div class=\"d2exp\">'+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"aura\" data-aura></div>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> <svg class=\"d2wm-mini\" aria-hidden=\"true\"><use href=\"#d2wm\"/></svg> · Domain</div>'+\n          '<h1 class=\"h1\">Inteligência multimodal. <span class=\"g\">Nativa no runtime.</span></h1>'+\n          '<div class=\"h1s\">Texto, voz, imagem e visão — uma decisão auditável, na hora. Escolha a capacidade: ela acontece ao vivo.</div></div>'+\n        '<div class=\"seed\">domain · engine<br>idiomas · <b>PT·EN·ES·+40</b><br>latência · <b data-lat>17</b>ms</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> Decisão</div>'+\n          '<div class=\"st-box\"><canvas class=\"demo\" data-demo width=\"880\" height=\"500\"></canvas><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" style=\"color:#c98fbf\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n      '</div>'+\n  '</div></section>';\n}\n\nfunction expBarramentoHTML(){\n    var F=[\n      ['webhook','Rush · Inbound','escuta cada evento','webhook · SIP · cron','M3 9h8M8 5l3 4-3 4'],\n      ['entrega','Connect · Outbound','entrega em sistemas','HTTP · auth · retry','M3 9h8M8 5l3 4-3 4'],\n      ['rota','Roteamento','1 evento → N destinos','fan-out','M4 9h4M8 9l4-4M8 9l4 4M8 9l4 0'],\n      ['transforma','Transformação','molda o payload no caminho','map · shape','M3 6h8M3 12h8M11 4l2 2-2 2'],\n      ['retry','Resiliência','retry + backoff auditável','entrega garantida','M13 9a4 4 0 11-1.2-2.9M13 4v3h-3'],\n      ['tempo','Tempo real','throughput ao vivo','eventos/s','M2 12l3-5 3 3 3-6 3 8']\n    ];\n    return '<section class=\"expsec\" data-exp=\"barramento\"><div class=\"d2exp\">'+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"pipe\" data-pipe></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"d1\"></span> <svg class=\"d2wm-mini\" aria-hidden=\"true\"><use href=\"#d2wm\"/></svg> · Rush <span class=\"arw\">+</span> Connect <span class=\"d2\"></span> · Barramento</div>'+\n          '<h1 class=\"h1\">Entra evento. <span class=\"g\">Sai integração.</span></h1>'+\n          '<div class=\"h1s\">Fontes de todo tipo entram pelo Rush; o barramento transporta; o Connect entrega em qualquer sistema. Escolha um fluxo: ele acontece ao vivo.</div></div>'+\n        '<div class=\"seed\">barramento · in→out<br>fontes · <b>webhook·SIP·cron·WABA</b><br>entrega · <b class=\"c\">at-least-once</b></div>'+\n        '<div class=\"nodelbl\" data-lblR><div class=\"t\" style=\"color:#b79cf5\">Rush</div><div class=\"s\">escuta · inbound</div></div>'+\n        '<div class=\"nodelbl\" data-lblC style=\"text-align:right\"><div class=\"t\" style=\"color:#8fe6e6\">Connect</div><div class=\"s\">entrega · outbound</div></div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span style=\"width:7px;height:7px;border-radius:50%;background:#8448FA;display:inline-block\"></span> Webhook</div>'+\n          '<div class=\"st-box\" data-box></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#9f9ad6\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">Muitas <b>fontes</b> · um barramento · entrega <b class=\"c\">integrada</b> em muitos sistemas</div>'+\n      '</div>'+\n  '</div></section>';\n  }\n\nfunction expDomainMount(d2, root){\n\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]'), aura=root.querySelector('[data-aura]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), demo=root.querySelector('[data-demo]'), dov=root.querySelector('[data-dov]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1, R=1;\n    var pts=[];\n    function build(){ pts=[]; var step=Math.max(26, Math.round(CBW/16)); var half=CBW/2;\n      for(var gy=-half+step/2; gy<half; gy+=step){ for(var gx=-half+step/2; gx<half; gx+=step){ var d=Math.hypot(gx,gy); if(d>half-6) continue; pts.push({x:gx,y:gy,a:Math.atan2(gy,gx),d:d}); } } R=half; }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.30; CY=H*0.46;\n      core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      aura.style.left=(CX-280)+'px'; aura.style.top=(CY-280)+'px';\n      stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); build(); }\n    layout(); d2.on(window,'resize',layout);\n\n    // mouse in core-local coords (0,0 = center); rest gently orbits\n    var mx=0,my=0,tmx=9999,tmy=0, hasMouse=false, energy=0, t0=performance.now(), crun=true, rafc=null;\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); tmx=(e.clientX-r.left)-CBW/2; tmy=(e.clientY-r.top)-CBH/2; hasMouse=true;\n      aura.style.transform='translate('+(tmx*0.10).toFixed(0)+'px,'+(tmy*0.10).toFixed(0)+'px)'; });\n    d2.on(st,'pointerleave',function(){ hasMouse=false; aura.style.transform=''; });\n    function cframe(t){ if(!core.isConnected) return; if(!crun)return; var tt=(t-t0)/1000;\n      // target point = mouse, or a slow orbiting point when idle (keeps it alive, satisfying)\n      var gx,gy; if(hasMouse){ mx+=(tmx-mx)*0.12; my+=(tmy-my)*0.12; gx=mx; gy=my; } else { gx=Math.cos(tt*0.5)*R*0.42; gy=Math.sin(tt*0.5*1.1)*R*0.32; mx+=(gx-mx)*0.05; my+=(gy-my)*0.05; }\n      if(energy>0)energy-=0.012;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      fx.globalCompositeOperation='lighter';\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; var dx=mx-p.x, dy=my-p.y; var dd=Math.hypot(dx,dy);\n        var ta=Math.atan2(dy,dx); // smooth angle lerp\n        var diff=Math.atan2(Math.sin(ta-p.a),Math.cos(ta-p.a)); p.a+=diff*0.14;\n        var inten=Math.max(0, 1-dd/(R*0.9)); inten=inten*inten; var glow=inten+energy*0.5;\n        var len=5+inten*15+energy*4; var al=0.10+glow*0.8; if(al>1)al=1;\n        var r2=250, g2=72+Math.round(glow*120), b2=220;\n        fx.strokeStyle='rgba('+r2+','+g2+','+b2+','+al.toFixed(3)+')'; fx.lineWidth=1.1+inten*0.9; fx.lineCap='round';\n        var cx=Math.cos(p.a), cy=Math.sin(p.a);\n        fx.beginPath(); fx.moveTo(p.x-cx*len*0.5, p.y-cy*len*0.5); fx.lineTo(p.x+cx*len*0.5, p.y+cy*len*0.5); fx.stroke();\n      }\n      // core node at the focus\n      var pulse=0.5+0.5*Math.sin(tt*1.6);\n      var g=fx.createRadialGradient(mx,my,0,mx,my,40+energy*30); g.addColorStop(0,'rgba(255,180,240,'+(0.5+energy*0.4)+')'); g.addColorStop(1,'rgba(250,72,220,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(mx,my,40+energy*30,0,6.28); fx.fill();\n      fx.fillStyle='rgba(255,225,248,'+(0.85)+')'; fx.beginPath(); fx.arc(mx,my,3.5+pulse*1.5+energy*3,0,6.28); fx.fill();\n      fx.restore(); fx.globalCompositeOperation='source-over';\n      rafc=requestAnimationFrame(cframe);\n    }\n    if(!reduce){ rafc=requestAnimationFrame(cframe); } else { /* static: point outward */ fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2); pts.forEach(function(p){ fx.strokeStyle='rgba(250,110,220,0.4)'; fx.lineWidth=1.2; var cx=Math.cos(p.a),cy=Math.sin(p.a); fx.beginPath(); fx.moveTo(p.x-cx*5,p.y-cy*5); fx.lineTo(p.x+cx*5,p.y+cy*5); fx.stroke(); }); fx.restore(); }\n    var ioC=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!crun&&!reduce){crun=true;t0=performance.now();rafc=requestAnimationFrame(cframe);} } else { crun=false; if(rafc)cancelAnimationFrame(rafc); } }); },{threshold:.02}); ioC.observe(st);\n    function setEnergy(){ energy=1; }\n\n    // ---- demo stage ----\n    var dx=demo.getContext('2d'), SW=880,SH=500, active='decisao', dtimers=[], demoRaf=null;\n    function clearD(){ dtimers.forEach(clearTimeout); dtimers=[]; dov.innerHTML=''; dx.clearRect(0,0,SW,SH); if(demoRaf)cancelAnimationFrame(demoRaf); demoRaf=null; }\n    var NAMES={decisao:'Decisão',voz:'Voz · entra e sai',imagem:'Geração de imagem',visao:'Visão computacional',embeddings:'Busca semântica',streaming:'Streaming'};\n    function run(k){ active=k; clearD(); setEnergy(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      if(k==='decisao'){ dov.innerHTML='<div class=\"tw\" data-tw></div>'; var el=dov.querySelector('[data-tw]'); var full='› cruzando sinais do caso…\\\\n› regra auditável aplicada\\\\n\\\\nDECISÃO: reter cliente — oferta + CS hoje.'; var i=0; var iv=setInterval(function(){ if(active!=='decisao'){clearInterval(iv);return;} i++; el.innerHTML=full.slice(0,i).replace(/\\\\n/g,'<br>')+'<span class=\"cur\"></span>'; if(i>=full.length){clearInterval(iv); el.innerHTML=full.replace(/\\\\n/g,'<br>');} },26); }\n      else if(k==='voz'){ dov.innerHTML='<div class=\"bub in mono\">▸ entra · “Cadê meu pedido 8421?”</div><div class=\"bub out mono\">“Sai amanhã 14h — rastreio enviado.”</div>';\n        dtimers.push(setTimeout(function(){ if(active==='voz')dov.querySelector('.bub.in').classList.add('show'); },250)); dtimers.push(setTimeout(function(){ if(active==='voz')dov.querySelector('.bub.out').classList.add('show'); },1500));\n        var vt0=performance.now(); function wv(t){ if(!demo.isConnected) return; if(active!=='voz')return; var y=SH*0.72; dx.clearRect(0,SH*0.55,SW,SH*0.45); dx.beginPath(); for(var x=0;x<=SW;x+=6){ var e=Math.sin(x*0.02+(t-vt0)*0.006)*0.5+Math.sin(x*0.05-(t-vt0)*0.009)*0.3; var amp=46*(0.4+0.6*Math.abs(Math.sin((t-vt0)*0.002+x*0.002))); if(x===0)dx.moveTo(x,y+e*amp); else dx.lineTo(x,y+e*amp);} var g=dx.createLinearGradient(0,0,SW,0); g.addColorStop(0,'rgba(250,72,220,.3)');g.addColorStop(.5,'#FA48DC');g.addColorStop(1,'rgba(77,207,250,.7)'); dx.strokeStyle=g; dx.lineWidth=2.4; dx.stroke(); demoRaf=requestAnimationFrame(wv);} demoRaf=requestAnimationFrame(wv); }\n      else if(k==='imagem'){ dov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:0;top:-2px;font-size:11px;color:#8a848c\">prompt · “frasco de perfume, luz suave”</div>'; var it0=performance.now(); function img(t){ if(!demo.isConnected) return; if(active!=='imagem')return; var p=Math.min(1,(t-it0)/2600); var BS=200,bx=SW/2-BS/2,by=SH/2-BS/2+10; var res=Math.max(5,Math.round(5+(1-p)*42)); var cell=Math.ceil(BS/Math.ceil(BS/res)); for(var y=0;y<BS;y+=cell){ for(var x=0;x<BS;x+=cell){ var ddx=(x+cell/2-BS/2)/(BS*0.42),ddy=(y+cell/2-BS/2)/(BS*0.42); var dd=Math.sqrt(ddx*ddx+ddy*ddy*1.6); var body=Math.max(0,1-Math.abs(dd-0.5)*2.4)+(dd<0.36?0.5:0); var nz=(1-p)*(Math.random()-0.5)*1.3; var v=Math.max(0,Math.min(1,body+nz)); dx.fillStyle='rgb('+Math.round(60+v*195)+','+Math.round(14+v*60)+','+Math.round(80+v*150)+')'; dx.fillRect(bx+x,by+y,cell+1,cell+1);} } dx.strokeStyle='rgba(255,255,255,.12)'; dx.strokeRect(bx,by,BS,BS); if(p<1)demoRaf=requestAnimationFrame(img);} demoRaf=requestAnimationFrame(img); }\n      else if(k==='visao'){ var tags=[[.30,.22,.4,.22,'nota fiscal','#FA48DC',.35],[.34,.5,.26,.1,'R$ 1.240,00','#48FAA1',.7],[.55,.66,.3,.09,'CNPJ 12.345…','#4DA4FA',1.0]]; tags.forEach(function(tg,i){ var el=document.createElement('div'); el.className='tag2'; el.style.borderColor=tg[5]; el.style.color=tg[5]; el.textContent=tg[4]; el.setAttribute('data-vt',i); dov.appendChild(el); }); var vt0=performance.now(); function vis(t){ if(!demo.isConnected) return; if(active!=='visao')return; var p=Math.min(1,(t-vt0)/2400); var BW=300,BH=200,bx=SW/2-BW/2,by=SH/2-BH/2+8; var g=dx.createLinearGradient(bx,by,bx+BW,by+BH); g.addColorStop(0,'#241a2a');g.addColorStop(1,'#0f0a14'); dx.fillStyle=g; dx.fillRect(bx,by,BW,BH); dx.strokeStyle='rgba(255,255,255,.05)'; for(var i2=0;i2<6;i2++)dx.strokeRect(bx+22+i2*4,by+22+i2*3,BW*.6,13); tags.forEach(function(tg,i){ if(p>tg[6]/2.2){ dx.strokeStyle=tg[5]; dx.lineWidth=1.4; dx.setLineDash([6,4]); dx.strokeRect(bx+tg[0]*BW,by+tg[1]*BH,tg[2]*BW,tg[3]*BH); dx.setLineDash([]); var el=dov.querySelector('[data-vt=\"'+i+'\"]'); if(el){ el.style.left=((bx+tg[0]*BW)/SW*100)+'%'; el.style.top=(((by+tg[1]*BH)/SH*100)-6)+'%'; el.classList.add('show'); } } }); dx.strokeStyle='rgba(255,255,255,.12)'; dx.strokeRect(bx,by,BW,BH); demoRaf=requestAnimationFrame(vis);} demoRaf=requestAnimationFrame(vis); }\n      else if(k==='embeddings'){ var epts=[]; var cl=[[SW*0.32,SH*0.4,'#FA48DC'],[SW*0.62,SH*0.36,'#48FAA1'],[SW*0.5,SH*0.68,'#4DA4FA']]; for(var i=0;i<46;i++){var c=cl[i%3];epts.push({x:Math.random()*SW,y:Math.random()*SH,tx:c[0]+(Math.random()-.5)*130,ty:c[1]+(Math.random()-.5)*110,c:c[2]});} function emb(){ if(!demo.isConnected) return; if(active!=='embeddings')return; dx.clearRect(0,0,SW,SH); epts.forEach(function(p){p.x+=(p.tx-p.x)*.06;p.y+=(p.ty-p.y)*.06;dx.beginPath();dx.arc(p.x,p.y,3,0,6.28);dx.fillStyle=p.c;dx.fill();}); demoRaf=requestAnimationFrame(emb);} demoRaf=requestAnimationFrame(emb); dov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:0;bottom:-2px;font-size:11px;color:#8a848c\">vizinhos por significado</div>'; }\n      else if(k==='streaming'){ var toks=[],n=0; dov.innerHTML='<div class=\"mono\" data-sc style=\"position:absolute;right:0;bottom:-2px;font-size:20px;color:#fff\">0 tok</div>'; function str(){ if(!demo.isConnected) return; if(active!=='streaming')return; dx.fillStyle='rgba(11,7,17,.28)';dx.fillRect(0,0,SW,SH); dx.globalCompositeOperation='lighter'; for(var k2=0;k2<6;k2++)toks.push({x:0,y:SH*0.2+Math.random()*SH*0.6,v:6+Math.random()*10}); n+=Math.round(40+Math.random()*90); var el=dov.querySelector('[data-sc]'); if(el)el.textContent=n.toLocaleString('pt-BR')+' tok'; for(var i=toks.length-1;i>=0;i--){var p=toks[i];p.x+=p.v;if(p.x>SW){toks.splice(i,1);continue;}dx.beginPath();dx.arc(p.x,p.y,1.8,0,6.28);dx.fillStyle='rgba(255,120,230,.8)';dx.fill();} if(toks.length>420)toks.splice(0,toks.length-420); dx.globalCompositeOperation='source-over'; demoRaf=requestAnimationFrame(str);} demoRaf=requestAnimationFrame(str); }\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run(c.getAttribute('data-f')); }); });\n    run('decisao');\n    if(!reduce){ dtimers.push(setTimeout(function(){ if(active==='decisao') run('voz'); },5200)); }\n  \n}\n\nfunction expBarramentoMount(d2, root){\n    var st=root.querySelector('[data-st]'), pipe=root.querySelector('[data-pipe]');\n    var lblR=root.querySelector('[data-lblR]'), lblC=root.querySelector('[data-lblC]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), box=root.querySelector('[data-box]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var px=pipe.getContext('2d');\n    var W=0,H=0,DP=1, PW=0,PH=0,PL=0,PT=0;\n    var SRC=[{k:'Webhook'},{k:'SIP'},{k:'Cron'},{k:'WABA'}], DST=[{k:'ERP'},{k:'E-mail'},{k:'WhatsApp'},{k:'Gateway'}];\n    var srcEls=[], dstEls=[];\n    var xRush,xConn,yMid, srcAnchors=[], dstAnchors=[];\n    var amb=[];\n    function mkChips(){ srcEls.forEach(function(e){e.remove();}); dstEls.forEach(function(e){e.remove();}); srcEls=[]; dstEls=[];\n      SRC.forEach(function(s,i){ var e=document.createElement('div'); e.className='chip src litv'; e.textContent=s.k; st.appendChild(e); srcEls.push(e); });\n      DST.forEach(function(s,i){ var e=document.createElement('div'); e.className='chip dst'; e.textContent=s.k; st.appendChild(e); dstEls.push(e); }); }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height;\n      PL=0; PT=0; PW=W; PH=H;\n      pipe.style.left='0px'; pipe.style.top='0px'; pipe.style.width=W+'px'; pipe.style.height=H+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); pipe.width=Math.round(W*DP); pipe.height=Math.round(H*DP); px.setTransform(DP,0,0,DP,0,0);\n      yMid=H*0.40; xRush=W*0.24; xConn=W*0.76;\n      // source/dest anchors spread vertically around yMid\n      srcAnchors=[]; dstAnchors=[]; var sx=W*0.085, dx=W*0.915, spread=190;\n      SRC.forEach(function(s,i){ var y=yMid + (i-(SRC.length-1)/2)*(spread/(SRC.length-1)); srcAnchors.push({x:sx,y:y}); if(srcEls[i]){ srcEls[i].style.left=(sx-14)+'px'; srcEls[i].style.top=y+'px'; } });\n      DST.forEach(function(s,i){ var y=yMid + (i-(DST.length-1)/2)*(spread/(DST.length-1)); dstAnchors.push({x:dx,y:y}); if(dstEls[i]){ dstEls[i].style.left=(dx+14)+'px'; dstEls[i].style.top=y+'px'; } });\n      lblR.style.left=(xRush-14)+'px'; lblR.style.top=(yMid-60)+'px';\n      lblC.style.left=(xConn-72)+'px'; lblC.style.top=(yMid+34)+'px';\n      stage.style.top=(yMid+150)+'px';\n      // ambient particles\n      if(!amb.length){ for(var i=0;i<46;i++){ amb.push({x:Math.random(),y:Math.random(),s:0.02+Math.random()*0.05,r:0.6+Math.random()*1.6,c:Math.random()<0.5?'132,72,250':'72,250,250',a:0.05+Math.random()*0.12}); } } }\n    mkChips(); layout(); d2.on(window,'resize',layout);\n\n    var STR=3; // bus strands\n    var ctrlY=0, ctrlTY=0, mX=9999,mY=0,hasMouse=false, energy=0, tprev=performance.now(), run=true, raf=null;\n    d2.on(st,'pointermove',function(e){ var r=pipe.getBoundingClientRect(); mX=(e.clientX-r.left); mY=(e.clientY-r.top); hasMouse=true; });\n    d2.on(st,'pointerleave',function(){ hasMouse=false; });\n    function bez(t,off){ var y0=yMid-10+off, y1=yMid+10+off, cx=(xRush+xConn)/2; var u=1-t;\n      var x=u*u*xRush + 2*u*t*cx + t*t*xConn; var y=u*u*y0 + 2*u*t*(yMid+ctrlY+off) + t*t*y1; return [x,y]; }\n    var packets=[], spawnAcc=0, dstIdx=0;\n    function spawnFromSource(){ var si=(Math.random()*SRC.length)|0; if(srcEls[si]){ srcEls[si].classList.add('lit'); (function(el){ setTimeout(function(){ if(el.isConnected)el.classList.remove('lit'); },700); })(srcEls[si]); } packets.push({t:0, sp:0.0040+Math.random()*0.0018, strand:(Math.random()*STR)|0, from:si}); energy=Math.min(1,energy+0.25); }\n    function draw(t){ if(!pipe.isConnected) return; if(!run)return; var dt=(t-tprev); tprev=t;\n      if(hasMouse){ var infl=Math.max(0,1-Math.abs(mX-(xRush+xConn)/2)/((xConn-xRush)*0.75)); ctrlTY=(mY-yMid)*0.5*infl; } else { ctrlTY=Math.sin(t*0.0009)*20; }\n      ctrlY+=(ctrlTY-ctrlY)*0.06; if(energy>0)energy-=0.008;\n      px.clearRect(0,0,PW,PH);\n      px.save(); px.globalCompositeOperation='lighter';\n      // ambient\n      for(var i=0;i<amb.length;i++){ var p=amb[i]; p.y-=p.s*(dt/16.7)*0.004; if(p.y<-0.02)p.y=1.02; var ax=p.x*PW, ay=p.y*PH; px.fillStyle='rgba('+p.c+','+p.a+')'; px.beginPath(); px.arc(ax,ay,p.r,0,6.28); px.fill(); }\n      // source feeders → Rush\n      for(var s2=0;s2<srcAnchors.length;s2++){ var a=srcAnchors[s2]; var g=px.createLinearGradient(a.x,a.y,xRush,yMid); g.addColorStop(0,'rgba(132,72,250,0.05)'); g.addColorStop(1,'rgba(132,72,250,0.28)'); px.strokeStyle=g; px.lineWidth=1; px.beginPath(); px.moveTo(a.x,a.y); px.quadraticCurveTo((a.x+xRush)/2, a.y, xRush, yMid); px.stroke(); px.fillStyle='rgba(160,120,250,.5)'; px.beginPath(); px.arc(a.x,a.y,2.2,0,6.28); px.fill(); }\n      // dest feeders ← Connect\n      for(var d2i=0;d2i<dstAnchors.length;d2i++){ var b=dstAnchors[d2i]; var lit=(dstEls[d2i]&&dstEls[d2i].classList.contains('lit')); var g2=px.createLinearGradient(xConn,yMid,b.x,b.y); g2.addColorStop(0,'rgba(72,250,250,'+(lit?0.5:0.28)+')'); g2.addColorStop(1,'rgba(72,250,250,0.05)'); px.strokeStyle=g2; px.lineWidth=lit?1.8:1; px.beginPath(); px.moveTo(xConn,yMid); px.quadraticCurveTo((xConn+b.x)/2, b.y, b.x, b.y); px.stroke(); px.fillStyle='rgba(90,240,240,.5)'; px.beginPath(); px.arc(b.x,b.y,2.2,0,6.28); px.fill(); }\n      // bus strands\n      var grad=px.createLinearGradient(xRush,0,xConn,0); grad.addColorStop(0,'rgba(132,72,250,0.85)'); grad.addColorStop(1,'rgba(72,250,250,0.85)');\n      for(var sN=0;sN<STR;sN++){ var off=(sN-(STR-1)/2)*7; px.globalAlpha=0.10+energy*0.10; px.lineWidth=6; px.strokeStyle=grad; px.beginPath(); for(var s=0;s<=1.0001;s+=0.03){ var pp=bez(s,off); if(s===0)px.moveTo(pp[0],pp[1]); else px.lineTo(pp[0],pp[1]); } px.stroke();\n        px.globalAlpha=0.42; px.lineWidth=1.1; px.beginPath(); for(var s3=0;s3<=1.0001;s3+=0.03){ var p3=bez(s3,off); if(s3===0)px.moveTo(p3[0],p3[1]); else px.lineTo(p3[0],p3[1]); } px.stroke(); }\n      px.globalAlpha=1;\n      // packets\n      for(var k=packets.length-1;k>=0;k--){ var pk=packets[k]; var off2=(pk.strand-(STR-1)/2)*7; var boost=1; if(hasMouse){ var pc=bez(pk.t,off2); var dm=Math.hypot(pc[0]-mX,pc[1]-mY); if(dm<80)boost=1.8-dm/80*0.8; }\n        pk.t+=pk.sp*(dt/16.7)*boost; if(pk.t>=1){ dstIdx=(dstIdx+1)%dstEls.length; if(dstEls[dstIdx]){ var el=dstEls[dstIdx]; el.classList.add('lit'); (function(e){ setTimeout(function(){ if(e.isConnected)e.classList.remove('lit'); },650); })(el); } packets.splice(k,1); continue; }\n        var pos=bez(pk.t,off2); var rr=Math.round(132+(72-132)*pk.t), gg2=Math.round(72+(250-72)*pk.t), bb=250;\n        var tp=bez(Math.max(0,pk.t-0.05),off2); var lg=px.createLinearGradient(tp[0],tp[1],pos[0],pos[1]); lg.addColorStop(0,'rgba('+rr+','+gg2+','+bb+',0)'); lg.addColorStop(1,'rgba('+rr+','+gg2+','+bb+',0.85)'); px.strokeStyle=lg; px.lineWidth=2.2*boost; px.beginPath(); px.moveTo(tp[0],tp[1]); px.lineTo(pos[0],pos[1]); px.stroke();\n        var rg=px.createRadialGradient(pos[0],pos[1],0,pos[0],pos[1],7*boost); rg.addColorStop(0,'rgba('+rr+','+gg2+','+bb+',1)'); rg.addColorStop(1,'rgba('+rr+','+gg2+','+bb+',0)'); px.fillStyle=rg; px.beginPath(); px.arc(pos[0],pos[1],7*boost,0,6.28); px.fill(); }\n      // nodes\n      function ring(x,y,col){ px.strokeStyle=col; px.globalAlpha=0.9; px.lineWidth=1.6; px.beginPath(); px.arc(x,y,12,0,6.28); px.stroke(); var gc=px.createRadialGradient(x,y,0,x,y,20); gc.addColorStop(0,col.replace('1)','0.45)')); gc.addColorStop(1,col.replace('1)','0)')); px.globalAlpha=1; px.fillStyle=gc; px.beginPath(); px.arc(x,y,20,0,6.28); px.fill(); }\n      ring(xRush,yMid,'rgba(160,120,250,1)'); ring(xConn,yMid,'rgba(90,240,240,1)');\n      px.restore();\n      spawnAcc+=dt; var interval=reduce?99999:820; if(spawnAcc>interval){ spawnAcc=0; spawnFromSource(); }\n      raf=requestAnimationFrame(draw);\n    }\n    if(!reduce){ spawnFromSource(); raf=requestAnimationFrame(function(t){tprev=t;draw(t);}); }\n    else { var grad=px.createLinearGradient(xRush,0,xConn,0); grad.addColorStop(0,'#8448FA'); grad.addColorStop(1,'#48FAFA'); px.strokeStyle=grad; px.lineWidth=1.4; for(var sN=0;sN<STR;sN++){ var off=(sN-(STR-1)/2)*7; px.beginPath(); for(var s=0;s<=1.001;s+=0.03){var p=bez(s,off); if(s===0)px.moveTo(p[0],p[1]);else px.lineTo(p[0],p[1]);} px.stroke(); } }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;tprev=performance.now();raf=requestAnimationFrame(draw);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.02}); io.observe(st);\n\n    // ---- concrete stage ----\n    var timers=[], intervals=[];\n    function clearS(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; box.innerHTML=''; }\n    function rowEl(html){ var e=document.createElement('div'); e.className='row'; e.innerHTML=html; box.appendChild(e); return e; }\n    function showSeq(rows){ rows.forEach(function(r,i){ var e=rowEl(r); timers.push(setTimeout(function(){ if(e.isConnected)e.classList.add('show'); }, 220+i*560)); }); }\n    var NAMES={webhook:'Webhook',entrega:'Entrega',rota:'Roteamento',transforma:'Transformação',retry:'Resiliência',tempo:'Tempo real'};\n    var DOT={webhook:'#8448FA',entrega:'#48FAFA',rota:'#8448FA',transforma:'#a48fe0',retry:'#66FA48',tempo:'#48FAFA'};\n    function run2(k){ energy=1; clearS(); sth.innerHTML='<span style=\"width:7px;height:7px;border-radius:50%;background:'+DOT[k]+';display:inline-block\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='webhook') showSeq(['<span class=\"k in\">POST /pedido</span>','<span class=\"ar\">▸</span>','<span class=\"k out\">→ ERP</span>','<span class=\"k ok\">200 OK</span>']);\n      else if(k==='entrega') showSeq(['<span class=\"k out\">Connect · HTTP</span>','<span class=\"ar\">▸</span>','<span class=\"mut\">auth + payload</span>','<span class=\"k ok\">201</span>']);\n      else if(k==='rota') showSeq(['<span class=\"k in\">pedido.pago</span>','<span class=\"ar\">▸</span>','<span class=\"k out\">ERP</span>','<span class=\"k out\">e-mail</span>','<span class=\"k out\">WhatsApp</span>']);\n      else if(k==='transforma') showSeq(['<span class=\"k in\">payload cru</span>','<span class=\"ar\">▸</span>','<span class=\"mut\">map</span>','<span class=\"ar\">▸</span>','<span class=\"k out\">shaped</span>']);\n      else if(k==='retry') showSeq(['<span class=\"k out\">→ gateway</span>','<span class=\"k err\">503</span>','<span class=\"mut\">retry 2/3</span>','<span class=\"k ok\">200 OK</span>']);\n      else if(k==='tempo'){ var e=rowEl('<span class=\"mut\">eventos</span><span class=\"k out\" data-c style=\"font-size:16px\">0</span>'); e.classList.add('show'); var n=0; var iv=setInterval(function(){ if(!e.isConnected){clearInterval(iv);return;} n+=Math.round(20+Math.random()*60); var c=e.querySelector('[data-c]'); if(c)c.textContent=n.toLocaleString('pt-BR')+' /s'; },140); intervals.push(iv); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('webhook');\n    if(!reduce){ timers.push(setTimeout(function(){ var on=root.querySelector('.fc.on'); if(on&&on.getAttribute('data-f')==='webhook') run2('rota'); }, 6000)); }\n  }\n\nfunction heroRender(d2){\n    var COMPS=[['UI','#4866FA'],['Registry','#FA4848'],['Media','#FADC48'],['ID','#48FAA1'],['Connect','#48FAFA'],['Domain','#FA48DC'],['Rush','#8448FA'],['Cashier','#BFFA48']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"glow\" data-glow></canvas>'+\n        '<div class=\"wrap\">'+\n          '<div class=\"left\">'+\n            '<div class=\"eyebrow\"><span class=\"d\"></span> Necessidade elevada à produção</div>'+\n            '<h1 class=\"h1\">Da necessidade à produção.<span class=\"g\">O resto é demo.</span></h1>'+\n            '<div class=\"prompt\"><span class=\"q\">›</span><input class=\"inp\" data-inp placeholder=\"Descreva a necessidade…\" aria-label=\"Descreva a necessidade\" /><button class=\"go\" data-go>montar</button></div>'+\n            '<div class=\"hint\">Descreva. Os componentes se montam. No ar.</div>'+\n            '<div class=\"palette\" data-palette>'+ COMPS.map(function(c){ return '<span class=\"pd\" data-c=\"'+c[0]+'\" style=\"--c:'+c[1]+';color:'+c[1]+'\"><span class=\"dot\"></span>'+c[0]+'</span>'; }).join('') +'</div>'+\n          '</div>'+\n          '<div class=\"stage\">'+\n            '<div class=\"screen\">'+\n              '<div class=\"sbar\"><i></i><i></i><i></i><span class=\"url\" data-url></span></div>'+\n              '<div class=\"badge\" data-badge><span class=\"p\"></span> no ar</div>'+\n              '<div class=\"sbody\" data-body></div>'+\n            '</div>'+\n          '</div>'+\n        '</div>'+\n      '</div>';\n}\nfunction heroMount(d2, root){\n    var st=root.querySelector('[data-st]'), glow=root.querySelector('[data-glow]');\n    var inp=root.querySelector('[data-inp]'), go=root.querySelector('[data-go]'), body=root.querySelector('[data-body]'), badge=root.querySelector('[data-badge]'), url=root.querySelector('[data-url]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    function esc(s){ return String(s).replace(/[&<>\"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c];}); }\n    var SOL=[\n      { need:'Cortar 40% do custo de atendimento', url:'atendimento.data2.app', acc:'#FA48DC', blocks:[\n          {c:'Rush', col:'#8448FA', t:'Escuta a chamada'},{c:'Domain', col:'#FA48DC', t:'IA resolve na hora'},\n          {c:'Connect', col:'#48FAFA', t:'Integra o CRM'},{c:'UI', col:'#4866FA', t:'Painel do time'} ],\n        app:'<div class=\"ah\">Atendimento · ao vivo</div><div class=\"chat\"><div class=\"bub q\">Cadê meu pedido 8421?</div><div class=\"bub a\" style=\"background:rgba(250,72,220,.15);border:1px solid rgba(250,72,220,.42)\">Sai amanhã, 14h — rastreio no seu e-mail.</div></div><div class=\"agent\">◈ agente resolveu · 0 na fila</div>' },\n      { need:'Conciliar estoque em tempo real', url:'estoque.data2.app', acc:'#4866FA', blocks:[\n          {c:'Registry', col:'#FA4848', t:'Os dados, vivos'},{c:'Rush', col:'#8448FA', t:'Cada movimento, um evento'},\n          {c:'Domain', col:'#FA48DC', t:'Alerta antes de faltar'},{c:'UI', col:'#4866FA', t:'Tela de controle'} ],\n        app:'<div class=\"ah\">Estoque · tempo real</div><div class=\"kpis\"><span>1.204 SKUs</span><span>giro 3.2×</span><span>ruptura 0,4%</span></div><div class=\"chart\"><i style=\"height:38%\"></i><i style=\"height:62%\"></i><i style=\"height:50%\"></i><i style=\"height:78%\"></i><i style=\"height:66%\"></i><i style=\"height:92%\"></i><i style=\"height:71%\"></i></div><div class=\"alert\">⚠ repor SKU-88 em 2 dias</div>' },\n      { need:'Cobrar e conciliar pagamentos', url:'pagamentos.data2.app', acc:'#BFFA48', blocks:[\n          {c:'Cashier', col:'#BFFA48', t:'Cobrança nativa'},{c:'Connect', col:'#48FAFA', t:'Fala com o gateway'},\n          {c:'Registry', col:'#FA4848', t:'Concilia sozinho'},{c:'ID', col:'#48FAA1', t:'Quem pode ver'} ],\n        app:'<div class=\"ah\">Pagamentos · conciliado</div><div class=\"row2\"><span>R$ 1.240,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>R$ 890,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>R$ 3.110,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"foot\">3.482 transações hoje · 0 divergências</div>' },\n      { need:'Estúdio de imagem do produto', url:'estudio.data2.app', acc:'#FADC48', blocks:[\n          {c:'Media', col:'#FADC48', t:'Gera a imagem'},{c:'Registry', col:'#FA4848', t:'Puxa o catálogo'},\n          {c:'UI', col:'#4866FA', t:'Galeria pronta'} ],\n        app:'<div class=\"ah\">Estúdio · imagens</div><div class=\"gal\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div><div class=\"foot\">8 imagens geradas · prontas pro catálogo</div>' }\n    ];\n\n    var gx=glow.getContext('2d'), W=0,H=0,DP=1, spots=[];\n    function resize(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; DP=Math.min(2,(window.devicePixelRatio||1)); glow.width=Math.round(W*DP); glow.height=Math.round(H*DP); gx.setTransform(DP,0,0,DP,0,0); }\n    resize(); d2.on(window,'resize',resize);\n    var running=true, raf=null;\n    function frame(){ if(!glow.isConnected)return; if(!running)return; gx.clearRect(0,0,W,H); gx.globalCompositeOperation='lighter';\n      for(var i=0;i<spots.length;i++){ var s=spots[i]; s.life-=0.006; if(s.life<=0){spots.splice(i,1);i--;continue;} var rr=s.r*(1.2-s.life*0.4); var g=gx.createRadialGradient(s.x*W,s.y*H,0,s.x*W,s.y*H,rr); g.addColorStop(0,'rgba('+s.rgb+','+(0.16*s.life)+')'); g.addColorStop(1,'rgba('+s.rgb+',0)'); gx.fillStyle=g; gx.beginPath(); gx.arc(s.x*W,s.y*H,rr,0,6.28); gx.fill(); }\n      gx.globalCompositeOperation='source-over'; raf=requestAnimationFrame(frame); }\n    if(!reduce){ raf=requestAnimationFrame(frame); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!running&&!reduce){running=true;raf=requestAnimationFrame(frame);} } else { running=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.05}); io.observe(st);\n    function hexRgb(h){ return parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16); }\n    function hexA(h,a){ return 'rgba('+hexRgb(h)+','+a+')'; }\n    function puff(col){ spots.push({x:0.64+(Math.random()-.5)*0.18, y:0.44+(Math.random()-.5)*0.24, r:180, life:1, rgb:hexRgb(col)}); }\n\n    var timers=[];\n    function clr(){ timers.forEach(clearTimeout); timers=[]; }\n    function litPalette(name, on){ var el=root.querySelector('.pd[data-c=\"'+name+'\"]'); if(el)el.classList.toggle('lit', on); }\n    function resetPalette(){ Array.prototype.slice.call(root.querySelectorAll('.pd')).forEach(function(e){e.classList.remove('lit');}); }\n\n    var userMode=false, si=0;\n    function typeNeed(str, done){ var i=0; (function step(){ if(!inp.isConnected||userMode)return; if(i>str.length){ done&&done(); return; } inp.value=str.slice(0,i); i++; timers.push(setTimeout(step, 22+Math.random()*30)); })(); }\n\n    function assemble(sol, done){\n      body.innerHTML=''; badge.classList.remove('on'); url.style.opacity='0'; url.textContent=sol.url; resetPalette();\n      var layer=document.createElement('div'); layer.className='layer'; body.appendChild(layer);\n      var made=[];\n      sol.blocks.forEach(function(b){ var el=document.createElement('div'); el.className='blk';\n        el.style.background='linear-gradient(180deg,'+hexA(b.col,0.13)+','+hexA(b.col,0.05)+')'; el.style.borderColor=hexA(b.col,0.4);\n        el.innerHTML='<div class=\"tag\" style=\"color:'+b.col+'\">'+b.c+'</div><div class=\"lbl\">'+esc(b.t)+'</div><div class=\"bar\"><i style=\"background:'+b.col+'\"></i></div>';\n        layer.appendChild(el); made.push(el); });\n      var k=0;\n      (function next(){ if(!body.isConnected)return; if(k>=sol.blocks.length){ timers.push(setTimeout(function(){ revealApp(sol, layer, done); }, 620)); return; }\n        var b=sol.blocks[k], el=made[k]; el.classList.add('in'); litPalette(b.c, true); puff(b.col);\n        var bar=el.querySelector('.bar > i'); if(bar) timers.push(setTimeout(function(){ if(bar.isConnected)bar.style.width=(58+Math.random()*38)+'%'; }, 110));\n        k++; timers.push(setTimeout(next, 500)); })();\n    }\n    function revealApp(sol, layer, done){\n      if(!body.isConnected)return;\n      Array.prototype.slice.call(layer.querySelectorAll('.blk')).forEach(function(e){ e.classList.add('gone'); });\n      timers.push(setTimeout(function(){ if(!body.isConnected)return;\n        var app=document.createElement('div'); app.className='app'; app.style.setProperty('--acc', sol.acc); app.innerHTML=sol.app;\n        body.innerHTML=''; body.appendChild(app); void app.offsetWidth; app.classList.add('in');\n        puff(sol.acc); badge.classList.add('on'); url.style.opacity='1';\n        done&&timers.push(setTimeout(done, 2400));\n      }, 420));\n    }\n\n    function cycle(){ if(!st.isConnected||userMode)return; var sol=SOL[si%SOL.length]; si++; clr();\n      typeNeed(sol.need, function(){ timers.push(setTimeout(function(){ if(userMode)return; assemble(sol, function(){ timers.push(setTimeout(cycle, 700)); }); }, 340)); }); }\n\n    function slug(t){ return (t.toLowerCase().normalize('NFD').replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'').slice(0,22)||'app')+'.data2.app'; }\n    function runCustom(text){ userMode=true; clr();\n      var sol={ need:text, url:slug(text), acc:'#8448FA', blocks:[\n        {c:'Domain', col:'#FA48DC', t:'Entende o pedido'},{c:'Registry', col:'#FA4848', t:'Traz os dados'},\n        {c:'Connect', col:'#48FAFA', t:'Conecta o que já existe'},{c:'UI', col:'#4866FA', t:'Vira tela'} ],\n        app:'<div class=\"ah\" style=\"--acc:#8448FA\">'+esc(text.slice(0,42))+' · no ar</div><div class=\"row2\"><span>fluxo publicado</span><span class=\"ok\">✓</span></div><div class=\"row2\"><span>dados conectados</span><span class=\"ok\">✓</span></div><div class=\"agent\">◈ pronto, em produção</div>' };\n      assemble(sol, null);\n    }\n\n    d2.on(inp,'focus',function(){ userMode=true; clr(); inp.value=''; });\n    d2.on(inp,'keydown',function(e){ if(e.key==='Enter'){ e.preventDefault(); var t=inp.value.trim(); if(t) runCustom(t); } });\n    d2.on(go,'click',function(){ var t=inp.value.trim(); if(t){ runCustom(t); } });\n    d2.on(inp,'blur',function(){ if(!inp.value.trim()){ userMode=false; timers.push(setTimeout(function(){ if(!userMode) cycle(); }, 800)); } });\n\n    if(reduce){ var sol=SOL[0]; inp.value=sol.need; sol.blocks.forEach(function(b){litPalette(b.c,true);});\n      var app=document.createElement('div'); app.className='app in'; app.style.setProperty('--acc', sol.acc); app.innerHTML=sol.app; body.appendChild(app);\n      badge.classList.add('on'); url.textContent=sol.url; url.style.opacity='1'; }\n    else { timers.push(setTimeout(cycle, 500)); }\n}\nfunction heroDispatch(d2){ var el=d2.$?d2.$('.d2hero'):null; if(!el||el.getAttribute('data-hero-live')==='1')return; el.setAttribute('data-hero-live','1'); try{ heroMount(d2, el); }catch(e){} }\nfunction expDispatch(d2){\n  var sec = d2.$ ? d2.$('[data-exp]') : null;\n  if(!sec || sec.getAttribute('data-exp-live')==='1') return;\n  sec.setAttribute('data-exp-live','1');\n  var k = sec.getAttribute('data-exp');\n  try{ if(k==='domain') expDomainMount(d2, sec); else if(k==='barramento') expBarramentoMount(d2, sec); }catch(e){}\n}\n\n\nfunction renderRuntimeDetail(d2, esc, dd, slug){\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var rt=rts.find(function(x){return x.key===slug;})||{};\n  if(!rt.key){ return renderPlataforma(d2, esc, dd); }\n  var ac=esc(rt.accent||'#3A7BFF');\n  var rtHref={'rush':'/plataforma/runtimes/rush','connect':'/plataforma/runtimes/connect','domain':'/plataforma/runtimes/domain'};\n  var heroLine={rush:'Seu sistema escuta o mundo e reage sozinho.',connect:'Seu sistema alcança o mundo — e o mundo responde.',domain:'A camada que entende, decide e prova a decisão.'};\n  var whenLine={rush:'Quando algo acontece e o sistema precisa reagir sozinho — um webhook chega, um horário dispara, um e-mail entra, uma ligação toca.',connect:'Quando o seu sistema precisa alcançar o mundo — cobrar num PSP, escrever num ERP, notificar em tempo real.',domain:'Quando a decisão exige entender linguagem, contexto ou imagem — e precisa ser auditável, não um chute de modelo.'};\n  var proof={rush:['eventos por minuto sob carga','handlers em data2-lang','reação em tempo real','canais de entrada'],connect:['integrações vivas','entregas confirmadas','canais em tempo real','tempo até integrar'],domain:['intenções roteadas','respostas em JSON válido','hard-gates aplicados','precisão do julgador']};\n  var desc=String(rt.description||'');\n  var caps;\n  if(Array.isArray(rt.capacidades)&&rt.capacidades.length){ caps=rt.capacidades.slice(0,4); }\n  else { var splitAt=desc.indexOf(': '); if(splitAt<0) splitAt=desc.indexOf('. '); var rest=splitAt>0?desc.slice(splitAt+2):desc; if(rest.indexOf('—')>=0){ rest=rest.slice(rest.indexOf('—')+1); } caps=rest.split(/[,;·—]|\\.\\s|\\se\\s/).map(function(s){return s.trim().replace(/\\.$/,'');}).filter(function(s){return s.length>3;}).slice(0,4); }\n  var hero='<span class=\"back\" data-nav data-href=\"/plataforma\">← A plataforma</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+ac+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Runtime · '+esc(rt.papel||'')+'</div><h1 class=\"i-name stag\">'+esc(rt.name)+'</h1><div class=\"i-dor stag\"><b>'+esc(heroLine[slug]||rt.papel||'')+'</b></div>'+(desc?'<div class=\"d-sub stag\" style=\"margin-top:18px\">'+esc(desc)+'</div>':'')+'</div><div class=\"i-diorama stag\" style=\"--ihue:'+ac+'\"><div class=\"i-atmos\" style=\"--ihue:'+ac+'\"></div>'+isoDiorama(ac)+'</div></section>';\n  var __exp = slug==='domain' ? expDomainHTML() : ((slug==='rush'||slug==='connect') ? expBarramentoHTML() : null);\n  if(__exp){ hero='<span class=\"back\" data-nav data-href=\"/plataforma\">← A plataforma</span>' + __exp; }\n  var capCards=caps.map(function(c){return '<div class=\"i-cap stag\">'+isoMini(ac)+'<div class=\"i-ct\">'+esc(c.charAt(0).toUpperCase()+c.slice(1))+'</div></div>';}).join('');\n  var oque='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O que faz</div><h2 class=\"d-head stag\">As capacidades.</h2>'+(capCards?'<div class=\"i-caps stag\">'+capCards+'</div>':'<div class=\"d-sub stag\">'+esc(desc)+'</div>')+'</section>';\n  var quando=d2Faces(esc,'Quando usar','O papel no sistema.',{tag:'O papel',h:(rt.papel||rt.name),p:desc},{tag:'A hora certa',h:'Quando reachar',p:(whenLine[slug]||'')});\n  var mapNodes=rts.map(function(r){var rc=esc(r.accent||'#3A7BFF');var here=(r.key===slug);var open=here?'<div class=\"i-stage stag\">':'<div class=\"i-stage stag\" data-nav data-href=\"'+esc(rtHref[r.key]||'/plataforma')+'\" style=\"cursor:pointer\">';var dot=here?'<div class=\"i-pnode\" style=\"--accent:'+rc+';width:24px;height:24px\"></div>':'<div class=\"i-pnode\" style=\"--accent:'+rc+';opacity:.6\"></div>';return open+dot+'<div class=\"i-pn\">'+esc(r.name)+'</div><div class=\"i-pr\">'+esc(r.papel||'')+'</div></div>';}).join('');\n  var mapa='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O mapa</div><h2 class=\"d-head stag\">No motor da runtime.</h2><div class=\"d-sub stag\">Rush escuta, Connect integra, Domain decide — este é o seu lugar.</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat(3,1fr);--ihue:'+ac+'\"><div class=\"i-rail\"></div>'+mapNodes+'</div></section>';\n  var prova=d2LeverSec(esc,'A prova','Em números.',(proof[slug]||['operação em produção']));\n  return hero+oque+quando+mapa+prova+d2Close(esc,'Um runtime. O sistema inteiro.','Fale com a gente e veja o '+esc(rt.name)+' rodando no seu domínio.');\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\nfunction isoMini(hue){ return '<svg class=\"i-cnode\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M12 3 L20 8 L12 13 L4 8 Z\" fill=\"'+hue+'\" opacity=\"0.72\"/><path d=\"M4 8 L12 13 L12 21 L4 16 Z\" fill=\"'+hue+'\" opacity=\"0.28\"/><path d=\"M20 8 L12 13 L12 21 L20 16 Z\" fill=\"'+hue+'\" opacity=\"0.46\"/></svg>'; }\nfunction renderIndustriaIndex(d2, esc, dd){\n  var inds = (dd('cms-industriesDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var clean = function(t){ return esc(String(t==null?'':t).replace(/\\s*\\[PH[^\\]]*\\]/g,'')); };\n  var cards = inds.map(function(i){\n    var hue=esc(i.hue||'#3A7BFF');\n    var al=Array.isArray(i.alavancas)?(i.alavancas.find(function(x){return !/\\[PH\\]/.test(x);})||i.alavancas[0]||''):'';\n    return '<div class=\"d-ind\" data-nav data-href=\"/industrias/'+esc(i.slug)+'\" style=\"--accent:'+hue+'\">'+isoTile(hue)+'<div class=\"name\"><span class=\"chip\" style=\"background:'+hue+'\"></span>'+esc(i.name_pt)+'</div><div class=\"dor\">'+esc(i.dor)+'</div>'+(i.construimos?'<div class=\"build\">'+esc(i.construimos)+'</div>':'')+'<div class=\"lev\">'+clean(al)+'</div></div>';\n  }).join('');\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span><section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Indústrias · nove quadros</div><h1 class=\"d-head big stag\">O setor muda. A distância até produção, não.</h1><div class=\"d-sub stag\">Cada indústria é uma dor real que um time embarcado resolveu sobre o runtime — do problema ao resultado medido.</div></section><section class=\"d-sec\" data-reveal><div class=\"d-inds i-indgrid stag\">'+cards+'</div></section>';\n}\nfunction renderIndustriaDetail(d2, esc, dd, i){\n  var hue = esc(i.hue||'#3A7BFF');\n  var caps = Array.isArray(i.capacidades)?i.capacidades:[];\n  var pr = Array.isArray(i.produtos_runtimes)?i.produtos_runtimes:[];\n  var al = Array.isArray(i.alavancas)?i.alavancas:[];\n  var prodColor = {'DATA FRAMEWORK':'#5B93FF'};\n  (dd('cms-productsDataSet')||[]).forEach(function(p){ if(p&&p.name) prodColor[String(p.name).toUpperCase()]=p.accent||'#3A7BFF'; });\n  (dd('cms-runtimesDataSet')||[]).forEach(function(r){ if(r&&r.name){ var k=String(r.name).toUpperCase(); if(!prodColor[k]) prodColor[k]=r.accent||'#3A7BFF'; } });\n  var prodRole = {'RUSH':'escuta · inbound','DOMAIN':'decide · IA','CONNECT':'integra · outbound','MEDIA':'gera imagem','CASHIER':'transaciona','ID':'identidade · policy','REGISTRY':'catálogo · registro','UI':'interface','DATA FRAMEWORK':'own-your-data'};\n  var colOf = function(n){ return prodColor[String(n).toUpperCase()] || hue; };\n  var roleOf = function(n){ return prodRole[String(n).toUpperCase()] || 'runtime'; };\n  var hero = '<section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Indústria</div><h1 class=\"i-name stag\">'+esc(i.name_pt)+'</h1><div class=\"i-dor stag\"><b>'+esc(i.dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n  var nodes = pr.map(function(p){ var c=esc(colOf(p)); return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+c+'\"></div><div class=\"i-pn\">'+esc(p)+'</div><div class=\"i-pr\">'+esc(roleOf(p))+'</div></div>'; }).join('');\n  var capCards = caps.map(function(c,idx){ var c2=esc(colOf(pr.length?pr[idx%pr.length]:hue)); return '<div class=\"i-cap stag\">'+isoMini(c2)+'<div class=\"i-ct\">'+esc(c)+'</div></div>'; }).join('');\n  var cols = Math.max(pr.length,1);\n  var blueprint = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Arquitetura</div><h2 class=\"d-head stag\">O que construímos.</h2><div class=\"d-sub stag\">'+esc(i.construimos||i.oferta||'')+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+cols+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes+'</div><div class=\"i-caps stag\">'+capCards+'</div></section>';\n  var hotDone=false;\n  var levers = al.map(function(a){ var p=parseLever(a); var hot=(!p.ph && !p.qual && !hotDone); if(hot) hotDone=true; return leverCard(esc,p,hot); }).join('');\n  var alav = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Alavancas</div><h2 class=\"d-head stag\">O resultado, em números.</h2><div class=\"d-levers stag\">'+levers+'</div></section>';\n  var cs = (dd('cms-casesDataSet'))||[];\n  var kase = cs.find(function(c){return c.industria===i.slug;}) || cs.find(function(c){return c.slug===i.caso_lastro;}) || null;\n  var caso;\n  if(kase){\n    var lev = esc(String(kase.alavanca||'').replace(/\\s*\\[PH[^\\]]*\\]/g,'').replace(/[;,]\\s*$/,''));\n    caso = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Caso</div><h2 class=\"d-head stag\">Já foi feito.</h2><div class=\"i-case stag\" style=\"--ihue:'+hue+'\"><div class=\"i-csetor\" style=\"color:'+hue+'\">'+esc(kase.cliente_setor)+'</div><div class=\"i-cline\"><b>Desafio.</b> '+esc(kase.desafio)+'</div>'+(kase.feito?'<div class=\"i-cline\"><b>O que fizemos.</b> '+esc(kase.feito)+'</div>':'')+'<div class=\"i-clev\" style=\"border-left-color:'+hue+'\">'+lev+'</div></div></section>';\n  } else {\n    caso = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Caso</div><h2 class=\"d-head stag\">Em preparação.</h2><div class=\"i-caseslot stag\"><div class=\"st\">Caso · em breve</div><h4>Estudo desta indústria em preparação</h4><p>A implementação existe; o estudo público entra na próxima rodada.</p></div></section>';\n  }\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Vamos resolver isso na sua operação.</h2><div class=\"d-sub stag\">Construímos com você — semanas, não trimestres.</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com quem já fez isso em '+esc(i.name_pt)+' →</button></div></section>';\n  return '<span class=\"back\" data-nav data-href=\"/industrias\">← Indústrias</span>'+hero+blueprint+alav+caso+cta;\n}\nfunction renderProdutoIndex(d2, esc, dd){\n  var ps = (dd('cms-productsDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var firstLine = function(t){ return String(t==null?'':t).split(/[.·—]/)[0].trim(); };\n  var prodRole = {'RUSH':'escuta · inbound','DOMAIN':'decide · IA','CONNECT':'integra · outbound','MEDIA':'gera imagem','CASHIER':'transaciona','ID':'identidade · policy','REGISTRY':'catálogo · registro','UI':'interface'};\n  var cards = ps.map(function(p){\n    var ac=esc(p.accent||'#3A7BFF'); var soon=p.status==='em-breve';\n    var val=esc(firstLine(p.description||p.tagline||''));\n    var head = soon\n      ? '<div class=\"d-ind soon\" style=\"--accent:'+ac+';opacity:.62;cursor:default\">'\n      : '<div class=\"d-ind\" data-nav data-href=\"/produtos/'+esc(p.key)+'\" style=\"--accent:'+ac+'\">';\n    return head+isoTile(ac)+'<div class=\"name\"><span class=\"chip\" style=\"background:'+ac+'\"></span>'+esc(p.name)+(soon?'<span class=\"mp-soon\">em breve</span>':'')+'</div><div class=\"dor\">'+esc(p.tagline||'')+'</div><div class=\"lev\">'+val+'</div></div>';\n  }).join('');\n  var mapNodes = ps.map(function(p){\n    var ac=esc(p.accent||'#3A7BFF');\n    var role = prodRole[String(p.name).toUpperCase()] || (p.status==='em-breve'?'em breve':'runtime');\n    return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+ac+'\"></div><div class=\"i-pn\">'+esc(p.name)+'</div><div class=\"i-pr\">'+esc(role)+'</div></div>';\n  }).join('');\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span>'\n    +'<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Os produtos · oito faces, um runtime</div><h1 class=\"d-head big stag\">Oito produtos, um só runtime.</h1><div class=\"d-sub stag\">Cada produto resolve uma parte do sistema — interface, dado, mídia, identidade, integração, IA, eventos e pagamento. Não são SDKs soltos para costurar: são faces do mesmo motor.</div></section>'\n    +'<section class=\"d-sec\" data-reveal><div class=\"d-prods i-indgrid stag\">'+cards+'</div></section>'\n    +'<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Um só runtime</div><h2 class=\"d-head stag\">Oito nós, um motor.</h2><div class=\"d-sub stag\">Cada produto é um nó do mesmo runtime — o mesmo dado, as mesmas policies, a mesma superfície.</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+ps.length+',1fr);--ihue:#3A7BFF\"><div class=\"i-rail\"></div>'+mapNodes+'</div></section>';\n}\nfunction renderProdutoDetail(d2, esc, dd, p){\n  var ac = esc(p.accent||'#3A7BFF'); var soon = p.status==='em-breve';\n  var ps = (dd('cms-productsDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var prodRole = {'RUSH':'escuta · inbound','DOMAIN':'decide · IA','CONNECT':'integra · outbound','MEDIA':'gera imagem','CASHIER':'transaciona','ID':'identidade · policy','REGISTRY':'catálogo · registro','UI':'interface'};\n  var roleOf = function(n){ return prodRole[String(n).toUpperCase()] || 'runtime'; };\n  var soonBadge = soon?'<span class=\"mp-soon\" style=\"margin-left:12px\">em breve</span>':'';\n  var desc = String(p.description||'');\n  var hero = '<section class=\"i-hero\" data-reveal style=\"--ihue:'+ac+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Produto</div><h1 class=\"i-name stag\">'+esc(p.name)+soonBadge+'</h1><div class=\"i-dor stag\"><b>'+esc(p.tagline||'')+'</b></div>'+(desc?'<div class=\"d-sub stag\" style=\"margin-top:18px\">'+esc(desc)+'</div>':'')+'</div><div class=\"i-diorama stag\" style=\"--ihue:'+ac+'\"><div class=\"i-atmos\" style=\"--ihue:'+ac+'\"></div>'+isoDiorama(ac)+'</div></section>';\n  if(p.key==='domain'){ hero = expDomainHTML(); }\n  var caps;\n  if(Array.isArray(p.capacidades)&&p.capacidades.length){ caps=p.capacidades.slice(0,4); }\n  else { var splitAt = desc.indexOf(': '); if(splitAt<0) splitAt = desc.indexOf('. '); var rest = splitAt>0 ? desc.slice(splitAt+2) : desc; caps = rest.split(/[,;·—]|\\.\\s|\\se\\s/).map(function(s){return s.trim().replace(/\\.$/,'');}).filter(function(s){return s.length>3;}); }\n  var capCards = caps.slice(0,4).map(function(c){ return '<div class=\"i-cap stag\">'+isoMini(ac)+'<div class=\"i-ct\">'+esc(c.charAt(0).toUpperCase()+c.slice(1))+'</div></div>'; }).join('');\n  var resolve = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O que resolve</div><h2 class=\"d-head stag\">'+esc(p.tagline||p.name)+'</h2>'+(capCards?'<div class=\"i-caps stag\">'+capCards+'</div>':'<div class=\"d-sub stag\">'+esc(desc)+'</div>')+'</section>';\n  var flowNodes = ps.map(function(q){\n    var qc=esc(q.accent||'#3A7BFF'); var here=(q.key===p.key);\n    var open = here ? '<div class=\"i-stage stag\">' : '<div class=\"i-stage stag\" data-nav data-href=\"/produtos/'+esc(q.key)+'\" style=\"cursor:pointer\">';\n    var dot = here ? '<div class=\"i-pnode\" style=\"--accent:'+qc+';width:24px;height:24px\"></div>' : '<div class=\"i-pnode\" style=\"--accent:'+qc+';opacity:.72\"></div>';\n    var role = here ? 'você está aqui' : roleOf(q.name);\n    return open+dot+'<div class=\"i-pn\">'+esc(q.name)+'</div><div class=\"i-pr\"'+(here?' style=\"color:'+qc+'\"':'')+'>'+esc(role)+'</div></div>';\n  }).join('');\n  var trabalha = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Trabalha com</div><h2 class=\"d-head stag\">Um nó no mesmo runtime.</h2><div class=\"d-sub stag\">'+esc(p.name)+' não roda sozinho — divide o mesmo motor, o mesmo dado e as mesmas policies com os outros sete produtos. Um sistema, não um kit.</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+ps.length+',1fr);--ihue:'+ac+'\"><div class=\"i-rail\"></div>'+flowNodes+'</div></section>';\n  var cta;\n  if(soon){\n    cta = '<section class=\"d-sec d-close\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Disponibilidade</div><h2 class=\"d-head big stag\">Em breve.</h2><div class=\"i-caseslot stag\" style=\"max-width:640px;margin:28px auto 0;text-align:left\"><div class=\"st\">'+esc(p.name)+' · em breve</div><h4>'+esc(p.tagline||'Em construção')+'</h4><p>'+esc(desc||'')+' A engenharia existe; o produto público entra na próxima rodada.</p></div><div class=\"d-cta stag\" style=\"margin-top:28px\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section>';\n  } else {\n    cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Um runtime só, do intent à produção.</h2><div class=\"d-sub stag\">'+esc(p.name)+' faz parte da plataforma — um time embarca e entrega rodando, em semanas.</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/plataforma\">Ver a plataforma →</button><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section>';\n  }\n  return '<span class=\"back\" data-nav data-href=\"/produtos\">← Produtos</span>'+hero+resolve+trabalha+cta;\n}\nfunction ASK_CHIPS(){ return [\n  { tpl: 'Quero cortar ___% do custo de atendimento' },\n  { tpl: 'Meu time de ___ não escala' },\n  { tpl: 'Perco vendas porque o cliente não acha ___' },\n  { tpl: 'Minha conciliação de ___ trava o fechamento' }\n]; }\nfunction renderAsk(d2, esc){\n  const a = d2.assistant('homeAskExec');\n  const st = d2.store('homeAskStore');\n  const used = st ? (st.get('used', 0) || 0) : 0;\n  const max = st ? (st.get('max', 4) || 4) : 4;\n  const capped = used >= max;\n  const mode = d2.state.askMode || 'idle';\n  const idx = d2.state.askIdx;\n  const err = d2.state.askErr;\n  const CH = ASK_CHIPS();\n  const chips = CH.map((c,i)=>`<button class=\"askchip\" data-askchip=\"${i}\" data-tpl=\"${esc(c.tpl)}\">${esc(c.tpl)}</button>`).join('');\n  let ans = '';\n  if (err) {\n    ans = `<div class=\"fallback\"><div class=\"askhint\">A demo ao vivo está indisponível agora — o motor continua desenhado em nós e fluxos.</div><div class=\"nf\"><span class=\"wire\"></span><i></i><i></i><i></i></div><div class=\"askhint\"><b>Rush</b> entra · <b>Domain</b> decide · <b>Connect</b> integra</div></div>`;\n  } else if (mode === 'live') {\n    if (a.busy && !(a.answer||'').trim()) {\n      ans = `<div class=\"thinking\">Pensando<span class=\"flow\"></span></div>`;\n    } else {\n      ans = `<div class=\"ans\">${esc(a.answer||'')}${a.busy?'<span class=\"cur\"></span>':''}</div>`;\n    }\n  } else {\n    ans = `<div class=\"askhint\">Escolha um começo, preencha a lacuna e pergunte. Respostas reais, do runtime — não do marketing.</div>`;\n  }\n  const thinkCls = (mode==='live' && a.busy) ? 'think' : '';\n  const remaining = Math.max(0, max - used);\n  return `<div class=\"askwrap\"><div class=\"ask ${thinkCls}\"><div class=\"hd\"><span class=\"live\"></span>Pergunte à Data²</div><div class=\"row\"><input class=\"askin\" placeholder=\"${capped?'Limite desta sessão atingido — fale com engenharia':'Ex.: como a Data² resolve meu contact center?'}\" ${capped?'disabled':''}/><button class=\"asksend\" ${capped?'disabled':''}>Perguntar</button></div><div class=\"chips\">${chips}</div><div class=\"ansbox\">${ans}</div><div class=\"askhint\">${capped?'<b>Sessão no limite.</b> Fale com engenharia para uma demo completa.':`Restam <b>${remaining}</b> perguntas ao vivo nesta sessão · exemplos são gratuitos`}</div></div></div>`;\n}\nfunction askSetup(d2){\n  const ask = async () => {\n    const el = d2.$('.askin'); if(!el) return;\n    const text = (el.value||'').trim(); if(!text){ el.focus(); el.style.borderColor='#3a7bff'; setTimeout(function(){el.style.borderColor='';},700); return; }\n    const gap = el.value.indexOf('___'); if(gap>=0){ el.focus(); try{ el.setSelectionRange(gap,gap+3); }catch(_){} el.style.borderColor='#E93355'; setTimeout(function(){el.style.borderColor='';},700); return; }\n    const st = d2.store('homeAskStore');\n    const used = st ? (st.get('used', 0) || 0) : 0;\n    const max = st ? (st.get('max', 4) || 4) : 4;\n    if (used >= max) return;\n    el.value = '';\n    d2.state.askErr = null;\n    d2.state.askMode = 'live';\n    if (st) st.set('used', used + 1);\n    try { await d2.assistant('homeAskExec').ask(text); }\n    catch(e){ d2.state.askErr = String(e && e.message || e); }\n  };\n  d2.on('.asksend','click', ask);\n  d2.on('.askin','keydown',(e)=>{ if(e.key==='Enter') ask(); });\n  d2.on('.askchip','click',(e)=>{ const el=e.target.closest('.askchip'); if(!el) return; const inp=d2.$('.askin'); if(!inp) return; const tpl=el.getAttribute('data-tpl')||el.textContent||''; inp.value=tpl; inp.focus(); const g=tpl.indexOf('___'); if(g>=0){ try{ inp.setSelectionRange(g,g+3); }catch(_){} } const all=(d2.root||document).querySelectorAll('.askchip'); Array.prototype.forEach.call(all,x=>x.classList.remove('on')); el.classList.add('on'); });\n}\nvar PROD_ROLE = {'RUSH':'escuta · inbound','DOMAIN':'decide · IA','CONNECT':'integra · outbound','MEDIA':'gera imagem','CASHIER':'transaciona','ID':'identidade · policy','REGISTRY':'catálogo · registro','UI':'interface'};\nfunction hueForIndustria(dd, slug){ var i=(dd('cms-industriesDataSet')||[]).find(function(x){return x.slug===slug;}); return i?(i.hue||'#3A7BFF'):'#3A7BFF'; }\nfunction cleanPH(t){ return String(t==null?'':t).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim(); }\nfunction firstClause(t){ var s=String(t==null?'':t).trim(); var m=s.match(/^(.*?[\\.…])\\s/); return m?m[1]:s; }\nfunction inferNodes(dd, txt){\n  var t = ' '+String(txt||'').toLowerCase()+' ';\n  var rules = [\n    {k:'domain', re:/json-?mode|hard-?gate|planner|linguagem natural|pergunta|indicador|conselho|inten[cç]|decide|julga|dossi[eê]|conversacional|l[eê] |cnh|laudo|vision|extract|recursiv|saldo|\\bbi\\b|next-best/},\n    {k:'rush', re:/\\bvoz\\b|fnol|roteia|automatiz|webhook|evento|cron|explos[aã]o|\\bbom\\b|torre de controle|\\bura\\b|tempo real|pico/},\n    {k:'registry', re:/cat[aá]logo|\\bsku\\b|base real|\\bdados?\\b|registro|busca/},\n    {k:'media', re:/try-on|imagem|gerado por ia|\\bfoto\\b|\\bpdf\\b/},\n    {k:'ui', re:/copiloto|lista|dashboard|gr[aá]fico|tabela|ui generativa|interface|handoff|descoberta|relat[oó]rio/},\n    {k:'connect', re:/integra|core em tempo real|\\berp\\b|\\bpsp\\b|api externa|v[aá]rios sistemas|sistemas/},\n    {k:'id', re:/policy|identidade|autentica[cç]|permiss/}\n  ];\n  var keys = {};\n  rules.forEach(function(r){ if(r.re.test(t)) keys[r.k]=true; });\n  var prods = (dd('cms-productsDataSet')||[]);\n  var picked = prods.filter(function(p){ return keys[p.key]; });\n  if(!picked.length){ picked = prods.filter(function(p){ return p.key==='rush'||p.key==='domain'||p.key==='ui'; }); }\n  picked = picked.slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);}).slice(0,5);\n  return picked;\n}\n\nfunction renderCasosIndex(d2, esc, dd){\n  var cs = (dd('cms-casesDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var cards = cs.map(function(c){\n    var hue = esc(hueForIndustria(dd, c.industria));\n    var lev = esc(cleanPH(c.alavanca).replace(/[;,]\\s*$/,''));\n    var dz  = esc(firstClause(c.desafio));\n    return '<div class=\"d-ind\" data-nav data-href=\"/casos/'+esc(c.slug)+'\" style=\"--accent:'+hue+'\">'\n      + isoTile(hue)\n      + '<div class=\"name\"><span class=\"chip\" style=\"background:'+hue+'\"></span>'+esc(c.cliente_setor)+'</div>'\n      + '<div class=\"dor\" style=\"display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden\">'+dz+'</div>'\n      + '<div class=\"lev\">'+lev+'</div>'\n      + '<div style=\"margin-top:12px;font-size:12.5px;color:var(--action);position:relative;z-index:1\">Ver caso →</div>'\n      + '</div>';\n  }).join('');\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span>'\n    + '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Casos · alavancas reais</div><h1 class=\"d-head big stag\">Não são cases. Estão no ar.</h1><div class=\"d-sub stag\">Cada um tem endereço — abra qualquer um. Dor de operação que um time embarcado resolveu sobre o runtime, com o resultado que ficou.</div></section>'\n    + '<section class=\"d-sec\" data-reveal><div class=\"d-inds i-indgrid stag\">'+cards+'</div></section>';\n}\n\nfunction renderCasoDetail(d2, esc, dd, c){\n  var hue = esc(hueForIndustria(dd, c.industria));\n  var ind = (dd('cms-industriesDataSet')||[]).find(function(x){return x.slug===c.industria;}) || {};\n  var roleOf = function(n){ return PROD_ROLE[String(n).toUpperCase()] || 'runtime'; };\n\n  var hero = '<section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Caso'+(ind.name_pt?' · '+esc(ind.name_pt):'')+'</div><h1 class=\"i-name stag\">'+esc(c.cliente_setor)+'</h1><div class=\"i-dor stag\"><b>'+esc(c.desafio)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O quadro</div><h2 class=\"d-head stag\">O problema e a virada.</h2><div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">Desafio</div><h3>Onde doía</h3><p>'+esc(c.desafio)+'</p></div><div class=\"d-face plat\"><div class=\"tag\">O que fizemos</div><h3>A engenharia</h3><p>'+esc(c.feito||'')+'</p></div></div></section>';\n\n  var segs = String(c.alavanca||'').split(/\\s*[;]\\s*|,\\s+/);\n  var hotDone=false;\n  var levers = segs.map(function(seg){ return parseLever(seg); })\n    .filter(function(p){ return p.qual ? !!(p.text && p.text.length) : !(p.ph && !p.l); })\n    .map(function(p){ var hot=(!p.ph && !p.qual && !hotDone); if(hot) hotDone=true; return leverCard(esc,p,hot); }).join('');\n  var resultado = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Resultado</div><h2 class=\"d-head stag\">O que ficou, em números.</h2><div class=\"d-levers stag\">'+levers+'</div></section>';\n\n  var nodes = inferNodes(dd, (c.desafio||'')+' '+(c.feito||''));\n  var cols = Math.max(nodes.length,1);\n  var nodeHtml = nodes.map(function(p){ var ac=esc(p.accent||'#3A7BFF'); return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+ac+'\"></div><div class=\"i-pn\">'+esc(p.name)+'</div><div class=\"i-pr\">'+esc(roleOf(p.name))+'</div></div>'; }).join('');\n  var stack = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>No runtime</div><h2 class=\"d-head stag\">Os nós que sustentam.</h2><div class=\"d-sub stag\">Um só runtime — os produtos abaixo dividem o mesmo dado e as mesmas policies. Inferido do que a solução faz.</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+cols+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodeHtml+'</div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Tem esse problema na sua operação?</h2><div class=\"d-sub stag\">Construímos com você — semanas, não trimestres.</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Falar com quem já fez isso →</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/casos\">← Casos</span>'+hero+faces+resultado+stack+cta;\n}\n\nfunction renderConsultoria(d2, esc, dd){\n  var steps = [\n    {n:'01',h:'Imersão',p:'Entramos no seu contexto em dias, não meses. Mapeamos a dor, o dado e a régua de sucesso — começando pelo resultado de negócio, não pela ferramenta.'},\n    {n:'02',h:'Construção embarcada',p:'Um squad sênior constrói dentro do seu time, no seu domínio, sobre o runtime Data². Você acompanha cada decisão — nada é caixa-preta.'},\n    {n:'03',h:'Produção',p:'Em 2 a 4 semanas o sistema está rodando de verdade, sob as suas regras, com o dado no seu domínio. Não é protótipo, não é slide.'},\n    {n:'04',h:'Evolução',p:'O sistema fica rodando e evolui com o seu time — no seu domínio, sob as suas regras. Nada de caixa-preta, nada de código escondido.'}\n  ];\n  var flow = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O modelo</div><h2 class=\"d-head stag\">Como trabalhamos.</h2><div class=\"d-sub stag\">Quatro tempos. Você começa com uma dor e termina com um sistema em produção.</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat(4,1fr);--ihue:#3A7BFF\"><div class=\"i-rail\"></div>'\n    + steps.map(function(s){ return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:#3A7BFF\"></div><div class=\"i-pn\">'+esc(s.n)+' · '+esc(s.h)+'</div><div class=\"i-pr\" style=\"text-transform:none;letter-spacing:0;font-family:inherit;font-size:13px;color:var(--ink-mid);line-height:1.5\">'+esc(s.p)+'</div></div>'; }).join('')\n    + '</div></section>';\n\n  var lv = (dd('cms-leversDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);}).slice(0,4);\n  var proof = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Prova</div><h2 class=\"d-head stag\">Já entregue em produção.</h2><div class=\"d-levers stag\">'\n    + lv.map(function(m){ return '<div class=\"d-lever\"><div class=\"v\">'+esc(m.valor)+(m.unidade?'<em>'+esc(m.unidade)+'</em>':'')+'</div><div class=\"l\">'+esc(m.label)+'</div></div>'; }).join('')\n    + '</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O acordo</div><h2 class=\"d-head stag\">Construímos com você. Não pra você.</h2><div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">O time</div><h3>Time embarcado</h3><p>Sênior, dedicados, no seu problema — por sprints de 2 a 4 semanas. Não é uma fábrica de horas do outro lado do mundo.</p></div><div class=\"d-face plat\"><div class=\"tag\">A entrega</div><h3>No ar, no seu domínio</h3><p>No fim, o sistema roda no seu domínio, sob as suas regras. A plataforma sustenta o que foi construído.</p></div></div></section>';\n\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Como trabalhamos</div><h1 class=\"d-head big stag\">Construímos com você. Não pra você.</h1><div class=\"d-sub stag\">Semanas, não trimestres. Produção, não slides. Um time embarca no seu problema e entrega rodando em 2 a 4 semanas.</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Falar com a gente →</button><button class=\"d-btn\" data-nav data-href=\"/plataforma\">Ver a plataforma →</button></div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Vamos mapear onde dói.</h2><div class=\"d-sub stag\">30 minutos com a gente — sem compromisso, sem qualificação de vendas.</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Agendar conversa →</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span>'+hero+flow+proof+faces+cta;\n}\n\nfunction renderPrecos(d2, esc, dd){\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Como trabalhamos</div><h1 class=\"d-head big stag\">Sem tabela de prateleira. Proposta sob medida.</h1><div class=\"d-sub stag\">Preço de prateleira mina o que entregamos. Escolhemos o formato pelo tamanho do problema — e o primeiro passo é sempre entender onde dói, não assinar um plano.</div></section>';\n\n  var models = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Modelos de engajamento</div><h2 class=\"d-head stag\">Três formatos, um método.</h2><div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">2 a 4 semanas</div><h4>Sprint</h4><p>Um squad embarca, resolve um problema fechado e entrega rodando. Ideal para tirar a primeira dor do papel — rápido.</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">Escopo fechado</div><h4>Projeto</h4><p>Um sistema inteiro, do intent à produção, com marcos claros e transferência de propriedade ao final.</p></div><div class=\"d-dfcard\"><div class=\"lab\">Time dedicado</div><h4>Embarque contínuo</h4><p>Um time embarcado de forma recorrente, evoluindo a plataforma lado a lado com o seu time.</p></div></div></section>';\n\n  var step = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O primeiro passo</div><h2 class=\"d-head stag\">30 minutos. Mapeamos onde dói.</h2><div class=\"d-sub stag\">Sem formulário de qualificação, sem tabela. Uma conversa com engenharia para entender o problema — você sai com um caminho, e nós com o formato certo para propor.</div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Montar proposta.</h2><div class=\"d-sub stag\">Fale com a gente — desenhamos o formato sob medida para o seu problema.</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Montar proposta →</button><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span>'+hero+models+step+cta;\n}\n\nfunction renderEmpresa(d2, esc, dd){\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Empresa</div><h1 class=\"d-head big stag\">Enablers entre a ideia e a produção.</h1><div class=\"d-sub stag\">A Data² existe para fechar a distância entre o que um negócio imagina e o que entra em produção. Entramos como time, construímos sobre um runtime proprietário e entregamos rodando — com o dado sempre no seu domínio.</div></section>';\n\n  var tese = '<section class=\"d-sec d-tese\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>A tese</div><h2 class=\"d-head stag\">Software deveria nascer da intenção — e chegar à produção.</h2><div class=\"d-sub stag\">A maioria dos projetos morre entre o slide e o deploy. Nós invertemos isso: um time embarca e entrega rodando em semanas. O runtime sustenta; o dado nunca sai do seu domínio.</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Explore</div><h2 class=\"d-head stag\">Como isso funciona na prática.</h2><div class=\"d-faces stag\"><div class=\"d-face\" data-nav data-href=\"/consultoria\" style=\"cursor:pointer\"><div class=\"tag\">O modelo</div><h3>Como trabalhamos →</h3><p>Imersão, construção embarcada e produção — em semanas. Um time no seu problema, do seu lado.</p></div><div class=\"d-face plat\" data-nav data-href=\"/casos\" style=\"cursor:pointer\"><div class=\"tag\">As provas</div><h3>Casos reais →</h3><p>Alavancas medidas em seguros, CX, varejo, vendas, BI e supply — anonimizadas por setor, com o resultado que ficou.</p></div></div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Vamos conversar.</h2><div class=\"d-sub stag\">Conte onde dói — a gente responde.</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Falar com a gente →</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span>'+hero+tese+faces+cta;\n}\n\nfunction renderCarreiras(d2, esc, dd){\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Carreiras</div><h1 class=\"d-head big stag\">Engenharia que chega à produção.</h1><div class=\"d-sub stag\">A Data² é um time que embarca no problema de um cliente e entrega sistema rodando — em semanas, sobre um runtime proprietário. Procuramos gente que resolve o negócio, não só escreve código.</div></section>';\n\n  var como = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Como trabalhamos</div><h2 class=\"d-head stag\">Consultoria e plataforma, na mesma mesa.</h2><div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">Embarcado no cliente</div><h4>Dentro do time da dor</h4><p>Você constrói junto de quem tem o problema, começando pelo resultado de negócio. Não é fábrica de horas do outro lado do mundo.</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">Um runtime só</div><h4>data2-lang de ponta a ponta</h4><p>Uma linguagem descreve UI, dados, fluxos e regras sobre um runtime proprietário. Menos superfície para errar, mais sistema legível.</p></div><div class=\"d-dfcard\"><div class=\"lab\">Em produção</div><h4>Seu trabalho entra no ar</h4><p>No fim, o sistema roda no domínio do cliente, sob as regras dele. O que você constrói entra em produção de verdade — não morre em POC.</p></div></div></section>';\n\n  var flow = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>O que você toca</div><h2 class=\"d-head stag\">O sistema inteiro, não um fragmento.</h2><div class=\"d-sub stag\">Do primeiro diagnóstico à transferência de propriedade — você acompanha cada etapa, sem caixa-preta.</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat(4,1fr);--ihue:#3A7BFF\"><div class=\"i-rail\"></div>'\n    + [{n:'01',h:'Intenção',p:'Entender a dor e a régua de sucesso antes de escrever a primeira linha.'},{n:'02',h:'Runtime',p:'Construir sobre Rush, Connect e Domain — o motor que sustenta o sistema.'},{n:'03',h:'Produção',p:'Colocar no ar de verdade, sob as regras do cliente, em semanas.'},{n:'04',h:'Evolução',p:'Rodando no domínio do cliente, evoluindo com o time dele.'}].map(function(s){ return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:#3A7BFF\"></div><div class=\"i-pn\">'+esc(s.n)+' · '+esc(s.h)+'</div><div class=\"i-pr\" style=\"text-transform:none;letter-spacing:0;font-family:inherit;font-size:13px;color:var(--ink-mid);line-height:1.5\">'+esc(s.p)+'</div></div>'; }).join('')\n    + '</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Quem procuramos</div><h2 class=\"d-head stag\">Autonomia sênior, decisão embasada.</h2><div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">O perfil</div><h3>Engenheiro de produto</h3><p>Gosta de entender o problema antes da solução. Toma decisão embasada, escreve código legível e não deixa caixa-preta para trás.</p></div><div class=\"d-face plat\"><div class=\"tag\">Como é o dia</div><h3>Ciclos de semanas, não trimestres</h3><p>Você vê o que constrói entrar em produção rápido, sob as regras de quem contratou.</p></div></div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Quer construir assim?</h2><div class=\"d-sub stag\">Mande uma linha sobre você e o tipo de problema que te tira o sono. Engenharia responde — sem funil de recrutamento.</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Falar com a gente →</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/empresa\">← Empresa</span>'+hero+como+flow+faces+cta;\n}\n\nfunction renderContato(d2, esc, dd){\n  var hero = '<section class=\"p-hero\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Contato</div><h1 class=\"d-head big stag\">Conte onde dói.</h1><div class=\"d-sub stag\">Nome, empresa e uma linha sobre o problema. A gente responde em 1 dia útil — sem funil de vendas.</div></section>';\n  var form = '<section class=\"d-sec\" data-reveal><form class=\"cform stag\" data-cform novalidate>'\n    + '<div class=\"cf-row2\"><div class=\"cfield\"><label>Nome</label><input data-cf=\"nome\" placeholder=\"Seu nome\"/></div><div class=\"cfield\"><label>Empresa</label><input data-cf=\"empresa\" placeholder=\"Onde você trabalha\"/></div></div>'\n    + '<div class=\"cfield\"><label>E-mail</label><input data-cf=\"email\" type=\"email\" placeholder=\"voce@empresa.com\"/></div>'\n    + '<div class=\"cfield\"><label>Onde dói</label><textarea data-cf=\"mensagem\" placeholder=\"Uma linha sobre o problema que você quer resolver\"></textarea></div>'\n    + '<input class=\"cf-hp\" data-cf=\"_hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\"/>'\n    + '<div style=\"display:flex;align-items:center;gap:16px;flex-wrap:wrap\"><button type=\"button\" class=\"d-btn\" data-cf-send>Enviar →</button><span class=\"cf-msg\" data-cf-msg></span></div>'\n    + '</form><div class=\"askhint\" style=\"margin-top:18px\">Prefere e-mail direto? <b>contato@data2.app</b></div></section>';\n  return '<span class=\"back\" data-nav data-href=\"/empresa\">← Empresa</span>'+hero+form;\n}\n\nfunction contatoSetup(d2){\n  const send = () => {\n    const root = d2.root || (typeof document!=='undefined'?document:null); if(!root) return;\n    const get = k => { const el=root.querySelector('[data-cf=\"'+k+'\"]'); return el?String(el.value||'').trim():''; };\n    const msgEl = root.querySelector('[data-cf-msg]');\n    const set = (t,c) => { if(msgEl){ msgEl.textContent=t; msgEl.className='cf-msg '+(c||''); } };\n    if(get('_hp')){ return; }\n    const nome=get('nome'), empresa=get('empresa'), email=get('email'), mensagem=get('mensagem');\n    if(!nome||!email||!mensagem){ set('Preencha nome, e-mail e mensagem.','err'); return; }\n    if(!/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(email)){ set('E-mail parece inválido.','err'); return; }\n    const subject='Contato pelo site — '+nome+(empresa?(' · '+empresa):'');\n    const body='Nome: '+nome+'\\nEmpresa: '+empresa+'\\nE-mail: '+email+'\\n\\nOnde dói:\\n'+mensagem;\n    const href='mailto:contato@data2.app?subject='+encodeURIComponent(subject)+'&body='+encodeURIComponent(body);\n    set('Abrindo seu e-mail para enviar…','ok');\n    try{ if(typeof window!=='undefined') window.location.href=href; }catch(_){ }\n  };\n  d2.on('[data-cf-send]','click', send);\n  d2.on('.cform','keydown',(e)=>{ if((e.key==='Enter'||e.keyCode===13) && e.target && e.target.tagName!=='TEXTAREA'){ e.preventDefault(); send(); } });\n}\n\nfunction renderRecursos(d2, esc, dd){\n  var deckUrl = 'https://new-deck.next.data2.app';\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Recursos</div><h1 class=\"d-head big stag\">Material para levar a decisão adiante.</h1><div class=\"d-sub stag\">O que você precisa para avaliar a Data² — como trabalhamos e a plataforma, na mesma conversa. Comece pelo deck; documentação e blog entram em seguida.</div></section>';\n  var cards = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Para começar</div><h2 class=\"d-head stag\">Três frentes.</h2><div class=\"d-df stag\">'\n    + '<a class=\"d-dfcard mid\" href=\"'+deckUrl+'\" target=\"_blank\" rel=\"noopener\" style=\"text-decoration:none;display:block\"><div class=\"lab\">Deck comercial</div><h4>A visão em 5 minutos</h4><p>A tese inteira: um time embarcado no seu problema e um runtime proprietário que entrega rodando. O ponto de partida para levar à sua liderança.</p><div style=\"margin-top:14px;font-size:12.5px;color:var(--action)\">Abrir deck →</div></a>'\n    + '<div class=\"d-dfcard\"><div class=\"lab\">Documentação</div><h4>Como o runtime funciona</h4><p>Referência de data2-lang, primitivos e runtimes — a razão de acreditar por baixo do resultado de negócio. Em preparação.</p><div style=\"margin-top:14px;font-size:12.5px;color:var(--ink-low)\">Em breve</div></div>'\n    + '<div class=\"d-dfcard\"><div class=\"lab\">Blog</div><h4>Notas de engenharia</h4><p>Casos, decisões de arquitetura e o que aprendemos entregando em produção. Em preparação.</p><div style=\"margin-top:14px;font-size:12.5px;color:var(--ink-low)\">Em breve</div></div>'\n    + '</div></section>';\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">Prefere ver rodando?</h2><div class=\"d-sub stag\">Trinta minutos com a gente valem mais que qualquer PDF — e você sai com um caminho.</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">Falar com a gente →</button><button class=\"d-btn\" data-nav data-href=\"/plataforma\">Ver a plataforma →</button></div></section>';\n  return '<span class=\"back\" data-nav data-href=\"/\">← Início</span>'+hero+cards+cta;\n}"}}}}}}}},{"_id":"6a7344ab0d222a3e1c266d0d","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"cms_admin","package":"www","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 REG = {\n  home:    {label:'Home',       ref:'cms-home-sectionsDataSet', disp:'headline', fields:[['sid','ID','text'],['eyebrow','Eyebrow','text'],['headline','Headline','text'],['subhead','Subhead','area'],['cta_label','CTA label','text'],['cta_href','CTA href','text'],['tipo','Tipo','text'],['ordem','Ordem','number'],['ativo','Ativo','bool']]},\n  industrias:{label:'Indústrias', ref:'cms-industriesDataSet', disp:'name_pt', fields:[['slug','Slug','text'],['name_pt','Nome PT','text'],['name_en','Nome EN','text'],['hue','Hue','text'],['dor','Dor','area'],['oferta','Oferta','area'],['capacidades','Capacidades (1/linha)','list'],['produtos_runtimes','Produtos/runtimes (1/linha)','list'],['alavancas','Alavancas (1/linha)','list'],['caso_lastro','Caso lastro','text'],['ordem','Ordem','number'],['ativo','Ativo','bool']]},\n  produtos:{label:'Produtos',   ref:'cms-productsDataSet', disp:'name', fields:[['key','Key','text'],['name','Nome','text'],['tagline','Tagline','text'],['description','Descrição','area'],['accent','Accent','text'],['status','Status','text'],['ordem','Ordem','number']]},\n  runtimes:{label:'Runtimes',   ref:'cms-runtimesDataSet', disp:'name', fields:[['key','Key','text'],['name','Nome','text'],['papel','Papel','text'],['description','Descrição','area'],['accent','Accent','text'],['ordem','Ordem','number']]},\n  casos:   {label:'Casos',      ref:'cms-casesDataSet', disp:'cliente_setor', fields:[['slug','Slug','text'],['cliente_setor','Cliente/setor','text'],['desafio','Desafio','area'],['alavanca','Alavanca','text'],['industria','Indústria','text'],['publico','Público','bool'],['ordem','Ordem','number']]},\n  alavancas:{label:'Alavancas', ref:'cms-leversDataSet', disp:'label', fields:[['valor','Valor','text'],['unidade','Unidade','text'],['label','Label','text'],['placeholder','É placeholder','bool'],['ordem','Ordem','number']]},\n  nav:     {label:'Nav',        ref:'cms-nav-itemsDataSet', disp:'label', fields:[['label','Label','text'],['href','Href','text'],['grupo','Grupo','text'],['parent','Parent','text'],['kind','Kind','text'],['ordem','Ordem','number']]},\n  logos:   {label:'Logos',      ref:'cms-logosDataSet', disp:'label', fields:[['name','Nome','text'],['label','Rótulo','text'],['industria','Indústria','text'],['publico','Público','bool'],['ordem','Ordem','number']]},\n  settings:{label:'Settings',   ref:'cms-settingsDataSet', disp:'key', fields:[['key','Key','text'],['value','Valor','area'],['label','Descrição','text'],['grupo','Grupo','text']]}\n};\nexport default {\n  css: `\n:host{display:block}\n*{box-sizing:border-box}\n.wrap{--s0:#060708;--s1:#0C0E11;--s2:#14171B;--s3:#1C2026;--hi:#F4F6F8;--mid:#A7ADB5;--low:#6B7178;--line:rgba(255,255,255,.08);--action:#3A7BFF;--danger:#E93355;background:var(--s0);color:var(--hi);font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;min-height:100vh;width:100%;display:flex;flex-direction:column}\n.top{display:flex;align-items:center;gap:12px;padding:16px 24px;border-bottom:1px solid var(--line);background:rgba(6,7,8,.8)}\n.top .t{font-weight:700;font-size:16px}\n.top .sub{color:var(--low);font-size:12px}\n.tabs{display:flex;flex-wrap:wrap;gap:4px;padding:12px 24px;border-bottom:1px solid var(--line)}\n.tab{padding:7px 13px;border-radius:8px;font-size:13px;color:var(--mid);cursor:pointer;border:1px solid transparent}\n.tab.active{color:var(--hi);background:var(--s2);border-color:var(--line)}\n.tab:hover{color:var(--hi)}\n.body{flex:1;display:flex;min-height:0}\n.list{flex:1;overflow:auto;padding:16px 24px}\n.rowh{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}\n.rowh h3{margin:0;font-size:15px}\n.btn{background:var(--action);color:#fff;border:none;border-radius:8px;padding:8px 14px;font-size:13px;cursor:pointer;font-family:inherit}\n.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--mid)}\n.btn.danger{background:transparent;border:1px solid rgba(233,51,85,.5);color:var(--danger)}\n.item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px;background:var(--s1)}\n.item .lab{font-size:14px}\n.item .meta{color:var(--low);font-size:12px;font-family:ui-monospace,Menlo,monospace}\n.item .acts{display:flex;gap:6px}\n.mini{padding:5px 10px;font-size:12px;border-radius:7px;cursor:pointer;border:1px solid var(--line);background:transparent;color:var(--mid);font-family:inherit}\n.mini:hover{color:var(--hi)}\n.editor{width:440px;border-left:1px solid var(--line);overflow:auto;padding:20px 22px;background:var(--s1)}\n.editor h3{margin:0 0 14px;font-size:15px}\n.fld{margin-bottom:14px}\n.fld label{display:block;font-size:12px;color:var(--low);margin-bottom:5px;text-transform:uppercase;letter-spacing:.06em}\n.fld input[type=text],.fld input[type=number],.fld textarea{width:100%;background:var(--s0);border:1px solid var(--line);border-radius:8px;color:var(--hi);padding:9px 11px;font-size:14px;font-family:inherit}\n.fld textarea{min-height:76px;resize:vertical}\n.fld input:focus,.fld textarea:focus{outline:none;border-color:var(--action)}\n.fld.chk{display:flex;align-items:center;gap:8px}\n.fld.chk label{margin:0;text-transform:none;letter-spacing:0;font-size:13px;color:var(--mid)}\n.ed-acts{display:flex;gap:8px;margin-top:8px;position:sticky;bottom:0;background:var(--s1);padding-top:12px}\n.empty{color:var(--low);font-size:14px;padding:30px 0}\n.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--s3);border:1px solid var(--line);color:var(--hi);padding:10px 18px;border-radius:10px;font-size:13px;z-index:100}\n@media(max-width:900px){.body{flex-direction:column}.editor{width:100%;border-left:none;border-top:1px solid var(--line)}}\n`,\n  render(d2){\n    const tab = d2.state.tab || 'home';\n    const cfg = REG[tab];\n    const h = d2.data(cfg.ref);\n    const rows = (h ? (h.records()||[]) : []).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;');\n    const tabs = Object.keys(REG).map(k=>`<div class=\"tab ${k===tab?'active':''}\" data-tab=\"${k}\">${REG[k].label}</div>`).join('');\n\n    const list = rows.length ? rows.map(r=>`<div class=\"item\" data-key=\"${r._id}\"><div><div class=\"lab\">${esc(r[cfg.disp])||'(sem título)'}</div><div class=\"meta\">${esc(r._id)}</div></div><div class=\"acts\"><button class=\"mini\" data-edit=\"${r._id}\">Editar</button><button class=\"mini\" data-del=\"${r._id}\">Excluir</button></div></div>`).join('') : `<div class=\"empty\">Nenhum registro.</div>`;\n\n    let editor = '';\n    const editId = d2.state.editId;\n    if (editId) {\n      const rec = editId==='new' ? {} : (rows.find(r=>r._id===editId)||{});\n      const flds = cfg.fields.map(([k,lbl,ty])=>{\n        let v = rec[k];\n        if (ty==='bool') return `<div class=\"fld chk\"><input type=\"checkbox\" data-f=\"${k}\" data-ty=\"bool\" ${v?'checked':''}/><label>${esc(lbl)}</label></div>`;\n        if (ty==='list'){ const txt = Array.isArray(v)?v.join('\\n'):(v||''); return `<div class=\"fld\"><label>${esc(lbl)}</label><textarea data-f=\"${k}\" data-ty=\"list\">${esc(txt)}</textarea></div>`; }\n        if (ty==='area') return `<div class=\"fld\"><label>${esc(lbl)}</label><textarea data-f=\"${k}\" data-ty=\"text\">${esc(v)}</textarea></div>`;\n        if (ty==='number') return `<div class=\"fld\"><label>${esc(lbl)}</label><input type=\"number\" data-f=\"${k}\" data-ty=\"number\" value=\"${esc(v)}\"/></div>`;\n        return `<div class=\"fld\"><label>${esc(lbl)}</label><input type=\"text\" data-f=\"${k}\" data-ty=\"text\" value=\"${esc(v)}\"/></div>`;\n      }).join('');\n      editor = `<div class=\"editor\"><h3>${editId==='new'?'Novo registro':'Editar registro'}</h3>${flds}<div class=\"ed-acts\"><button class=\"btn\" data-save>Salvar</button><button class=\"btn ghost\" data-cancel>Cancelar</button></div></div>`;\n    }\n\n    const toast = d2.state.toast ? `<div class=\"toast\">${esc(d2.state.toast)}</div>` : '';\n    return `<div class=\"wrap\">\n      <div class=\"top\"><div class=\"t\">CMS · data2.app</div><div class=\"sub\">Painel de gestão · Fase 0 · edite o conteúdo do site sem código</div></div>\n      <div class=\"tabs\">${tabs}</div>\n      <div class=\"body\">\n        <div class=\"list\"><div class=\"rowh\"><h3>${cfg.label} · ${rows.length}</h3><button class=\"btn\" data-new>+ Novo</button></div>${list}</div>\n        ${editor}\n      </div>${toast}\n    </div>`;\n  },\n  mounted(d2, root){\n    const cfg = ()=>REG[d2.state.tab||'home'];\n    const flash = (m)=>{ d2.state.toast=m; setTimeout(()=>{ d2.state.toast=null; },1800); };\n    const collect = ()=>{\n      const obj={};\n      d2.$$('[data-f]').forEach(el=>{\n        const k=el.getAttribute('data-f'), ty=el.getAttribute('data-ty');\n        if(ty==='bool') obj[k]=el.checked;\n        else if(ty==='number'){ const n=parseFloat(el.value); obj[k]=isNaN(n)?null:n; }\n        else if(ty==='list') obj[k]=el.value.split('\\n').map(s=>s.trim()).filter(Boolean);\n        else obj[k]=el.value;\n      });\n      return obj;\n    };\n    d2.on('[data-tab]','click',(e)=>{ const el=e.target.closest('[data-tab]'); d2.setState({tab:el.getAttribute('data-tab'),editId:null}); });\n    d2.on('[data-new]','click',()=>{ d2.setState({editId:'new'}); });\n    d2.on('[data-edit]','click',(e)=>{ const el=e.target.closest('[data-edit]'); d2.setState({editId:el.getAttribute('data-edit')}); });\n    d2.on('[data-cancel]','click',()=>{ d2.setState({editId:null}); });\n    d2.on('[data-del]','click',async (e)=>{ const el=e.target.closest('[data-del]'); const id=el.getAttribute('data-del'); const ok=await d2.dialog.confirm('Excluir este registro?'); if(!ok)return; await d2.data(cfg().ref).remove(id); d2.data(cfg().ref).refresh(); flash('Registro excluído'); if(d2.state.editId===id) d2.state.editId=null; });\n    d2.on('[data-save]','click',async ()=>{\n      const ref=cfg().ref; const obj=collect(); const h=d2.data(ref);\n      try{\n        if(d2.state.editId==='new'){ await h.create(obj); }\n        else { h.select(d2.state.editId); Object.entries(obj).forEach(([k,v])=>h.set(k,v)); await h.save(); }\n        h.refresh(); d2.setState({editId:null}); flash('Salvo');\n      }catch(err){ flash('Erro ao salvar'); d2.log('save error',err); }\n    });\n  }\n}"}}}}}}}},{"_id":"6a73496c0894fbd99c707b82","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"site-demo-ask","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;height:100%}\n*{box-sizing:border-box}\n.ask{--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--action:#3A7BFF;--action-hi:#5B93FF;--verme:#E93355;--hairline:rgba(255,255,255,.10);--glass:rgba(16,19,23,.55);--mono:'IBM Plex Mono',ui-monospace,'SF Mono',Menlo,monospace;--sans:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  position:relative;width:100%;height:100%;display:flex;flex-direction:column;gap:14px;padding:20px;border:1px solid var(--hairline);border-radius:16px;background:var(--glass);backdrop-filter:blur(22px) saturate(1.1);font-family:var(--sans);color:var(--ink-hi);overflow:hidden}\n.ask::before{content:'';position:absolute;left:0;top:0;height:2px;width:100%;background:linear-gradient(90deg,transparent,var(--verme),transparent);opacity:0;transition:opacity .3s}\n.ask.think::before{opacity:1;animation:sweep 1.1s cubic-bezier(.4,0,.2,1) infinite}\n@keyframes sweep{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}\n.hd{display:flex;align-items:center;gap:9px;font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-low)}\n.hd .live{width:7px;height:7px;border-radius:50%;background:var(--action);box-shadow:0 0 12px var(--action)}\n.row{display:flex;gap:8px;align-items:stretch}\n.row input{flex:1;min-width:0;background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:12px 14px;color:var(--ink-hi);font-family:var(--sans);font-size:14px;outline:none;transition:.16s}\n.row input::placeholder{color:var(--ink-low)}\n.row input:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.row button.send{border:0;border-radius:10px;padding:0 16px;background:var(--action);color:#fff;font-family:var(--sans);font-size:14px;font-weight:600;cursor:pointer;transition:.16s;white-space:nowrap}\n.row button.send:hover{background:var(--action-hi)}\n.row button.send:disabled{opacity:.5;cursor:default}\n.chips{display:flex;flex-wrap:wrap;gap:8px}\n.chip{font-family:var(--mono);font-size:11.5px;letter-spacing:.01em;color:var(--ink-mid);border:1px solid var(--hairline);background:rgba(255,255,255,.03);border-radius:999px;padding:7px 13px;cursor:pointer;transition:.16s}\n.chip:hover{color:var(--ink-hi);border-color:rgba(255,255,255,.28)}\n.chip.on{color:#fff;border-color:var(--action);background:rgba(58,123,255,.14)}\n.ansbox{position:relative;min-height:96px;border-top:1px solid var(--hairline);padding-top:14px;margin-top:2px}\n.ans{font-family:var(--sans);font-size:14.5px;line-height:1.6;color:#dfe3ea;white-space:pre-wrap}\n.ans .cur{display:inline-block;width:8px;height:16px;margin-left:2px;background:var(--verme);vertical-align:-2px;animation:blink 1s steps(2) infinite}\n@keyframes blink{50%{opacity:0}}\n.thinking{display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.thinking .flow{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--verme),transparent);background-size:200% 100%;animation:flow 1.2s linear infinite}\n@keyframes flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.hint{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:var(--ink-low)}\n.hint b{color:var(--ink-mid)}\n.fallback{display:flex;flex-direction:column;gap:10px}\n.nf{position:relative;height:56px}\n.nf i{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;transform:translateY(-50%);background:var(--action);box-shadow:0 0 14px var(--action)}\n.nf i:nth-child(2){left:6%}.nf i:nth-child(3){left:50%;background:var(--verme);box-shadow:0 0 14px var(--verme)}.nf i:nth-child(4){left:92%;background:var(--action-hi);box-shadow:0 0 14px var(--action-hi)}\n.nf .wire{position:absolute;top:50%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;left:6%;right:8%;transform:translateY(-50%);animation:flow 2.2s linear infinite;opacity:.7}\n`,\n  render(d2){\n    const a = d2.assistant(d2.params.assistant);\n    const st = d2.store(d2.params.store);\n    const used = st ? (st.get('used', 0) || 0) : 0;\n    const max = st ? (st.get('max', 4) || 4) : 4;\n    const capped = used >= max;\n    const mode = d2.state.mode || 'idle';\n    const cachedIdx = d2.state.cachedIdx;\n    const err = d2.state.err;\n    const chips = CHIPS().map((c,i)=>`<button class=\"chip ${mode==='cached'&&cachedIdx===i?'on':''}\" data-chip=\"${i}\">${esc(c.q)}</button>`).join('');\n\n    let ans = '';\n    if (err) {\n      ans = `<div class=\"fallback\"><div class=\"hint\">A demo ao vivo está indisponível agora — o motor continua desenhado em nós e fluxos.</div>\n        <div class=\"nf\"><span class=\"wire\"></span><i></i><i></i><i></i></div>\n        <div class=\"hint\"><b>Rush</b> entra · <b>Domain</b> decide · <b>Connect</b> integra</div></div>`;\n    } else if (mode === 'cached') {\n      const c = CHIPS()[cachedIdx] || CHIPS()[0];\n      ans = `<div class=\"ans\">${esc(c.a)}</div>`;\n    } else if (mode === 'live') {\n      if (a.busy && !(a.answer||'').trim()) {\n        ans = `<div class=\"thinking\">Pensando<span class=\"flow\"></span></div>`;\n      } else {\n        ans = `<div class=\"ans\">${esc(a.answer||'')}${a.busy?'<span class=\"cur\"></span>':''}</div>`;\n      }\n    } else {\n      ans = `<div class=\"hint\">Escolha um exemplo abaixo ou pergunte o que a Data² faz. Respostas reais, do runtime — não do marketing.</div>`;\n    }\n\n    const thinkCls = (mode==='live' && a.busy) ? 'think' : '';\n    const remaining = Math.max(0, max - used);\n    return `<div class=\"ask ${thinkCls}\">\n      <div class=\"hd\"><span class=\"live\"></span>Pergunte à Data²</div>\n      <div class=\"row\">\n        <input class=\"in\" placeholder=\"${capped?'Limite desta sessão atingido — fale com engenharia':'Ex.: como a Data² resolve meu contact center?'}\" ${capped?'disabled':''}/>\n        <button class=\"send\" ${capped?'disabled':''}>Perguntar</button>\n      </div>\n      <div class=\"chips\">${chips}</div>\n      <div class=\"ansbox\">${ans}</div>\n      <div class=\"hint\">${capped?'<b>Sessão no limite.</b> Fale com engenharia para uma demo completa.':`Restam <b>${remaining}</b> perguntas ao vivo nesta sessão · exemplos são gratuitos`}</div>\n    </div>`;\n  },\n  mounted(d2){\n    const ask = async () => {\n      const el = d2.$('.in'); if(!el) return;\n      const text = (el.value||'').trim(); if(!text) return;\n      const st = d2.store(d2.params.store);\n      const used = st ? (st.get('used', 0) || 0) : 0;\n      const max = st ? (st.get('max', 4) || 4) : 4;\n      if (used >= max) return;\n      el.value = '';\n      d2.state.err = null;\n      d2.state.mode = 'live';\n      if (st) st.set('used', used + 1);\n      try {\n        await d2.assistant(d2.params.assistant).ask(text);\n      } catch(e) {\n        d2.state.err = String(e && e.message || e);\n      }\n    };\n    d2.on('.send','click', ask);\n    d2.on('.in','keydown',(e)=>{ if(e.key==='Enter') ask(); });\n    d2.on('.chip','click',(e)=>{\n      const el = e.target.closest('.chip'); if(!el) return;\n      d2.state.err = null;\n      d2.state.mode = 'cached';\n      d2.state.cachedIdx = +el.getAttribute('data-chip');\n    });\n  }\n}\nfunction CHIPS(){ return [\n  { q: 'O que é a Data²?',\n    a: 'A Data² é consultoria de engenharia embarcada somada a uma plataforma proprietária. Engenheiros entram no seu time por sprints de 2 a 4 semanas e entregam o sistema rodando sobre os runtimes Rush, Connect e Domain — e a plataforma continua sua quando o sprint acaba. Quer ver virar produto? Fale com engenharia.' },\n  { q: 'Como funciona em contact center?',\n    a: 'No contact center desenhamos a URA conversacional e o handoff humano com dossiê completo em cada transferência, sustentados pelo runtime Rush e pela camada Domain de IA. Em operação real: +100k atendimentos por dia, −85% de tickets e −50% no tempo de resolução. Veja as indústrias para o desenho completo.' },\n  { q: 'Meus dados ficam comigo?',\n    a: 'Ficam. O Data Framework separa DataSource de DataSet: a UI não sabe se o dado vem de tabela, de API externa ou de IA — e o dado é seu, com busca semântica nativa por cima. É own-your-data por construção. Veja os produtos para entender a plataforma.' }\n]; }\nfunction esc(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); }\n"}},"assistant":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"assistant"}}}},"store":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"store"}}}}}}}}}},{"_id":"6a73c4251204b3d36b630673","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"tcybPUtOFmZ5EcN3hDmcA","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.stage{ position:relative; width:100%; min-height:100%; background:\n    radial-gradient(120% 90% at 50% 8%, #0b0e12 0%, #060708 60%);\n  color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; overflow:hidden; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.head{ position:relative; z-index:3; padding:44px 52px 0; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.32em;\n  text-transform:uppercase; color:#6B7178; }\n.h1{ font-size:clamp(40px,6vw,84px); font-weight:600; letter-spacing:-.03em; margin:10px 0 0; line-height:.98; }\n.sub{ margin:16px 0 0; max-width:52ch; font-size:15px; line-height:1.55; color:#A7ADB5; }\n.sub b{ color:#F4F6F8; font-weight:600; }\n.stagewrap{ position:relative; z-index:2; width:100%; }\nsvg.anat{ display:block; width:100%; height:auto; }\n.hair{ stroke:rgba(255,255,255,.10); }\n.buslbl{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10px; letter-spacing:.18em;\n  text-transform:uppercase; fill:#6B7178; }\n.orglbl{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:12px; letter-spacing:.12em;\n  fill:#A7ADB5; transition:fill .2s; }\n.orgrole{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:9.5px; letter-spacing:.14em;\n  text-transform:uppercase; fill:#565c63; }\n.organ{ cursor:pointer; }\n.organ .core{ transition:r .25s cubic-bezier(.34,1.56,.64,1); }\n.organ .halo{ transform-box:fill-box; transform-origin:center; }\n.breathe{ animation:breathe 5.2s ease-in-out infinite; }\n@keyframes breathe{ 0%,100%{ transform:scale(.9); opacity:.42; } 50%{ transform:scale(1.12); opacity:.9; } }\n.organ:hover .orglbl{ fill:#F4F6F8; }\n.nerve{ fill:none; stroke:rgba(255,255,255,.14); stroke-width:1; }\n.tick{ stroke:rgba(255,255,255,.14); stroke-width:1; }\n.ecgwrap{ position:relative; z-index:2; padding:6px 52px 34px; }\n.ecgrow{ display:flex; align-items:center; gap:16px; }\n.ecg{ flex:1; height:34px; }\n.ecgline{ fill:none; stroke:rgba(255,255,255,.28); stroke-width:1.4;\n  stroke-dasharray:8 1600; stroke-dashoffset:0; animation:ecg 3.1s linear infinite; }\n@keyframes ecg{ to{ stroke-dashoffset:-1608; } }\n.ecgtag{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10px; letter-spacing:.16em;\n  text-transform:uppercase; color:#565c63; white-space:nowrap; }\n.chip{ position:absolute; z-index:5; pointer-events:none; transform:translate(-50%,-140%);\n  background:rgba(9,11,13,.94); border:1px solid rgba(255,255,255,.12); border-radius:10px;\n  padding:9px 12px; opacity:0; transition:opacity .18s; max-width:230px; }\n.chip.on{ opacity:1; }\n.chip .cn{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.1em; color:#F4F6F8; }\n.chip .cd{ font-size:12px; line-height:1.4; color:#A7ADB5; margin-top:3px; }\n.legend{ position:relative; z-index:3; display:flex; gap:26px; flex-wrap:wrap; padding:0 52px 40px;\n  font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.06em; color:#6B7178; }\n.legend b{ color:#A7ADB5; font-weight:400; }\n@media (max-width:760px){ .head{ padding:28px 22px 0; } .ecgwrap,.legend{ padding-left:22px; padding-right:22px; } }\n@media (prefers-reduced-motion:reduce){ .breathe,.ecgline{ animation:none; } .breathe{ opacity:.7; transform:scale(1); } }\n`,\n  render(d2){\n    // official palette (default / highlight / glow)\n    var P = {\n      rush:    ['#8448FA','#DC48FA','#B048FA'],\n      ui:      ['#4866FA','#8448FA','#5748FA'],\n      registry:['#FA4848','#F748A0','#FA4848'],\n      id:      ['#48FAA1','#48FAFA','#48FACE'],\n      domain:  ['#FA48DC','#FA4884','#FA48B0'],\n      media:   ['#FADC48','#BFFA48','#EBFA48'],\n      cashier: ['#BFFA48','#66FA48','#92FA48'],\n      connect: ['#48FAFA','#4DA4FA','#4DCFFA']\n    };\n    // bus geometry (viewBox 0 0 1200 460)\n    var W=1200, ax=120, ay=300, bx=1080, by=250; // Rush -> Connect line\n    function pt(t){ return [ax+(bx-ax)*t, ay+(by-ay)*t]; }\n    // organs along the bus, in processing order\n    var seq = [\n      {k:'rush',    t:0.00, name:'RUSH',    role:'escuta · inbound', up:false, end:true,\n        desc:'Escuta o mundo: webhooks, cron, e-mail, voz. O sistema reage sozinho.'},\n      {k:'ui',      t:0.15, name:'UI',      role:'interface',        up:true,\n        desc:'A interface se descreve e se monta — estrutura declarativa, dado real ligado.'},\n      {k:'registry',t:0.30, name:'REGISTRY',role:'catálogo · dados', up:false,\n        desc:'O dado tipado, versionado — o runtime lê a si mesmo.'},\n      {k:'id',      t:0.45, name:'ID',      role:'identidade · policy', up:true,\n        desc:'A membrana de permissão: quem passa, quem é barrado. Regra em linguagem humana.'},\n      {k:'domain',  t:0.60, name:'DOMAIN',  role:'decide · IA', up:false, big:true,\n        desc:'O cérebro: a IA raciocina ao vivo e devolve uma decisão estruturada.'},\n      {k:'media',   t:0.75, name:'MEDIA',   role:'gera imagem', up:true,\n        desc:'A imaginação: imagem nascendo a partir de um prompt.'},\n      {k:'cashier', t:0.90, name:'CASHIER', role:'transaciona', up:false,\n        desc:'A circulação do valor: taxa, imposto, líquido — sem duplicar, sem perder.'},\n      {k:'connect', t:1.00, name:'CONNECT', role:'integra · outbound', up:true, end:true,\n        desc:'Alcança o mundo: APIs, PSPs, ERPs, mensagens. Em tempo real.'}\n    ];\n\n    var defs = '<defs>'+\n      '<linearGradient id=\"busgrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">'+\n        '<stop offset=\"0\" stop-color=\"'+P.rush[0]+'\"/>'+\n        '<stop offset=\"1\" stop-color=\"'+P.connect[0]+'\"/>'+\n      '</linearGradient>'+\n      seq.map(function(o){ return '<radialGradient id=\"g_'+o.k+'\"><stop offset=\"0\" stop-color=\"'+P[o.k][2]+'\" stop-opacity=\".9\"/><stop offset=\"1\" stop-color=\"'+P[o.k][2]+'\" stop-opacity=\"0\"/></radialGradient>'; }).join('')+\n      '<path id=\"buspath\" d=\"M '+ax+' '+ay+' L '+bx+' '+by+'\"/>'+\n    '</defs>';\n\n    // the traveling comet: position along bus + fill morphing to each organ's color\n    var times = seq.map(function(o){ return o.t.toFixed(2); }).join(';');\n    var cols  = seq.map(function(o){ return P[o.k][0]; }).join(';');\n    var comet =\n      '<circle r=\"15\" fill=\"'+P.rush[2]+'\" opacity=\".28\"><animateMotion dur=\"7s\" repeatCount=\"indefinite\" calcMode=\"linear\"><mpath href=\"#buspath\"/></animateMotion>'+\n        '<animate attributeName=\"fill\" dur=\"7s\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"'+times+'\" values=\"'+cols+'\"/></circle>'+\n      '<circle r=\"4.5\" fill=\"#fff\"><animateMotion dur=\"7s\" repeatCount=\"indefinite\" calcMode=\"linear\"><mpath href=\"#buspath\"/></animateMotion>'+\n        '<animate attributeName=\"fill\" dur=\"7s\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"'+times+'\" values=\"'+cols+'\"/></circle>';\n\n    // organs\n    var organs = seq.map(function(o,i){\n      var p = pt(o.t);\n      var cx=p[0], cy=p[1];\n      var isEnd = o.end;\n      var oy = isEnd ? cy : (cy + (o.up? -96 : 96));   // organ node position\n      var r  = o.big ? 15 : (isEnd ? 17 : 11);\n      var col = P[o.k];\n      var nerve = isEnd ? '' :\n        '<path class=\"nerve\" d=\"M '+cx+' '+cy+' C '+cx+' '+((cy+oy)/2)+' '+cx+' '+((cy+oy)/2)+' '+cx+' '+oy+'\"/>';\n      var tick = isEnd ? '' : '<line class=\"tick\" x1=\"'+cx+'\" y1=\"'+cy+'\" x2=\"'+cx+'\" y2=\"'+(cy+(o.up?-6:6))+'\"/>';\n      var lblY = o.up ? (oy - r - 16) : (oy + r + 20);\n      var roleY = o.up ? (lblY - 13) : (lblY + 13);\n      var delay = (i*0.65).toFixed(2);\n      return '<g class=\"organ\" data-k=\"'+o.k+'\" data-name=\"'+o.name+'\" data-desc=\"'+o.desc.replace(/\"/g,'&quot;')+'\" data-hi=\"'+col[1]+'\" data-def=\"'+col[0]+'\" data-x=\"'+cx+'\" data-y=\"'+oy+'\">'+\n        nerve + tick +\n        '<circle class=\"halo breathe\" cx=\"'+cx+'\" cy=\"'+oy+'\" r=\"'+(r*2.6)+'\" fill=\"url(#g_'+o.k+')\" style=\"animation-delay:'+delay+'s\"/>'+\n        '<circle class=\"core\" cx=\"'+cx+'\" cy=\"'+oy+'\" r=\"'+r+'\" fill=\"'+col[0]+'\" fill-opacity=\"'+(isEnd?'1':'.9')+'\"/>'+\n        (isEnd?'<circle cx=\"'+cx+'\" cy=\"'+oy+'\" r=\"'+(r+5)+'\" fill=\"none\" stroke=\"'+col[0]+'\" stroke-opacity=\".4\" stroke-width=\"1\"/>':'')+\n        '<text class=\"orglbl\" x=\"'+cx+'\" y=\"'+lblY+'\" text-anchor=\"middle\">'+o.name+'</text>'+\n        '<text class=\"orgrole\" x=\"'+cx+'\" y=\"'+roleY+'\" text-anchor=\"middle\">'+o.role+'</text>'+\n      '</g>';\n    }).join('');\n\n    var svg =\n      '<svg class=\"anat\" viewBox=\"0 0 1200 460\" preserveAspectRatio=\"xMidYMid meet\" aria-label=\"Data² Runtime Anatomy\">'+\n        defs +\n        '<text class=\"buslbl\" x=\"'+((ax+bx)/2)+'\" y=\"'+((ay+by)/2 + 40)+'\" text-anchor=\"middle\">o barramento · por aqui conecta com qualquer coisa</text>'+\n        '<path d=\"M '+ax+' '+ay+' L '+bx+' '+by+'\" stroke=\"url(#busgrad)\" stroke-width=\"2\" fill=\"none\" stroke-opacity=\".55\"/>'+\n        organs + comet +\n      '</svg>';\n\n    var ecgpath = 'M0 17 L120 17 L128 17 L134 4 L140 30 L146 17 L300 17 L308 17 L314 6 L320 28 L326 17 L520 17 L528 17 L534 8 L540 26 L546 17 L900 17';\n\n    return ''+\n      '<div class=\"stage\">'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"head\">'+\n          '<div class=\"eyebrow\">Data² · runtime</div>'+\n          '<h1 class=\"h1\">Anatomy</h1>'+\n          '<p class=\"sub\">A maioria compra um <b>stack</b>. Você recebe um <b>organismo</b>. Oito capacidades que já nascem conectadas — um evento entra pelo Rush, atravessa o corpo, e sai pronto pelo Connect.</p>'+\n        '</div>'+\n        '<div class=\"stagewrap\">'+ svg +\n          '<div class=\"chip\" data-chip><div class=\"cn\"></div><div class=\"cd\"></div></div>'+\n        '</div>'+\n        '<div class=\"ecgwrap\"><div class=\"ecgrow\">'+\n          '<span class=\"ecgtag\">sinais / min</span>'+\n          '<svg class=\"ecg\" viewBox=\"0 0 900 34\" preserveAspectRatio=\"none\"><polyline class=\"ecgline\" points=\"'+ecgpath.replace(/M|L/g,' ').trim()+'\"/></svg>'+\n          '<span class=\"ecgtag\">runtime · vivo</span>'+\n        '</div></div>'+\n        '<div class=\"legend\">'+\n          '<span><b>Cor é sinal</b>, não decoração</span>'+\n          '<span><b>Rush</b> escuta · <b>Connect</b> entrega</span>'+\n          '<span><b>Domain</b> decide com IA de verdade</span>'+\n          '<span style=\"color:#565c63\">conceito simplificado — passe o mouse nos órgãos</span>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var chip = root.querySelector('[data-chip]');\n    var wrap = root.querySelector('.stagewrap');\n    var svg = root.querySelector('svg.anat');\n    function place(g){\n      if(!chip || !svg || !wrap) return;\n      var name = g.getAttribute('data-name');\n      var desc = g.getAttribute('data-desc');\n      var hi = g.getAttribute('data-hi');\n      chip.querySelector('.cn').textContent = name;\n      chip.querySelector('.cn').style.color = hi;\n      chip.querySelector('.cd').textContent = desc;\n      // map svg viewBox coords to wrap pixels\n      var vb = svg.viewBox.baseVal;\n      var rect = svg.getBoundingClientRect();\n      var wrect = wrap.getBoundingClientRect();\n      var gx = parseFloat(g.getAttribute('data-x'));\n      var gy = parseFloat(g.getAttribute('data-y'));\n      var px = (gx/vb.width)*rect.width + (rect.left - wrect.left);\n      var py = (gy/vb.height)*rect.height + (rect.top - wrect.top);\n      chip.style.left = px+'px';\n      chip.style.top = py+'px';\n      chip.classList.add('on');\n    }\n    var organEls = Array.prototype.slice.call(root.querySelectorAll('.organ'));\n    organEls.forEach(function(g){\n      var core = g.querySelector('.core');\n      d2.on(g,'mouseenter', function(){\n        if(core && !core.getAttribute('data-boost')){ core.setAttribute('fill', g.getAttribute('data-hi')); core.setAttribute('r', (parseFloat(core.getAttribute('r'))+3)); core.setAttribute('data-boost','1'); }\n        place(g);\n      });\n      d2.on(g,'mouseleave', function(){\n        if(core && core.getAttribute('data-boost')){ core.setAttribute('fill', g.getAttribute('data-def')); core.setAttribute('r', (parseFloat(core.getAttribute('r'))-3)); core.removeAttribute('data-boost'); }\n        if(chip) chip.classList.remove('on');\n      });\n    });\n  }\n}\n"}}}}}}}},{"_id":"6a73c7d590f4048f4429316d","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"CfY50QKVpUDAkdJS02t_6","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:640px; overflow:hidden;\n  background:radial-gradient(130% 100% at 50% 40%, #0b0e12 0%, #060708 62%);\n  color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hd{ position:absolute; top:38px; left:0; right:0; text-align:center; z-index:5; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.34em; text-transform:uppercase; color:#6B7178; }\n.tt{ font-size:clamp(26px,3.4vw,42px); font-weight:600; letter-spacing:-.02em; margin:8px 0 0; }\n.tt .v{ color:#B08CFF; } .tt .c{ color:#7FE9F2; }\n.hint{ margin:10px 0 0; font-size:13px; color:#8b9199; }\n.hint b{ color:#F4F6F8; font-weight:600; }\n.core{ position:absolute; left:50%; top:48%; width:150px; height:150px; transform:translate(-50%,-50%); z-index:2; }\n.core .ring{ position:absolute; inset:0; border-radius:50%; border:1px solid rgba(255,255,255,.14); }\n.core .ring.r2{ inset:18px; border-color:rgba(255,255,255,.08); }\n.core .lens{ position:absolute; inset:38px; border-radius:50%;\n  background:radial-gradient(circle at 50% 45%, rgba(180,200,255,.25), rgba(120,140,200,.04) 70%, transparent);\n  transition:transform .3s, box-shadow .3s, background .3s; }\n.core.hot .lens{ transform:scale(1.18); }\n.core .lbl{ position:absolute; left:50%; bottom:-26px; transform:translateX(-50%); font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:#565c63; white-space:nowrap; }\n.pole{ position:absolute; top:48%; transform:translateY(-50%); z-index:3; text-align:center; }\n.pole.rush{ left:14%; } .pole.conn{ left:86%; }\n.orb{ width:74px; height:74px; border-radius:50%; margin:0 auto; position:relative; transition:transform .3s; }\n.orb .glow{ position:absolute; inset:-40%; border-radius:50%; opacity:.5; animation:breathe 4.6s ease-in-out infinite; }\n.orb .cap{ position:absolute; inset:24%; border-radius:50%; }\n.pole .name{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:13px; letter-spacing:.14em; margin-top:16px; }\n.pole .role{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:9.5px; letter-spacing:.18em; text-transform:uppercase; color:#565c63; margin-top:4px; }\n.rush .cap{ background:radial-gradient(circle at 40% 35%, #C9A8FF, #8448FA 60%, #5a2fb0); }\n.rush .glow{ background:radial-gradient(circle, rgba(132,72,250,.6), transparent 70%); }\n.rush .name{ color:#B08CFF; }\n.conn .cap{ background:radial-gradient(circle at 40% 35%, #BEFAFF, #48FAFA 60%, #1f9aa5); }\n.conn .glow{ background:radial-gradient(circle, rgba(72,250,250,.55), transparent 70%); }\n.conn .name{ color:#7FE9F2; }\n.spine{ position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; pointer-events:none; }\n@keyframes breathe{ 0%,100%{ transform:scale(.94); opacity:.4; } 50%{ transform:scale(1.12); opacity:.75; } }\n.conn-row{ position:absolute; bottom:104px; z-index:4; display:flex; gap:22px; }\n.conn-row.src{ left:8%; } .conn-row.dst{ right:8%; }\n.node{ display:flex; flex-direction:column; align-items:center; gap:9px; cursor:pointer; width:74px;\n  opacity:.82; transition:opacity .2s, transform .2s; }\n.node:hover{ opacity:1; transform:translateY(-3px); }\n.node .disc{ width:52px; height:52px; border-radius:16px; display:flex; align-items:center; justify-content:center;\n  font-family:ui-monospace,Menlo,monospace; font-weight:700; font-size:15px; color:#fff; position:relative;\n  box-shadow:0 8px 26px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.18); }\n.node .disc::after{ content:''; position:absolute; inset:-8px; border-radius:20px; opacity:0; transition:opacity .2s; }\n.node.fire .disc::after{ opacity:.6; box-shadow:0 0 26px 4px currentColor; }\n.node .nm{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.06em; color:#9aa0a8; }\n.node .sub{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.1em; text-transform:uppercase; color:#565c63; margin-top:-4px; }\n.tag{ position:absolute; bottom:56px; left:50%; transform:translateX(-50%) translateY(8px); z-index:6;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.04em; color:#cfd3d8;\n  background:rgba(9,11,13,.92); border:1px solid rgba(255,255,255,.12); border-radius:999px; padding:8px 16px;\n  opacity:0; transition:opacity .3s, transform .3s; white-space:nowrap; }\n.tag.on{ opacity:1; transform:translateX(-50%) translateY(0); }\n.tag b{ color:#7FE9F2; }\n.packet{ position:absolute; width:12px; height:12px; border-radius:50%; z-index:5; pointer-events:none;\n  left:0; top:0; will-change:transform; box-shadow:0 0 18px 3px currentColor; }\n.foot{ position:absolute; bottom:34px; left:0; right:0; text-align:center; z-index:5;\n  font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.05em; color:#565c63; }\n.foot b{ color:#8b9199; font-weight:400; }\n@media (prefers-reduced-motion:reduce){ .orb .glow{ animation:none; opacity:.5; } }\n`,\n  render(d2){\n    var src = [\n      {k:'gh', nm:'GitHub', sub:'push', c:'#cfd3d8', ic:'GH', tc:'#111'},\n      {k:'vtex', nm:'VTEX', sub:'pedido', c:'#F71963', ic:'V', tc:'#fff'},\n      {k:'disc', nm:'Discord', sub:'comando', c:'#5865F2', ic:'D', tc:'#fff'}\n    ];\n    var dst = [\n      {k:'hub', nm:'HubSpot', sub:'contato', c:'#FF7A59', ic:'H', tc:'#fff'},\n      {k:'tw', nm:'Twilio', sub:'SMS', c:'#F22F46', ic:'T', tc:'#fff'},\n      {k:'sh', nm:'Sheets', sub:'linha', c:'#34A853', ic:'S', tc:'#fff'}\n    ];\n    function nodeHtml(o, side){\n      return '<div class=\"node\" data-node=\"'+o.k+'\" data-side=\"'+side+'\">'+\n        '<div class=\"disc\" style=\"background:'+o.c+';color:'+o.tc+'\"><span style=\"color:'+o.tc+'\">'+o.ic+'</span></div>'+\n        '<div class=\"nm\">'+o.nm+'</div><div class=\"sub\">'+o.sub+'</div></div>';\n    }\n    return ''+\n      '<div class=\"st\">'+\n        '<div class=\"grain\"></div>'+\n        '<svg class=\"spine\"><defs>'+\n          '<linearGradient id=\"sp\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\"><stop offset=\"0\" stop-color=\"#8448FA\" stop-opacity=\".5\"/><stop offset=\".5\" stop-color=\"#6f8\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#48FAFA\" stop-opacity=\".5\"/></linearGradient>'+\n        '</defs><line data-spine x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"url(#sp)\" stroke-width=\"1.5\"/></svg>'+\n        '<div class=\"hd\"><div class=\"eb\">Data² · dupla</div>'+\n          '<h1 class=\"tt\"><span class=\"v\">Rush</span> escuta · <span class=\"c\">Connect</span> entrega</h1>'+\n          '<p class=\"hint\">Um barramento só. <b>Clique num conector</b> e veja o evento entrar, virar decisão e sair — inbound→outbound.</p>'+\n        '</div>'+\n        '<div class=\"pole rush\"><div class=\"orb\"><div class=\"glow\"></div><div class=\"cap\"></div></div><div class=\"name\">RUSH</div><div class=\"role\">escuta · inbound</div></div>'+\n        '<div class=\"core\" data-core><div class=\"ring\"></div><div class=\"ring r2\"></div><div class=\"lens\"></div><div class=\"lbl\">runtime · decide</div></div>'+\n        '<div class=\"pole conn\"><div class=\"orb\"><div class=\"glow\"></div><div class=\"cap\"></div></div><div class=\"name\">CONNECT</div><div class=\"role\">integra · outbound</div></div>'+\n        '<div class=\"conn-row src\">'+src.map(function(o){return nodeHtml(o,'src');}).join('')+'</div>'+\n        '<div class=\"conn-row dst\">'+dst.map(function(o){return nodeHtml(o,'dst');}).join('')+'</div>'+\n        '<div class=\"tag\" data-tag></div>'+\n        '<div class=\"foot\"><b>por aqui a Data² conecta com qualquer coisa — o mesmo conector escuta (Rush) e entrega (Connect)</b></div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st = root.querySelector('.st');\n    var core = root.querySelector('[data-core]');\n    var tag = root.querySelector('[data-tag]');\n    var spine = root.querySelector('[data-spine]');\n    var pairs = { gh:{d:'tw', t:'GitHub <b>push</b> → Twilio SMS', ms:210},\n                  vtex:{d:'hub', t:'Pedido <b>VTEX</b> → HubSpot contato', ms:240},\n                  disc:{d:'sh', t:'Comando <b>Discord</b> → Sheets linha', ms:180} };\n    function center(el){ var r=el.getBoundingClientRect(), s=st.getBoundingClientRect();\n      return { x:r.left - s.left + r.width/2, y:r.top - s.top + r.height/2 }; }\n    function layoutSpine(){\n      if(!spine) return; var s=st.getBoundingClientRect();\n      var rush=center(root.querySelector('.pole.rush .orb')); var conn=center(root.querySelector('.pole.conn .orb'));\n      spine.setAttribute('x1',rush.x); spine.setAttribute('y1',rush.y);\n      spine.setAttribute('x2',conn.x); spine.setAttribute('y2',conn.y);\n    }\n    layoutSpine();\n    d2.on(window,'resize', layoutSpine);\n    var busy=false;\n    function tween(el, pts, durs, onSeg, done){\n      var seg=0, t0=null;\n      function frame(ts){ if(t0==null)t0=ts; var el0=ts-t0; var d=durs[seg];\n        var k=Math.min(1, el0/d); var e=1-Math.pow(1-k,3);\n        var a=pts[seg], b=pts[seg+1];\n        el.style.transform='translate('+(a.x+(b.x-a.x)*e)+'px,'+(a.y+(b.y-a.y)*e)+'px)';\n        if(k>=1){ seg++; t0=ts; if(onSeg)onSeg(seg); if(seg>=pts.length-1){ if(done)done(); return; } }\n        requestAnimationFrame(frame);\n      }\n      requestAnimationFrame(frame);\n    }\n    function fire(srcEl){\n      if(busy) return; busy=true;\n      var k=srcEl.getAttribute('data-node'); var pr=pairs[k]; if(!pr){ busy=false; return; }\n      var dstEl=root.querySelector('[data-node=\"'+pr.d+'\"]');\n      srcEl.classList.add('fire'); if(tag)tag.classList.remove('on');\n      var rush=center(root.querySelector('.pole.rush .orb'));\n      var cc=center(core); var conn=center(root.querySelector('.pole.conn .orb'));\n      var s=center(srcEl); var dd=center(dstEl);\n      var pkt=document.createElement('div'); pkt.className='packet';\n      pkt.style.color='#B08CFF'; pkt.style.background='#C9A8FF'; st.appendChild(pkt);\n      pkt.style.transform='translate('+s.x+'px,'+s.y+'px)';\n      var pts=[s, rush, cc, conn, dd];\n      var durs=[360, 340, 300, 340];\n      tween(pkt, pts, durs, function(seg){\n        if(seg===2){ // reached core → flip to cyan\n          core.classList.add('hot'); core.querySelector('.lens').style.boxShadow='0 0 40px 6px rgba(150,180,255,.5)';\n          pkt.style.color='#7FE9F2'; pkt.style.background='#BEFAFF';\n          setTimeout(function(){ core.classList.remove('hot'); core.querySelector('.lens').style.boxShadow=''; },320);\n        }\n        if(seg===4){ dstEl.classList.add('fire'); }\n      }, function(){\n        if(tag){ tag.innerHTML=pr.t+' · <b>'+pr.ms+'ms</b>'; tag.classList.add('on'); }\n        setTimeout(function(){ pkt.remove(); srcEl.classList.remove('fire'); dstEl.classList.remove('fire'); busy=false; }, 900);\n        setTimeout(function(){ if(tag)tag.classList.remove('on'); }, 4200);\n      });\n    }\n    var nodes=Array.prototype.slice.call(root.querySelectorAll('.node[data-side=\"src\"]'));\n    nodes.forEach(function(n){ d2.on(n,'click', function(){ fire(n); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a73c81f669cd00c34874be5","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"3DRZFNWVsMO9iXvpMk3Rt","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:660px; overflow:hidden;\n  background:radial-gradient(120% 100% at 72% 42%, #140a13 0%, #060708 60%);\n  color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.left{ position:relative; z-index:3; width:min(42%,460px); padding:52px 40px; display:flex; flex-direction:column; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.34em; text-transform:uppercase; color:#8a5a86; }\n.tt{ font-size:clamp(34px,4vw,58px); font-weight:600; letter-spacing:-.025em; margin:10px 0 0; line-height:1; }\n.tt .m{ color:#FA48DC; }\n.sub{ margin:16px 0 26px; font-size:14.5px; line-height:1.55; color:#A7ADB5; max-width:34ch; }\n.chips{ display:flex; flex-direction:column; gap:9px; }\n.chip{ text-align:left; font-family:ui-monospace,Menlo,monospace; font-size:12.5px; letter-spacing:.01em;\n  color:#d7c3d4; border:1px solid rgba(250,72,220,.24); background:rgba(250,72,220,.06);\n  border-radius:10px; padding:11px 14px; cursor:pointer; transition:.16s; }\n.chip:hover{ border-color:rgba(250,72,220,.6); color:#fff; background:rgba(250,72,220,.12); }\n.ask{ margin-top:16px; display:flex; gap:8px; }\n.ask input{ flex:1; min-width:0; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.12);\n  border-radius:10px; padding:12px 14px; color:#F4F6F8; font-family:inherit; font-size:14px; outline:none; }\n.ask input:focus{ border-color:#FA48DC; box-shadow:0 0 0 3px rgba(250,72,220,.16); }\n.ask button{ border:0; border-radius:10px; padding:0 16px; background:#FA48DC; color:#180010; font-weight:700;\n  font-family:inherit; font-size:14px; cursor:pointer; }\n.ask button:disabled{ opacity:.5; cursor:default; }\n.stage{ position:relative; z-index:2; flex:1; }\n.brain{ position:absolute; inset:0; }\n.readout{ position:absolute; left:40px; bottom:34px; z-index:4; font-family:ui-monospace,Menlo,monospace;\n  font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#565c63; }\n.readout b{ color:#FA48DC; font-weight:400; font-variant-numeric:tabular-nums; }\n.card{ position:absolute; right:44px; top:50%; width:min(40%,380px); transform:translateY(-50%) translateX(16px);\n  z-index:4; background:rgba(16,8,15,.92); border:1px solid rgba(250,72,220,.3); border-radius:14px;\n  padding:20px 22px; opacity:0; transition:opacity .4s, transform .4s; pointer-events:none;\n  box-shadow:0 30px 80px rgba(0,0,0,.6), 0 0 40px rgba(250,72,220,.12); }\n.card.on{ opacity:1; transform:translateY(-50%) translateX(0); }\n.card .ch{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.24em; text-transform:uppercase; color:#c26db8; }\n.card .cq{ font-size:13px; color:#8b9199; margin:4px 0 12px; line-height:1.4; }\n.card .body{ font-size:14.5px; line-height:1.6; color:#EbdcE8; white-space:pre-wrap; min-height:40px; }\n.card .cur{ display:inline-block; width:8px; height:15px; background:#FA48DC; vertical-align:-2px; margin-left:2px; animation:bl 1s steps(2) infinite; }\n@keyframes bl{ 50%{ opacity:0; } }\n.status{ position:absolute; right:44px; top:50%; transform:translateY(-50%); z-index:4;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.2em; text-transform:uppercase;\n  color:#8a5a86; opacity:0; transition:opacity .3s; }\n.status.on{ opacity:1; }\n@media (max-width:820px){ .st{ flex-direction:column; } .left{ width:100%; padding:34px 24px 12px; } .stage{ min-height:360px; } .card{ position:relative; right:auto; top:auto; transform:none; width:auto; margin:14px 24px 24px; } .card.on{ transform:none; } .status{ right:auto; left:24px; } }\n@media (prefers-reduced-motion:reduce){ .fil{ transition:none !important; } }\n`,\n  render(d2){\n    var chips = [\n      'Quais clientes têm risco de sair?',\n      'Devo aprovar este pedido de crédito?',\n      'Para qual fila roteio este chamado?'\n    ];\n    return ''+\n      '<div class=\"st\">'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"left\">'+\n          '<div class=\"eb\">Data² · domain · decide</div>'+\n          '<h1 class=\"tt\">A IA que <span class=\"m\">decide</span>.</h1>'+\n          '<p class=\"sub\">Não é chat. É o motor de decisão do runtime raciocinando ao vivo e devolvendo uma resposta estruturada — de verdade, agora.</p>'+\n          '<div class=\"chips\">'+chips.map(function(c){return '<button class=\"chip\" data-q=\"'+c.replace(/\"/g,'&quot;')+'\">'+c+'</button>';}).join('')+'</div>'+\n          '<div class=\"ask\"><input class=\"qin\" placeholder=\"…ou pergunte outra coisa de negócio\" /><button class=\"go\">Decidir</button></div>'+\n        '</div>'+\n        '<div class=\"stage\">'+\n          '<svg class=\"brain\" data-brain viewBox=\"0 0 600 600\" preserveAspectRatio=\"xMidYMid meet\"></svg>'+\n          '<div class=\"status\" data-status>raciocinando…</div>'+\n          '<div class=\"card\" data-card><div class=\"ch\">Decisão</div><div class=\"cq\" data-cq></div><div class=\"body\" data-body></div></div>'+\n          '<div class=\"readout\" data-readout>runtime · ocioso</div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var brain=root.querySelector('[data-brain]'), card=root.querySelector('[data-card]');\n    var body=root.querySelector('[data-body]'), cq=root.querySelector('[data-cq]');\n    var status=root.querySelector('[data-status]'), readout=root.querySelector('[data-readout]');\n    var input=root.querySelector('.qin'), go=root.querySelector('.go');\n    var raf=null, busy=false;\n    // build a radial filament tree once (seed at center-left of stage)\n    var CX=210, CY=300, N=9, fils=[];\n    var svgns='http://www.w3.org/2000/svg';\n    (function build(){\n      for(var i=0;i<N;i++){\n        var ang=(-0.9 + 1.8*(i/(N-1))); // fan to the right\n        var len=150+ (i%3)*46;\n        var x1=CX, y1=CY;\n        var mx=CX+Math.cos(ang)*len*0.55, my=CY+Math.sin(ang)*len*0.55 - 40;\n        var x2=CX+Math.cos(ang)*len, y2=CY+Math.sin(ang)*len;\n        var p=document.createElementNS(svgns,'path');\n        p.setAttribute('d','M '+x1+' '+y1+' Q '+mx+' '+my+' '+x2+' '+y2);\n        p.setAttribute('fill','none'); p.setAttribute('stroke','#FA48DC');\n        p.setAttribute('stroke-width', i%3===0?'1.6':'1'); p.setAttribute('stroke-linecap','round');\n        p.setAttribute('class','fil'); p.setAttribute('opacity','0.14');\n        var L=Math.hypot(x2-x1,y2-y1)*1.3;\n        p.style.strokeDasharray=L; p.style.strokeDashoffset=L; p.style.transition='stroke-dashoffset .9s ease, opacity .6s';\n        brain.appendChild(p);\n        var tip=document.createElementNS(svgns,'circle');\n        tip.setAttribute('r','3'); tip.setAttribute('cx',x2); tip.setAttribute('cy',y2);\n        tip.setAttribute('fill','#FA8CE8'); tip.setAttribute('opacity','0'); tip.style.transition='opacity .4s';\n        brain.appendChild(tip);\n        fils.push({p:p,tip:tip,L:L,live:(i%2===0)});\n      }\n      var seed=document.createElementNS(svgns,'circle');\n      seed.setAttribute('cx',CX); seed.setAttribute('cy',CY); seed.setAttribute('r','6');\n      seed.setAttribute('fill','#FA48DC'); brain.appendChild(seed);\n    })();\n    function grow(on){\n      fils.forEach(function(f,i){\n        if(on){ f.p.style.strokeDashoffset = f.live? '0' : (f.L*0.4); f.p.setAttribute('opacity', f.live?'0.85':'0.25'); if(f.live) setTimeout(function(){f.tip.setAttribute('opacity','1');}, 700); }\n        else { f.p.style.strokeDashoffset=f.L; f.p.setAttribute('opacity','0.14'); f.tip.setAttribute('opacity','0'); }\n      });\n    }\n    function coerce(r){ if(!r) return ''; if(typeof r==='string') return r; return r.text||r.content||r.message||r.answer||(r.data&&(r.data.text||r.data.content))||''; }\n    function fallback(q){\n      return 'Veredito: ação recomendada.\\n• 3 sinais relevantes cruzados no runtime.\\n• Confiança alta; regra auditável aplicada.\\n• Próximo passo roteado automaticamente.';\n    }\n    function reveal(txt){\n      var words=txt.split(/(\\s+)/); var i=0; body.textContent='';\n      var curSpan=document.createElement('span'); curSpan.className='cur'; body.appendChild(curSpan);\n      var iv=setInterval(function(){\n        if(i>=words.length){ clearInterval(iv); if(curSpan.parentNode)curSpan.remove(); busy=false; go.disabled=false; return; }\n        body.insertBefore(document.createTextNode(words[i]), curSpan); i++;\n      }, 34);\n    }\n    function decide(q){\n      if(busy) return; busy=true; go.disabled=true;\n      cq.textContent=q; card.classList.remove('on'); body.textContent='';\n      status.classList.add('on'); readout.innerHTML='runtime · <b>raciocinando</b>';\n      grow(true);\n      var t0=Date.now(); var done=false;\n      var prompt='Você é o motor de decisão Domain do runtime Data². Responda à pergunta de negócio abaixo como uma DECISÃO curta e estruturada em português: uma linha \"Veredito:\" e 2 a 3 bullets objetivos (comece cada um com \"• \"). Sem introdução, sem rodeios. Pergunta: '+q;\n      function finish(txt){\n        if(done) return; done=true;\n        var ms=Date.now()-t0; var toks=Math.max(12, Math.round(txt.length/4));\n        status.classList.remove('on');\n        readout.innerHTML='decisão · <b>'+toks+' tokens</b> · <b>'+ms+'ms</b>';\n        // converge filaments\n        fils.forEach(function(f){ if(!f.live){ f.p.setAttribute('opacity','0.06'); f.tip.setAttribute('opacity','0'); } });\n        card.classList.add('on'); reveal(txt.trim());\n      }\n      var timeout=setTimeout(function(){ finish(fallback(q)); }, 6000);\n      try{\n        var pr = d2.assistant && d2.assistant('homeAskExec').ask(prompt);\n        if(pr && pr.then){ pr.then(function(r){ clearTimeout(timeout); var t=coerce(r); finish(t && t.length>4 ? t : fallback(q)); })\n          .catch(function(){ clearTimeout(timeout); finish(fallback(q)); }); }\n        else { clearTimeout(timeout); finish(fallback(q)); }\n      }catch(e){ clearTimeout(timeout); finish(fallback(q)); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.chip')).forEach(function(c){\n      d2.on(c,'click', function(){ decide(c.getAttribute('data-q')); });\n    });\n    d2.on(go,'click', function(){ var v=(input.value||'').trim(); if(v) decide(v); });\n    d2.on(input,'keydown', function(e){ if(e.key==='Enter'){ var v=(input.value||'').trim(); if(v) decide(v); } });\n  }\n}\n"}}}}}}}},{"_id":"6a73c868f40ebd96f36ed74b","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"aPbFCgSZrujN8SOdIJ5Q9","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:660px; overflow:hidden;\n  background:radial-gradient(120% 100% at 28% 40%, #160a0a 0%, #060708 60%);\n  color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.left{ position:relative; z-index:3; width:min(40%,440px); padding:52px 40px; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.34em; text-transform:uppercase; color:#a35a5a; }\n.tt{ font-size:clamp(34px,4vw,58px); font-weight:600; letter-spacing:-.025em; margin:10px 0 0; line-height:1; }\n.tt .r{ color:#FA4848; }\n.sub{ margin:16px 0 24px; font-size:14.5px; line-height:1.55; color:#A7ADB5; max-width:34ch; }\n.meta{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#8b9199; }\n.meta b{ color:#FA4848; font-variant-numeric:tabular-nums; }\n.meta .ds{ color:#d7bcbc; }\n.hintx{ margin-top:22px; font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.06em; color:#565c63; }\n.stage{ position:relative; z-index:2; flex:1; display:flex; align-items:center; justify-content:center; }\n.crystal{ position:relative; width:min(84%,420px); }\n.dsname{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:#a35a5a; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.dsname::before{ content:''; width:7px; height:7px; border-radius:50%; background:#FA4848; box-shadow:0 0 12px #FA4848; }\n.rows{ display:flex; flex-direction:column; gap:7px; }\n.row{ position:relative; display:flex; align-items:center; gap:12px; padding:12px 14px; border-radius:11px;\n  background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.08); cursor:pointer;\n  opacity:0; transform:translateX(18px); transition:opacity .5s, transform .5s, border-color .2s, background .2s; }\n.row.in{ opacity:1; transform:none; }\n.row:hover{ border-color:rgba(250,72,72,.5); background:rgba(250,72,72,.06); }\n.row .fn{ font-family:ui-monospace,Menlo,monospace; font-size:13px; color:#F4F6F8; flex:1; }\n.row .ty{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.08em; text-transform:uppercase;\n  padding:3px 8px; border-radius:999px; border:1px solid currentColor; }\n.row .dot{ width:8px; height:8px; border-radius:2px; }\n.ty.texto{ color:#7Fb0FF; } .ty.numero{ color:#48FAA1; } .ty.cor{ color:#FADC48; } .ty.lista{ color:#DC48FA; } .ty.bool{ color:#FF8A3D; }\n.dot.texto{ background:#7Fb0FF; } .dot.numero{ background:#48FAA1; border-radius:50%; } .dot.cor{ background:#FADC48; transform:rotate(45deg); } .dot.lista{ background:#DC48FA; } .dot.bool{ background:#FF8A3D; border-radius:50%; }\n.sample{ position:absolute; left:100%; margin-left:14px; top:50%; transform:translateY(-50%) translateX(8px);\n  width:210px; background:rgba(14,7,7,.95); border:1px solid rgba(250,72,72,.3); border-radius:10px; padding:10px 12px;\n  opacity:0; pointer-events:none; transition:.2s; z-index:6; }\n.row:hover .sample{ opacity:1; transform:translateY(-50%) translateX(0); }\n.sample .sh{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.16em; text-transform:uppercase; color:#a35a5a; margin-bottom:6px; }\n.sample .sv{ font-size:12.5px; color:#e6d4d4; line-height:1.5; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.scan{ position:absolute; left:-6px; right:-6px; height:2px; top:0; z-index:5;\n  background:linear-gradient(90deg,transparent,#FA4848,transparent); opacity:0; filter:drop-shadow(0 0 8px #FA4848); }\n.scan.run{ animation:scan 1.9s cubic-bezier(.6,0,.3,1) forwards; }\n@keyframes scan{ 0%{ opacity:0; top:0; } 8%{ opacity:1; } 92%{ opacity:1; } 100%{ opacity:0; top:100%; } }\n.pt{ position:absolute; width:7px; height:7px; z-index:4; pointer-events:none; opacity:0; }\n.foot{ position:absolute; bottom:30px; left:0; right:0; text-align:center; z-index:5;\n  font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.05em; color:#565c63; }\n.foot b{ color:#8b9199; font-weight:400; }\n@media (max-width:820px){ .st{ flex-direction:column; } .left{ width:100%; padding:34px 24px 6px; } .sample{ display:none; } }\n@media (prefers-reduced-motion:reduce){ .row{ opacity:1; transform:none; transition:none; } .scan{ display:none; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\">'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"left\">'+\n          '<div class=\"eb\">Data² · registry · dados</div>'+\n          '<h1 class=\"tt\">O dado que se <span class=\"r\">conhece</span>.</h1>'+\n          '<p class=\"sub\">O runtime lê a própria estrutura: cada campo tipado, cada registro real atracando no seu lugar. Não é um banco — é acesso versionado ao dado.</p>'+\n          '<div class=\"meta\">Lendo <span class=\"ds\" data-ds>—</span> · <b data-recn>0</b> registros · <b data-fn>0</b> campos</div>'+\n          '<div class=\"hintx\" data-hint>montando o schema…</div>'+\n        '</div>'+\n        '<div class=\"stage\"><div class=\"crystal\">'+\n          '<div class=\"dsname\" data-dsname>schema</div>'+\n          '<div class=\"scan\" data-scan></div>'+\n          '<div class=\"rows\" data-rows></div>'+\n        '</div></div>'+\n        '<div class=\"foot\"><b>DataSet = acesso ao dado, tipado e vivo — o runtime introspecta a si mesmo</b></div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var rowsEl=root.querySelector('[data-rows]');\n    var dsEl=root.querySelector('[data-ds]'), dsName=root.querySelector('[data-dsname]');\n    var recn=root.querySelector('[data-recn]'), fnEl=root.querySelector('[data-fn]');\n    var scan=root.querySelector('[data-scan]'), hint=root.querySelector('[data-hint]');\n    var DS='cms-productsDataSet';\n    function getRecs(){\n      try{ var h = d2.data ? d2.data(DS) : null; if(h && h.records){ var r=h.records()||[]; if(r.length) return r; } }catch(e){}\n      // fallback demo rows (typed like the real table)\n      return [\n        {key:'ui', name:'UI', tagline:'a interface se descreve', accent:'#4866FA', status:'ativo', ordem:1},\n        {key:'registry', name:'REGISTRY', tagline:'o catálogo do dado', accent:'#FA4848', status:'ativo', ordem:2},\n        {key:'id', name:'ID', tagline:'identidade e policy', accent:'#48FAA1', status:'ativo', ordem:3},\n        {key:'media', name:'MEDIA', tagline:'gera imagem', accent:'#FADC48', status:'ativo', ordem:4},\n        {key:'domain', name:'DOMAIN', tagline:'decide com IA', accent:'#FA48DC', status:'ativo', ordem:5},\n        {key:'rush', name:'RUSH', tagline:'escuta o mundo', accent:'#8448FA', status:'ativo', ordem:6},\n        {key:'cashier', name:'CASHIER', tagline:'transaciona valor', accent:'#BFFA48', status:'em-breve', ordem:7},\n        {key:'connect', name:'CONNECT', tagline:'integra com tudo', accent:'#48FAFA', status:'ativo', ordem:8}\n      ];\n    }\n    function typeOf(v){\n      if(typeof v==='number') return 'numero';\n      if(typeof v==='boolean') return 'bool';\n      if(Array.isArray(v)) return 'lista';\n      if(typeof v==='string' && /^#[0-9a-f]{3,8}$/i.test(v.trim())) return 'cor';\n      return 'texto';\n    }\n    var recs=getRecs();\n    var HIDE={_id:1, id:1, createdAt:1, updatedAt:1, __v:1, publico:1};\n    var fields=[];\n    if(recs[0]) Object.keys(recs[0]).forEach(function(k){ if(!HIDE[k]) fields.push(k); });\n    fields=fields.slice(0,7);\n    dsEl.textContent=DS; dsName.textContent=DS;\n    fnEl.textContent=fields.length;\n    // build rows\n    fields.forEach(function(f){\n      var vals=recs.map(function(r){return r[f];}).filter(function(v){return v!==undefined&&v!==null&&v!=='';});\n      var ty=typeOf(vals.length?vals[0]:'');\n      var sample=vals.slice(0,3).map(function(v){return String(v);}).join(' · ') || '—';\n      var row=document.createElement('div'); row.className='row'; row.setAttribute('data-f',f);\n      row.innerHTML='<div class=\"dot '+ty+'\"></div><div class=\"fn\">'+f+'</div>'+\n        '<div class=\"ty '+ty+'\">'+ty+'</div>'+\n        '<div class=\"sample\"><div class=\"sh\">'+f+' · '+ty+'</div><div class=\"sv\">'+sample.replace(/</g,'&lt;')+'</div></div>';\n      rowsEl.appendChild(row);\n    });\n    var rowEls=Array.prototype.slice.call(rowsEl.querySelectorAll('.row'));\n    // boot: scan + rows materialize + count up records\n    function boot(){\n      if(scan) scan.classList.add('run');\n      rowEls.forEach(function(r,i){ setTimeout(function(){ r.classList.add('in'); }, 240 + i*140); });\n      var target=recs.length, c=0, per=Math.max(1, Math.round(target/24));\n      var iv=setInterval(function(){ c=Math.min(target, c+per); recn.textContent=c; if(c>=target){ clearInterval(iv); hint.textContent='schema vivo · passe o mouse num campo'; } }, 40);\n    }\n    // run when visible\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ boot(); io.disconnect(); } }); }, {threshold:.25});\n    io.observe(root.querySelector('.crystal'));\n    // hover revalidate flash on the type badge\n    rowEls.forEach(function(r){\n      d2.on(r,'mouseenter', function(){ var b=r.querySelector('.ty'); if(b){ b.style.transition='transform .2s'; b.style.transform='scale(1.12)'; } });\n      d2.on(r,'mouseleave', function(){ var b=r.querySelector('.ty'); if(b){ b.style.transform=''; } });\n    });\n  }\n}\n"}}}}}}}},{"_id":"6a73cd0ed5c61d2c1c9a61f6","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ZPmaVqg9xb19663vcgCpN","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:680px; overflow:hidden;\n  background:radial-gradient(70% 70% at 62% 46%, #1a0a17 0%, #0a0509 46%, #060708 100%);\n  color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:2;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.copy{ position:absolute; top:52px; left:56px; z-index:4; max-width:36ch; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.34em; text-transform:uppercase; color:#a15a99; }\n.h1{ font-size:clamp(38px,4.4vw,66px); font-weight:600; letter-spacing:-.03em; line-height:.98; margin:12px 0 0; }\n.h1 .m{ background:linear-gradient(90deg,#FA48DC,#FA4884); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }\n.sub{ margin:18px 0 0; font-size:15px; line-height:1.6; color:#b9adb6; max-width:34ch; }\n.sub b{ color:#F4F6F8; font-weight:600; }\n.modes{ position:absolute; left:56px; bottom:120px; z-index:4; display:flex; flex-wrap:wrap; gap:10px; max-width:360px; }\n.mode{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase;\n  color:#c99ac3; border:1px solid rgba(250,72,220,.28); background:rgba(250,72,220,.05); border-radius:999px;\n  padding:7px 13px; cursor:pointer; transition:.18s; }\n.mode:hover,.mode.on{ color:#fff; border-color:rgba(250,72,220,.75); background:rgba(250,72,220,.16); box-shadow:0 0 20px rgba(250,72,220,.25); }\n.imgwrap{ position:absolute; right:60px; top:96px; z-index:4; width:190px; }\n.imgcap{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#a15a99; margin-bottom:8px; display:flex; justify-content:space-between; }\ncanvas.img{ width:190px; height:190px; border-radius:14px; border:1px solid rgba(250,72,220,.28); display:block;\n  box-shadow:0 20px 50px rgba(0,0,0,.5), 0 0 30px rgba(250,72,220,.12); }\n.voice{ position:absolute; right:60px; bottom:120px; z-index:4; width:230px; }\n.vcap{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#a15a99; margin-bottom:8px; }\ncanvas.wave{ width:230px; height:56px; display:block; }\n.readout{ position:absolute; left:0; right:0; bottom:38px; z-index:4; text-align:center;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:#6b5a68; }\n.readout b{ color:#FA48DC; font-weight:400; font-variant-numeric:tabular-nums; }\n.readout .sep{ color:#3a2f38; margin:0 12px; }\n@media (max-width:900px){ .imgwrap,.voice{ position:relative; right:auto; top:auto; bottom:auto; display:inline-block; margin:14px 0 0 56px; } .modes{ position:relative; left:56px; bottom:auto; margin-top:16px; } .copy{ position:relative; top:auto; left:auto; padding:40px 24px 0; margin:0; } canvas.field{ opacity:.5; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.7; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"copy\">'+\n          '<div class=\"eb\">Data² · domain · inteligência</div>'+\n          '<h1 class=\"h1\">A mente do <span class=\"m\">runtime</span>.</h1>'+\n          '<p class=\"sub\">Texto, voz, imagem e visão — um só motor que raciocina a <b>~2.000 tokens/s</b>, decide e responde. Não é um chatbot: é a inteligência embutida na operação.</p>'+\n        '</div>'+\n        '<div class=\"modes\" data-modes>'+\n          ['Texto','Voz in/out','Imagem','Visão','Decisão','Embeddings','Streaming'].map(function(m,i){return '<span class=\"mode'+(i===0?' on':'')+'\" data-mode=\"'+m+'\">'+m+'</span>';}).join('')+\n        '</div>'+\n        '<div class=\"imgwrap\"><div class=\"imgcap\"><span>gerando imagem</span><span data-imgpct>0%</span></div><canvas class=\"img\" data-img width=\"190\" height=\"190\"></canvas></div>'+\n        '<div class=\"voice\"><div class=\"vcap\">voz · entrada / saída</div><canvas class=\"wave\" data-wave width=\"230\" height=\"56\"></canvas></div>'+\n        '<div class=\"readout\"><b data-tps>2000</b> tokens/s<span class=\"sep\">·</span><b data-lat>18</b>ms latência<span class=\"sep\">·</span><b>7</b> modalidades vivas</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]');\n    var field=root.querySelector('[data-field]'), img=root.querySelector('[data-img]'), wave=root.querySelector('[data-wave]');\n    var tps=root.querySelector('[data-tps]'), lat=root.querySelector('[data-lat]'), imgpct=root.querySelector('[data-imgpct]');\n    var fctx=field.getContext('2d'), ictx=img.getContext('2d'), wctx=wave.getContext('2d');\n    var reduce = (typeof window!=='undefined' && window.matchMedia && window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2, (window.devicePixelRatio||1));\n    var W=0,H=0,CX=0,CY=0;\n    function size(){\n      var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.62; CY=H*0.48;\n      field.width=W*DPR; field.height=H*DPR; fctx.setTransform(DPR,0,0,DPR,0,0);\n    }\n    size(); d2.on(window,'resize', size);\n\n    // ---- token torrent ----\n    var toks=[], MAX=reduce?60:320, hueBase=320; // magenta-ish\n    function spawn(n){ for(var i=0;i<n;i++){ if(toks.length>=MAX) break;\n      var a=(-0.5 + Math.random()*1.0) * 1.15 + 0.0; // fan to the right + spread\n      var ang = a - 0.15 + (Math.random()-0.5)*0.5;\n      var sp = 2.2 + Math.random()*3.4;\n      toks.push({ x:CX, y:CY, vx:Math.cos(ang)*sp, vy:Math.sin(ang)*sp*0.8, life:1, r:0.8+Math.random()*1.7,\n        h: 300 + Math.random()*40 }); } }\n\n    // ---- core arcs ----\n    var t0=performance.now();\n    function drawCore(t){\n      var pulse = 0.5 + 0.5*Math.sin(t*0.0016);\n      // baked glow\n      var g=fctx.createRadialGradient(CX,CY,0,CX,CY,140+pulse*40);\n      g.addColorStop(0,'rgba(250,72,220,'+(0.30+pulse*0.16)+')');\n      g.addColorStop(0.4,'rgba(250,72,220,0.10)');\n      g.addColorStop(1,'rgba(250,72,220,0)');\n      fctx.fillStyle=g; fctx.beginPath(); fctx.arc(CX,CY,180,0,Math.PI*2); fctx.fill();\n      // concentric arcs\n      for(var i=0;i<5;i++){\n        var rr=26+i*15; var spd=(i%2?-1:1)*(0.0004+i*0.00016);\n        var a0=t*spd + i; var a1=a0 + 1.1 + 0.5*Math.sin(t*0.001+i);\n        fctx.beginPath(); fctx.arc(CX,CY,rr,a0,a1);\n        fctx.strokeStyle='rgba(255,150,235,'+(0.5-i*0.07)+')'; fctx.lineWidth=1.4; fctx.stroke();\n      }\n      // nucleus\n      fctx.beginPath(); fctx.arc(CX,CY,8+pulse*3,0,Math.PI*2);\n      fctx.fillStyle='#FFC8F2'; fctx.shadowColor='#FA48DC'; fctx.shadowBlur=24; fctx.fill(); fctx.shadowBlur=0;\n    }\n\n    // ---- image de-noise loop ----\n    var IB=0, imgT=0, IN=null;\n    function imgFrame(dt){\n      imgT+=dt; var cyc=3200; var p=(imgT%cyc)/cyc; // 0..1\n      imgpct.textContent=Math.round(Math.min(1,p*1.15)*100)+'%';\n      var res = Math.max(3, Math.round(3 + (1-p)* (p<0.98?42:0))); // block size shrinks -> sharpen\n      var cell=190/Math.ceil(190/res);\n      ictx.clearRect(0,0,190,190);\n      for(var y=0;y<190;y+=cell){ for(var x=0;x<190;x+=cell){\n        // target \"image\": a soft magenta orb gradient\n        var dx=(x+cell/2-95)/95, dy=(y+cell/2-95)/95; var d=Math.sqrt(dx*dx+dy*dy);\n        var base=Math.max(0,1-d);\n        var noise=(1-p)* (Math.random()-0.5)*1.3;\n        var v=Math.max(0,Math.min(1, base + noise));\n        var rr=Math.round(120+v*135), gg=Math.round(20+v*70), bb=Math.round(90+v*150);\n        ictx.fillStyle='rgb('+rr+','+gg+','+bb+')';\n        ictx.fillRect(x,y,cell+1,cell+1);\n      } }\n    }\n\n    // ---- voice waveform ----\n    function waveFrame(t){\n      wctx.clearRect(0,0,230,56); wctx.beginPath();\n      for(var x=0;x<=230;x+=2){\n        var e = Math.sin(x*0.06 + t*0.006)*0.5 + Math.sin(x*0.13 - t*0.009)*0.3 + Math.sin(x*0.21+t*0.013)*0.2;\n        var amp = 20*(0.35+0.65*Math.abs(Math.sin(t*0.0021 + x*0.004)));\n        var y=28 + e*amp;\n        if(x===0) wctx.moveTo(x,y); else wctx.lineTo(x,y);\n      }\n      var grd=wctx.createLinearGradient(0,0,230,0); grd.addColorStop(0,'rgba(250,72,220,.2)'); grd.addColorStop(.5,'#FA48DC'); grd.addColorStop(1,'rgba(77,207,250,.6)');\n      wctx.strokeStyle=grd; wctx.lineWidth=1.6; wctx.stroke();\n    }\n\n    // ---- readout jitter ----\n    var jit=0;\n    function jitter(t){ if(t-jit>140){ jit=t;\n      tps.textContent=(1900+Math.floor(Math.random()*260)).toLocaleString('pt-BR');\n      lat.textContent=(12+Math.floor(Math.random()*14)); } }\n\n    var raf=null, last=performance.now(), running=true;\n    function loop(t){\n      if(!running) return;\n      var dt=Math.min(48, t-last); last=t;\n      // trails: translucent wipe instead of clear\n      fctx.fillStyle='rgba(6,7,8,0.28)'; fctx.fillRect(0,0,W,H);\n      spawn(reduce?1:5);\n      for(var i=toks.length-1;i>=0;i--){ var p=toks[i];\n        p.x+=p.vx; p.y+=p.vy; p.vx*=0.995; p.life-=0.011;\n        if(p.life<=0 || p.x>W+20 || p.x<-20 || p.y<-20 || p.y>H+20){ toks.splice(i,1); continue; }\n        fctx.beginPath(); fctx.arc(p.x,p.y,p.r,0,Math.PI*2);\n        fctx.fillStyle='rgba('+ (250) +','+ (72+Math.round(p.life*90)) +','+ (220) +','+ (0.15+p.life*0.7) +')';\n        fctx.fill();\n      }\n      drawCore(t);\n      imgFrame(dt); waveFrame(t); jitter(t);\n      raf=requestAnimationFrame(loop);\n    }\n    if(reduce){ fctx.fillStyle='rgba(6,7,8,1)'; fctx.fillRect(0,0,W,H); spawn(60); for(var k=0;k<60;k++){var p=toks[k]; if(!p)continue; p.x=CX+p.vx*30; p.y=CY+p.vy*30; fctx.beginPath(); fctx.arc(p.x,p.y,p.r,0,6.28); fctx.fillStyle='rgba(250,120,220,.5)'; fctx.fill();} drawCore(1200); imgT=3100; imgFrame(0); waveFrame(0); }\n    else raf=requestAnimationFrame(loop);\n\n    // pause offscreen\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){\n      if(e.isIntersecting){ if(!running && !reduce){ running=true; last=performance.now(); raf=requestAnimationFrame(loop); } }\n      else { running=false; if(raf) cancelAnimationFrame(raf); }\n    }); }, {threshold:.05}); io.observe(st);\n\n    // modality interaction — burst on click\n    Array.prototype.slice.call(root.querySelectorAll('.mode')).forEach(function(m){\n      d2.on(m,'click', function(){\n        Array.prototype.slice.call(root.querySelectorAll('.mode')).forEach(function(o){o.classList.remove('on');});\n        m.classList.add('on'); if(!reduce) spawn(80);\n      });\n    });\n  }\n}\n"}}}}}}}},{"_id":"6a73dfdc82f74266a2c825f7","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"GrNg1FVOcjUlrSFg5v_xI","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:680px; overflow:hidden;\n  background:#050406; color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none;\n  background:radial-gradient(62% 68% at 60% 48%, transparent 40%, rgba(4,3,6,.55) 100%); }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.copy{ position:absolute; top:54px; left:58px; z-index:5; max-width:34ch; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.36em; text-transform:uppercase; color:#b16aa8; }\n.h1{ font-size:clamp(40px,4.6vw,72px); font-weight:600; letter-spacing:-.035em; line-height:.95; margin:14px 0 0; }\n.h1 .m{ background:linear-gradient(96deg,#FF7BE6,#FA48DC 45%,#B048FA); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }\n.sub{ margin:20px 0 0; font-size:15px; line-height:1.62; color:#b9adb6; max-width:33ch; }\n.sub b{ color:#F4F6F8; font-weight:600; }\n.modes{ position:absolute; left:58px; bottom:132px; z-index:5; display:flex; flex-wrap:wrap; gap:9px; max-width:340px; }\n.mode{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.1em; text-transform:uppercase;\n  color:#c99ac3; border:1px solid rgba(250,72,220,.24); background:rgba(250,72,220,.045); border-radius:999px;\n  padding:6px 12px; cursor:pointer; transition:.18s; }\n.mode:hover,.mode.on{ color:#fff; border-color:rgba(250,72,220,.8); background:rgba(250,72,220,.18); box-shadow:0 0 22px rgba(250,72,220,.3); }\n.imgwrap{ position:absolute; right:64px; top:100px; z-index:5; width:196px; }\n.imgcap{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#b16aa8; margin-bottom:9px; display:flex; justify-content:space-between; }\ncanvas.img{ width:196px; height:196px; border-radius:16px; border:1px solid rgba(250,72,220,.26); display:block;\n  box-shadow:0 24px 60px rgba(0,0,0,.55), 0 0 44px rgba(250,72,220,.14); }\n.voice{ position:absolute; right:64px; bottom:128px; z-index:5; width:236px; }\n.vcap{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#b16aa8; margin-bottom:9px; }\ncanvas.wave{ width:236px; height:60px; display:block; }\n.readout{ position:absolute; left:0; right:0; bottom:40px; z-index:5; text-align:center;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.2em; text-transform:uppercase; color:#5f4f5c; }\n.readout b{ color:#FA48DC; font-weight:400; font-variant-numeric:tabular-nums; }\n.readout .sep{ color:#33272f; margin:0 12px; }\n@media (max-width:900px){ .imgwrap,.voice{ position:relative; right:auto; top:auto; bottom:auto; display:inline-block; margin:14px 0 0 58px; } .modes{ position:relative; left:58px; bottom:auto; margin-top:16px; } .copy{ position:relative; padding:40px 24px 0; top:auto; left:auto; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div>'+\n        '<div class=\"copy\">'+\n          '<div class=\"eb\">Data² · domain · inteligência</div>'+\n          '<h1 class=\"h1\">A mente do <span class=\"m\">runtime</span>.</h1>'+\n          '<p class=\"sub\">Um só motor: <b>texto, voz, imagem e visão</b>. Raciocina a <b>~2.000 tokens/s</b>, decide e responde — inteligência embutida na operação, não um chatbot.</p>'+\n        '</div>'+\n        '<div class=\"modes\" data-modes>'+\n          ['Texto','Voz in/out','Imagem','Visão','Decisão','Embeddings','Streaming'].map(function(m,i){return '<span class=\"mode'+(i===0?' on':'')+'\" data-mode=\"'+m+'\">'+m+'</span>';}).join('')+\n        '</div>'+\n        '<div class=\"imgwrap\"><div class=\"imgcap\"><span>gerando · visão</span><span data-imgpct>0%</span></div><canvas class=\"img\" data-img width=\"392\" height=\"392\"></canvas></div>'+\n        '<div class=\"voice\"><div class=\"vcap\">voz · entrada / saída</div><canvas class=\"wave\" data-wave width=\"472\" height=\"120\"></canvas></div>'+\n        '<div class=\"readout\"><b data-tps>2000</b> tokens/s<span class=\"sep\">·</span><b data-lat>18</b>ms<span class=\"sep\">·</span><b>7</b> modalidades vivas</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var img=root.querySelector('[data-img]'), wave=root.querySelector('[data-wave]');\n    var tps=root.querySelector('[data-tps]'), lat=root.querySelector('[data-lat]'), imgpct=root.querySelector('[data-imgpct]');\n    var fx=field.getContext('2d'), ix=img.getContext('2d'), wx=wave.getContext('2d');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1));\n    var W=0,H=0,CX=0,CY=0;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.60; CY=H*0.50;\n      field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n\n    // 3 depth layers of tokens: far(dim,slow,small) mid near(bright,fast,big)\n    var P=[], CAP=reduce?90:640;\n    function spawn(n){ for(var i=0;i<n;i++){ if(P.length>=CAP) break;\n      var layer=Math.random(); // 0..1 depth\n      var ang=(Math.random()*1.5-0.75) + (Math.random()-0.5)*0.4; // fan right\n      var sp=(1.1+layer*4.2)*(0.9+Math.random()*0.5);\n      var r=0.6+layer*layer*2.4;\n      P.push({x:CX+(Math.random()-0.5)*10, y:CY+(Math.random()-0.5)*10,\n        vx:Math.cos(ang)*sp, vy:Math.sin(ang)*sp*0.7, life:1, r:r, z:layer,\n        dr:0.006+ (1-layer)*0.006 }); } }\n\n    function core(t){\n      var pulse=0.5+0.5*Math.sin(t*0.0016);\n      var beat=Math.pow(0.5+0.5*Math.sin(t*0.0042),6); // occasional thought flash\n      // halo (additive)\n      var g=fx.createRadialGradient(CX,CY,0,CX,CY,160+pulse*44);\n      g.addColorStop(0,'rgba(255,120,235,'+(0.26+pulse*0.14+beat*0.25)+')');\n      g.addColorStop(0.45,'rgba(200,60,220,0.08)'); g.addColorStop(1,'rgba(160,40,220,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(CX,CY,210,0,6.2832); fx.fill();\n      for(var i=0;i<6;i++){ var rr=22+i*13; var spd=(i%2?-1:1)*(0.0005+i*0.00015);\n        var a0=t*spd+i*1.3; var a1=a0+0.8+0.6*Math.sin(t*0.0011+i);\n        fx.beginPath(); fx.arc(CX,CY,rr,a0,a1);\n        fx.strokeStyle='rgba(255,'+(150+i*10)+',240,'+(0.55-i*0.06)+')'; fx.lineWidth=1.3; fx.stroke(); }\n      fx.beginPath(); fx.arc(CX,CY,6+pulse*3+beat*5,0,6.2832);\n      fx.fillStyle='rgba(255,225,248,'+(0.85+beat*0.15)+')'; fx.fill();\n    }\n\n    // image: aperture/iris resolving from noise (reads as \"vision\")\n    var IT=0;\n    function imgF(dt){ IT+=dt; var cyc=3600; var p=(IT%cyc)/cyc; imgpct.textContent=Math.round(Math.min(1,p*1.12)*100)+'%';\n      var S=392; var res=Math.max(2,Math.round(2+(1-p)*30)); var cell=Math.ceil(S/Math.ceil(S/res));\n      ix.globalCompositeOperation='source-over';\n      for(var y=0;y<S;y+=cell){ for(var x=0;x<S;x+=cell){\n        var dx=(x+cell/2-S/2)/(S/2), dy=(y+cell/2-S/2)/(S/2); var d=Math.sqrt(dx*dx+dy*dy); var an=Math.atan2(dy,dx);\n        // iris: bright ring + petals\n        var ring=Math.max(0,1-Math.abs(d-0.62)*4.2);\n        var petal=Math.max(0,Math.cos(an*8)*0.5+0.5)*Math.max(0,1-Math.abs(d-0.5)*3);\n        var pupil=d<0.22?0.9:0; var base=Math.min(1, ring*0.9+petal*0.5+pupil);\n        var noise=(1-p)*(Math.random()-0.5)*1.4; var v=Math.max(0,Math.min(1,base+noise));\n        ix.fillStyle='rgb('+Math.round(60+v*195)+','+Math.round(12+v*70)+','+Math.round(70+v*170)+')';\n        ix.fillRect(x,y,cell+1,cell+1);\n      } }\n    }\n    // voice spectrogram bars\n    function waveF(t){ var Wd=472,Hd=120; wx.clearRect(0,0,Wd,Hd); var n=42,bw=Wd/n;\n      for(var i=0;i<n;i++){ var f=i/n;\n        var h=Hd*0.5*(0.12+ Math.abs(Math.sin(t*0.004+i*0.5))*0.5*(0.4+0.6*Math.sin(t*0.0017+f*6))*(0.5+0.5*Math.sin(f*9)));\n        var x=i*bw+bw*0.2; var col='rgba('+Math.round(250- f*180)+','+Math.round(72+f*90)+','+Math.round(220+f*30)+',0.9)';\n        wx.fillStyle=col; wx.fillRect(x,Hd/2-h,bw*0.6,h*2);\n      } }\n\n    var jt=0; function jitter(t){ if(t-jt>150){ jt=t;\n      tps.textContent=(1900+Math.floor(Math.random()*260)).toLocaleString('pt-BR'); lat.textContent=(12+Math.floor(Math.random()*13)); } }\n\n    var raf=null,last=performance.now(),run=true;\n    function loop(t){ if(!run) return; var dt=Math.min(48,t-last); last=t;\n      // fade (source-over dark wash) then additive draw\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(5,4,6,0.30)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      spawn(reduce?2:7);\n      for(var i=P.length-1;i>=0;i--){ var p=P[i]; p.x+=p.vx; p.y+=p.vy; p.vx*=0.996; p.life-=p.dr;\n        if(p.life<=0||p.x>W+30||p.y<-30||p.y>H+30){ P.splice(i,1); continue; }\n        var a=(0.10+p.z*0.6)*p.life; fx.beginPath(); fx.arc(p.x,p.y,p.r,0,6.2832);\n        fx.fillStyle='rgba(255,'+(90+Math.round(p.z*110))+',235,'+a+')'; fx.fill(); }\n      core(t);\n      fx.globalCompositeOperation='source-over';\n      imgF(dt); waveF(t); jitter(t); raf=requestAnimationFrame(loop);\n    }\n    if(reduce){ fx.fillStyle='#050406'; fx.fillRect(0,0,W,H); fx.globalCompositeOperation='lighter'; spawn(90);\n      P.forEach(function(p){ p.x=CX+p.vx*26; p.y=CY+p.vy*26; fx.beginPath(); fx.arc(p.x,p.y,p.r,0,6.28); fx.fillStyle='rgba(255,120,230,'+(0.2+p.z*0.5)+')'; fx.fill(); });\n      core(1400); fx.globalCompositeOperation='source-over'; IT=3400; imgF(0); waveF(0); }\n    else raf=requestAnimationFrame(loop);\n\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){\n      if(e.isIntersecting){ if(!run&&!reduce){ run=true; last=performance.now(); raf=requestAnimationFrame(loop); } }\n      else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.05}); io.observe(st);\n\n    Array.prototype.slice.call(root.querySelectorAll('.mode')).forEach(function(m){\n      d2.on(m,'click',function(){ Array.prototype.slice.call(root.querySelectorAll('.mode')).forEach(function(o){o.classList.remove('on');}); m.classList.add('on'); if(!reduce) spawn(120); }); });\n  }\n}"}}}}}}}},{"_id":"6a73e02b1204b3d36b63330c","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"4KeACEyp4erq3tyigRPDy","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:680px; overflow:hidden;\n  background:#060405; color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none;\n  background:radial-gradient(60% 66% at 62% 50%, transparent 42%, rgba(6,3,4,.6) 100%); }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.copy{ position:absolute; top:54px; left:58px; z-index:5; max-width:33ch; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.36em; text-transform:uppercase; color:#c76a6a; }\n.h1{ font-size:clamp(40px,4.6vw,72px); font-weight:600; letter-spacing:-.035em; line-height:.95; margin:14px 0 0; }\n.h1 .r{ background:linear-gradient(96deg,#FF7A7A,#FA4848 45%,#F748A0); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }\n.sub{ margin:20px 0 0; font-size:15px; line-height:1.62; color:#b9adb0; max-width:33ch; }\n.sub b{ color:#F4F6F8; font-weight:600; }\n.count{ position:absolute; left:58px; bottom:150px; z-index:5; }\n.count .n{ font-family:ui-monospace,Menlo,monospace; font-size:clamp(30px,3.4vw,48px); font-weight:600; letter-spacing:-.02em; color:#fff; font-variant-numeric:tabular-nums; }\n.count .l{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.22em; text-transform:uppercase; color:#c76a6a; margin-top:4px; }\n.clusters{ position:absolute; right:56px; bottom:120px; z-index:5; text-align:right; display:flex; flex-direction:column; gap:9px; }\n.cl{ font-family:ui-monospace,Menlo,monospace; font-size:11.5px; letter-spacing:.05em; color:#a99; }\n.cl b{ color:#FA6a6a; font-variant-numeric:tabular-nums; }\n.cl .dot{ display:inline-block; width:7px; height:7px; border-radius:50%; margin-left:8px; vertical-align:middle; }\n.foot{ position:absolute; left:0; right:0; bottom:40px; z-index:5; text-align:center;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:#5f4c4c; }\n.foot b{ color:#FA4848; font-weight:400; }\n@media (max-width:900px){ .copy{ position:relative; padding:40px 24px 0; top:auto; left:auto; } .count{ position:relative; left:24px; bottom:auto; margin-top:16px; } .clusters{ position:relative; right:auto; bottom:auto; text-align:left; margin:14px 0 0 24px; } canvas.field{ opacity:.7; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div>'+\n        '<div class=\"copy\">'+\n          '<div class=\"eb\">Data² · registry · dados</div>'+\n          '<h1 class=\"h1\">Milhões, e cada <span class=\"r\">um tipado</span>.</h1>'+\n          '<p class=\"sub\">O runtime lê a própria memória: <b>milhões de registros</b> vivos, tipados e versionados, indexados em tempo real. Não é um banco — é acesso.</p>'+\n        '</div>'+\n        '<div class=\"count\"><div class=\"n\" data-n>1.240.000</div><div class=\"l\">registros indexados · +<span data-rate>0</span>/s</div></div>'+\n        '<div class=\"clusters\" data-clusters></div>'+\n        '<div class=\"foot\"><b>tipado, vivo, em escala</b> — o dado que se conhece</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var nEl=root.querySelector('[data-n]'), rateEl=root.querySelector('[data-rate]'), clEl=root.querySelector('[data-clusters]');\n    var fx=field.getContext('2d');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1));\n    var W=0,H=0,CX=0,CY=0;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.60; CY=H*0.50;\n      field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n\n    // typed clusters (color by type) — the disc is composed of these\n    var TYPES=[ {k:'clientes', c:[250,72,72], big:'2.1M'}, {k:'eventos', c:[247,72,160], big:'48M'},\n      {k:'pedidos', c:[255,138,61], big:'6.7M'}, {k:'produtos', c:[250,220,72], big:'12k'},\n      {k:'mensagens', c:[176,72,250], big:'19M'} ];\n    clEl.innerHTML=TYPES.map(function(t){ return '<div class=\"cl\">'+t.k+' · <b>'+t.big+'</b><span class=\"dot\" style=\"background:rgb('+t.c.join(',')+')\"></span></div>'; }).join('');\n\n    // build a dense data-disc: points with orbit radius/angle, differential rotation, arrival tween\n    var N=reduce?260:2300; var pts=[];\n    var maxR=Math.min(W,H)*0.42;\n    for(var i=0;i<N;i++){\n      var rr=maxR*(0.12+0.88*Math.pow(Math.random(),0.55));\n      var ang=Math.random()*6.2832;\n      var thick=(Math.random()-0.5)* (28*(1-rr/maxR) + 6); // thinner at edge (disc)\n      var ty=TYPES[(Math.random()*TYPES.length)|0];\n      var z=Math.random(); // depth for brightness/size\n      pts.push({ r:rr, a:ang, w:(0.00020+ (1-rr/maxR)*0.00042)*(reduce?0:1), // inner faster\n        th:thick, c:ty.c, z:z, size:(z>0.8?1.6:1),\n        // arrival tween from a random edge\n        sx: (Math.random()<0.5? -40 : W+40), sy: Math.random()*H, prog: 0,\n        delay: Math.random()* (reduce?0:1) });\n    }\n    // scan ring\n    var scanR=0;\n\n    var count=1240000, rate=0;\n    var raf=null,last=performance.now(),run=true, tstart=performance.now();\n    function loop(t){ if(!run) return; var dt=Math.min(50,t-last); last=t; var age=(t-tstart)/1000;\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(6,4,5,0.34)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      // faint core glow\n      var g=fx.createRadialGradient(CX,CY,0,CX,CY,maxR*1.1); g.addColorStop(0,'rgba(250,72,72,0.12)'); g.addColorStop(1,'rgba(250,72,72,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(CX,CY,maxR*1.1,0,6.2832); fx.fill();\n      // scan expanding ring\n      scanR+= dt*0.16; if(scanR>maxR*1.15) scanR=0;\n      for(var i=0;i<pts.length;i++){ var p=pts[i];\n        p.a+=p.w*dt; // rotate\n        // arrival: ease target from edge into orbit\n        if(p.prog<1){ p.prog=Math.min(1, p.prog + dt*0.0009); }\n        var e=1-Math.pow(1-p.prog,3);\n        var ox=CX+Math.cos(p.a)*p.r; var oy=CY+Math.sin(p.a)*p.r*0.42 + p.th; // squashed disc (perspective)\n        var x= p.sx+(ox-p.sx)*e; var y= p.sy+(oy-p.sy)*e;\n        var lit = Math.abs(p.r-scanR)<12 ? 1 : 0;\n        var br=(0.16+p.z*0.5)* (0.6+0.4*Math.sin(age*0.7+i)) + lit*0.7;\n        fx.fillStyle='rgba('+p.c[0]+','+p.c[1]+','+p.c[2]+','+Math.min(1,br)+')';\n        var s=p.size+lit*1.4; fx.fillRect(x, y, s, s);\n      }\n      fx.globalCompositeOperation='source-over';\n      // counter racing\n      rate = 3200 + Math.floor(Math.random()*5200); count += Math.floor(rate*dt/1000);\n      nEl.textContent = count.toLocaleString('pt-BR'); rateEl.textContent = rate.toLocaleString('pt-BR');\n      raf=requestAnimationFrame(loop);\n    }\n    if(reduce){ fx.fillStyle='#060405'; fx.fillRect(0,0,W,H); fx.globalCompositeOperation='lighter';\n      pts.forEach(function(p){ var x=CX+Math.cos(p.a)*p.r, y=CY+Math.sin(p.a)*p.r*0.42+p.th; fx.fillStyle='rgba('+p.c[0]+','+p.c[1]+','+p.c[2]+','+(0.2+p.z*0.5)+')'; fx.fillRect(x,y,p.size,p.size); });\n      fx.globalCompositeOperation='source-over'; nEl.textContent=(1284920).toLocaleString('pt-BR'); rateEl.textContent='4.100'; }\n    else raf=requestAnimationFrame(loop);\n\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){\n      if(e.isIntersecting){ if(!run&&!reduce){ run=true; last=performance.now(); raf=requestAnimationFrame(loop); } }\n      else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.05}); io.observe(st);\n  }\n}"}}}}}}}},{"_id":"6a73e46b1204b3d36b633ab9","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"4NpMmjZBk50JkV1RbWUs9","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:700px; overflow:hidden;\n  background:#050406; color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none;\n  background:radial-gradient(58% 64% at 40% 46%, transparent 42%, rgba(4,3,6,.6) 100%); }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.copy{ position:absolute; top:52px; left:56px; z-index:6; max-width:30ch; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.36em; text-transform:uppercase; color:#b16aa8; }\n.h1{ font-size:clamp(36px,4.2vw,64px); font-weight:600; letter-spacing:-.035em; line-height:.95; margin:14px 0 0; }\n.h1 .m{ background:linear-gradient(96deg,#FF7BE6,#FA48DC 45%,#B048FA); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }\n.sub{ margin:18px 0 0; font-size:14.5px; line-height:1.6; color:#b9adb6; max-width:30ch; }\n.sub b{ color:#F4F6F8; font-weight:600; }\n.modes{ position:absolute; left:56px; bottom:56px; z-index:6; display:flex; flex-wrap:wrap; gap:9px; max-width:330px; }\n.mode{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.1em; text-transform:uppercase;\n  color:#c99ac3; border:1px solid rgba(250,72,220,.24); background:rgba(250,72,220,.045); border-radius:999px;\n  padding:7px 13px; cursor:pointer; transition:.18s; }\n.mode:hover{ color:#fff; border-color:rgba(250,72,220,.55); }\n.mode.on{ color:#fff; border-color:rgba(250,72,220,.9); background:rgba(250,72,220,.2); box-shadow:0 0 22px rgba(250,72,220,.35); }\n/* stage panel */\n.panel{ position:absolute; right:60px; top:50%; transform:translateY(-50%); z-index:6; width:min(42%,480px); }\n.phd{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:12px; }\n.pt{ font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.16em; text-transform:uppercase; color:#fff; }\n.pd{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.08em; color:#a15a99; }\n.pbox{ position:relative; height:340px; border:1px solid rgba(250,72,220,.24); border-radius:16px; overflow:hidden;\n  background:linear-gradient(180deg, rgba(30,10,26,.5), rgba(12,6,11,.5)); box-shadow:0 30px 70px rgba(0,0,0,.5), 0 0 40px rgba(250,72,220,.08); }\ncanvas.stage{ position:absolute; inset:0; width:100%; height:100%; display:block; }\n.ov{ position:absolute; inset:0; padding:18px; z-index:2; font-size:13.5px; line-height:1.6; color:#eBdcE8; overflow:hidden; }\n.ov .mono{ font-family:ui-monospace,Menlo,monospace; }\n.bub{ max-width:82%; padding:9px 13px; border-radius:12px; margin:8px 0; font-size:13px; opacity:0; transform:translateY(6px); transition:.3s; }\n.bub.in{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.1); }\n.bub.out{ background:rgba(250,72,220,.16); border:1px solid rgba(250,72,220,.4); margin-left:auto; }\n.bub.show{ opacity:1; transform:none; }\n.cur{ display:inline-block; width:8px; height:15px; background:#FA48DC; vertical-align:-2px; margin-left:2px; animation:bl 1s steps(2) infinite; }\n@keyframes bl{ 50%{opacity:0;} }\n.tag2{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.04em;\n  color:#fff; background:rgba(10,4,9,.85); border:1px solid; padding:2px 7px; border-radius:6px; opacity:0; transition:.25s; white-space:nowrap; }\n.tag2.show{ opacity:1; }\n.readout{ position:absolute; left:56px; top:calc(50% + 200px); z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:#5f4f5c; }\n.readout b{ color:#FA48DC; font-weight:400; font-variant-numeric:tabular-nums; }\n@media (max-width:940px){ .panel{ position:relative; right:auto; top:auto; transform:none; width:auto; margin:20px 24px; } .copy{ position:relative; padding:36px 24px 0; top:auto; left:auto; } .modes{ position:relative; left:24px; bottom:auto; margin:8px 0 0; } .readout{ display:none; } canvas.field{ opacity:.5; } }\n`,\n  render(d2){\n    var M=[['Texto','texto'],['Voz in/out','voz'],['Imagem','imagem'],['Visão','visao'],['Decisão','decisao'],['Embeddings','embeddings'],['Streaming','streaming']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div>'+\n        '<div class=\"copy\">'+\n          '<div class=\"eb\">Data² · domain · inteligência</div>'+\n          '<h1 class=\"h1\">A mente do <span class=\"m\">runtime</span>.</h1>'+\n          '<p class=\"sub\">Um só motor multimodal. <b>Clique numa capacidade</b> — cada uma acontece de verdade, ao vivo.</p>'+\n        '</div>'+\n        '<div class=\"panel\">'+\n          '<div class=\"phd\"><span class=\"pt\" data-pt>DECISÃO</span><span class=\"pd\" data-pd>decide</span></div>'+\n          '<div class=\"pbox\"><canvas class=\"stage\" data-stage width=\"900\" height=\"680\"></canvas><div class=\"ov\" data-ov></div></div>'+\n        '</div>'+\n        '<div class=\"readout\"><b data-tps>2000</b> tokens/s<span> · </span><b data-lat>18</b>ms<span> · </span>multimodal</div>'+\n        '<div class=\"modes\" data-modes>'+ M.map(function(m,i){return '<span class=\"mode'+(m[1]==='decisao'?' on':'')+'\" data-mode=\"'+m[1]+'\">'+m[0]+'</span>';}).join('') +'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var stage=root.querySelector('[data-stage]'), ov=root.querySelector('[data-ov]');\n    var ptEl=root.querySelector('[data-pt]'), pdEl=root.querySelector('[data-pd]');\n    var tps=root.querySelector('[data-tps]'), lat=root.querySelector('[data-lat]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1));\n    var fx=field.getContext('2d'), sx=stage.getContext('2d');\n    var W=0,H=0,CX=0,CY=0, SW=900, SH=680;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.40; CY=H*0.50;\n      field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n\n    // ---------- ambient core + torrent (left-center) ----------\n    var P=[], CAP=reduce?70:420;\n    function spawn(n){ for(var i=0;i<n;i++){ if(P.length>=CAP)break; var layer=Math.random();\n      var ang=(Math.random()*1.4-0.7)+(Math.random()-0.5)*0.4; var sp=(1+layer*3.6)*(0.9+Math.random()*0.4);\n      P.push({x:CX,y:CY,vx:Math.cos(ang)*sp,vy:Math.sin(ang)*sp*0.7,life:1,r:0.6+layer*layer*2.2,z:layer,dr:0.008+(1-layer)*0.006}); } }\n    function ambient(t){\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(5,4,6,0.32)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      var pulse=0.5+0.5*Math.sin(t*0.0016);\n      var g=fx.createRadialGradient(CX,CY,0,CX,CY,150+pulse*40);\n      g.addColorStop(0,'rgba(255,120,235,'+(0.24+pulse*0.12)+')'); g.addColorStop(0.5,'rgba(200,60,220,0.06)'); g.addColorStop(1,'rgba(160,40,220,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(CX,CY,190,0,6.2832); fx.fill();\n      for(var i=0;i<5;i++){ var rr=20+i*12; var spd=(i%2?-1:1)*(0.0005+i*0.00015); var a0=t*spd+i; var a1=a0+0.9+0.5*Math.sin(t*0.001+i);\n        fx.beginPath(); fx.arc(CX,CY,rr,a0,a1); fx.strokeStyle='rgba(255,160,240,'+(0.5-i*0.07)+')'; fx.lineWidth=1.3; fx.stroke(); }\n      fx.beginPath(); fx.arc(CX,CY,6+pulse*3,0,6.2832); fx.fillStyle='rgba(255,225,248,.9)'; fx.fill();\n      spawn(reduce?1:4);\n      for(var j=P.length-1;j>=0;j--){ var p=P[j]; p.x+=p.vx; p.y+=p.vy; p.vx*=0.996; p.life-=p.dr;\n        if(p.life<=0||p.x>W+30||p.y<-30||p.y>H+30){ P.splice(j,1); continue; }\n        fx.beginPath(); fx.arc(p.x,p.y,p.r,0,6.2832); fx.fillStyle='rgba(255,'+(90+Math.round(p.z*110))+',235,'+((0.1+p.z*0.5)*p.life)+')'; fx.fill(); }\n      fx.globalCompositeOperation='source-over';\n    }\n\n    // ---------- modality stage ----------\n    function clearStage(){ sx.clearRect(0,0,SW,SH); ov.innerHTML=''; }\n    var active='decisao', t0mod=0;\n    var DEFS={\n      texto:{t:'TEXTO', d:'raciocínio', run:function(){ ov.innerHTML='<div class=\"mono\" data-tw style=\"color:#e8d6e5\"></div>';\n        var full='Veredito: reter cliente.\\\\n• Uso caiu 38% em 30d.\\\\n• 2 chamados abertos sem resposta.\\\\n• Ação: oferta + contato do CS hoje.'; var tw=ov.querySelector('[data-tw]'); var i=0;\n        var iv=setInterval(function(){ if(active!=='texto'){clearInterval(iv);return;} i++; tw.innerHTML=full.slice(0,i).replace(/\\\\n/g,'<br>')+'<span class=\"cur\"></span>'; if(i>=full.length){clearInterval(iv); tw.innerHTML=full.replace(/\\\\n/g,'<br>'); } }, 26); },\n        draw:null},\n      voz:{t:'VOZ', d:'fala entra · fala sai', run:function(){ ov.innerHTML=\n          '<div class=\"bub in mono\" data-b1>▸ entrada · \"Cadê meu pedido 8421?\"</div>'+\n          '<div class=\"bub out mono\" data-b2>\"Sai amanhã 14h — rastreio enviado.\"</div>';\n          setTimeout(function(){ if(active==='voz') ov.querySelector('[data-b1]').classList.add('show'); },200);\n          setTimeout(function(){ if(active==='voz') ov.querySelector('[data-b2]').classList.add('show'); },1400); },\n        draw:function(t){ // waveform strip bottom\n          var y=SH*0.74; sx.clearRect(0,SH*0.5,SW,SH*0.5); sx.beginPath();\n          for(var x=0;x<=SW;x+=6){ var e=Math.sin(x*0.02+t*0.006)*0.5+Math.sin(x*0.05-t*0.009)*0.3; var amp=54*(0.4+0.6*Math.abs(Math.sin(t*0.002+x*0.002))); if(x===0)sx.moveTo(x,y+e*amp); else sx.lineTo(x,y+e*amp); }\n          var gr=sx.createLinearGradient(0,0,SW,0); gr.addColorStop(0,'rgba(250,72,220,.3)'); gr.addColorStop(.5,'#FA48DC'); gr.addColorStop(1,'rgba(77,207,250,.7)'); sx.strokeStyle=gr; sx.lineWidth=2.4; sx.stroke(); }},\n      imagem:{t:'IMAGEM', d:'gera', run:function(){ ov.innerHTML='<div class=\"mono\" style=\"color:#c99ac3;font-size:11px\">prompt: \"frasco de perfume, luz suave\"</div>'; imgT=0; },\n        draw:function(t,dt){ imgFrame(dt); }},\n      visao:{t:'VISÃO', d:'entende a imagem', run:function(){ ov.innerHTML=''; visT=0; visTags=[\n          {x:0.30,y:0.30,w:0.4,h:0.22,l:'nota fiscal',c:'#FA48DC',at:0.4},\n          {x:0.34,y:0.56,w:0.26,h:0.10,l:'R$ 1.240,00',c:'#48FAA1',at:1.0},\n          {x:0.60,y:0.70,w:0.28,h:0.09,l:'CNPJ 12.345…',c:'#4DA4FA',at:1.6}];\n        visTags.forEach(function(tg,i){ var el=document.createElement('div'); el.className='tag2'; el.style.borderColor=tg.c; el.style.color=tg.c; el.textContent=tg.l; el.setAttribute('data-vt',i); ov.appendChild(el); }); },\n        draw:function(t,dt){ visFrame(dt); }},\n      decisao:{t:'DECISÃO', d:'decide', run:function(){ ov.innerHTML='<div class=\"mono\" data-dw style=\"color:#e8d6e5\"></div>'; decT=0; filInit();\n        var full='› cruzando 5 sinais…\\\\n› regra auditável aplicada\\\\n\\\\nDECISÃO: aprovar com limite R$ 8k'; var el=ov.querySelector('[data-dw]'); var i=0;\n        var iv=setInterval(function(){ if(active!=='decisao'){clearInterval(iv);return;} i++; el.innerHTML=full.slice(0,i).replace(/\\\\n/g,'<br>')+'<span class=\"cur\"></span>'; if(i>=full.length){clearInterval(iv); el.innerHTML=full.replace(/\\\\n/g,'<br>');} }, 24); },\n        draw:function(t){ filDraw(t); }},\n      embeddings:{t:'EMBEDDINGS', d:'significado', run:function(){ ov.innerHTML=''; embInit(); },\n        draw:function(t){ embDraw(t); }},\n      streaming:{t:'STREAMING', d:'tempo real', run:function(){ ov.innerHTML='<div class=\"mono\" data-sc style=\"position:absolute;right:16px;bottom:14px;font-size:22px;color:#fff;font-variant-numeric:tabular-nums\">0</div>'; streamN=0; },\n        draw:function(t,dt){ streamDraw(t,dt); }}\n    };\n\n    // -- shared stage sub-visuals --\n    var imgT=0;\n    function imgFrame(dt){ imgT+=dt; var cyc=3200; var p=(imgT%cyc)/cyc; var S=SW; var res=Math.max(6,Math.round(6+(1-p)*70)); var cell=Math.ceil(S/Math.ceil(S/res)); var SHh=SH;\n      for(var y=0;y<SHh;y+=cell){ for(var x=0;x<S;x+=cell){ var dx=(x+cell/2-S/2)/(S*0.32), dy=(y+cell/2-SHh/2)/(SHh*0.32); var d=Math.sqrt(dx*dx+dy*dy*2.4);\n        var body=Math.max(0,1-Math.abs(d-0.6)*2.2)+ (d<0.5?0.5:0); var noise=(1-p)*(Math.random()-0.5)*1.4; var v=Math.max(0,Math.min(1,body+noise));\n        sx.fillStyle='rgb('+Math.round(60+v*195)+','+Math.round(14+v*60)+','+Math.round(80+v*150)+')'; sx.fillRect(x,y,cell+1,cell+1); } } }\n    var visT=0, visTags=[];\n    function visFrame(dt){ visT+=dt; sx.clearRect(0,0,SW,SH);\n      // faux photo\n      var g=sx.createLinearGradient(0,0,SW,SH); g.addColorStop(0,'#1a1420'); g.addColorStop(1,'#0e0a12'); sx.fillStyle=g; sx.fillRect(0,0,SW,SH);\n      sx.strokeStyle='rgba(255,255,255,.05)'; for(var i=0;i<8;i++){ sx.strokeRect(SW*0.2+i*4, SH*0.2+i*3, SW*0.5, SH*0.16); }\n      var p=Math.min(1,visT/2200);\n      visTags.forEach(function(tg,i){ if(p>tg.at/2.2){ sx.strokeStyle=tg.c; sx.lineWidth=2; sx.setLineDash([7,5]); sx.strokeRect(tg.x*SW,tg.y*SH,tg.w*SW,tg.h*SH); sx.setLineDash([]);\n        var el=ov.querySelector('[data-vt=\"'+i+'\"]'); if(el){ el.style.left=(tg.x*100)+'%'; el.style.top=('calc('+(tg.y*100)+'% - 20px)'); el.classList.add('show'); } } }); }\n    // decision filaments\n    var fils=[], decT=0;\n    function filInit(){ fils=[]; var cx=SW*0.28, cy=SH*0.5; for(var i=0;i<10;i++){ var a=(-1+2*(i/9)); var len=SW*0.4*(0.6+Math.random()*0.5); fils.push({a:a*0.9, len:len, live:i%3!==0, cx:cx, cy:cy, ph:Math.random()*6}); } }\n    function filDraw(t){ sx.clearRect(0,0,SW,SH); sx.globalCompositeOperation='lighter';\n      fils.forEach(function(f){ var gr=Math.min(1,(t-0)); sx.beginPath(); sx.moveTo(f.cx,f.cy);\n        var ex=f.cx+Math.cos(f.a)*f.len, ey=f.cy+Math.sin(f.a)*f.len*0.7; var mx=f.cx+Math.cos(f.a)*f.len*0.5, my=f.cy+Math.sin(f.a)*f.len*0.5-40;\n        sx.quadraticCurveTo(mx,my,ex,ey); sx.strokeStyle='rgba(250,72,220,'+(f.live?0.7:0.18)+')'; sx.lineWidth=f.live?1.6:1; sx.stroke();\n        if(f.live){ sx.beginPath(); sx.arc(ex,ey,2.5+Math.sin(t*0.004+f.ph),0,6.28); sx.fillStyle='#FA8CE8'; sx.fill(); } });\n      sx.beginPath(); sx.arc(SW*0.28,SH*0.5,6,0,6.28); sx.fillStyle='#FFD0F2'; sx.fill(); sx.globalCompositeOperation='source-over'; }\n    // embeddings\n    var emb=[];\n    function embInit(){ emb=[]; var cl=[[SW*0.3,SH*0.32,'#FA48DC'],[SW*0.68,SH*0.4,'#48FAA1'],[SW*0.5,SH*0.72,'#4DA4FA']]; for(var i=0;i<48;i++){ var c=cl[i%3]; emb.push({x:Math.random()*SW,y:Math.random()*SH,tx:c[0]+(Math.random()-0.5)*150,ty:c[1]+(Math.random()-0.5)*130,c:c[2]}); } }\n    function embDraw(t){ sx.clearRect(0,0,SW,SH); sx.globalCompositeOperation='lighter';\n      emb.forEach(function(p){ p.x+=(p.tx-p.x)*0.05; p.y+=(p.ty-p.y)*0.05; sx.beginPath(); sx.arc(p.x,p.y,3,0,6.28); sx.fillStyle=p.c; sx.fill(); });\n      for(var i=0;i<emb.length;i++){ for(var j=i+1;j<emb.length;j++){ var a=emb[i],b=emb[j]; var dx=a.x-b.x,dy=a.y-b.y; var d=dx*dx+dy*dy; if(a.c===b.c && d<5200){ sx.beginPath(); sx.moveTo(a.x,a.y); sx.lineTo(b.x,b.y); sx.strokeStyle=a.c.replace('#','rgba(')+''; sx.strokeStyle='rgba(255,255,255,0.05)'; sx.lineWidth=1; sx.stroke(); } } }\n      sx.globalCompositeOperation='source-over'; }\n    // streaming\n    var stoks=[], streamN=0;\n    function streamDraw(t,dt){ sx.globalCompositeOperation='source-over'; sx.fillStyle='rgba(12,6,11,0.3)'; sx.fillRect(0,0,SW,SH); sx.globalCompositeOperation='lighter';\n      for(var k=0;k<6;k++){ stoks.push({x:0,y:SH*0.2+Math.random()*SH*0.6,v:6+Math.random()*10,r:1+Math.random()*2}); }\n      streamN+=Math.round(40+Math.random()*90); var el=ov.querySelector('[data-sc]'); if(el) el.textContent=streamN.toLocaleString('pt-BR')+' tok';\n      for(var i=stoks.length-1;i>=0;i--){ var p=stoks[i]; p.x+=p.v; if(p.x>SW){ stoks.splice(i,1); continue; } sx.beginPath(); sx.arc(p.x,p.y,p.r,0,6.28); sx.fillStyle='rgba(255,120,230,0.8)'; sx.fill(); }\n      if(stoks.length>500) stoks.splice(0,stoks.length-500); sx.globalCompositeOperation='source-over'; }\n\n    function setMode(k){ active=k; var D=DEFS[k]; ptEl.textContent=D.t; pdEl.textContent=D.d; clearStage(); if(D.run)D.run();\n      Array.prototype.slice.call(root.querySelectorAll('.mode')).forEach(function(o){ o.classList.toggle('on', o.getAttribute('data-mode')===k); }); if(!reduce) spawn(60); }\n\n    var raf=null,last=performance.now(),run=true,jt=0;\n    function loop(t){ if(!run)return; var dt=Math.min(48,t-last); last=t;\n      ambient(t);\n      var D=DEFS[active]; if(D&&D.draw) D.draw(t,dt);\n      if(t-jt>150){ jt=t; tps.textContent=(1900+Math.floor(Math.random()*260)).toLocaleString('pt-BR'); lat.textContent=(12+Math.floor(Math.random()*13)); }\n      raf=requestAnimationFrame(loop); }\n    setMode('decisao');\n    if(!reduce) raf=requestAnimationFrame(loop); else { ambient(1200); var D=DEFS.decisao; if(D.draw)D.draw(1200,0); }\n\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.05}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.mode')).forEach(function(m){ d2.on(m,'click',function(){ setMode(m.getAttribute('data-mode')); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a73e4cb7b69f6e944519325","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"wfO5QJnMSYxmOlwNqJ6N5","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:700px; overflow:hidden;\n  background:#060405; color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none;\n  background:radial-gradient(60% 66% at 62% 50%, transparent 40%, rgba(6,3,4,.62) 100%); }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.copy{ position:absolute; top:54px; left:58px; z-index:6; max-width:32ch; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.36em; text-transform:uppercase; color:#c76a6a; }\n.h1{ font-size:clamp(38px,4.4vw,68px); font-weight:600; letter-spacing:-.035em; line-height:.95; margin:14px 0 0; }\n.h1 .r{ background:linear-gradient(96deg,#FF7A7A,#FA4848 45%,#F748A0); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }\n.sub{ margin:20px 0 0; font-size:14.5px; line-height:1.6; color:#b9adb0; max-width:32ch; }\n.sub b{ color:#F4F6F8; font-weight:600; }\n.count{ position:absolute; left:58px; bottom:56px; z-index:6; }\n.count .n{ font-family:ui-monospace,Menlo,monospace; font-size:clamp(28px,3.2vw,44px); font-weight:600; letter-spacing:-.02em; color:#fff; font-variant-numeric:tabular-nums; }\n.count .l{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.22em; text-transform:uppercase; color:#c76a6a; margin-top:4px; }\n.clusters{ position:absolute; right:56px; top:96px; z-index:6; text-align:right; display:flex; flex-direction:column; gap:9px; }\n.cl{ font-family:ui-monospace,Menlo,monospace; font-size:11.5px; letter-spacing:.05em; color:#a99; }\n.cl b{ color:#FA6a6a; font-variant-numeric:tabular-nums; }\n.cl .dot{ display:inline-block; width:7px; height:7px; border-radius:50%; margin-left:8px; vertical-align:middle; }\n.foot{ position:absolute; left:0; right:0; bottom:40px; z-index:6; text-align:center;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:#5f4c4c; }\n.foot b{ color:#FA4848; font-weight:400; }\n/* emergent artifact */\n.art{ position:absolute; z-index:5; left:60%; top:50%; transform:translate(-50%,-50%) scale(.92); opacity:0;\n  transition:opacity .5s cubic-bezier(.2,.7,.2,1), transform .5s cubic-bezier(.2,.7,.2,1);\n  width:236px; padding:15px 16px; border-radius:13px; background:rgba(10,5,6,.86); backdrop-filter:blur(3px);\n  border:1px solid var(--ac); box-shadow:0 24px 60px rgba(0,0,0,.55), 0 0 34px color-mix(in srgb, var(--ac) 26%, transparent); font-family:ui-monospace,Menlo,monospace; }\n.art.show{ opacity:1; transform:translate(-50%,-50%) scale(1); }\n.art .at{ font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--ac); margin-bottom:11px; display:flex; justify-content:space-between; }\n.art .fl{ display:flex; flex-direction:column; gap:2px; margin-bottom:9px; }\n.art .fk{ font-size:9px; letter-spacing:.12em; text-transform:uppercase; color:#8a7; opacity:.7; }\n.art .fk2{ font-size:9px; letter-spacing:.12em; text-transform:uppercase; color:#a88; opacity:.6; }\n.art .fv{ font-size:13px; color:#fff; border-bottom:1px solid rgba(255,255,255,.14); padding-bottom:5px; }\n.art .row{ display:flex; justify-content:space-between; font-size:12.5px; padding:5px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.art .row .v{ color:#fff; } .art .row .k{ color:#9a8f8f; }\n.art .big{ font-size:22px; color:#fff; font-weight:600; }\n.art .ok{ margin-top:10px; font-size:11px; color:#48FAA1; letter-spacing:.06em; }\n.art .tbl{ display:grid; grid-template-columns:repeat(3,1fr); gap:4px; margin-top:4px; }\n.art .cell{ height:16px; border-radius:3px; background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.08); }\n.art .cell.hot{ background:color-mix(in srgb, var(--ac) 40%, transparent); border-color:var(--ac); }\n.art .scr{ border:1px solid rgba(255,255,255,.12); border-radius:8px; overflow:hidden; margin-top:2px; }\n.art .scrbar{ height:16px; background:rgba(255,255,255,.06); display:flex; align-items:center; padding:0 6px; gap:3px; }\n.art .scrbar i{ width:5px; height:5px; border-radius:50%; background:var(--ac); display:inline-block; }\n.art .scrbody{ height:64px; position:relative; background:linear-gradient(180deg, rgba(255,255,255,.02), transparent); }\n.art .spark{ position:absolute; left:8px; right:8px; bottom:10px; height:34px; }\n@media (max-width:940px){ .copy{ position:relative; padding:36px 24px 0; top:auto; left:auto; } .count{ position:relative; left:24px; bottom:auto; margin-top:14px; } .clusters{ position:relative; right:auto; top:auto; text-align:left; margin:14px 0 0 24px; } .art{ left:50%; } canvas.field{ opacity:.7; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div>'+\n        '<div class=\"copy\">'+\n          '<div class=\"eb\">Data² · registry · dados</div>'+\n          '<h1 class=\"h1\">Milhões — e o runtime os <span class=\"r\">organiza</span>.</h1>'+\n          '<p class=\"sub\">Milhões de registros vivos e tipados. E o runtime não só guarda: <b>estrutura</b> — cadastros, registros, transações, telas nascem do dado.</p>'+\n        '</div>'+\n        '<div class=\"count\"><div class=\"n\" data-n>1.240.000</div><div class=\"l\">registros indexados · +<span data-rate>0</span>/s</div></div>'+\n        '<div class=\"clusters\" data-clusters></div>'+\n        '<div class=\"art\" data-art></div>'+\n        '<div class=\"foot\"><b>do dado bruto ao usável</b> — em escala</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var nEl=root.querySelector('[data-n]'), rateEl=root.querySelector('[data-rate]'), clEl=root.querySelector('[data-clusters]'), artEl=root.querySelector('[data-art]');\n    var fx=field.getContext('2d');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var W=0,H=0,CX=0,CY=0,maxR=1;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.60; CY=H*0.50; maxR=Math.min(W,H)*0.42;\n      field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n\n    var TYPES=[ {k:'clientes',c:[250,72,72],big:'2.1M'},{k:'eventos',c:[247,72,160],big:'48M'},\n      {k:'pedidos',c:[255,138,61],big:'6.7M'},{k:'produtos',c:[250,220,72],big:'12k'},{k:'mensagens',c:[176,72,250],big:'19M'} ];\n    clEl.innerHTML=TYPES.map(function(t){ return '<div class=\"cl\">'+t.k+' · <b>'+t.big+'</b><span class=\"dot\" style=\"background:rgb('+t.c.join(',')+')\"></span></div>'; }).join('');\n\n    var N=reduce?260:2400, pts=[];\n    for(var i=0;i<N;i++){ var rr=maxR*(0.10+0.90*Math.pow(Math.random(),0.5)); var ang=Math.random()*6.2832;\n      var thick=(Math.random()-0.5)*(26*(1-rr/maxR)+6); var ty=TYPES[(Math.random()*TYPES.length)|0]; var z=Math.random();\n      pts.push({ r:rr, a:ang, w:(0.00020+(1-rr/maxR)*0.00046)*(reduce?0:1), th:thick, c:ty.c, z:z, size:(z>0.82?1.7:1),\n        sx:(Math.random()<0.5?-40:W+40), sy:Math.random()*H, prog:0 }); }\n    var scanR=0, count=1240000;\n\n    // ---- emergent artifacts ----\n    var ARTS=[\n      {ac:'#FA4848', title:'novo cadastro', html:'<div class=\"fl\"><div class=\"fk\">nome</div><div class=\"fv\">Marina A. Duarte</div></div><div class=\"fl\"><div class=\"fk\">e-mail</div><div class=\"fv\">marina@acme.co</div></div><div class=\"fl\"><div class=\"fk\">região</div><div class=\"fv\">Sudeste</div></div>'},\n      {ac:'#F748A0', title:'registro · evento', html:'<div class=\"row\"><span class=\"k\">id</span><span class=\"v\">EVT-90418</span></div><div class=\"row\"><span class=\"k\">tipo</span><span class=\"v\">checkout.ok</span></div><div class=\"row\"><span class=\"k\">cliente</span><span class=\"v\">#2.481</span></div><div class=\"row\"><span class=\"k\">quando</span><span class=\"v\">agora</span></div>'},\n      {ac:'#FF8A3D', title:'transação', html:'<div class=\"row\"><span class=\"k\">valor</span><span class=\"v\">R$ 1.240,00</span></div><div class=\"row\"><span class=\"k\">taxa</span><span class=\"v\">R$ 37,20</span></div><div class=\"row\"><span class=\"k\">líquido</span><span class=\"v big\">R$ 1.202,80</span></div><div class=\"ok\">✓ liquidado · idempotente</div>'},\n      {ac:'#FADC48', title:'tabela · produtos', html:'<div class=\"tbl\">'+Array.from({length:9}).map(function(_,i){return '<div class=\"cell'+([0,3,4,7].indexOf(i)>=0?' hot':'')+'\"></div>';}).join('')+'</div><div class=\"ok\" style=\"color:#FADC48\">12.480 linhas · 6 campos</div>'},\n      {ac:'#B048FA', title:'tela · painel', html:'<div class=\"scr\"><div class=\"scrbar\"><i></i><i style=\"opacity:.5\"></i><i style=\"opacity:.3\"></i></div><div class=\"scrbody\"><svg class=\"spark\" viewBox=\"0 0 200 34\" preserveAspectRatio=\"none\"><polyline points=\"0,28 30,20 60,24 90,10 120,16 150,6 200,12\" fill=\"none\" stroke=\"#B048FA\" stroke-width=\"2\"/></svg></div></div><div class=\"ok\" style=\"color:#B048FA\">gerado do dado · ao vivo</div>'}\n    ];\n    var ai=0, emT=0, emPhase='gap', emShown=false;\n    function buildArt(a){ artEl.style.setProperty('--ac',a.ac); artEl.innerHTML='<div class=\"at\"><span>'+a.title+'</span><span>auto</span></div>'+a.html; }\n    function emStep(dt){\n      emT+=dt;\n      if(emPhase==='gap'){ if(emT>900){ emPhase='in'; emT=0; buildArt(ARTS[ai]); requestAnimationFrame(function(){ artEl.classList.add('show'); }); } }\n      else if(emPhase==='in'){ if(emT>3400){ emPhase='out'; emT=0; artEl.classList.remove('show'); } }\n      else if(emPhase==='out'){ if(emT>560){ emPhase='gap'; emT=0; ai=(ai+1)%ARTS.length; } }\n    }\n\n    var raf=null,last=performance.now(),run=true,rate=0,tstart=performance.now();\n    function loop(t){ if(!run)return; var dt=Math.min(50,t-last); last=t; var age=(t-tstart)/1000;\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(6,4,5,0.34)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      var g=fx.createRadialGradient(CX,CY,0,CX,CY,maxR*0.7); g.addColorStop(0,'rgba(250,72,72,0.22)'); g.addColorStop(.5,'rgba(250,72,72,0.06)'); g.addColorStop(1,'rgba(250,72,72,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(CX,CY,maxR*0.9,0,6.2832); fx.fill();\n      scanR+=dt*0.16; if(scanR>maxR*1.12) scanR=0;\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; p.a+=p.w*dt; if(p.prog<1) p.prog=Math.min(1,p.prog+dt*0.0009); var e=1-Math.pow(1-p.prog,3);\n        var ox=CX+Math.cos(p.a)*p.r, oy=CY+Math.sin(p.a)*p.r*0.42+p.th; var x=p.sx+(ox-p.sx)*e, y=p.sy+(oy-p.sy)*e;\n        var lit=Math.abs(p.r-scanR)<12?1:0; var centerBoost=(1-p.r/maxR)*0.3;\n        var br=(0.16+p.z*0.5+centerBoost)*(0.6+0.4*Math.sin(age*0.7+i))+lit*0.7;\n        fx.fillStyle='rgba('+p.c[0]+','+p.c[1]+','+p.c[2]+','+Math.min(1,br)+')'; var s=p.size+lit*1.4; fx.fillRect(x,y,s,s); }\n      fx.globalCompositeOperation='source-over';\n      rate=3200+Math.floor(Math.random()*5200); count+=Math.floor(rate*dt/1000);\n      nEl.textContent=count.toLocaleString('pt-BR'); rateEl.textContent=rate.toLocaleString('pt-BR');\n      if(!reduce) emStep(dt);\n      raf=requestAnimationFrame(loop); }\n    if(reduce){ fx.fillStyle='#060405'; fx.fillRect(0,0,W,H); fx.globalCompositeOperation='lighter';\n      pts.forEach(function(p){ var x=CX+Math.cos(p.a)*p.r,y=CY+Math.sin(p.a)*p.r*0.42+p.th; fx.fillStyle='rgba('+p.c[0]+','+p.c[1]+','+p.c[2]+','+(0.2+p.z*0.5)+')'; fx.fillRect(x,y,p.size,p.size); });\n      fx.globalCompositeOperation='source-over'; nEl.textContent=(1284920).toLocaleString('pt-BR'); rateEl.textContent='4.100'; buildArt(ARTS[2]); artEl.classList.add('show'); }\n    else raf=requestAnimationFrame(loop);\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.05}); io.observe(st);\n  }\n}\n"}}}}}}}},{"_id":"6a73ea41be8fc884b90d9705","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"G98pOKqgeElutryFXV7NK","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:820px; overflow:hidden;\n  background:radial-gradient(60% 55% at 50% 40%, #170a14 0%, #080509 55%, #050406 100%);\n  color:#F4F6F8; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none; background:radial-gradient(60% 60% at 50% 40%, transparent 46%, rgba(4,3,6,.6) 100%); }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.head{ position:absolute; top:44px; left:0; right:0; text-align:center; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.36em; text-transform:uppercase; color:#b16aa8; }\n.h1{ font-size:clamp(30px,3.6vw,52px); font-weight:600; letter-spacing:-.03em; margin:10px 0 0; }\n.h1 .m{ background:linear-gradient(96deg,#FF7BE6,#FA48DC 50%,#B048FA); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }\n.h1s{ margin:10px 0 0; font-size:14px; color:#b9adb6; }\n/* central intervention stage */\n.stagebox{ position:absolute; left:50%; top:300px; transform:translateX(-50%); z-index:5; width:min(64%,760px); height:300px; }\ncanvas.stage{ position:absolute; inset:0; width:100%; height:100%; }\n.ov{ position:absolute; inset:0; z-index:2; display:flex; align-items:center; justify-content:center; pointer-events:none; }\n.ov .card{ pointer-events:none; }\n.mono{ font-family:ui-monospace,Menlo,monospace; }\n.dcard{ width:340px; background:rgba(14,7,12,.9); border:1px solid rgba(250,72,220,.35); border-radius:14px; padding:16px 18px; box-shadow:0 24px 60px rgba(0,0,0,.5), 0 0 40px rgba(250,72,220,.12); opacity:0; transform:translateY(8px); transition:.4s; }\n.dcard.show{ opacity:1; transform:none; }\n.dcard .dh{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#c26db8; }\n.dcard .dv{ font-size:17px; font-weight:600; margin:6px 0 10px; color:#fff; }\n.dcard .db{ font-size:12.5px; color:#d7c3d4; line-height:1.5; }\n.dcard .conf{ margin-top:12px; height:4px; border-radius:2px; background:rgba(255,255,255,.1); overflow:hidden; }\n.dcard .conf i{ display:block; height:100%; width:0; background:linear-gradient(90deg,#FA48DC,#B048FA); transition:width 1s ease; }\n.bub{ position:absolute; max-width:64%; padding:9px 13px; border-radius:12px; font-size:13px; opacity:0; transform:translateY(6px); transition:.35s; }\n.bub.in{ left:6%; top:20%; background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.12); }\n.bub.out{ right:6%; top:52%; background:rgba(250,72,220,.16); border:1px solid rgba(250,72,220,.4); }\n.bub.show{ opacity:1; transform:none; }\n.tag2{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.04em; color:#fff; background:rgba(10,4,9,.82); border:1px solid; padding:2px 7px; border-radius:6px; opacity:0; transition:.25s; white-space:nowrap; }\n.tag2.show{ opacity:1; }\n.readout{ position:absolute; left:0; right:0; top:610px; text-align:center; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:#5f4f5c; }\n.readout b{ color:#FA48DC; font-weight:400; font-variant-numeric:tabular-nums; }\n/* feature cards */\n.cards{ position:absolute; left:0; right:0; bottom:40px; z-index:6; display:flex; gap:14px; justify-content:center; flex-wrap:wrap; padding:0 40px; }\n.fc{ width:184px; text-align:left; border:1px solid rgba(250,72,220,.2); background:linear-gradient(180deg, rgba(30,12,26,.5), rgba(12,7,11,.4));\n  border-radius:14px; padding:15px 15px 14px; cursor:pointer; transition:.18s; position:relative; overflow:hidden; }\n.fc:hover{ border-color:rgba(250,72,220,.55); transform:translateY(-3px); }\n.fc.on{ border-color:rgba(250,72,220,.95); background:linear-gradient(180deg, rgba(250,72,220,.16), rgba(30,12,26,.4)); box-shadow:0 0 30px rgba(250,72,220,.25); }\n.fc .ic{ width:34px; height:34px; margin-bottom:10px; }\n.fc .ft{ font-size:13.5px; font-weight:600; color:#fff; letter-spacing:-.01em; }\n.fc .fd{ margin-top:5px; font-size:11.5px; line-height:1.45; color:#a99aa6; }\n.fc .fk{ position:absolute; top:12px; right:13px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.1em; color:#7a5a74; }\n@media (max-width:1180px){ .fc{ width:150px; } .cards{ gap:10px; } }\n@media (max-width:900px){ .stagebox{ position:relative; top:auto; margin:120px auto 0; height:240px; width:88%; } .cards{ position:relative; bottom:auto; margin-top:20px; } .readout{ display:none; } }\n`,\n  render(d2){\n    var F=[\n      ['decisao','Raciocínio & Decisão','Cruza sinais e devolve uma decisão auditável — não um chute.','<circle cx=\"17\" cy=\"17\" r=\"4\" fill=\"#FA48DC\"/><path d=\"M17 13V6M17 21v7M13 17H6M21 17h7\" stroke=\"#FA8CE8\" stroke-width=\"1.4\"/><circle cx=\"6\" cy=\"6\" r=\"2\" fill=\"#B048FA\"/><circle cx=\"28\" cy=\"28\" r=\"2\" fill=\"#B048FA\"/>'],\n      ['voz','Voz · entra e sai','Ouve e responde falando — atendimento e comandos por voz.','<path d=\"M6 17h3l3-7 4 14 3-9 2 4h6\" stroke=\"#FA48DC\" stroke-width=\"1.6\" fill=\"none\" stroke-linejoin=\"round\"/>'],\n      ['imagem','Geração de imagem','Cria imagem sob demanda a partir de um prompt.','<rect x=\"6\" y=\"8\" width=\"22\" height=\"18\" rx=\"3\" stroke=\"#FA48DC\" stroke-width=\"1.4\" fill=\"none\"/><circle cx=\"13\" cy=\"14\" r=\"2.4\" fill=\"#FADC48\"/><path d=\"M9 24l6-6 5 4 4-5 4 5\" stroke=\"#FA8CE8\" stroke-width=\"1.3\" fill=\"none\"/>'],\n      ['visao','Visão computacional','Lê documentos e fotos: extrai, detecta e entende.','<rect x=\"6\" y=\"9\" width=\"22\" height=\"16\" rx=\"2\" stroke=\"#48FAA1\" stroke-width=\"1.3\" fill=\"none\" stroke-dasharray=\"3 2\"/><circle cx=\"17\" cy=\"17\" r=\"4\" stroke=\"#FA48DC\" stroke-width=\"1.5\" fill=\"none\"/>'],\n      ['embeddings','Embeddings & busca','Significado vira vetor — busca semântica e similaridade.','<circle cx=\"10\" cy=\"12\" r=\"2.4\" fill=\"#4DA4FA\"/><circle cx=\"22\" cy=\"10\" r=\"2.4\" fill=\"#4DA4FA\"/><circle cx=\"16\" cy=\"22\" r=\"2.4\" fill=\"#FA48DC\"/><path d=\"M10 12l6 10 6-12\" stroke=\"#8fb\" stroke-width=\"1\" opacity=\".5\"/>'],\n      ['streaming','Streaming 2k tok/s','Responde em tempo real, token a token, sem espera.','<path d=\"M5 12h20M5 17h24M5 22h16\" stroke=\"#FA48DC\" stroke-width=\"1.6\" stroke-linecap=\"round\"/><circle cx=\"28\" cy=\"12\" r=\"1.6\" fill=\"#FA8CE8\"/>']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div>'+\n        '<div class=\"head\"><div class=\"eb\">Data² · domain · inteligência</div>'+\n          '<h1 class=\"h1\">A mente do <span class=\"m\">runtime</span></h1>'+\n          '<div class=\"h1s\">Um só motor multimodal. Escolha uma capacidade — ela acontece no centro.</div></div>'+\n        '<div class=\"stagebox\"><canvas class=\"stage\" data-stage width=\"1520\" height=\"600\"></canvas><div class=\"ov\" data-ov></div></div>'+\n        '<div class=\"readout\"><b data-tps>2000</b> tokens/s<span> · </span><b data-lat>18</b>ms<span> · </span>multimodal · sempre ligado</div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 34 34\" fill=\"none\">'+f[3]+'</svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fk\">▸</div></div>'; }).join('') +'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]'), stage=root.querySelector('[data-stage]'), ov=root.querySelector('[data-ov]');\n    var tps=root.querySelector('[data-tps]'), lat=root.querySelector('[data-lat]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1));\n    var fx=field.getContext('2d'), sx=stage.getContext('2d');\n    var W=0,H=0,SCX=0,SCY=0, SW=1520,SH=600; // stage internal\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0);\n      var sr=stage.getBoundingClientRect(); SCX=SW/2; SCY=SH/2; }\n    size(); d2.on(window,'resize',size);\n\n    // ambient omnidirectional corona on the field, centered under the stage\n    var P=[], CAP=reduce?70:300; var fcx=0,fcy=0;\n    function fieldCenter(){ var sr=stage.getBoundingClientRect(), r=st.getBoundingClientRect(); fcx=sr.left-r.left+sr.width/2; fcy=sr.top-r.top+sr.height/2; }\n    function ambient(t){ fieldCenter();\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(6,4,7,0.30)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      var pulse=0.5+0.5*Math.sin(t*0.0015);\n      var g=fx.createRadialGradient(fcx,fcy,0,fcx,fcy,220+pulse*40); g.addColorStop(0,'rgba(250,72,220,'+(0.16+pulse*0.10)+')'); g.addColorStop(.5,'rgba(176,72,250,0.05)'); g.addColorStop(1,'rgba(176,72,250,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(fcx,fcy,260,0,6.2832); fx.fill();\n      if(!reduce){ for(var k=0;k<3;k++){ if(P.length<CAP){ var a=Math.random()*6.2832; var sp=0.3+Math.random()*1.2; P.push({x:fcx,y:fcy,vx:Math.cos(a)*sp,vy:Math.sin(a)*sp,life:1,r:0.6+Math.random()*1.6,dr:0.006+Math.random()*0.006}); } } }\n      for(var i=P.length-1;i>=0;i--){ var p=P[i]; p.x+=p.vx; p.y+=p.vy; p.life-=p.dr; if(p.life<=0){P.splice(i,1);continue;}\n        fx.beginPath(); fx.arc(p.x,p.y,p.r,0,6.2832); fx.fillStyle='rgba(255,150,240,'+(p.life*0.5)+')'; fx.fill(); }\n      fx.globalCompositeOperation='source-over';\n    }\n    // core (on stage canvas center)\n    function core(t){ var pulse=0.5+0.5*Math.sin(t*0.0016); var beat=Math.pow(0.5+0.5*Math.sin(t*0.004),6);\n      sx.globalCompositeOperation='lighter';\n      for(var i=0;i<6;i++){ var rr=30+i*18; var spd=(i%2?-1:1)*(0.0005+i*0.00014); var a0=t*spd+i*1.2; var a1=a0+0.9+0.5*Math.sin(t*0.001+i);\n        sx.beginPath(); sx.arc(SCX,SCY,rr,a0,a1); sx.strokeStyle='rgba(255,150,240,'+(0.5-i*0.06)+')'; sx.lineWidth=1.6; sx.stroke(); }\n      sx.beginPath(); sx.arc(SCX,SCY,9+pulse*4+beat*7,0,6.2832); sx.fillStyle='rgba(255,225,248,'+(0.85+beat*0.15)+')'; sx.fill();\n      sx.globalCompositeOperation='source-over';\n    }\n\n    // ---------- feature demos (center intervention) ----------\n    var active=null, aT=0;\n    function clearOv(){ ov.innerHTML=''; }\n    var imgT=0, visTags=[], emb=[], stoks=[], streamN=0, fils=[];\n    var DEMOS={\n      decisao:{ enter:function(){ clearOv(); filInit(); aT=0;\n        var c=document.createElement('div'); c.className='dcard mono'; c.innerHTML='<div class=\"dh\">Decisão · risco de churn</div><div class=\"dv\">Reter o cliente — agir hoje.</div><div class=\"db\">• uso caiu 38% em 30d<br>• 2 chamados sem resposta<br>• LTV alto, custo de retenção baixo</div><div class=\"conf\"><i></i></div>'; ov.appendChild(c);\n        setTimeout(function(){ if(active==='decisao'){ c.classList.add('show'); c.querySelector('.conf i').style.width='86%'; } },700); },\n        draw:function(t){ filDraw(t); } },\n      voz:{ enter:function(){ clearOv(); aT=0; ov.innerHTML='<div class=\"bub in mono\">▸ \"Cadê meu pedido 8421?\"</div><div class=\"bub out mono\">\"Sai amanhã 14h — rastreio enviado.\"</div>';\n        setTimeout(function(){ if(active==='voz') ov.querySelector('.bub.in').classList.add('show'); },300);\n        setTimeout(function(){ if(active==='voz') ov.querySelector('.bub.out').classList.add('show'); },1500); },\n        draw:function(t){ var y=SCY+150; sx.beginPath(); for(var x=SCX-360;x<=SCX+360;x+=6){ var e=Math.sin(x*0.02+t*0.006)*0.5+Math.sin(x*0.05-t*0.009)*0.3; var amp=40*(0.4+0.6*Math.abs(Math.sin(t*0.002+x*0.002))); if(x===SCX-360)sx.moveTo(x,y+e*amp); else sx.lineTo(x,y+e*amp);} var gr=sx.createLinearGradient(SCX-360,0,SCX+360,0); gr.addColorStop(0,'rgba(250,72,220,.3)');gr.addColorStop(.5,'#FA48DC');gr.addColorStop(1,'rgba(77,207,250,.7)'); sx.strokeStyle=gr; sx.lineWidth=2.4; sx.stroke(); } },\n      imagem:{ enter:function(){ clearOv(); imgT=0; ov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:6%;top:8%;font-size:11px;color:#c99ac3\">prompt: \"frasco de perfume, luz suave\"</div>'; },\n        draw:function(t,dt){ imgT+=dt; var cyc=3200; var p=(imgT%cyc)/cyc; var bx=SCX-150,by=SCY-150,BS=300; var res=Math.max(6,Math.round(6+(1-p)*64)); var cell=Math.ceil(BS/Math.ceil(BS/res));\n        for(var y=0;y<BS;y+=cell){ for(var x=0;x<BS;x+=cell){ var dx=(x+cell/2-BS/2)/(BS*0.4), dy=(y+cell/2-BS/2)/(BS*0.4); var d=Math.sqrt(dx*dx+dy*dy*1.6); var body=Math.max(0,1-Math.abs(d-0.55)*2.4)+(d<0.4?0.5:0); var noise=(1-p)*(Math.random()-0.5)*1.4; var v=Math.max(0,Math.min(1,body+noise)); sx.fillStyle='rgb('+Math.round(60+v*195)+','+Math.round(14+v*60)+','+Math.round(80+v*150)+')'; sx.fillRect(bx+x,by+y,cell+1,cell+1); } } } },\n      visao:{ enter:function(){ clearOv(); aT=0; visTags=[{x:.34,y:.26,w:.34,h:.2,l:'nota fiscal',c:'#FA48DC',at:0.35},{x:.37,y:.5,w:.24,h:.1,l:'R$ 1.240,00',c:'#48FAA1',at:0.7},{x:.56,y:.64,w:.26,h:.09,l:'CNPJ 12.345…',c:'#4DA4FA',at:1.0}];\n        visTags.forEach(function(tg,i){ var el=document.createElement('div'); el.className='tag2'; el.style.borderColor=tg.c; el.style.color=tg.c; el.textContent=tg.l; el.setAttribute('data-vt',i); ov.appendChild(el); }); },\n        draw:function(t,dt){ aT+=dt; var bx=SCX-190,by=SCY-140,BW=380,BH=280; var g=sx.createLinearGradient(bx,by,bx+BW,by+BH); g.addColorStop(0,'#241a2a'); g.addColorStop(1,'#0f0a14'); sx.fillStyle=g; sx.fillRect(bx,by,BW,BH);\n        sx.strokeStyle='rgba(255,255,255,.05)'; for(var i=0;i<7;i++){ sx.strokeRect(bx+30+i*4,by+30+i*3,BW*0.6,18); } var p=Math.min(1,aT/2200);\n        visTags.forEach(function(tg,i){ if(p>tg.at/2.2){ sx.strokeStyle=tg.c; sx.lineWidth=2; sx.setLineDash([7,5]); sx.strokeRect(bx+tg.x*BW,by+tg.y*BH,tg.w*BW,tg.h*BH); sx.setLineDash([]); var el=ov.querySelector('[data-vt=\"'+i+'\"]'); if(el){ var sr=stage.getBoundingClientRect(); el.style.left=((bx+tg.x*BW)/SW*100)+'%'; el.style.top=(((by+tg.y*BH)/SH*100)-6)+'%'; el.classList.add('show'); } } }); } },\n      embeddings:{ enter:function(){ clearOv(); emb=[]; var cl=[[SCX-160,SCY-70,'#FA48DC'],[SCX+150,SCY-40,'#48FAA1'],[SCX,SCY+120,'#4DA4FA']]; for(var i=0;i<54;i++){ var c=cl[i%3]; emb.push({x:SCX+(Math.random()-0.5)*700,y:SCY+(Math.random()-0.5)*380,tx:c[0]+(Math.random()-0.5)*150,ty:c[1]+(Math.random()-0.5)*120,c:c[2]}); } },\n        draw:function(t){ sx.globalCompositeOperation='lighter'; emb.forEach(function(p){ p.x+=(p.tx-p.x)*0.05; p.y+=(p.ty-p.y)*0.05; sx.beginPath(); sx.arc(p.x,p.y,3.2,0,6.28); sx.fillStyle=p.c; sx.fill(); }); for(var i=0;i<emb.length;i++)for(var j=i+1;j<emb.length;j++){ var a=emb[i],b=emb[j]; if(a.c===b.c){ var dx=a.x-b.x,dy=a.y-b.y; if(dx*dx+dy*dy<4200){ sx.beginPath(); sx.moveTo(a.x,a.y); sx.lineTo(b.x,b.y); sx.strokeStyle='rgba(255,255,255,0.05)'; sx.lineWidth=1; sx.stroke(); } } } sx.globalCompositeOperation='source-over'; } },\n      streaming:{ enter:function(){ clearOv(); streamN=0; stoks=[]; ov.innerHTML='<div class=\"mono\" data-sc style=\"position:absolute;right:6%;bottom:12%;font-size:26px;color:#fff;font-variant-numeric:tabular-nums\">0</div>'; },\n        draw:function(t,dt){ sx.globalCompositeOperation='lighter'; for(var k=0;k<7;k++) stoks.push({x:SCX-360,y:SCY+(Math.random()-0.5)*260,v:6+Math.random()*11,r:1+Math.random()*2}); streamN+=Math.round(50+Math.random()*110); var el=ov.querySelector('[data-sc]'); if(el)el.textContent=streamN.toLocaleString('pt-BR')+' tok';\n        for(var i=stoks.length-1;i>=0;i--){ var p=stoks[i]; p.x+=p.v; if(p.x>SCX+380){stoks.splice(i,1);continue;} sx.beginPath(); sx.arc(p.x,p.y,p.r,0,6.28); sx.fillStyle='rgba(255,120,230,.85)'; sx.fill(); } if(stoks.length>520)stoks.splice(0,stoks.length-520); sx.globalCompositeOperation='source-over'; } }\n    };\n    function filInit(){ fils=[]; for(var i=0;i<12;i++){ var a=(-1+2*(i/11)); fils.push({a:a*0.95, len:200+Math.random()*140, live:i%3!==0, ph:Math.random()*6}); } }\n    function filDraw(t){ sx.globalCompositeOperation='lighter'; fils.forEach(function(f){ sx.beginPath(); sx.moveTo(SCX,SCY); var ex=SCX+Math.cos(f.a)*f.len, ey=SCY+Math.sin(f.a)*f.len*0.7; var mx=SCX+Math.cos(f.a)*f.len*0.5, my=SCY+Math.sin(f.a)*f.len*0.5-40; sx.quadraticCurveTo(mx,my,ex,ey); sx.strokeStyle='rgba(250,72,220,'+(f.live?0.6:0.16)+')'; sx.lineWidth=f.live?1.6:1; sx.stroke(); if(f.live){ sx.beginPath(); sx.arc(ex,ey,2.4+Math.sin(t*0.004+f.ph),0,6.28); sx.fillStyle='#FA8CE8'; sx.fill(); } }); sx.globalCompositeOperation='source-over'; }\n\n    function setF(k){ active=k; clearOv(); if(DEMOS[k]&&DEMOS[k].enter) DEMOS[k].enter();\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); }); }\n\n    var raf=null,last=performance.now(),run=true,jt=0;\n    function loop(t){ if(!run)return; var dt=Math.min(48,t-last); last=t;\n      ambient(t);\n      sx.clearRect(0,0,SW,SH);\n      var D=active&&DEMOS[active]; if(D&&D.draw) D.draw(t,dt);\n      core(t);\n      if(t-jt>150){ jt=t; tps.textContent=(1900+Math.floor(Math.random()*260)).toLocaleString('pt-BR'); lat.textContent=(12+Math.floor(Math.random()*13)); }\n      raf=requestAnimationFrame(loop); }\n    setF('decisao');\n    if(!reduce) raf=requestAnimationFrame(loop); else { ambient(1000); sx.clearRect(0,0,SW,SH); if(DEMOS.decisao.draw)DEMOS.decisao.draw(1000,0); core(1000); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ setF(c.getAttribute('data-f')); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a73f592dad59127650872b6","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"pXGXE1hmGr3zDEEZ3rNLx","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:#070608; color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:46px; left:56px; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10.5px; letter-spacing:.34em; text-transform:uppercase; color:#6f6a72; }\n.h1{ font-size:clamp(30px,3.3vw,46px); font-weight:500; letter-spacing:-.02em; margin:12px 0 0; color:#F6F5F8; }\n.h1 u{ text-decoration:none; border-bottom:2px solid #FA48DC; padding-bottom:2px; }\n.h1s{ margin:14px 0 0; font-size:14px; line-height:1.55; color:#9a949c; max-width:46ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n/* central instrument stage */\n.stagebox{ position:absolute; left:50%; top:196px; transform:translateX(-50%); z-index:5; width:min(60%,700px); height:330px; }\ncanvas.stage{ position:absolute; inset:0; width:100%; height:100%; }\n.ov{ position:absolute; inset:0; z-index:2; pointer-events:none; }\n.mono{ font-family:ui-monospace,Menlo,monospace; }\n.dcard{ position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:330px;\n  background:rgba(9,8,11,.72); border:1px solid rgba(255,255,255,.10); border-radius:4px; padding:16px 18px; opacity:0; transition:opacity .45s ease; backdrop-filter:blur(2px); }\n.dcard.show{ opacity:1; }\n.dcard .dh{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:#a86aa0; }\n.dcard .dv{ font-size:16px; font-weight:500; margin:7px 0 11px; color:#F6F5F8; letter-spacing:-.01em; }\n.dcard .db{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#b6acb4; line-height:1.7; }\n.dcard .conf{ margin-top:14px; display:flex; align-items:center; gap:9px; }\n.dcard .conf .bar{ flex:1; height:2px; background:rgba(255,255,255,.1); overflow:hidden; }\n.dcard .conf .bar i{ display:block; height:100%; width:0; background:#FA48DC; transition:width 1.1s ease; }\n.dcard .conf .pc{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#a86aa0; }\n.bub{ position:absolute; max-width:60%; padding:8px 12px; border-radius:3px; font-family:ui-monospace,Menlo,monospace; font-size:12px; opacity:0; transition:opacity .4s; }\n.bub.in{ left:4%; top:16%; background:rgba(255,255,255,.045); border:1px solid rgba(255,255,255,.1); color:#cfc9d0; }\n.bub.out{ right:4%; top:56%; background:rgba(250,72,220,.08); border:1px solid rgba(250,72,220,.3); color:#f0d8ec; }\n.bub.show{ opacity:1; }\n.tag2{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.03em; color:#d6d2d8; background:rgba(9,8,11,.8); border:1px solid; padding:2px 6px; border-radius:3px; opacity:0; transition:.3s; white-space:nowrap; }\n.tag2.show{ opacity:1; }\n.cap{ position:absolute; left:0; right:0; top:544px; z-index:6; text-align:center; padding:0 40px; }\n.cap .ct{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:#a86aa0; }\n.cap .cs{ margin:8px auto 0; font-size:14.5px; line-height:1.5; color:#c9c4cb; max-width:56ch; font-weight:400; }\n.readout{ position:absolute; left:0; right:0; top:620px; z-index:6; text-align:center; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:#544f56; }\n.readout b{ color:#9a7d96; font-weight:400; font-variant-numeric:tabular-nums; }\n/* feature cards — flat, hairline, editorial */\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:6; display:flex; gap:0; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.06); }\n.fc{ flex:1; max-width:220px; text-align:left; padding:20px 20px 18px; cursor:pointer; position:relative; transition:background .2s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.018); }\n.fc.on{ background:rgba(250,72,220,.05); }\n.fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FA48DC; }\n.fc .ic{ width:26px; height:26px; margin-bottom:12px; opacity:.9; }\n.fc .ft{ font-size:13px; font-weight:600; color:#EDECEF; letter-spacing:-.01em; }\n.fc .fd{ margin-top:6px; font-size:11.5px; line-height:1.5; color:#8a848c; }\n.fc .fs{ margin-top:9px; font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.08em; color:#5f5a61; text-transform:uppercase; }\n.fc.on .fs{ color:#a86aa0; }\n@media (max-width:1120px){ .cards{ flex-wrap:wrap; } .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); } }\n@media (max-width:900px){ .stagebox{ position:relative; top:auto; margin:120px auto 0; width:88%; height:250px; } .head{ position:relative; left:auto; top:auto; padding:36px 24px 0; } .seed{ display:none; } .cap,.readout{ position:relative; top:auto; margin-top:14px; } .cards{ position:relative; bottom:auto; margin-top:18px; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.7; } }\n`,\n  render(d2){\n    var F=[\n      ['decisao','Raciocínio & Decisão','Cruza dezenas de sinais e devolve uma decisão estruturada — com o porquê, não só o quê.','regras + modelo · auditável',\n        '<circle cx=\"13\" cy=\"13\" r=\"3\" stroke=\"#FA48DC\" stroke-width=\"1.3\" fill=\"none\"/><path d=\"M13 10V4M13 16v6M10 13H4M16 13h6\" stroke=\"#9a949c\" stroke-width=\"1\"/>'],\n      ['voz','Voz · entra e sai','Transcreve a fala, entende a intenção e responde falando — atendimento e comandos por voz.','STT + TTS · pt · en · es',\n        '<path d=\"M3 13h3l3-7 4 14 3-9 2 4h5\" stroke=\"#c9c4cb\" stroke-width=\"1.3\" fill=\"none\" stroke-linejoin=\"round\"/>'],\n      ['imagem','Geração de imagem','Cria imagens sob demanda a partir de um prompt — produto, cena, campanha.','difusão · sob demanda',\n        '<rect x=\"4\" y=\"6\" width=\"18\" height=\"15\" rx=\"2\" stroke=\"#c9c4cb\" stroke-width=\"1.1\" fill=\"none\"/><circle cx=\"10\" cy=\"11\" r=\"1.8\" fill=\"#FADC48\"/><path d=\"M6 19l5-5 4 3 3-4 3 4\" stroke=\"#9a949c\" stroke-width=\"1\"/>'],\n      ['visao','Visão computacional','Lê documentos e fotos: extrai campos, detecta objetos, entende o conteúdo.','OCR + detecção',\n        '<rect x=\"4\" y=\"7\" width=\"18\" height=\"13\" rx=\"1.5\" stroke=\"#48FAA1\" stroke-width=\"1\" fill=\"none\" stroke-dasharray=\"3 2\"/><circle cx=\"13\" cy=\"13\" r=\"3.2\" stroke=\"#c9c4cb\" stroke-width=\"1.2\" fill=\"none\"/>'],\n      ['embeddings','Embeddings & busca','Transforma significado em vetor: busca semântica, similaridade e agrupamento.','vetor · kNN',\n        '<circle cx=\"8\" cy=\"9\" r=\"2\" fill=\"#4DA4FA\"/><circle cx=\"18\" cy=\"8\" r=\"2\" fill=\"#4DA4FA\"/><circle cx=\"13\" cy=\"18\" r=\"2\" fill=\"#FA48DC\"/><path d=\"M8 9l5 9 5-10\" stroke=\"#6a6570\" stroke-width=\"0.9\"/>'],\n      ['streaming','Streaming 2k tok/s','Responde em tempo real, token a token — a resposta aparece antes de terminar de pensar.','~2.000 tok/s',\n        '<path d=\"M3 9h18M3 13h20M3 17h13\" stroke=\"#c9c4cb\" stroke-width=\"1.3\" stroke-linecap=\"round\"/><circle cx=\"23\" cy=\"9\" r=\"1.4\" fill=\"#FA48DC\"/>']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eb\">Data² · domain</div>'+\n          '<h1 class=\"h1\">A mente do <u>runtime</u></h1>'+\n          '<div class=\"h1s\">Um motor de inteligência embutido na operação — texto, voz, imagem, visão. Escolha uma capacidade abaixo; ela é executada no centro.</div></div>'+\n        '<div class=\"seed\">core · d2-domain<br>seed 0x9F·A4E1<br>estado · nominal</div>'+\n        '<div class=\"stagebox\"><canvas class=\"stage\" data-stage width=\"1400\" height=\"660\"></canvas><div class=\"ov\" data-ov></div></div>'+\n        '<div class=\"cap\"><div class=\"ct\" data-ct>Decisão</div><div class=\"cs\" data-cs></div></div>'+\n        '<div class=\"readout\"><b data-tps>2000</b> tok/s · <b data-lat>18</b>ms · janela 128k · multimodal</div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 26 26\" fill=\"none\">'+f[4]+'</svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]'), stage=root.querySelector('[data-stage]'), ov=root.querySelector('[data-ov]');\n    var ctEl=root.querySelector('[data-ct]'), csEl=root.querySelector('[data-cs]'), tps=root.querySelector('[data-tps]'), lat=root.querySelector('[data-lat]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1));\n    var fx=field.getContext('2d'), sx=stage.getContext('2d');\n    var W=0,H=0,SW=1400,SH=660,SCX=700,SCY=330;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n    var fcx=0,fcy=0; function fc(){ var sr=stage.getBoundingClientRect(), r=st.getBoundingClientRect(); fcx=sr.left-r.left+sr.width/2; fcy=sr.top-r.top+sr.height/2; }\n\n    // ambient: extremely restrained — sparse slow motes + very faint field glow (no bloom orb)\n    var motes=[]; if(!reduce){ for(var i=0;i<46;i++) motes.push({a:Math.random()*6.28, r:60+Math.random()*230, sp:(Math.random()<0.5?-1:1)*(0.00006+Math.random()*0.00013), z:Math.random()}); }\n    function ambient(t){ fc();\n      fx.clearRect(0,0,W,H);\n      var g=fx.createRadialGradient(fcx,fcy,0,fcx,fcy,300); g.addColorStop(0,'rgba(250,72,220,0.05)'); g.addColorStop(.6,'rgba(120,60,140,0.015)'); g.addColorStop(1,'rgba(0,0,0,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(fcx,fcy,300,0,6.2832); fx.fill();\n      motes.forEach(function(m){ m.a+=m.sp*16; var x=fcx+Math.cos(m.a)*m.r, y=fcy+Math.sin(m.a)*m.r*0.5; fx.beginPath(); fx.arc(x,y,0.8+m.z,0,6.28); fx.fillStyle='rgba(220,180,215,'+(0.06+m.z*0.12)+')'; fx.fill(); });\n    }\n\n    // instrument reticle on the stage canvas (precise, hairline, respectable — NOT a glowing orb)\n    function reticle(t){\n      sx.strokeStyle='rgba(255,255,255,0.07)'; sx.lineWidth=1;\n      [130,210,300].forEach(function(r){ sx.beginPath(); sx.arc(SCX,SCY,r,0,6.2832); sx.stroke(); });\n      // ticks on outer ring\n      for(var i=0;i<72;i++){ var a=i/72*6.2832; var r0=300,r1=(i%6===0)?288:294; sx.beginPath(); sx.moveTo(SCX+Math.cos(a)*r0,SCY+Math.sin(a)*r0); sx.lineTo(SCX+Math.cos(a)*r1,SCY+Math.sin(a)*r1); sx.strokeStyle='rgba(255,255,255,'+(i%6===0?0.12:0.05)+')'; sx.stroke(); }\n      // crosshair\n      sx.strokeStyle='rgba(255,255,255,0.05)'; sx.beginPath(); sx.moveTo(SCX-300,SCY); sx.lineTo(SCX+300,SCY); sx.moveTo(SCX,SCY-300); sx.lineTo(SCX,SCY+300); sx.stroke();\n      // slow magenta sweep arc (the only 'alive' accent)\n      var a0=t*0.0004; sx.beginPath(); sx.arc(SCX,SCY,210,a0,a0+0.5); sx.strokeStyle='rgba(250,72,220,0.5)'; sx.lineWidth=1.5; sx.stroke();\n    }\n\n    var active=null, aT=0, imgT=0, visTags=[], emb=[], stoks=[], streamN=0, fils=[];\n    function clearOv(){ ov.innerHTML=''; }\n    var CAPS={ decisao:'Você pergunta em linguagem de negócio; o runtime cruza os sinais, decide e mostra o raciocínio por trás.',\n      voz:'A fala entra, é entendida, e a resposta sai falada — atendimento e comandos, em segundos.',\n      imagem:'Do texto ao visual: uma imagem é sintetizada sob demanda, dentro do runtime.',\n      visao:'Uma nota fiscal vira dados tipados; uma foto vira informação estruturada e decisão.',\n      embeddings:'O significado vira vetor — o runtime encontra pelo sentido, não pela palavra exata.',\n      streaming:'A resposta começa a aparecer token a token, antes mesmo de terminar de pensar.' };\n    var DEMOS={\n      decisao:{ enter:function(){ clearOv(); filInit(); var c=document.createElement('div'); c.className='dcard mono';\n        c.innerHTML='<div class=\"dh\">Decisão · risco de churn</div><div class=\"dv\">Reter o cliente — agir hoje.</div><div class=\"db\">— uso caiu 38% em 30 dias<br>— 2 chamados abertos sem resposta<br>— LTV alto · custo de retenção baixo</div><div class=\"conf\"><span class=\"pc\">confiança</span><span class=\"bar\"><i></i></span><span class=\"pc\" data-pc>86%</span></div>';\n        ov.appendChild(c); setTimeout(function(){ if(active==='decisao'){ c.classList.add('show'); c.querySelector('.conf i').style.width='86%'; } },500); },\n        draw:function(t){ filDraw(t); } },\n      voz:{ enter:function(){ clearOv(); ov.innerHTML='<div class=\"bub in\">▸ \"Cadê meu pedido 8421?\"</div><div class=\"bub out\">\"Sai amanhã às 14h — rastreio enviado.\"</div>';\n        setTimeout(function(){ if(active==='voz') ov.querySelector('.bub.in').classList.add('show'); },350); setTimeout(function(){ if(active==='voz') ov.querySelector('.bub.out').classList.add('show'); },1500); },\n        draw:function(t){ var y=SCY+120; sx.beginPath(); for(var x=SCX-260;x<=SCX+260;x+=5){ var e=Math.sin(x*0.02+t*0.005)*0.5+Math.sin(x*0.05-t*0.008)*0.3; var amp=26*(0.4+0.6*Math.abs(Math.sin(t*0.0018+x*0.002))); if(x===SCX-260)sx.moveTo(x,y+e*amp); else sx.lineTo(x,y+e*amp);} sx.strokeStyle='rgba(250,72,220,0.55)'; sx.lineWidth=1.4; sx.stroke(); } },\n      imagem:{ enter:function(){ clearOv(); imgT=0; ov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:5%;top:8%;font-size:11px;color:#8a848c\">prompt · \"frasco de perfume, luz suave\"</div>'; },\n        draw:function(t,dt){ imgT+=dt; var cyc=3400; var p=(imgT%cyc)/cyc; var BS=220,bx=SCX-BS/2,by=SCY-BS/2; var res=Math.max(5,Math.round(5+(1-p)*46)); var cell=Math.ceil(BS/Math.ceil(BS/res));\n        for(var y=0;y<BS;y+=cell){ for(var x=0;x<BS;x+=cell){ var dx=(x+cell/2-BS/2)/(BS*0.42),dy=(y+cell/2-BS/2)/(BS*0.42); var d=Math.sqrt(dx*dx+dy*dy*1.6); var body=Math.max(0,1-Math.abs(d-0.5)*2.4)+(d<0.36?0.5:0); var noise=(1-p)*(Math.random()-0.5)*1.2; var v=Math.max(0,Math.min(1,body+noise)); sx.fillStyle='rgb('+Math.round(50+v*160)+','+Math.round(16+v*46)+','+Math.round(64+v*120)+')'; sx.fillRect(bx+x,by+y,cell+1,cell+1); } }\n        sx.strokeStyle='rgba(255,255,255,.12)'; sx.strokeRect(bx,by,BS,BS); } },\n      visao:{ enter:function(){ clearOv(); aT=0; visTags=[{x:.32,y:.24,w:.36,h:.2,l:'nota fiscal',c:'#FA48DC',at:0.35},{x:.36,y:.5,w:.24,h:.1,l:'R$ 1.240,00',c:'#48FAA1',at:0.7},{x:.55,y:.66,w:.28,h:.09,l:'CNPJ 12.345…',c:'#4DA4FA',at:1.0}];\n        visTags.forEach(function(tg,i){ var el=document.createElement('div'); el.className='tag2'; el.style.borderColor=tg.c; el.style.color=tg.c; el.textContent=tg.l; el.setAttribute('data-vt',i); ov.appendChild(el); }); },\n        draw:function(t,dt){ aT+=dt; var BW=300,BH=210,bx=SCX-BW/2,by=SCY-BH/2; sx.fillStyle='#141019'; sx.fillRect(bx,by,BW,BH); sx.strokeStyle='rgba(255,255,255,.05)'; for(var i=0;i<6;i++) sx.strokeRect(bx+24+i*4,by+24+i*3,BW*0.6,14); var p=Math.min(1,aT/2200);\n        visTags.forEach(function(tg,i){ if(p>tg.at/2.2){ sx.strokeStyle=tg.c; sx.lineWidth=1.4; sx.setLineDash([6,4]); sx.strokeRect(bx+tg.x*BW,by+tg.y*BH,tg.w*BW,tg.h*BH); sx.setLineDash([]); var el=ov.querySelector('[data-vt=\"'+i+'\"]'); if(el){ el.style.left=((bx+tg.x*BW)/SW*100)+'%'; el.style.top=(((by+tg.y*BH)/SH*100)-5)+'%'; el.classList.add('show'); } } }); sx.strokeStyle='rgba(255,255,255,.12)'; sx.strokeRect(bx,by,BW,BH); } },\n      embeddings:{ enter:function(){ clearOv(); emb=[]; var cl=[[SCX-150,SCY-60,'#FA48DC'],[SCX+140,SCY-30,'#48FAA1'],[SCX,SCY+110,'#4DA4FA']]; for(var i=0;i<50;i++){ var c=cl[i%3]; emb.push({x:SCX+(Math.random()-0.5)*560,y:SCY+(Math.random()-0.5)*320,tx:c[0]+(Math.random()-0.5)*130,ty:c[1]+(Math.random()-0.5)*110,c:c[2]}); } },\n        draw:function(t){ emb.forEach(function(p){ p.x+=(p.tx-p.x)*0.05; p.y+=(p.ty-p.y)*0.05; sx.beginPath(); sx.arc(p.x,p.y,2.6,0,6.28); sx.fillStyle=p.c; sx.fill(); }); for(var i=0;i<emb.length;i++)for(var j=i+1;j<emb.length;j++){ var a=emb[i],b=emb[j]; if(a.c===b.c){ var dx=a.x-b.x,dy=a.y-b.y; if(dx*dx+dy*dy<3600){ sx.beginPath(); sx.moveTo(a.x,a.y); sx.lineTo(b.x,b.y); sx.strokeStyle='rgba(255,255,255,0.045)'; sx.lineWidth=1; sx.stroke(); } } } } },\n      streaming:{ enter:function(){ clearOv(); streamN=0; stoks=[]; ov.innerHTML='<div class=\"mono\" data-sc style=\"position:absolute;right:5%;bottom:12%;font-size:20px;color:#EDECEF;font-variant-numeric:tabular-nums\">0</div>'; },\n        draw:function(t,dt){ for(var k=0;k<5;k++) stoks.push({x:SCX-260,y:SCY+(Math.random()-0.5)*200,v:5+Math.random()*9,r:1+Math.random()*1.6}); streamN+=Math.round(45+Math.random()*100); var el=ov.querySelector('[data-sc]'); if(el)el.textContent=streamN.toLocaleString('pt-BR')+' tok';\n        for(var i=stoks.length-1;i>=0;i--){ var p=stoks[i]; p.x+=p.v; if(p.x>SCX+270){stoks.splice(i,1);continue;} sx.beginPath(); sx.arc(p.x,p.y,p.r,0,6.28); sx.fillStyle='rgba(230,150,215,0.7)'; sx.fill(); } if(stoks.length>460)stoks.splice(0,stoks.length-460); } }\n    };\n    function filInit(){ fils=[]; for(var i=0;i<10;i++){ var a=(-1+2*(i/9)); fils.push({a:a*0.95, len:150+Math.random()*90, live:i%3!==0, ph:Math.random()*6}); } }\n    function filDraw(t){ fils.forEach(function(f){ sx.beginPath(); sx.moveTo(SCX,SCY); var ex=SCX+Math.cos(f.a)*f.len, ey=SCY+Math.sin(f.a)*f.len*0.7; var mx=SCX+Math.cos(f.a)*f.len*0.5, my=SCY+Math.sin(f.a)*f.len*0.5-30; sx.quadraticCurveTo(mx,my,ex,ey); sx.strokeStyle='rgba(250,72,220,'+(f.live?0.4:0.12)+')'; sx.lineWidth=1; sx.stroke(); if(f.live){ sx.beginPath(); sx.arc(ex,ey,1.6+Math.sin(t*0.004+f.ph)*0.6,0,6.28); sx.fillStyle='rgba(250,140,232,0.8)'; sx.fill(); } }); }\n\n    function setF(k){ active=k; clearOv(); ctEl.textContent=({decisao:'Decisão',voz:'Voz',imagem:'Imagem',visao:'Visão',embeddings:'Embeddings',streaming:'Streaming'})[k]; csEl.textContent=CAPS[k];\n      if(DEMOS[k]&&DEMOS[k].enter)DEMOS[k].enter(); Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); }); }\n\n    var raf=null,last=performance.now(),run=true,jt=0;\n    function loop(t){ if(!run)return; var dt=Math.min(48,t-last); last=t;\n      ambient(t); sx.clearRect(0,0,SW,SH); reticle(t); var D=active&&DEMOS[active]; if(D&&D.draw) D.draw(t,dt);\n      if(t-jt>160){ jt=t; tps.textContent=(1900+Math.floor(Math.random()*240)).toLocaleString('pt-BR'); lat.textContent=(12+Math.floor(Math.random()*12)); }\n      raf=requestAnimationFrame(loop); }\n    setF('decisao');\n    if(!reduce) raf=requestAnimationFrame(loop); else { ambient(600); sx.clearRect(0,0,SW,SH); reticle(600); if(DEMOS.decisao.draw)DEMOS.decisao.draw(600,0); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ setF(c.getAttribute('data-f')); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a73f93c5bcb322df2e7b637","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"zzljPq9LaSs59j6TgT5__","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:#070506; color:#EDE9EA; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:46px; left:56px; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10.5px; letter-spacing:.34em; text-transform:uppercase; color:#6f6a6a; }\n.h1{ font-size:clamp(30px,3.3vw,46px); font-weight:500; letter-spacing:-.02em; margin:12px 0 0; color:#F6F3F4; }\n.h1 u{ text-decoration:none; border-bottom:2px solid #FA4848; padding-bottom:2px; }\n.h1s{ margin:14px 0 0; font-size:14px; line-height:1.55; color:#9a9294; max-width:46ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#564f50; line-height:1.7; }\n.seed b{ color:#c98f8f; font-weight:400; font-variant-numeric:tabular-nums; }\n.stagebox{ position:absolute; left:50%; top:188px; transform:translateX(-50%); z-index:5; width:min(66%,780px); height:344px; }\ncanvas.stage{ position:absolute; inset:0; width:100%; height:100%; }\n.ov{ position:absolute; inset:0; z-index:2; pointer-events:none; }\n.mono{ font-family:ui-monospace,Menlo,monospace; }\n.lab{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.04em; color:#e6dcdc; opacity:0; transition:opacity .4s; white-space:nowrap; }\n.lab.show{ opacity:1; }\n.lab .k{ color:#8a7f80; }\n.legend{ position:absolute; left:0; right:0; top:544px; z-index:6; text-align:center; padding:0 40px; }\n.legend .ct{ font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:#c86a6a; }\n.legend .cs{ margin:8px auto 0; font-size:14.5px; line-height:1.5; color:#c8c0c1; max-width:58ch; }\n.readout{ position:absolute; left:0; right:0; top:620px; z-index:6; text-align:center; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:#564f50; }\n.readout b{ color:#c98f8f; font-weight:400; font-variant-numeric:tabular-nums; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:6; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.06); }\n.fc{ flex:1; max-width:220px; text-align:left; padding:20px 20px 18px; cursor:pointer; position:relative; transition:background .2s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.018); }\n.fc.on{ background:rgba(250,72,72,.05); }\n.fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FA4848; }\n.fc .ic{ width:26px; height:26px; margin-bottom:12px; opacity:.9; }\n.fc .ft{ font-size:13px; font-weight:600; color:#EDE9EA; letter-spacing:-.01em; }\n.fc .fd{ margin-top:6px; font-size:11.5px; line-height:1.5; color:#8a8284; }\n.fc .fs{ margin-top:9px; font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.08em; color:#5f5a5b; text-transform:uppercase; }\n.fc.on .fs{ color:#c86a6a; }\n@media (max-width:1120px){ .cards{ flex-wrap:wrap; } .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); } }\n@media (max-width:900px){ .stagebox{ position:relative; top:auto; margin:120px auto 0; width:88%; height:250px; } .head{ position:relative; left:auto; top:auto; padding:36px 24px 0; } .seed{ display:none; } .legend,.readout{ position:relative; top:auto; margin-top:14px; } .cards{ position:relative; bottom:auto; margin-top:18px; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.75; } }\n`,\n  render(d2){\n    var F=[\n      ['organiza','Organiza o caos','Do dado bruto o runtime estrutura cadastros, tabelas, telas e transações — sozinho.','forms · tabelas · telas',\n        '<rect x=\"4\" y=\"5\" width=\"18\" height=\"16\" rx=\"1.5\" stroke=\"#FA4848\" stroke-width=\"1.2\" fill=\"none\"/><path d=\"M4 10h18M9 10v11\" stroke=\"#c98f8f\" stroke-width=\"0.9\"/>'],\n      ['escala','Escala a milhões','Bilhões de linhas indexadas em tempo real, sem cair de performance.','1.3M+ · +6k/s',\n        '<path d=\"M4 21V4M4 21h17\" stroke=\"#c9c1c2\" stroke-width=\"1.1\"/><path d=\"M7 17l4-6 3 3 5-8\" stroke=\"#FA4848\" stroke-width=\"1.3\" fill=\"none\"/>'],\n      ['tipado','Tipado & versionado','Cada campo com tipo declarado; cada mudança versionada e auditável.','schema · histórico',\n        '<rect x=\"4\" y=\"6\" width=\"18\" height=\"14\" rx=\"1.5\" stroke=\"#c9c1c2\" stroke-width=\"1.1\" fill=\"none\"/><circle cx=\"9\" cy=\"11\" r=\"1.6\" fill=\"#4DA4FA\"/><circle cx=\"9\" cy=\"16\" r=\"1.6\" fill=\"#48FAA1\"/><path d=\"M13 11h5M13 16h5\" stroke=\"#8a7f80\"/>'],\n      ['busca','Busca semântica','Encontra pelo significado — vizinhos por embedding, não por palavra exata.','vetor · kNN',\n        '<circle cx=\"11\" cy=\"11\" r=\"6\" stroke=\"#c9c1c2\" stroke-width=\"1.2\" fill=\"none\"/><path d=\"M16 16l5 5\" stroke=\"#FA4848\" stroke-width=\"1.4\"/>'],\n      ['acesso','Acesso, não banco','DataSet é acesso governado ao dado — não um banco que você tem que operar.','governado · policy',\n        '<rect x=\"6\" y=\"11\" width=\"14\" height=\"10\" rx=\"1.5\" stroke=\"#c9c1c2\" stroke-width=\"1.1\" fill=\"none\"/><path d=\"M9 11V8a4 4 0 018 0v3\" stroke=\"#FA4848\" stroke-width=\"1.2\" fill=\"none\"/>'],\n      ['tempo','Tempo real','Novos registros entram e ficam consultáveis na hora — nada de lote noturno.','streaming · live',\n        '<path d=\"M13 3a10 10 0 100 20M13 3v5\" stroke=\"#c9c1c2\" stroke-width=\"1.1\" fill=\"none\"/><path d=\"M13 13l5-3\" stroke=\"#FA4848\" stroke-width=\"1.3\"/>']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eb\">Data² · registry</div>'+\n          '<h1 class=\"h1\">A memória do <u>runtime</u></h1>'+\n          '<div class=\"h1s\">Milhões de registros vivos e tipados — e o runtime não só guarda: estrutura. Escolha uma capacidade; ela é executada no centro.</div></div>'+\n        '<div class=\"seed\">registry · d2-data<br>indexados · <b data-n>1.240.000</b><br>ingestão · <b data-rate>0</b>/s</div>'+\n        '<div class=\"stagebox\"><canvas class=\"stage\" data-stage width=\"1560\" height=\"688\"></canvas><div class=\"ov\" data-ov></div></div>'+\n        '<div class=\"legend\"><div class=\"ct\" data-ct>Organiza</div><div class=\"cs\" data-cs></div></div>'+\n        '<div class=\"readout\"><b data-tot>1.240.000</b> registros · <b data-fields>128</b> campos tipados · 42 relações</div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 26 26\" fill=\"none\">'+f[4]+'</svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]'), stage=root.querySelector('[data-stage]'), ov=root.querySelector('[data-ov]');\n    var ctEl=root.querySelector('[data-ct]'), csEl=root.querySelector('[data-cs]'), nEl=root.querySelector('[data-n]'), rateEl=root.querySelector('[data-rate]'), totEl=root.querySelector('[data-tot]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1));\n    var fx=field.getContext('2d'), sx=stage.getContext('2d');\n    var W=0,H=0,SW=1560,SH=688,SCX=780,SCY=340,maxR=300;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n    var fcx=0,fcy=0; function fc(){ var sr=stage.getBoundingClientRect(), r=st.getBoundingClientRect(); fcx=sr.left-r.left+sr.width/2; fcy=sr.top-r.top+sr.height/2; }\n\n    var TYPES=[[250,72,72],[247,72,160],[255,138,61],[250,220,72],[176,72,250],[77,164,250],[72,250,161]];\n    var N=reduce?260:2200, pts=[];\n    for(var i=0;i<N;i++){ var rr=maxR*(0.08+0.92*Math.pow(Math.random(),0.5)); var ang=Math.random()*6.2832; var thick=(Math.random()-0.5)*(24*(1-rr/maxR)+6);\n      pts.push({ r:rr, a:ang, w:(0.00016+(1-rr/maxR)*0.0004)*(reduce?0:1), th:thick, c:TYPES[(Math.random()*TYPES.length)|0], z:Math.random(), built:false, tx:0, ty:0 }); }\n    function orbit(p){ return [SCX+Math.cos(p.a)*p.r, SCY+Math.sin(p.a)*p.r*0.42+p.th]; }\n\n    // instrument frame (measured ellipse + ticks) — restrained\n    function frame(t){ sx.strokeStyle='rgba(255,255,255,0.06)'; sx.lineWidth=1;\n      sx.beginPath(); sx.ellipse(SCX,SCY,maxR,maxR*0.42,0,0,6.2832); sx.stroke();\n      sx.beginPath(); sx.ellipse(SCX,SCY,maxR*0.6,maxR*0.6*0.42,0,0,6.2832); sx.strokeStyle='rgba(255,255,255,0.04)'; sx.stroke();\n      for(var i=0;i<48;i++){ var a=i/48*6.2832; var r1=maxR,r0=(i%4===0)?maxR-12:maxR-7; sx.beginPath(); sx.moveTo(SCX+Math.cos(a)*r0,SCY+Math.sin(a)*r0*0.42); sx.lineTo(SCX+Math.cos(a)*r1,SCY+Math.sin(a)*r1*0.42); sx.strokeStyle='rgba(255,255,255,'+(i%4===0?0.1:0.04)+')'; sx.stroke(); }\n    }\n\n    // ---- feature intervention over the field ----\n    var active=null, scanR=0, streamBurst=0;\n    var CAPS={ organiza:'O runtime pega o caos de registros e cristaliza estrutura: um cadastro, uma tabela, uma transação — montados a partir dos próprios dados.',\n      escala:'Bilhões de linhas indexadas e consultáveis em tempo real — a densidade que você vê é escala real.',\n      tipado:'Cada ponto tem um tipo (cor). Nada de campo solto: schema declarado, mudança versionada.',\n      busca:'Uma consulta acende os vizinhos por significado — busca semântica, não match de texto.',\n      acesso:'DataSet é acesso governado, com policy — o runtime lê a si mesmo, você não opera um banco.',\n      tempo:'Registros novos entram pela borda e já orbitam consultáveis — sem lote noturno.' };\n\n    // organiza: recruit points to form an artifact outline\n    var shapes=[\n      function(){ // cadastro (form): rect + 3 field lines\n        var P=[],cx=SCX,cy=SCY,w=150,h=110; edge(P,cx-w/2,cy-h/2,w,h,60); for(var r=0;r<3;r++){ line(P,cx-w/2+16,cy-h/2+30+r*26,cx+w/2-16,cy-h/2+30+r*26,10);} return {pts:P,labels:[['nome',cx-w/2+16,cy-h/2+24],['e-mail',cx-w/2+16,cy-h/2+50],['região',cx-w/2+16,cy-h/2+76]],cap:'novo cadastro'}; },\n      function(){ // tabela: grid\n        var P=[],cx=SCX,cy=SCY,w=180,h=110; edge(P,cx-w/2,cy-h/2,w,h,64); for(var c=1;c<4;c++) line(P,cx-w/2+c*w/4,cy-h/2,cx-w/2+c*w/4,cy+h/2,8); for(var rr=1;rr<3;rr++) line(P,cx-w/2,cy-h/2+rr*h/3,cx+w/2,cy-h/2+rr*h/3,12); return {pts:P,labels:[['12.480 linhas',cx-w/2,cy+h/2+14]],cap:'tabela · produtos'}; },\n      function(){ // transação: card + total line\n        var P=[],cx=SCX,cy=SCY,w=160,h=104; edge(P,cx-w/2,cy-h/2,w,h,58); line(P,cx-w/2+14,cy+18,cx+w/2-14,cy+18,12); return {pts:P,labels:[['valor  R$ 1.240,00',cx-w/2+14,cy-16],['líquido  R$ 1.202,80',cx-w/2+14,cy+34],['✓ liquidado',cx-w/2+14,cy+50]],cap:'transação'}; }\n    ];\n    function edge(P,x,y,w,h,n){ for(var i=0;i<n;i++){ var t=i/n*4; var s=t|0, f=t-s; if(s===0)P.push([x+f*w,y]); else if(s===1)P.push([x+w,y+f*h]); else if(s===2)P.push([x+w-f*w,y+h]); else P.push([x,y+h-f*h]); } }\n    function line(P,x1,y1,x2,y2,n){ for(var i=0;i<n;i++){ var f=i/(n-1); P.push([x1+(x2-x1)*f,y1+(y2-y1)*f]); } }\n    var builders=[], shapeI=0, orgPhase='form', orgT=0, curShape=null;\n    function recruit(){ curShape=shapes[shapeI](); var need=curShape.pts.length; builders=[];\n      // pick points nearest to center\n      var pool=pts.slice().sort(function(a,b){return a.r-b.r;}).slice(0,need+40);\n      for(var i=0;i<need;i++){ var p=pool[i]; p.built=true; p.tx=curShape.pts[i][0]; p.ty=curShape.pts[i][1]; builders.push(p); }\n      // labels\n      ov.innerHTML=''; curShape.labels.forEach(function(l){ var el=document.createElement('div'); el.className='lab mono'; el.innerHTML=(l[0].indexOf('R$')>=0||l[0].indexOf('linhas')>=0||l[0].indexOf('✓')>=0)?l[0]:('<span class=\"k\">'+l[0]+'</span>'); el.style.left=(l[1]/SW*100)+'%'; el.style.top=(l[2]/SH*100)+'%'; ov.appendChild(el); });\n    }\n    function release(){ builders.forEach(function(p){ p.built=false; }); builders=[]; ov.innerHTML=''; }\n\n    function setF(k){ active=k; scanR=0; release();\n      ctEl.textContent=({organiza:'Organiza',escala:'Escala',tipado:'Tipado',busca:'Busca semântica',acesso:'Acesso',tempo:'Tempo real'})[k]; csEl.textContent=CAPS[k];\n      if(k==='organiza'){ orgPhase='form'; orgT=0; shapeI=0; recruit(); }\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); }); }\n\n    var count=1240000, raf=null,last=performance.now(),run=true,age0=performance.now();\n    function loop(t){ if(!run)return; var dt=Math.min(50,t-last); last=t; var age=(t-age0)/1000; fc();\n      // field\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(7,5,6,0.34)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      var densify = active==='escala'?1.5:1;\n      var g=fx.createRadialGradient(fcx,fcy,0,fcx,fcy,maxR*0.7); g.addColorStop(0,'rgba(250,72,72,'+(0.12*densify)+')'); g.addColorStop(1,'rgba(250,72,72,0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(fcx,fcy,maxR*0.8,0,6.2832); fx.fill();\n      scanR+=dt*0.18; if(scanR>maxR) scanR=0;\n      // organiza phase machine\n      if(active==='organiza'){ orgT+=dt; if(orgPhase==='form'&&orgT>2600){orgPhase='hold';orgT=0;} else if(orgPhase==='hold'&&orgT>2200){orgPhase='out';orgT=0;release();} else if(orgPhase==='out'&&orgT>700){orgPhase='form';orgT=0;shapeI=(shapeI+1)%shapes.length;recruit();}\n        if(orgPhase==='form'&&orgT>1100){ ov.querySelectorAll('.lab').forEach(function(e){e.classList.add('show');}); } }\n      var offx=fcx-SCX, offy=fcy-SCY; // field center offset vs stage coords\n      for(var i=0;i<pts.length;i++){ var p=pts[i];\n        if(p.built){ var ox=p.tx+offx, oy=p.ty+offy; // ease toward target (stage coords -> field)\n          p.cx=(p.cx==null?ox:p.cx); p.cy=(p.cy==null?oy:p.cy); p.cx+=(ox-p.cx)*0.10; p.cy+=(oy-p.cy)*0.10;\n          fx.beginPath(); fx.arc(p.cx,p.cy,1.6,0,6.28); fx.fillStyle='rgba(255,150,150,0.95)'; fx.fill(); continue; }\n        p.cx=null; p.cy=null; p.a+=p.w*dt; var o=orbit(p); var x=o[0]+offx, y=o[1]+offy;\n        var lit = (active==='busca' && Math.abs(p.r-scanR)<14 && p.c[2]<120) ? 1 : (active!=='busca'&&Math.abs(p.r-scanR)<10?0.5:0);\n        var tint = active==='tipado'? 1 : 0.7;\n        var br=(0.14+p.z*0.42*densify+(1-p.r/maxR)*0.2)*(0.7+0.3*Math.sin(age*0.7+i))+lit*0.7;\n        var c=p.c; fx.fillStyle='rgba('+c[0]+','+Math.round(c[1]*tint+ (1-tint)*72)+','+Math.round(c[2]*tint+(1-tint)*72)+','+Math.min(1,br)+')';\n        var s=p.z>0.82?1.7:1; fx.fillRect(x,y,s+lit,s+lit); }\n      // tempo: extra inflow streaks\n      if(active==='tempo'){ for(var k=0;k<3;k++){ var a=Math.random()*6.28; var e=maxR*1.2; var sxp=fcx+Math.cos(a)*e, syp=fcy+Math.sin(a)*e*0.42; fx.strokeStyle='rgba(255,120,120,0.25)'; fx.beginPath(); fx.moveTo(sxp,syp); fx.lineTo(fcx+Math.cos(a)*maxR*0.5,fcy+Math.sin(a)*maxR*0.5*0.42); fx.stroke(); } }\n      fx.globalCompositeOperation='source-over';\n      // instrument frame on stage canvas\n      sx.clearRect(0,0,SW,SH); frame(t);\n      // counters\n      var rate=3200+Math.floor(Math.random()*(active==='escala'?9000:5200)); count+=Math.floor(rate*dt/1000);\n      nEl.textContent=count.toLocaleString('pt-BR'); rateEl.textContent=rate.toLocaleString('pt-BR'); totEl.textContent=count.toLocaleString('pt-BR');\n      raf=requestAnimationFrame(loop); }\n    setF('organiza');\n    if(!reduce) raf=requestAnimationFrame(loop); else { fx.fillStyle='#070506'; fx.fillRect(0,0,W,H); fx.globalCompositeOperation='lighter'; fc(); pts.forEach(function(p){ var o=orbit(p); fx.fillStyle='rgba('+p.c[0]+','+p.c[1]+','+p.c[2]+','+(0.2+p.z*0.4)+')'; fx.fillRect(o[0]+fcx-SCX,o[1]+fcy-SCY,p.z>0.8?1.7:1,1); }); sx.clearRect(0,0,SW,SH); frame(0); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ setF(c.getAttribute('data-f')); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a73fc3c7b69f6e94451b710","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"m5FS7BMqmFNHLaE5Uw4tF","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:#070608; color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:46px; left:56px; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10.5px; letter-spacing:.3em; text-transform:uppercase; color:#6f6a72; }\n.eb .p{ color:#FA4848; } .eb .p2{ color:#FA48DC; } .eb .p3{ color:#4866FA; }\n.h1{ font-size:clamp(28px,3.2vw,44px); font-weight:500; letter-spacing:-.02em; margin:12px 0 0; color:#F6F5F8; }\n.h1s{ margin:13px 0 0; font-size:14px; line-height:1.55; color:#9a949c; max-width:48ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#8fbf9f; font-weight:400; }\n.stagebox{ position:absolute; left:50%; top:196px; transform:translateX(-50%); z-index:5; width:min(80%,980px); height:320px; }\ncanvas.stage{ position:absolute; inset:0; width:100%; height:100%; }\n.ov{ position:absolute; inset:0; z-index:2; pointer-events:none; }\n.mono{ font-family:ui-monospace,Menlo,monospace; }\n.zlab{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; transform:translateX(-50%); }\n.panel{ position:absolute; right:2%; top:50%; transform:translateY(-50%); width:210px; background:rgba(9,10,14,.82); border:1px solid rgba(72,102,250,.4); border-radius:5px; padding:13px 14px; opacity:0; transition:opacity .4s; }\n.panel.show{ opacity:1; }\n.panel .ph{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:#7f92e0; margin-bottom:9px; }\n.panel .pr{ display:flex; justify-content:space-between; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; padding:4px 0; border-bottom:1px solid rgba(255,255,255,.06); }\n.panel .pr .k{ color:#8a848c; } .panel .pr .v{ color:#EDECEF; }\n.panel .verdict{ margin-top:10px; font-size:12px; color:#fff; }\n.panel .verdict.block{ color:#FA8C8C; }\n.panel .idtag{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#48FAA1; }\n.legend{ position:absolute; left:0; right:0; top:536px; z-index:6; text-align:center; padding:0 40px; }\n.legend .cs{ margin:0 auto; font-size:14px; line-height:1.5; color:#c9c4cb; max-width:64ch; }\n.legend .cs b1{ color:#FA6a6a; } .legend .cs b2{ color:#FA8CE8; } .legend .cs b3{ color:#8fa0ff; } .legend .cs b4{ color:#48FAA1; }\n.controls{ position:absolute; left:0; right:0; bottom:48px; z-index:6; display:flex; gap:14px; justify-content:center; align-items:stretch; flex-wrap:wrap; padding:0 44px; }\n.q{ text-align:left; border:1px solid rgba(255,255,255,.09); background:rgba(255,255,255,.015); border-radius:6px; padding:14px 16px; cursor:pointer; width:210px; transition:.18s; position:relative; }\n.q:hover{ border-color:rgba(250,72,220,.5); background:rgba(250,72,220,.05); }\n.q.on{ border-color:rgba(250,72,220,.9); background:rgba(250,72,220,.08); }\n.q .qt{ font-size:13px; color:#EDECEF; font-weight:500; }\n.q .qd{ margin-top:5px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.04em; color:#7a747c; }\n.idbox{ width:230px; border:1px solid rgba(72,250,161,.35); background:rgba(72,250,161,.04); border-radius:6px; padding:13px 16px; }\n.idbox .il{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#48FAA1; }\n.idbox .ih{ font-size:12.5px; color:#cfeede; margin:5px 0 11px; line-height:1.4; }\n.tog{ display:flex; border:1px solid rgba(72,250,161,.4); border-radius:999px; overflow:hidden; cursor:pointer; }\n.tog .opt{ flex:1; text-align:center; font-family:ui-monospace,Menlo,monospace; font-size:11px; padding:7px 0; color:#8fbf9f; transition:.18s; }\n.tog .opt.on{ background:#48FAA1; color:#04140b; font-weight:600; }\n@media (max-width:1040px){ .stagebox{ position:relative; top:auto; margin:120px auto 0; width:90%; height:260px; } .head{ position:relative; padding:36px 24px 0; top:auto; left:auto; } .seed{ display:none; } .legend{ position:relative; top:auto; margin-top:12px; } .controls{ position:relative; bottom:auto; margin-top:18px; } .panel{ right:1%; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.7; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eb\"><span class=\"p\">Registry</span> + <span class=\"p2\">Domain</span> + <span class=\"p3\">UI</span> · combo</div>'+\n          '<h1 class=\"h1\">Copiloto de operação</h1>'+\n          '<div class=\"h1s\">Uma tela que <b style=\"color:#F6F5F8\">entende, decide e mostra o dado</b>. Pergunte em linguagem de negócio — o dado vira decisão vira interface, ao vivo.</div></div>'+\n        '<div class=\"seed\">combo · copiloto<br>governança · <b data-idlab>gestor</b><br>estado · nominal</div>'+\n        '<div class=\"stagebox\"><canvas class=\"stage\" data-stage width=\"1960\" height=\"640\"></canvas><div class=\"ov\" data-ov>'+\n          '<div class=\"zlab\" data-zr style=\"color:#FA6a6a\">Registry · dado</div>'+\n          '<div class=\"zlab\" data-zd style=\"color:#FA8CE8\">Domain · decide</div>'+\n          '<div class=\"zlab\" data-zu style=\"color:#8fa0ff\">UI · mostra</div>'+\n          '<div class=\"panel\" data-panel></div>'+\n        '</div></div>'+\n        '<div class=\"legend\"><div class=\"cs mono\"><b1>Registry</b1> entrega o dado → <b2>Domain</b2> decide → <b3>UI</b3> monta a tela. <b4>ID</b4> governa quem vê o quê.</div></div>'+\n        '<div class=\"controls\" data-controls>'+\n          '<div class=\"q on\" data-q=\"churn\"><div class=\"qt\">Clientes em risco?</div><div class=\"qd\">registry → domain → ui</div></div>'+\n          '<div class=\"q\" data-q=\"credito\"><div class=\"qt\">Aprovar este crédito?</div><div class=\"qd\">decisão + valor sensível</div></div>'+\n          '<div class=\"q\" data-q=\"estoque\"><div class=\"qt\">Estoque crítico agora?</div><div class=\"qd\">consulta + painel</div></div>'+\n          '<div class=\"idbox\"><div class=\"il\">ID · acesso</div><div class=\"ih\">Troque o papel e veja a governança agir no resultado.</div>'+\n            '<div class=\"tog\" data-tog><div class=\"opt on\" data-role=\"gestor\">Gestor</div><div class=\"opt\" data-role=\"analista\">Analista</div></div></div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]'), stage=root.querySelector('[data-stage]'), ov=root.querySelector('[data-ov]');\n    var panel=root.querySelector('[data-panel]'), idlab=root.querySelector('[data-idlab]');\n    var zr=root.querySelector('[data-zr]'), zd=root.querySelector('[data-zd]'), zu=root.querySelector('[data-zu]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var fx=field.getContext('2d'), sx=stage.getContext('2d');\n    var W=0,H=0,SW=1960,SH=640; var RX=360,DX=980,UX=1600,CY=300; // zone centers (stage coords)\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0); }\n    size(); d2.on(window,'resize',size);\n    function place(){ var sr=stage.getBoundingClientRect(), r=st.getBoundingClientRect(); function pos(el,x,y){ el.style.left=((sr.left-r.left)+ x/SW*sr.width)+'px'; el.style.top=((sr.top-r.top)+ y/SH*sr.height)+'px'; }\n      pos(zr,RX,CY+150); pos(zd,DX,CY+170); pos(zu,UX,CY+150); }\n\n    var role='gestor';\n    // registry cluster points\n    var reg=[]; for(var i=0;i<120;i++){ var a=Math.random()*6.28, rr=Math.random()*70; reg.push({x:RX+Math.cos(a)*rr, y:CY+Math.sin(a)*rr*0.8, base:0.2+Math.random()*0.4, lit:0}); }\n    var signals=[]; // {x,y, seg, from,to, color}\n    var domFlare=0, uiFill=0, curQ=null;\n    var Q={ churn:{ph:'Registry · clientes', rows:[['clientes ativos','2.148'],['em risco (30d)','312'],['LTV médio','R$ 4.9k']], verdict:'Reter 312 — ação hoje.', sensitive:false},\n      credito:{ph:'Registry · proposta', rows:[['solicitante','#48.201'],['score','A-'],['valor','R$ 82.000']], verdict:'Aprovar com limite.', sensitive:true},\n      estoque:{ph:'Registry · SKUs', rows:[['SKUs monitorados','12.480'],['abaixo do mínimo','37'],['ruptura em 48h','9']], verdict:'Repor 9 críticos.', sensitive:false} };\n\n    function runQuery(k){ curQ=k; panel.classList.remove('show'); uiFill=0; domFlare=0;\n      reg.forEach(function(p){ p.lit=0; }); var n=0; var iv=setInterval(function(){ if(n>26){clearInterval(iv);return;} for(var i=0;i<4;i++){ var p=reg[(Math.random()*reg.length)|0]; if(p)p.lit=1; } n++; },40);\n      // fire signal R->D\n      signals.push({seg:0, t:0, color:[250,120,120]});\n    }\n    function buildPanel(){ var q=Q[curQ]; if(!q) return; var restricted = role==='analista' && q.sensitive;\n      var rows=q.rows.map(function(r){ var v=r[1]; if(restricted && (r[0]==='valor')) v='R$ ••••••'; return '<div class=\"pr\"><span class=\"k\">'+r[0]+'</span><span class=\"v\">'+v+'</span></div>'; }).join('');\n      var verdict = restricted ? '<div class=\"verdict block\">decisão bloqueada — sem permissão</div>' : '<div class=\"verdict\">'+q.verdict+'</div>';\n      var idt = '<div class=\"idtag\">ID · '+(restricted?'analista · campos mascarados':'gestor · acesso total')+'</div>';\n      panel.innerHTML='<div class=\"ph\">'+q.ph.replace('Registry','UI · resultado')+'</div>'+rows+verdict+idt; panel.classList.add('show'); }\n\n    function setRole(r){ role=r; idlab.textContent=r; Array.prototype.slice.call(root.querySelectorAll('.tog .opt')).forEach(function(o){ o.classList.toggle('on', o.getAttribute('data-role')===r); }); if(curQ && panel.classList.contains('show')) buildPanel(); }\n\n    function frame(t){\n      // instrument line connecting zones + zone reticles\n      sx.strokeStyle='rgba(255,255,255,0.08)'; sx.lineWidth=1; sx.beginPath(); sx.moveTo(RX,CY); sx.lineTo(UX,CY); sx.stroke();\n      for(var x=RX;x<=UX;x+=40){ sx.beginPath(); sx.moveTo(x,CY-4); sx.lineTo(x,CY+4); sx.strokeStyle='rgba(255,255,255,0.06)'; sx.stroke(); }\n      // registry cluster\n      reg.forEach(function(p){ if(p.lit>0)p.lit-=0.02; var b=p.base+(p.lit>0?p.lit*0.7:0); sx.fillStyle='rgba(250,'+(72+Math.round((1-b)*40))+',72,'+Math.min(1,b)+')'; sx.fillRect(p.x,p.y,1.6,1.6); });\n      sx.strokeStyle='rgba(250,72,72,0.3)'; sx.beginPath(); sx.arc(RX,CY,84,0,6.28); sx.stroke();\n      // domain reticle\n      var pulse=0.5+0.5*Math.sin(t*0.002);\n      sx.strokeStyle='rgba(250,72,220,'+(0.3+domFlare*0.5)+')'; sx.lineWidth=1.2; [40,66,92].forEach(function(r){ sx.beginPath(); sx.arc(DX,CY,r,0,6.28); sx.stroke(); });\n      if(domFlare>0){ for(var i=0;i<8;i++){ var a=i/8*6.28+t*0.001; sx.beginPath(); sx.moveTo(DX,CY); sx.lineTo(DX+Math.cos(a)*66*domFlare,CY+Math.sin(a)*66*domFlare); sx.strokeStyle='rgba(250,140,232,'+(domFlare*0.5)+')'; sx.stroke(); } domFlare-=0.01; }\n      sx.beginPath(); sx.arc(DX,CY,5+pulse*2,0,6.28); sx.fillStyle='rgba(255,200,240,0.9)'; sx.fill();\n      // ui frame\n      sx.strokeStyle='rgba(72,102,250,0.4)'; sx.lineWidth=1.2; sx.strokeRect(UX-70,CY-80,180,160);\n      if(uiFill>0){ sx.fillStyle='rgba(72,102,250,'+(0.06*uiFill)+')'; sx.fillRect(UX-70,CY-80,180,160); for(var r=0;r<4;r++){ if(uiFill>r/4){ sx.strokeStyle='rgba(140,160,255,0.4)'; sx.beginPath(); sx.moveTo(UX-56,CY-52+r*30); sx.lineTo(UX-56+140*Math.min(1,(uiFill-r/4)*4),CY-52+r*30); sx.stroke(); } } if(uiFill<1)uiFill+=0.03; }\n      // signals travel R->D->U\n      for(var s=signals.length-1;s>=0;s--){ var sg=signals[s]; sg.t+=0.02;\n        var ax,ay,bx,by; if(sg.seg===0){ ax=RX;ay=CY;bx=DX;by=CY; } else { ax=DX;ay=CY;bx=UX-70;by=CY; }\n        var x=ax+(bx-ax)*sg.t, y=ay+(by-ay)*sg.t;\n        sx.beginPath(); sx.arc(x,y,3.4,0,6.28); sx.fillStyle='rgb('+sg.color.join(',')+')'; sx.fill();\n        sx.beginPath(); sx.arc(x,y,8,0,6.28); sx.fillStyle='rgba('+sg.color.join(',')+',0.18)'; sx.fill();\n        if(sg.t>=1){ if(sg.seg===0){ domFlare=1; signals.splice(s,1); setTimeout(function(){ signals.push({seg:1,t:0,color:[250,140,232]}); },420); } else { uiFill=0.001; signals.splice(s,1); setTimeout(buildPanel, 500); } }\n      }\n    }\n    var raf=null,last=performance.now(),run=true;\n    function ambient(){ fx.clearRect(0,0,W,H); }\n    function loop(t){ if(!run)return; last=t; ambient(); sx.clearRect(0,0,SW,SH); frame(t); place(); raf=requestAnimationFrame(loop); }\n    place(); runQuery('churn');\n    if(!reduce) raf=requestAnimationFrame(loop); else { sx.clearRect(0,0,SW,SH); frame(600); place(); domFlare=0; uiFill=1; buildPanel(); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.q')).forEach(function(c){ d2.on(c,'click',function(){ Array.prototype.slice.call(root.querySelectorAll('.q')).forEach(function(o){o.classList.remove('on');}); c.classList.add('on'); runQuery(c.getAttribute('data-q')); }); });\n    Array.prototype.slice.call(root.querySelectorAll('.tog .opt')).forEach(function(o){ d2.on(o,'click',function(){ setRole(o.getAttribute('data-role')); }); });\n  }\n}"}}}}}}}},{"_id":"6a73fc9c669cd00c34879b04","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"BemSnzG72ImOWoucmRnvf","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:820px; overflow:hidden;\n  background:#070609; color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.stage{ position:absolute; left:50%; top:190px; transform:translateX(-50%); z-index:2; width:min(78%,940px); height:340px; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:46px; left:56px; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10.5px; letter-spacing:.3em; text-transform:uppercase; color:#6f6a72; }\n.eb .v{ color:#B08CFF; } .eb .c{ color:#7FE9F2; }\n.h1{ font-size:clamp(28px,3.2vw,44px); font-weight:500; letter-spacing:-.02em; margin:12px 0 0; color:#F6F5F8; }\n.h1s{ margin:13px 0 0; font-size:14px; line-height:1.55; color:#9a949c; max-width:46ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#9fb8d8; font-weight:400; font-variant-numeric:tabular-nums; }\n.ov{ position:absolute; left:50%; top:190px; transform:translateX(-50%); z-index:5; width:min(78%,940px); height:340px; pointer-events:none; }\n.zlab{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.18em; text-transform:uppercase; transform:translateX(-50%); }\n.receipt{ position:absolute; left:50%; top:56%; transform:translateX(-50%) translateY(8px); z-index:6;\n  font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.03em; color:#d6dde2;\n  background:rgba(9,10,13,.9); border:1px solid rgba(127,233,242,.35); border-radius:4px; padding:7px 14px; opacity:0; transition:.3s; white-space:nowrap; }\n.receipt.show{ opacity:1; transform:translateX(-50%) translateY(0); }\n.receipt b{ color:#7FE9F2; }\n.legend{ position:absolute; left:0; right:0; top:556px; z-index:6; text-align:center; padding:0 40px; }\n.legend .cs{ font-size:14px; color:#c9c4cb; } .legend .cs .v{ color:#B08CFF; } .legend .cs .c{ color:#7FE9F2; }\n.readout{ position:absolute; left:0; right:0; top:598px; z-index:6; text-align:center; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:#544f56; }\n.readout b{ color:#9fb8d8; font-weight:400; }\n.cards{ position:absolute; left:0; right:0; bottom:46px; z-index:6; display:flex; gap:0; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.06); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:18px 18px 16px; cursor:pointer; position:relative; transition:background .2s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.src::after{ content:''; }\n.fc.fire{ background:rgba(176,140,255,.08); }\n.fc .row1{ display:flex; align-items:center; gap:10px; }\n.fc .disc{ width:26px; height:26px; border-radius:7px; display:flex; align-items:center; justify-content:center; font-family:ui-monospace,Menlo,monospace; font-weight:700; font-size:11px; }\n.fc .nm{ font-size:13px; font-weight:600; color:#EDECEF; }\n.fc .fd{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.03em; color:#7a747c; }\n.fc .io{ position:absolute; top:16px; right:16px; font-family:ui-monospace,Menlo,monospace; font-size:8.5px; letter-spacing:.14em; text-transform:uppercase; }\n.fc .io.in{ color:#B08CFF; } .fc .io.out{ color:#7FE9F2; }\n@media (max-width:1040px){ .stagebox,.ov,canvas.stage{ } .cards{ flex-wrap:wrap; } .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); } }\n@media (max-width:900px){ canvas.stage,.ov{ position:relative; left:auto; top:auto; transform:none; margin:120px auto 0; width:90%; } .head{ position:relative; padding:36px 24px 0; top:auto; left:auto; } .seed{ display:none; } .legend,.readout{ position:relative; top:auto; margin-top:12px; } .cards{ position:relative; bottom:auto; margin-top:16px; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eb\"><span class=\"v\">Rush</span> + <span class=\"c\">Connect</span> · combo</div>'+\n          '<h1 class=\"h1\">O barramento</h1>'+\n          '<div class=\"h1s\">Escuta o mundo e responde ao mundo. Um evento entra pelo <b style=\"color:#B08CFF\">Rush</b>, o runtime processa, e a ação sai pelo <b style=\"color:#7FE9F2\">Connect</b>. Clique num conector.</div></div>'+\n        '<div class=\"seed\">bus · rush↔connect<br>eventos · <b data-ev>0</b><br>latência · <b data-lt>—</b></div>'+\n        '<canvas class=\"stage\" data-stage width=\"1880\" height=\"680\"></canvas>'+\n        '<div class=\"ov\" data-ov>'+\n          '<div class=\"zlab\" data-zr style=\"color:#B08CFF\">Rush · inbound</div>'+\n          '<div class=\"zlab\" data-zc style=\"color:#7FE9F2\">Connect · outbound</div>'+\n          '<div class=\"zlab\" data-zm style=\"color:#7a747c\">runtime</div>'+\n          '<div class=\"receipt\" data-rc></div>'+\n        '</div>'+\n        '<div class=\"legend\"><div class=\"cs mono\">O mesmo conector <span class=\"v\">ouve</span> (Rush) e <span class=\"c\">entrega</span> (Connect) — por aqui a Data² conecta com qualquer coisa.</div></div>'+\n        '<div class=\"readout\"><b data-tp>webhooks · cron · voz · e-mail</b> → runtime → <b>APIs · PSPs · ERPs · mensagens</b></div>'+\n        '<div class=\"cards\" data-cards>'+\n          '<div class=\"fc src\" data-node=\"gh\"><span class=\"io in\">inbound</span><div class=\"row1\"><div class=\"disc\" style=\"background:#cfd3d8;color:#111\">GH</div><div class=\"nm\">GitHub</div></div><div class=\"fd\">push → Twilio SMS</div></div>'+\n          '<div class=\"fc src\" data-node=\"vtex\"><span class=\"io in\">inbound</span><div class=\"row1\"><div class=\"disc\" style=\"background:#F71963;color:#fff\">V</div><div class=\"nm\">VTEX</div></div><div class=\"fd\">pedido → HubSpot contato</div></div>'+\n          '<div class=\"fc src\" data-node=\"disc\"><span class=\"io in\">inbound</span><div class=\"row1\"><div class=\"disc\" style=\"background:#5865F2;color:#fff\">D</div><div class=\"nm\">Discord</div></div><div class=\"fd\">comando → Sheets linha</div></div>'+\n          '<div class=\"fc\" data-node=\"hub\"><span class=\"io out\">outbound</span><div class=\"row1\"><div class=\"disc\" style=\"background:#FF7A59;color:#fff\">H</div><div class=\"nm\">HubSpot</div></div><div class=\"fd\">CRM · contatos</div></div>'+\n          '<div class=\"fc\" data-node=\"tw\"><span class=\"io out\">outbound</span><div class=\"row1\"><div class=\"disc\" style=\"background:#F22F46;color:#fff\">T</div><div class=\"nm\">Twilio</div></div><div class=\"fd\">SMS · voz</div></div>'+\n          '<div class=\"fc\" data-node=\"sh\"><span class=\"io out\">outbound</span><div class=\"row1\"><div class=\"disc\" style=\"background:#34A853;color:#fff\">S</div><div class=\"nm\">Sheets</div></div><div class=\"fd\">planilhas</div></div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), stage=root.querySelector('[data-stage]'), ov=root.querySelector('[data-ov]');\n    var rc=root.querySelector('[data-rc]'), evEl=root.querySelector('[data-ev]'), ltEl=root.querySelector('[data-lt]');\n    var zr=root.querySelector('[data-zr]'), zc=root.querySelector('[data-zc]'), zm=root.querySelector('[data-zm]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var sx=stage.getContext('2d');\n    var SW=1880,SH=680, RX=300,MX=940,CX2=1580,CY=340;\n    function size(){ stage.width=SW*DPR; stage.height=SH*DPR; sx.setTransform(DPR,0,0,DPR,0,0); }\n    size();\n    function place(){ var sr=stage.getBoundingClientRect(), r=st.getBoundingClientRect(); function pos(el,x,y){ el.style.left=((sr.left-r.left)+x/SW*sr.width - (ov.getBoundingClientRect().left-r.left))+'px'; el.style.top=((sr.top-r.top)+y/SH*sr.height - (ov.getBoundingClientRect().top-r.top))+'px'; }\n      pos(zr,RX,CY+120); pos(zc,CX2,CY+120); pos(zm,MX,CY+96); }\n    var pairs={ gh:{d:'tw',t:'GitHub <b>push</b> → Twilio SMS',ms:210}, vtex:{d:'hub',t:'Pedido <b>VTEX</b> → HubSpot contato',ms:240}, disc:{d:'sh',t:'Comando <b>Discord</b> → Sheets linha',ms:180} };\n    var pole={ gh:RX,vtex:RX,disc:RX, hub:CX2,tw:CX2,sh:CX2 };\n    var busy=false, evc=0, packets=[], mflare=0;\n\n    function reticle(cx,cy,col,r){ sx.strokeStyle=col; sx.lineWidth=1.1; [r,r*0.62].forEach(function(rr){ sx.beginPath(); sx.arc(cx,cy,rr,0,6.28); sx.stroke(); });\n      for(var i=0;i<24;i++){ var a=i/24*6.28; sx.beginPath(); sx.moveTo(cx+Math.cos(a)*(r-5),cy+Math.sin(a)*(r-5)); sx.lineTo(cx+Math.cos(a)*r,cy+Math.sin(a)*r); sx.strokeStyle=col.replace(/[\\d.]+\\)$/,'0.4)'); sx.stroke(); } }\n    function frame(t){\n      // bus line violet->cyan with ticks\n      var grd=sx.createLinearGradient(RX,0,CX2,0); grd.addColorStop(0,'rgba(132,72,250,0.5)'); grd.addColorStop(.5,'rgba(150,150,180,0.15)'); grd.addColorStop(1,'rgba(72,250,250,0.5)');\n      sx.strokeStyle=grd; sx.lineWidth=1.4; sx.beginPath(); sx.moveTo(RX,CY); sx.lineTo(CX2,CY); sx.stroke();\n      for(var x=RX;x<=CX2;x+=36){ sx.beginPath(); sx.moveTo(x,CY-4); sx.lineTo(x,CY+4); sx.strokeStyle='rgba(255,255,255,0.05)'; sx.stroke(); }\n      reticle(RX,CY,'rgba(176,140,255,0.55)',60); reticle(CX2,CY,'rgba(127,233,242,0.55)',60);\n      // center processing node\n      var pulse=0.5+0.5*Math.sin(t*0.002);\n      sx.strokeStyle='rgba(200,200,220,'+(0.25+mflare*0.5)+')'; sx.lineWidth=1.2; sx.strokeRect(MX-40,CY-40,80,80);\n      if(mflare>0){ sx.strokeStyle='rgba(230,220,255,'+mflare+')'; sx.strokeRect(MX-40-6*mflare,CY-40-6*mflare,80+12*mflare,80+12*mflare); mflare-=0.02; }\n      sx.beginPath(); sx.arc(MX,CY,3+pulse*2,0,6.28); sx.fillStyle='rgba(230,230,245,0.85)'; sx.fill();\n      // packets\n      for(var i=packets.length-1;i>=0;i--){ var p=packets[i]; p.t+=0.022; var a=p.path[p.seg], b=p.path[p.seg+1];\n        var x=a[0]+(b[0]-a[0])*p.t, y=a[1]+(b[1]-a[1])*p.t; var col=p.seg<2?'176,140,255':'127,233,242';\n        sx.beginPath(); sx.arc(x,y,3.6,0,6.28); sx.fillStyle='rgb('+col+')'; sx.fill(); sx.beginPath(); sx.arc(x,y,9,0,6.28); sx.fillStyle='rgba('+col+',0.16)'; sx.fill();\n        if(p.t>=1){ p.seg++; p.t=0; if(p.seg===1){ mflare=1; } if(p.seg>=p.path.length-1){ p.done(); packets.splice(i,1); } } }\n    }\n    function fire(node){ if(busy||!pairs[node])return; busy=true; var pr=pairs[node]; var srcEl=root.querySelector('[data-node=\"'+node+'\"]'), dstEl=root.querySelector('[data-node=\"'+pr.d+'\"]');\n      srcEl.classList.add('fire'); if(rc)rc.classList.remove('show');\n      // path: source(bottom under Rush) -> Rush -> center -> Connect -> dest\n      var path=[[RX,CY+150],[RX,CY],[MX,CY],[CX2,CY],[CX2,CY+150]];\n      packets.push({path:path,seg:0,t:0,done:function(){ evc++; evEl.textContent=evc; ltEl.textContent=pr.ms+'ms'; if(rc){ rc.innerHTML='▸ '+pr.t+' · <b>'+pr.ms+'ms</b>'; rc.classList.add('show'); } dstEl.classList.add('fire'); setTimeout(function(){ srcEl.classList.remove('fire'); dstEl.classList.remove('fire'); busy=false; },700); setTimeout(function(){ if(rc)rc.classList.remove('show'); },4200); }});\n    }\n    var raf=null,last=performance.now(),run=true;\n    function loop(t){ if(!run)return; last=t; sx.clearRect(0,0,SW,SH); frame(t); place(); raf=requestAnimationFrame(loop); }\n    place();\n    if(!reduce) raf=requestAnimationFrame(loop); else { sx.clearRect(0,0,SW,SH); frame(0); place(); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.fc.src')).forEach(function(c){ d2.on(c,'click',function(){ fire(c.getAttribute('data-node')); }); });\n  }\n}"}}}}}}}},{"_id":"6a740027d5c61d2c1c9aaf9d","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"5jNoi69HxfqZtpt3BOU43","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:#060507; color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none; background:radial-gradient(90% 70% at 50% 42%, transparent 52%, rgba(4,3,5,.62) 100%); }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:44px; left:56px; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10.5px; letter-spacing:.3em; text-transform:uppercase; color:#6f6a72; }\n.eb .p{ color:#FA4848; } .eb .p2{ color:#FA48DC; } .eb .p3{ color:#4866FA; }\n.h1{ font-size:clamp(28px,3.1vw,44px); font-weight:500; letter-spacing:-.02em; margin:12px 0 0; color:#F6F5F8; }\n.h1s{ margin:13px 0 0; font-size:14px; line-height:1.55; color:#9a949c; max-width:44ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#8fbf9f; font-weight:400; }\n.zlab{ position:absolute; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; transform:translate(-50%,0); pointer-events:none; }\n.panel{ position:absolute; z-index:6; width:214px; background:rgba(9,10,14,.86); border:1px solid rgba(72,102,250,.45); border-radius:5px; padding:14px 15px; opacity:0; transition:opacity .45s; transform:translate(-50%,-50%); box-shadow:0 20px 60px rgba(0,0,0,.5), 0 0 34px rgba(72,102,250,.14); }\n.panel.show{ opacity:1; }\n.panel .ph{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:#8296e6; margin-bottom:10px; }\n.panel .pr{ display:flex; justify-content:space-between; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; padding:5px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.panel .pr .k{ color:#8a848c; } .panel .pr .v{ color:#F2F1F4; }\n.panel .verdict{ margin-top:11px; font-size:12.5px; color:#fff; }\n.panel .verdict.block{ color:#FA8C8C; }\n.panel .idtag{ margin-top:9px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.05em; color:#48FAA1; }\n.legend{ position:absolute; left:0; right:0; top:556px; z-index:6; text-align:center; padding:0 40px; }\n.legend .cs{ font-size:13.5px; color:#c2bcc4; } .legend .cs b1{ color:#FA6a6a; } .legend .cs b2{ color:#FA8CE8; } .legend .cs b3{ color:#8fa0ff; } .legend .cs b4{ color:#48FAA1; }\n.controls{ position:absolute; left:0; right:0; bottom:46px; z-index:6; display:flex; gap:14px; justify-content:center; align-items:stretch; flex-wrap:wrap; padding:0 44px; }\n.q{ text-align:left; border:1px solid rgba(255,255,255,.09); background:rgba(255,255,255,.015); border-radius:6px; padding:14px 16px; cursor:pointer; width:212px; transition:.16s; }\n.q:hover{ border-color:rgba(250,72,220,.5); background:rgba(250,72,220,.05); }\n.q.on{ border-color:rgba(250,72,220,.9); background:rgba(250,72,220,.09); box-shadow:0 0 22px rgba(250,72,220,.18); }\n.q .qt{ font-size:13px; color:#EDECEF; font-weight:500; }\n.q .qd{ margin-top:5px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.03em; color:#7a747c; }\n.idbox{ width:232px; border:1px solid rgba(72,250,161,.35); background:rgba(72,250,161,.04); border-radius:6px; padding:13px 16px; }\n.idbox .il{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#48FAA1; }\n.idbox .ih{ font-size:12px; color:#bfe8d4; margin:5px 0 11px; line-height:1.4; }\n.tog{ display:flex; border:1px solid rgba(72,250,161,.4); border-radius:999px; overflow:hidden; cursor:pointer; }\n.tog .opt{ flex:1; text-align:center; font-family:ui-monospace,Menlo,monospace; font-size:11px; padding:7px 0; color:#8fbf9f; transition:.18s; }\n.tog .opt.on{ background:#48FAA1; color:#04140b; font-weight:600; }\n@media (max-width:1040px){ .head{ position:relative; padding:36px 24px 0; top:auto; left:auto; } .seed{ display:none; } .legend{ position:relative; top:auto; margin-top:12px; } .controls{ position:relative; bottom:auto; margin-top:18px; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.8; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eb\"><span class=\"p\">Registry</span> + <span class=\"p2\">Domain</span> + <span class=\"p3\">UI</span> · combo</div>'+\n          '<h1 class=\"h1\">Copiloto de operação</h1>'+\n          '<div class=\"h1s\">Uma tela que <b style=\"color:#F6F5F8\">entende, decide e mostra o dado</b>. O dado vira decisão vira interface — ao vivo.</div></div>'+\n        '<div class=\"seed\">combo · copiloto<br>governança · <b data-idlab>gestor</b><br>estado · nominal</div>'+\n        '<div class=\"zlab\" data-zr style=\"color:#FA6a6a\">Registry · o dado</div>'+\n        '<div class=\"zlab\" data-zd style=\"color:#FA8CE8\">Domain · decide</div>'+\n        '<div class=\"zlab\" data-zu style=\"color:#8fa0ff\">UI · mostra</div>'+\n        '<div class=\"panel\" data-panel></div>'+\n        '<div class=\"legend\"><div class=\"cs mono\"><b1>Registry</b1> entrega o dado → <b2>Domain</b2> decide → <b3>UI</b3> monta a tela. <b4>ID</b4> governa quem vê o quê.</div></div>'+\n        '<div class=\"controls\" data-controls>'+\n          '<div class=\"q on\" data-q=\"churn\"><div class=\"qt\">Clientes em risco?</div><div class=\"qd\">registry → domain → ui</div></div>'+\n          '<div class=\"q\" data-q=\"credito\"><div class=\"qt\">Aprovar este crédito?</div><div class=\"qd\">decisão + valor sensível</div></div>'+\n          '<div class=\"q\" data-q=\"estoque\"><div class=\"qt\">Estoque crítico agora?</div><div class=\"qd\">consulta + painel</div></div>'+\n          '<div class=\"idbox\"><div class=\"il\">ID · acesso</div><div class=\"ih\">Troque o papel e veja a governança agir no resultado.</div>'+\n            '<div class=\"tog\" data-tog><div class=\"opt on\" data-role=\"gestor\">Gestor</div><div class=\"opt\" data-role=\"analista\">Analista</div></div></div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var panel=root.querySelector('[data-panel]'), idlab=root.querySelector('[data-idlab]');\n    var zr=root.querySelector('[data-zr]'), zd=root.querySelector('[data-zd]'), zu=root.querySelector('[data-zu]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var fx=field.getContext('2d');\n    var W=0,H=0, RX=0,RY=0,DX=0,DY=0,UX=0,UY=0, UNIT=1;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0);\n      RY=DY=UY=H*0.42; RX=W*0.25; DX=W*0.52; UX=W*0.775; UNIT=Math.min(W/1440,H/900); if(UNIT<0.5)UNIT=0.5; }\n    size(); d2.on(window,'resize',size);\n    function pos(el,x,y){ var r=st.getBoundingClientRect(); el.style.left=x+'px'; el.style.top=y+'px'; }\n    function placeLabels(){ pos(zr,RX,RY+120*UNIT); pos(zd,DX,DY+150*UNIT); pos(zu,UX,UY+140*UNIT); zr.style.transform=zd.style.transform=zu.style.transform='translate(-50%,0)'; panel.style.left=UX+'px'; panel.style.top=(UY-6*UNIT)+'px'; }\n\n    var TYPES=[[250,72,72],[247,72,160],[255,138,61],[250,220,72],[176,72,250],[77,164,250]];\n    // Registry galaxy (dense)\n    var gal=[]; var GN=reduce?200:640;\n    for(var i=0;i<GN;i++){ gal.push({ ang:Math.random()*6.28, rad:0.1+Math.pow(Math.random(),0.6), w:0.0002+Math.random()*0.0006, c:TYPES[(Math.random()*TYPES.length)|0], z:Math.random(), lit:0 }); }\n    // continuous flow motes  R->D and D->U\n    var flow=[]; // {p:0..1, seg:0(R->D)|1(D->U), sp, c, big}\n    function spawnFlow(seg,c,n,sp){ for(var i=0;i<n;i++) flow.push({p:Math.random()*(-0.15),seg:seg,sp:sp||(0.006+Math.random()*0.005),c:c,jit:(Math.random()-0.5)}); }\n    // domain filaments\n    var fils=[]; for(var i=0;i<12;i++){ var a=(-1+2*(i/11)); fils.push({a:a*0.95,len:0.5+Math.random()*0.5,live:i%3!==0,ph:Math.random()*6}); }\n    var domFlare=0, uiFill=0, role='gestor', curQ=null;\n\n    var Q={ churn:{ph:'UI · resultado · clientes', rows:[['clientes ativos','2.148'],['em risco (30d)','312'],['LTV médio','R$ 4.9k']], verdict:'Reter 312 — ação hoje.', sensitive:false},\n      credito:{ph:'UI · resultado · proposta', rows:[['solicitante','#48.201'],['score','A-'],['valor','R$ 82.000']], verdict:'Aprovar com limite.', sensitive:true},\n      estoque:{ph:'UI · resultado · SKUs', rows:[['SKUs monitorados','12.480'],['abaixo do mínimo','37'],['ruptura em 48h','9']], verdict:'Repor 9 críticos.', sensitive:false} };\n\n    function buildPanel(){ var q=Q[curQ]; if(!q)return; var restricted=role==='analista'&&q.sensitive;\n      var rows=q.rows.map(function(r){ var v=r[1]; if(restricted&&r[0]==='valor')v='R$ ••••••'; return '<div class=\"pr\"><span class=\"k\">'+r[0]+'</span><span class=\"v\">'+v+'</span></div>'; }).join('');\n      var verdict=restricted?'<div class=\"verdict block\">decisão bloqueada — sem permissão</div>':'<div class=\"verdict\">'+q.verdict+'</div>';\n      panel.innerHTML='<div class=\"ph\">'+q.ph+'</div>'+rows+verdict+'<div class=\"idtag\">ID · '+(restricted?'analista · campos mascarados':'gestor · acesso total')+'</div>'; panel.classList.add('show'); }\n    function runQuery(k){ curQ=k; panel.classList.remove('show'); uiFill=0; domFlare=0;\n      gal.forEach(function(p){ p.lit=Math.random()<0.5?1:0; });\n      spawnFlow(0,[250,110,110],reduce?8:34,0.010); // surge R->D\n      setTimeout(function(){ domFlare=1; spawnFlow(1,[250,150,235],reduce?8:30,0.010); },700);\n      setTimeout(function(){ uiFill=0.001; },1400);\n      setTimeout(buildPanel,1900); }\n    function setRole(r){ role=r; idlab.textContent=r; Array.prototype.slice.call(root.querySelectorAll('.tog .opt')).forEach(function(o){ o.classList.toggle('on', o.getAttribute('data-role')===r); }); if(curQ&&panel.classList.contains('show'))buildPanel(); }\n\n    function reticle(cx,cy,col,R){ fx.strokeStyle=col; fx.lineWidth=1; [R,R*0.6].forEach(function(r){ fx.beginPath(); fx.arc(cx,cy,r,0,6.28); fx.stroke(); }); for(var i=0;i<32;i++){ var a=i/32*6.28; fx.beginPath(); fx.moveTo(cx+Math.cos(a)*(R-5),cy+Math.sin(a)*(R-5)); fx.lineTo(cx+Math.cos(a)*R,cy+Math.sin(a)*R); fx.stroke(); } }\n\n    var raf=null,last=performance.now(),run=true;\n    function loop(t){ if(!run)return; var dt=Math.min(48,t-last); last=t;\n      // trails + atmosphere\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(6,5,7,0.32)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      // zone glows\n      [[RX,RY,'250,72,72',0.10],[DX,DY,'250,72,220',0.12],[UX,UY,'72,102,250',0.09]].forEach(function(z){ var g=fx.createRadialGradient(z[0],z[1],0,z[0],z[1],150*UNIT); g.addColorStop(0,'rgba('+z[2]+','+z[3]+')'); g.addColorStop(1,'rgba('+z[2]+',0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(z[0],z[1],150*UNIT,0,6.28); fx.fill(); });\n      // connecting instrument line + ticks (dim, under flow)\n      fx.strokeStyle='rgba(255,255,255,0.05)'; fx.lineWidth=1; fx.beginPath(); fx.moveTo(RX,RY); fx.lineTo(UX,UY); fx.stroke();\n      // Registry galaxy\n      var gr=100*UNIT;\n      gal.forEach(function(p,idx){ if(p.lit>0)p.lit-=0.015; p.ang+=p.w*dt; var x=RX+Math.cos(p.ang)*p.rad*gr, y=RY+Math.sin(p.ang)*p.rad*gr*0.5; var b=0.14+p.z*0.5+(p.lit>0?p.lit*0.6:0); var c=p.c; fx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+Math.min(1,b)+')'; var s=p.z>0.82?1.7:1; fx.fillRect(x,y,s,s); });\n      reticle(RX,RY,'rgba(250,72,72,0.25)',gr+16);\n      // Domain reticle + filaments\n      reticle(DX,DY,'rgba(250,72,220,'+(0.3+domFlare*0.4)+')',70*UNIT);\n      var pulse=0.5+0.5*Math.sin(t*0.002);\n      var flen=(70*UNIT)*(0.7+domFlare*0.6);\n      fils.forEach(function(f){ fx.beginPath(); fx.moveTo(DX,DY); var ex=DX+Math.cos(f.a*3.14)*f.len*flen, ey=DY+Math.sin(f.a*3.14)*f.len*flen*0.8; var mx=DX+Math.cos(f.a*3.14)*f.len*flen*0.5, my=DY+Math.sin(f.a*3.14)*f.len*flen*0.5-20; fx.quadraticCurveTo(mx,my,ex,ey); fx.strokeStyle='rgba(250,72,220,'+((f.live?0.35:0.12)+domFlare*0.4)+')'; fx.lineWidth=1; fx.stroke(); if(f.live){ fx.beginPath(); fx.arc(ex,ey,1.4+Math.sin(t*0.004+f.ph)*0.6,0,6.28); fx.fillStyle='rgba(250,150,235,0.8)'; fx.fill(); } });\n      fx.beginPath(); fx.arc(DX,DY,4+pulse*2,0,6.28); fx.fillStyle='rgba(255,210,245,0.9)'; fx.fill();\n      if(domFlare>0)domFlare-=0.006;\n      // UI panel frame + fill\n      var uw=170*UNIT, uh=150*UNIT; fx.strokeStyle='rgba(72,102,250,0.4)'; fx.lineWidth=1.2; fx.strokeRect(UX-uw/2,UY-uh/2,uw,uh);\n      if(uiFill>0){ fx.fillStyle='rgba(72,102,250,'+(0.05*uiFill)+')'; fx.fillRect(UX-uw/2,UY-uh/2,uw,uh); for(var r2=0;r2<4;r2++){ if(uiFill>r2/4){ fx.strokeStyle='rgba(140,160,255,0.4)'; fx.beginPath(); fx.moveTo(UX-uw/2+14,UY-uh/2+26+r2*28); fx.lineTo(UX-uw/2+14+(uw-28)*Math.min(1,(uiFill-r2/4)*4),UY-uh/2+26+r2*28); fx.stroke(); } } if(uiFill<1)uiFill+=0.02; }\n      // continuous ambient flow (low) so it never looks empty\n      if(!reduce && Math.random()<0.4) spawnFlow(0,[250,90,90],1,0.005);\n      if(!reduce && Math.random()<0.3) spawnFlow(1,[220,120,230],1,0.005);\n      for(var i=flow.length-1;i>=0;i--){ var f=flow[i]; f.p+=f.sp*(dt/16); if(f.p>1){ flow.splice(i,1); continue; } if(f.p<0) continue;\n        var ax,ay,bx,by; if(f.seg===0){ ax=RX;ay=RY;bx=DX;by=DY; } else { ax=DX;ay=DY;bx=UX;by=UY; }\n        var x=ax+(bx-ax)*f.p, y=ay+(by-ay)*f.p + Math.sin(f.p*3.14)*18*f.jit; fx.beginPath(); fx.arc(x,y,1.6,0,6.28); fx.fillStyle='rgba('+f.c.join(',')+',0.85)'; fx.fill(); }\n      fx.globalCompositeOperation='source-over';\n      placeLabels();\n      raf=requestAnimationFrame(loop); }\n    placeLabels(); runQuery('churn');\n    if(!reduce) raf=requestAnimationFrame(loop); else { fx.fillStyle='#060507'; fx.fillRect(0,0,W,H); loop(0); domFlare=0; uiFill=1; buildPanel(); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.q')).forEach(function(c){ d2.on(c,'click',function(){ Array.prototype.slice.call(root.querySelectorAll('.q')).forEach(function(o){o.classList.remove('on');}); c.classList.add('on'); runQuery(c.getAttribute('data-q')); }); });\n    Array.prototype.slice.call(root.querySelectorAll('.tog .opt')).forEach(function(o){ d2.on(o,'click',function(){ setRole(o.getAttribute('data-role')); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a740129669cd00c3487a0f6","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"4BUWtZuH6o6UZanx21182","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:radial-gradient(120% 90% at 50% 30%, #0a0912 0%, #060509 60%, #05040a 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.head{ position:absolute; top:52px; left:0; right:0; text-align:center; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:12px; letter-spacing:.02em; }\n.eb .i{ color:#7FE9F2; } .eb .o{ color:#B08CFF; }\n.h1{ font-size:clamp(30px,3.8vw,56px); font-weight:500; letter-spacing:-.025em; margin:12px 0 0; color:#F3F2F6; }\n.h1s{ margin:12px auto 0; font-size:14.5px; line-height:1.55; color:#9a949c; max-width:52ch; }\n.zname{ position:absolute; z-index:6; text-align:center; transform:translate(-50%,0); pointer-events:none; }\n.zname .n{ font-size:15px; letter-spacing:.02em; font-weight:500; }\n.zname .r{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; margin-top:3px; }\n.caps{ position:absolute; z-index:6; display:flex; gap:60px; left:50%; top:44%; transform:translate(-50%,-50%); }\n.capcol{ display:flex; flex-direction:column; gap:16px; }\n.capcol.r{ text-align:right; } .capcol .ch{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.2em; text-transform:uppercase; color:#4f4a58; margin-bottom:2px; }\n.capcol .ci{ font-size:15px; color:#8a8490; transition:color .3s; } .capcol .ci.hot{ color:#EDECEF; }\n.divider{ position:absolute; left:50%; top:30%; height:34%; width:1px; background:linear-gradient(180deg,transparent,rgba(255,255,255,.12),transparent); z-index:5; }\n.tryit{ position:absolute; left:50%; top:70%; transform:translateX(-50%); text-align:center; z-index:6; }\n.tryit .chev{ width:54px; height:26px; margin:0 auto; }\n.tryit .tt{ font-size:14px; font-weight:600; color:#fff; margin-top:6px; } .tryit .ts{ font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#8a848c; margin-top:2px; }\n.receipt{ position:absolute; left:50%; top:57%; transform:translate(-50%,8px); z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:12.5px; color:#dde3e8; background:rgba(9,9,14,.9); border:1px solid rgba(127,233,242,.35); border-radius:5px; padding:8px 15px; opacity:0; transition:.3s; white-space:nowrap; }\n.receipt.show{ opacity:1; transform:translate(-50%,0); } .receipt b{ color:#7FE9F2; }\n.logos{ position:absolute; left:0; right:0; bottom:52px; z-index:6; display:flex; gap:30px; justify-content:center; align-items:flex-start; }\n.logo{ display:flex; flex-direction:column; align-items:center; gap:9px; cursor:pointer; width:74px; opacity:.9; transition:.2s; }\n.logo:hover{ opacity:1; transform:translateY(-3px); }\n.logo .orb{ width:52px; height:52px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-family:ui-monospace,Menlo,monospace; font-weight:700; font-size:14px; color:#fff; position:relative; box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 8px 22px rgba(0,0,0,.5); }\n.logo .orb::after{ content:''; position:absolute; inset:-9px; border-radius:50%; opacity:0; transition:opacity .25s; }\n.logo.fire .orb::after{ opacity:.7; box-shadow:0 0 26px 5px currentColor; }\n.logo .nm{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#9a949c; }\n.logo .io{ font-family:ui-monospace,Menlo,monospace; font-size:8px; letter-spacing:.14em; text-transform:uppercase; }\n.logo .io.in{ color:#B08CFF; } .logo .io.out{ color:#7FE9F2; }\n@media (max-width:900px){ .caps{ gap:24px; } .head{ top:30px; } .logos{ flex-wrap:wrap; gap:16px; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.85; } }\n`,\n  render(d2){\n    var logos=[\n      ['disc','D','#5865F2','in'],['gh','GH','#cfd3d8','in','#111'],['vtex','V','#F71963','in'],\n      ['hub','H','#FF7A59','out'],['tw','T','#F22F46','out'],['wp','W','#21759B','out'],['sh','G','#34A853','out']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"head\"><div class=\"eb\"><span class=\"i\">inbound</span> <span style=\"color:#5f5a61\">e</span> <span class=\"o\">outbound</span></div>'+\n          '<h1 class=\"h1\">Conecte com qualquer coisa</h1>'+\n          '<div class=\"h1s\">O runtime <b style=\"color:#B08CFF\">escuta</b> o mundo (Rush) e <b style=\"color:#7FE9F2\">responde</b> ao mundo (Connect). O mesmo conector ouve e entrega.</div></div>'+\n        '<div class=\"divider\"></div>'+\n        '<div class=\"caps\"><div class=\"capcol r\"><div class=\"ch\">Connect · saída</div>'+\n            '<div class=\"ci\" data-cap>REST APIs</div><div class=\"ci\" data-cap>GraphQL</div><div class=\"ci\" data-cap>Proxy requests</div></div>'+\n          '<div class=\"capcol\"><div class=\"ch\">Rush · entrada</div>'+\n            '<div class=\"ci\" data-cap>Webhooks</div><div class=\"ci\" data-cap>Agendamentos</div><div class=\"ci\" data-cap>Voz · e-mail</div></div></div>'+\n        '<div class=\"zname\" data-zc style=\"color:#7FE9F2\"><div class=\"n\">Connect</div><div class=\"r\">integra · outbound</div></div>'+\n        '<div class=\"zname\" data-zr style=\"color:#B08CFF\"><div class=\"n\">Rush</div><div class=\"r\">escuta · inbound</div></div>'+\n        '<div class=\"tryit\"><svg class=\"chev\" viewBox=\"0 0 54 26\"><path d=\"M4 4 L27 22 L50 4\" fill=\"none\" stroke=\"#FA3D8A\" stroke-width=\"2.4\" stroke-linecap=\"round\"/></svg><div class=\"tt\">Try It</div><div class=\"ts\">clique num app</div></div>'+\n        '<div class=\"receipt\" data-rc></div>'+\n        '<div class=\"logos\" data-logos>'+ logos.map(function(l){ return '<div class=\"logo\" data-node=\"'+l[0]+'\" data-io=\"'+l[3]+'\"><div class=\"orb\" style=\"background:'+l[2]+';color:'+(l[4]||'#fff')+'\">'+l[1]+'</div><div class=\"nm\">'+({disc:'Discord',gh:'GitHub',vtex:'VTEX',hub:'HubSpot',tw:'Twilio',wp:'WordPress',sh:'Sheets'})[l[0]]+'</div><div class=\"io '+l[3]+'\">'+(l[3]==='in'?'inbound':'outbound')+'</div></div>'; }).join('') +'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var zc=root.querySelector('[data-zc]'), zr=root.querySelector('[data-zr]'), rc=root.querySelector('[data-rc]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var fx=field.getContext('2d');\n    var W=0,H=0, CxX=0,CxY=0, RxX=0,RxY=0, ORB=34;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0);\n      CxY=RxY=H*0.44; CxX=W*0.24; RxX=W*0.76; ORB=Math.max(26,34*Math.min(W/1440,H/900)); }\n    size(); d2.on(window,'resize',size);\n    function placeNames(){ var r=st.getBoundingClientRect(); zc.style.left=CxX+'px'; zc.style.top=(CxY+ORB+26)+'px'; zr.style.left=RxX+'px'; zr.style.top=(RxY+ORB+26)+'px'; }\n\n    // radar pings per orb\n    var pings=[{x:function(){return CxX;},y:function(){return CxY;},col:'127,233,242',ph:0,rings:[1.9,3.0,4.4]},\n               {x:function(){return RxX;},y:function(){return RxY;},col:'176,140,255',ph:1.6,rings:[1.7,2.6]}];\n    // ambient exchange motes: violet into Rush, cyan out of Connect (the \"one in, one out\")\n    var motes=[]; function ambientMote(){ if(Math.random()<0.5){ motes.push({from:'world',to:'rush',p:0,sp:0.006+Math.random()*0.004,c:'176,140,255'}); } else { motes.push({from:'connect',to:'world',p:0,sp:0.006+Math.random()*0.004,c:'127,233,242'}); } }\n    // bus flow (on fire): source logo -> Rush -> center -> Connect -> receipt  (violet then cyan)\n    var packets=[], busy=false, pairs={ disc:'sh', gh:'tw', vtex:'hub' }, recs={ disc:'Comando <b>Discord</b> → Sheets linha',gh:'GitHub <b>push</b> → Twilio SMS',vtex:'Pedido <b>VTEX</b> → HubSpot contato' }, ms={disc:180,gh:210,vtex:240};\n\n    function orb(x,y,col,r,glow){ var g=fx.createRadialGradient(x,y,0,x,y,r*2.4); g.addColorStop(0,'rgba('+col+','+(0.5+glow*0.4)+')'); g.addColorStop(0.5,'rgba('+col+',0.12)'); g.addColorStop(1,'rgba('+col+',0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(x,y,r*2.4,0,6.28); fx.fill();\n      var c=fx.createRadialGradient(x-r*0.3,y-r*0.3,0,x,y,r); c.addColorStop(0,'rgba(255,255,255,0.9)'); c.addColorStop(0.4,'rgba('+col+',0.95)'); c.addColorStop(1,'rgba('+col+',0.5)'); fx.fillStyle=c; fx.beginPath(); fx.arc(x,y,r,0,6.28); fx.fill(); }\n    function radar(p,t){ var x=p.x(),y=p.y();\n      // static dashed orbit rings\n      fx.setLineDash([2,7]); p.rings.forEach(function(m){ fx.beginPath(); fx.arc(x,y,ORB*m,0,6.28); fx.strokeStyle='rgba('+p.col+',0.12)'; fx.lineWidth=1; fx.stroke(); }); fx.setLineDash([]);\n      // expanding ping\n      var per=3600; var ph=((t+p.ph*1000)%per)/per; var rr=ORB*1.4 + ph*ORB*3.4; fx.beginPath(); fx.arc(x,y,rr,0,6.28); fx.strokeStyle='rgba('+p.col+','+(0.4*(1-ph))+')'; fx.lineWidth=1.4; fx.stroke();\n    }\n    function worldPt(side){ return side==='rush'?[RxX+W*0.16, RxY]:[CxX-W*0.16, CxY]; }\n\n    function fire(node){ if(busy||!pairs[node])return; busy=true; var logoEl=root.querySelector('.logo[data-node=\"'+node+'\"]'); var dst=pairs[node]; var dstEl=root.querySelector('.logo[data-node=\"'+dst+'\"]');\n      if(logoEl)logoEl.classList.add('fire'); if(rc)rc.classList.remove('show');\n      var lr=logoEl.getBoundingClientRect(), sr=st.getBoundingClientRect(); var lx=lr.left-sr.left+lr.width/2, ly=lr.top-sr.top+22;\n      // path: logo -> Rush -> center -> Connect -> dest logo\n      var dr=dstEl.getBoundingClientRect(); var dx=dr.left-sr.left+dr.width/2, dy=dr.top-sr.top+22;\n      packets.push({path:[[lx,ly],[RxX,RxY],[W*0.5,H*0.44],[CxX,CxY],[dx,dy]],seg:0,t:0,node:node,dstEl:dstEl,logoEl:logoEl,\n        onCore:function(){ pings[1].ph=((performance.now())%3600)/1000; }, }); }\n\n    var raf=null,last=performance.now(),run=true;\n    function loop(t){ if(!run)return; var dt=Math.min(48,t-last); last=t; placeNames();\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(6,5,9,0.30)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      radar(pings[0],t); radar(pings[1],t);\n      // connecting arc (subtle)\n      fx.beginPath(); fx.moveTo(CxX+ORB,CxY); fx.bezierCurveTo(W*0.42,CxY-30,W*0.58,RxY-30,RxX-ORB,RxY); var gr=fx.createLinearGradient(CxX,0,RxX,0); gr.addColorStop(0,'rgba(127,233,242,0.18)'); gr.addColorStop(1,'rgba(176,140,255,0.18)'); fx.strokeStyle=gr; fx.lineWidth=1; fx.stroke();\n      // ambient exchange motes\n      if(!reduce && Math.random()<0.35) ambientMote();\n      for(var i=motes.length-1;i>=0;i--){ var m=motes[i]; m.p+=m.sp*(dt/16); if(m.p>1){ motes.splice(i,1); continue; }\n        var a,b; if(m.to==='rush'){ a=worldPt('rush'); b=[RxX,RxY]; } else { a=[CxX,CxY]; b=worldPt('connect'); }\n        var x=a[0]+(b[0]-a[0])*m.p, y=a[1]+(b[1]-a[1])*m.p - Math.sin(m.p*3.14)*14; fx.beginPath(); fx.arc(x,y,1.5,0,6.28); fx.fillStyle='rgba('+m.c+','+(0.7*(1-Math.abs(m.p-0.5)*1.2))+')'; fx.fill(); }\n      // orbs\n      orb(CxX,CxY,'72,220,240',ORB,0.4+0.2*Math.sin(t*0.002)); orb(RxX,RxY,'150,110,255',ORB,0.4+0.2*Math.sin(t*0.002+2));\n      // packets (fire flow)\n      for(var i=packets.length-1;i>=0;i--){ var p=packets[i]; p.t+=0.02; var a=p.path[p.seg], b=p.path[p.seg+1]; var x=a[0]+(b[0]-a[0])*p.t, y=a[1]+(b[1]-a[1])*p.t;\n        var col=p.seg<2?'176,140,255':'127,233,242'; fx.beginPath(); fx.arc(x,y,3.6,0,6.28); fx.fillStyle='rgb('+col+')'; fx.fill(); fx.beginPath(); fx.arc(x,y,9,0,6.28); fx.fillStyle='rgba('+col+',0.18)'; fx.fill();\n        if(p.t>=1){ p.seg++; p.t=0; if(p.seg===2){ p.onCore(); } if(p.seg>=p.path.length-1){ (function(pk){ if(rc){ rc.innerHTML='▸ '+recs[pk.node]+' · <b>'+ms[pk.node]+'ms</b>'; rc.classList.add('show'); } pk.dstEl.classList.add('fire'); setTimeout(function(){ pk.logoEl.classList.remove('fire'); pk.dstEl.classList.remove('fire'); busy=false; },700); setTimeout(function(){ if(rc)rc.classList.remove('show'); },4200); })(p); packets.splice(i,1); } } }\n      fx.globalCompositeOperation='source-over';\n      raf=requestAnimationFrame(loop); }\n    placeNames();\n    if(!reduce) raf=requestAnimationFrame(loop); else { fx.fillStyle='#060509'; fx.fillRect(0,0,W,H); fx.globalCompositeOperation='lighter'; radar(pings[0],0); radar(pings[1],0); orb(CxX,CxY,'72,220,240',ORB,0.5); orb(RxX,RxY,'150,110,255',ORB,0.5); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    // hover cap highlight tied to orbs (subtle life)\n    Array.prototype.slice.call(root.querySelectorAll('.logo[data-io=\"in\"]')).forEach(function(l){ d2.on(l,'click',function(){ fire(l.getAttribute('data-node')); }); });\n    // outbound logos: gentle nudge to click a source\n    Array.prototype.slice.call(root.querySelectorAll('.logo[data-io=\"out\"]')).forEach(function(l){ d2.on(l,'click',function(){ var srcs=['disc','gh','vtex']; fire(srcs[(Math.random()*3)|0]); }); });\n  }\n}"}}}}}}}},{"_id":"6a7402ddf08aa56d3e04d5c2","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"OFWgwjoeXJVwcDO1mylWv","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:860px; overflow:hidden;\n  background:#070609; color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.field{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:42px; left:56px; z-index:6; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:10.5px; letter-spacing:.3em; text-transform:uppercase; color:#6f6a72; }\n.eb .p{ color:#FA4848; } .eb .p2{ color:#FA48DC; } .eb .p3{ color:#4866FA; }\n.h1{ font-size:clamp(26px,3vw,42px); font-weight:500; letter-spacing:-.02em; margin:11px 0 0; color:#F6F5F8; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:42ch; }\n.seed{ position:absolute; top:48px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#8fbf9f; font-weight:400; }\n/* pipeline / narration bar */\n.narr{ position:absolute; left:50%; top:174px; transform:translateX(-50%); z-index:6; display:flex; align-items:center; gap:12px; }\n.step{ display:flex; align-items:center; gap:9px; opacity:.4; transition:opacity .3s; }\n.step.on{ opacity:1; }\n.step .num{ width:22px; height:22px; border-radius:50%; border:1px solid currentColor; display:flex; align-items:center; justify-content:center; font-family:ui-monospace,Menlo,monospace; font-size:11px; }\n.step .lb{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.12em; text-transform:uppercase; }\n.step.s1{ color:#FA6a6a; } .step.s2{ color:#FA8CE8; } .step.s3{ color:#8fa0ff; }\n.step .arrow{ color:#4f4a52; }\n.status{ position:absolute; left:0; right:0; top:214px; text-align:center; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:12.5px; letter-spacing:.02em; color:#c2bcc4; min-height:18px; }\n.status .b{ color:#fff; }\n.zlab{ position:absolute; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.14em; text-transform:uppercase; transform:translate(-50%,0); pointer-events:none; }\n.flab{ position:absolute; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; text-transform:uppercase; transform:translate(-50%,-50%); color:#6f6a72; pointer-events:none; }\n.flab .arw{ color:#8a848c; }\n.panel{ position:absolute; z-index:6; width:216px; background:rgba(9,10,14,.9); border:1px solid rgba(72,102,250,.5); border-radius:6px; padding:14px 15px; opacity:0; transition:opacity .4s; transform:translate(-50%,-50%); box-shadow:0 20px 60px rgba(0,0,0,.55), 0 0 30px rgba(72,102,250,.16); }\n.panel.show{ opacity:1; }\n.panel .ph{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.16em; text-transform:uppercase; color:#8296e6; margin-bottom:4px; }\n.panel .pt{ font-size:12px; color:#5f6b8a; margin-bottom:9px; }\n.panel .pr{ display:flex; justify-content:space-between; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; padding:5px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.panel .pr .k{ color:#8a848c; } .panel .pr .v{ color:#F2F1F4; }\n.panel .verdict{ margin-top:11px; font-size:13px; color:#fff; }\n.panel .verdict.block{ color:#FA8C8C; }\n.panel .idtag{ margin-top:9px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.05em; color:#48FAA1; }\n.legend{ position:absolute; left:0; right:0; top:540px; z-index:6; text-align:center; padding:0 40px; }\n.legend .cs{ font-size:13.5px; color:#b8b2ba; } .legend .cs b1{ color:#FA6a6a; } .legend .cs b2{ color:#FA8CE8; } .legend .cs b3{ color:#8fa0ff; } .legend .cs b4{ color:#48FAA1; }\n.controls{ position:absolute; left:0; right:0; bottom:46px; z-index:6; display:flex; gap:14px; justify-content:center; align-items:stretch; flex-wrap:wrap; padding:0 44px; }\n.hint{ position:absolute; left:0; right:0; bottom:190px; text-align:center; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#4f4a52; }\n.q{ text-align:left; border:1px solid rgba(255,255,255,.09); background:rgba(255,255,255,.015); border-radius:6px; padding:14px 16px; cursor:pointer; width:212px; transition:.16s; }\n.q:hover{ border-color:rgba(250,72,220,.5); background:rgba(250,72,220,.05); }\n.q.on{ border-color:rgba(250,72,220,.9); background:rgba(250,72,220,.09); }\n.q .qt{ font-size:13px; color:#EDECEF; font-weight:500; } .q .qd{ margin-top:5px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7a747c; }\n.idbox{ width:232px; border:1px solid rgba(72,250,161,.35); background:rgba(72,250,161,.04); border-radius:6px; padding:13px 16px; }\n.idbox .il{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:#48FAA1; }\n.idbox .ih{ font-size:12px; color:#bfe8d4; margin:5px 0 11px; line-height:1.4; }\n.tog{ display:flex; border:1px solid rgba(72,250,161,.4); border-radius:999px; overflow:hidden; cursor:pointer; }\n.tog .opt{ flex:1; text-align:center; font-family:ui-monospace,Menlo,monospace; font-size:11px; padding:7px 0; color:#8fbf9f; transition:.18s; }\n.tog .opt.on{ background:#48FAA1; color:#04140b; font-weight:600; }\n@media (max-width:1040px){ .head{ position:relative; padding:34px 24px 0; top:auto; left:auto; } .seed,.hint{ display:none; } .narr{ position:relative; top:auto; margin:14px auto 0; flex-wrap:wrap; } .status{ position:relative; top:auto; margin-top:8px; } .legend{ position:relative; top:auto; margin-top:12px; } .controls{ position:relative; bottom:auto; margin-top:16px; } }\n@media (prefers-reduced-motion:reduce){ canvas.field{ opacity:.85; } }\n`,\n  render(d2){\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"field\" data-field></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eb\"><span class=\"p\">Registry</span> + <span class=\"p2\">Domain</span> + <span class=\"p3\">UI</span> · combo</div>'+\n          '<h1 class=\"h1\">Copiloto de operação</h1>'+\n          '<div class=\"h1s\">Pergunte em linguagem de negócio — o dado vira decisão vira tela, ao vivo.</div></div>'+\n        '<div class=\"seed\">combo · copiloto<br>governança · <b data-idlab>gestor</b><br>estado · nominal</div>'+\n        '<div class=\"narr\" data-narr>'+\n          '<div class=\"step s1\" data-step=\"1\"><span class=\"num\">1</span><span class=\"lb\">Registry · lê o dado</span></div>'+\n          '<span class=\"arrow\">→</span>'+\n          '<div class=\"step s2\" data-step=\"2\"><span class=\"num\">2</span><span class=\"lb\">Domain · decide</span></div>'+\n          '<span class=\"arrow\">→</span>'+\n          '<div class=\"step s3\" data-step=\"3\"><span class=\"num\">3</span><span class=\"lb\">UI · monta a tela</span></div>'+\n        '</div>'+\n        '<div class=\"status\" data-status></div>'+\n        '<div class=\"zlab\" data-zr style=\"color:#FA6a6a\">o dado</div>'+\n        '<div class=\"zlab\" data-zd style=\"color:#FA8CE8\">decide</div>'+\n        '<div class=\"zlab\" data-zu style=\"color:#8fa0ff\">a tela</div>'+\n        '<div class=\"flab\" data-f1><span class=\"arw\">→</span> dados</div>'+\n        '<div class=\"flab\" data-f2><span class=\"arw\">→</span> decisão</div>'+\n        '<div class=\"panel\" data-panel></div>'+\n        '<div class=\"legend\"><div class=\"cs mono\"><b1>Registry</b1> entrega o dado → <b2>Domain</b2> decide → <b3>UI</b3> monta a tela. <b4>ID</b4> governa quem vê o quê.</div></div>'+\n        '<div class=\"hint\">escolha uma pergunta de negócio ↓</div>'+\n        '<div class=\"controls\" data-controls>'+\n          '<div class=\"q on\" data-q=\"churn\"><div class=\"qt\">Clientes em risco?</div><div class=\"qd\">consulta + decisão</div></div>'+\n          '<div class=\"q\" data-q=\"credito\"><div class=\"qt\">Aprovar este crédito?</div><div class=\"qd\">decisão + valor sensível</div></div>'+\n          '<div class=\"q\" data-q=\"estoque\"><div class=\"qt\">Estoque crítico agora?</div><div class=\"qd\">consulta + painel</div></div>'+\n          '<div class=\"idbox\"><div class=\"il\">ID · acesso</div><div class=\"ih\">Troque o papel e rode de novo: a governança age no resultado.</div>'+\n            '<div class=\"tog\" data-tog><div class=\"opt on\" data-role=\"gestor\">Gestor</div><div class=\"opt\" data-role=\"analista\">Analista</div></div></div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), field=root.querySelector('[data-field]');\n    var panel=root.querySelector('[data-panel]'), idlab=root.querySelector('[data-idlab]'), statusEl=root.querySelector('[data-status]');\n    var zr=root.querySelector('[data-zr]'), zd=root.querySelector('[data-zd]'), zu=root.querySelector('[data-zu]');\n    var f1=root.querySelector('[data-f1]'), f2=root.querySelector('[data-f2]');\n    var steps=[null,root.querySelector('[data-step=\"1\"]'),root.querySelector('[data-step=\"2\"]'),root.querySelector('[data-step=\"3\"]')];\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var fx=field.getContext('2d');\n    var W=0,H=0,RX=0,DX=0,UX=0,ZY=0,UNIT=1;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; field.width=W*DPR; field.height=H*DPR; fx.setTransform(DPR,0,0,DPR,0,0);\n      ZY=H*0.44; RX=W*0.26; DX=W*0.52; UX=W*0.775; UNIT=Math.max(0.55,Math.min(W/1440,H/900)); }\n    size(); d2.on(window,'resize',size);\n    function pl(el,x,y){ el.style.left=x+'px'; el.style.top=y+'px'; }\n    function placeLabels(){ pl(zr,RX,ZY+108*UNIT); pl(zd,DX,ZY+118*UNIT); pl(zu,UX,ZY+120*UNIT); pl(f1,(RX+DX)/2,ZY-70*UNIT); pl(f2,(DX+UX)/2,ZY-70*UNIT); panel.style.left=UX+'px'; panel.style.top=ZY+'px'; }\n\n    var TYPES=[[250,72,72],[247,72,160],[255,138,61],[250,220,72],[176,72,250],[77,164,250]];\n    var gal=[]; var GN=reduce?160:520; for(var i=0;i<GN;i++){ gal.push({ang:Math.random()*6.28,rad:0.12+Math.pow(Math.random(),0.6),w:0.0002+Math.random()*0.0005,c:TYPES[(Math.random()*TYPES.length)|0],z:Math.random(),lit:0}); }\n    var fils=[]; for(var i=0;i<11;i++){ var a=(-1+2*(i/10)); fils.push({a:a*0.95,len:0.5+Math.random()*0.5,live:i%3!==0,ph:Math.random()*6}); }\n    var flow=[]; var domFlare=0, uiFill=0, role='gestor', curQ=null;\n    var phase='idle', phT=0;\n\n    var Q={ churn:{q:'Clientes em risco?', regread:'2.148 registros', ph:'Clientes em risco', rows:[['clientes ativos','2.148'],['em risco (30d)','312'],['LTV médio','R$ 4.9k']], verdict:'Reter 312 — ação hoje.', sensitive:false},\n      credito:{q:'Aprovar este crédito?', regread:'proposta #48.201', ph:'Proposta de crédito', rows:[['solicitante','#48.201'],['score','A-'],['valor','R$ 82.000']], verdict:'Aprovar com limite.', sensitive:true},\n      estoque:{q:'Estoque crítico agora?', regread:'12.480 SKUs', ph:'Estoque', rows:[['SKUs monitorados','12.480'],['abaixo do mínimo','37'],['ruptura em 48h','9']], verdict:'Repor 9 críticos.', sensitive:false} };\n\n    function setStep(n){ for(var i=1;i<=3;i++) steps[i].classList.toggle('on', i<=n && n>0); }\n    function stat(txt){ statusEl.innerHTML=txt; }\n    function buildPanel(){ var q=Q[curQ]; var restricted=role==='analista'&&q.sensitive;\n      var rows=q.rows.map(function(r){ var v=r[1]; if(restricted&&r[0]==='valor')v='R$ ••••••'; return '<div class=\"pr\"><span class=\"k\">'+r[0]+'</span><span class=\"v\">'+v+'</span></div>'; }).join('');\n      var verdict=restricted?'<div class=\"verdict block\">✕ decisão bloqueada — sem permissão</div>':'<div class=\"verdict\">✓ '+q.verdict+'</div>';\n      panel.innerHTML='<div class=\"ph\">tela montada pela UI</div><div class=\"pt\">'+q.ph+'</div>'+rows+verdict+'<div class=\"idtag\">ID · '+(restricted?'analista · campos mascarados':'gestor · acesso total')+'</div>'; panel.classList.add('show'); }\n\n    var timers=[];\n    function clearTimers(){ timers.forEach(clearTimeout); timers=[]; }\n    function runQuery(k){ curQ=k; clearTimers(); panel.classList.remove('show'); uiFill=0; domFlare=0; flow=[]; var q=Q[k];\n      // PHASE 1 — reading\n      phase='read'; setStep(1); stat('① <span class=\"b\">Registry</span> lendo o dado — '+q.regread);\n      gal.forEach(function(p){ p.lit=Math.random()<0.6?1:0; });\n      timers.push(setTimeout(function(){ // PHASE 2 — deciding\n        phase='decide'; setStep(2); stat('② <span class=\"b\">Domain</span> cruzando sinais e decidindo…'); domFlare=1;\n      },1300));\n      timers.push(setTimeout(function(){ // PHASE 3 — building\n        phase='build'; setStep(3); stat('③ <span class=\"b\">UI</span> montando a tela…'); uiFill=0.001;\n      },2500));\n      timers.push(setTimeout(function(){ // DONE\n        phase='done'; buildPanel(); var restricted=role==='analista'&&q.sensitive;\n        stat(restricted?'✕ <span class=\"b\">bloqueado</span> — ID (analista) não libera este dado':'✓ <span class=\"b\">tela pronta</span> — '+q.verdict);\n      },3500));\n    }\n    function setRole(r){ role=r; idlab.textContent=r; Array.prototype.slice.call(root.querySelectorAll('.tog .opt')).forEach(function(o){ o.classList.toggle('on', o.getAttribute('data-role')===r); }); if(curQ)runQuery(curQ); }\n\n    function reticle(cx,cy,col,R){ fx.strokeStyle=col; fx.lineWidth=1; fx.beginPath(); fx.arc(cx,cy,R,0,6.28); fx.stroke(); }\n    var raf=null,last=performance.now(),run=true;\n    function loop(t){ if(!run)return; var dt=Math.min(48,t-last); last=t;\n      fx.globalCompositeOperation='source-over'; fx.fillStyle='rgba(7,6,9,0.34)'; fx.fillRect(0,0,W,H);\n      fx.globalCompositeOperation='lighter';\n      // zone glows (active zone brighter)\n      var gR=(phase==='read'||phase==='idle')?0.14:0.07, gD=(phase==='decide')?0.16:0.07, gU=(phase==='build'||phase==='done')?0.13:0.06;\n      [[RX,ZY,'250,72,72',gR],[DX,ZY,'250,72,220',gD],[UX,ZY,'72,102,250',gU]].forEach(function(z){ var g=fx.createRadialGradient(z[0],z[1],0,z[0],z[1],140*UNIT); g.addColorStop(0,'rgba('+z[2]+','+z[3]+')'); g.addColorStop(1,'rgba('+z[2]+',0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(z[0],z[1],140*UNIT,0,6.28); fx.fill(); });\n      fx.strokeStyle='rgba(255,255,255,0.05)'; fx.lineWidth=1; fx.beginPath(); fx.moveTo(RX,ZY); fx.lineTo(UX,ZY); fx.stroke();\n      // Registry galaxy\n      var gr=92*UNIT; gal.forEach(function(p){ if(p.lit>0)p.lit-=0.012; p.ang+=p.w*dt; var x=RX+Math.cos(p.ang)*p.rad*gr,y=ZY+Math.sin(p.ang)*p.rad*gr*0.5; var b=0.12+p.z*0.42+(p.lit>0?p.lit*0.6:0); var c=p.c; fx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+Math.min(1,b)+')'; fx.fillRect(x,y,p.z>0.82?1.7:1,1); });\n      reticle(RX,ZY,'rgba(250,72,72,0.28)',gr+14);\n      // Domain\n      reticle(DX,ZY,'rgba(250,72,220,'+(0.28+domFlare*0.4)+')',66*UNIT);\n      var flen=(66*UNIT)*(0.7+domFlare*0.7);\n      fils.forEach(function(f){ fx.beginPath(); fx.moveTo(DX,ZY); var ex=DX+Math.cos(f.a*3.14)*f.len*flen,ey=ZY+Math.sin(f.a*3.14)*f.len*flen*0.8,mx=DX+Math.cos(f.a*3.14)*f.len*flen*0.5,my=ZY+Math.sin(f.a*3.14)*f.len*flen*0.5-18; fx.quadraticCurveTo(mx,my,ex,ey); fx.strokeStyle='rgba(250,72,220,'+((f.live?0.32:0.1)+domFlare*0.4)+')'; fx.lineWidth=1; fx.stroke(); });\n      fx.beginPath(); fx.arc(DX,ZY,4+Math.sin(t*0.003)*1.5,0,6.28); fx.fillStyle='rgba(255,210,245,0.9)'; fx.fill(); if(domFlare>0)domFlare-=0.008;\n      // UI frame\n      var uw=160*UNIT,uh=140*UNIT; fx.strokeStyle='rgba(72,102,250,0.45)'; fx.lineWidth=1.2; fx.strokeRect(UX-uw/2,ZY-uh/2,uw,uh);\n      if(uiFill>0){ fx.fillStyle='rgba(72,102,250,'+(0.05*uiFill)+')'; fx.fillRect(UX-uw/2,ZY-uh/2,uw,uh); for(var r2=0;r2<4;r2++){ if(uiFill>r2/4){ fx.strokeStyle='rgba(140,160,255,0.4)'; fx.beginPath(); fx.moveTo(UX-uw/2+12,ZY-uh/2+24+r2*26); fx.lineTo(UX-uw/2+12+(uw-24)*Math.min(1,(uiFill-r2/4)*4),ZY-uh/2+24+r2*26); fx.stroke(); } } if(uiFill<1)uiFill+=0.02; }\n      // directional flow ONLY in active segment (clear)\n      if(phase==='read'||phase==='decide'){ if(Math.random()<0.5) flow.push({seg:0,p:0,c:[250,110,110],sp:0.012+Math.random()*0.006}); }\n      if(phase==='build'){ if(Math.random()<0.5) flow.push({seg:1,p:0,c:[160,150,255],sp:0.012+Math.random()*0.006}); }\n      f1.style.opacity=(phase==='read'||phase==='decide')?'1':'0.28'; f2.style.opacity=(phase==='build'||phase==='done')?'1':'0.28';\n      for(var i=flow.length-1;i>=0;i--){ var f=flow[i]; f.p+=f.sp*(dt/16); if(f.p>1){ flow.splice(i,1); continue; } var ax,ay,bx,by; if(f.seg===0){ ax=RX;ay=ZY;bx=DX;by=ZY; } else { ax=DX;ay=ZY;bx=UX;by=ZY; } var x=ax+(bx-ax)*f.p,y=ay+(by-ay)*f.p; fx.beginPath(); fx.arc(x,y,2,0,6.28); fx.fillStyle='rgba('+f.c.join(',')+',0.9)'; fx.fill(); }\n      fx.globalCompositeOperation='source-over'; placeLabels();\n      raf=requestAnimationFrame(loop); }\n    placeLabels(); runQuery('churn');\n    if(!reduce) raf=requestAnimationFrame(loop); else { fx.fillStyle='#070609'; fx.fillRect(0,0,W,H); loop(0); clearTimers(); phase='done'; setStep(3); domFlare=0; uiFill=1; buildPanel(); stat('✓ tela pronta — Reter 312'); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;last=performance.now();raf=requestAnimationFrame(loop);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.04}); io.observe(st);\n    Array.prototype.slice.call(root.querySelectorAll('.q')).forEach(function(c){ d2.on(c,'click',function(){ Array.prototype.slice.call(root.querySelectorAll('.q')).forEach(function(o){o.classList.remove('on');}); c.classList.add('on'); runQuery(c.getAttribute('data-q')); }); });\n    Array.prototype.slice.call(root.querySelectorAll('.tog .opt')).forEach(function(o){ d2.on(o,'click',function(){ setRole(o.getAttribute('data-role')); }); });\n  }\n}"}}}}}}}},{"_id":"6a7406fe5bcb322df2e7c7e9","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"6ayhKILoYCPXCQkELEi3p","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:820px; overflow:hidden;\n  background:#F5F2EC; color:#2A2622; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n.grain{ position:absolute; inset:0; opacity:.5; pointer-events:none; z-index:2; mix-blend-mode:multiply;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E\"); }\n.wrap{ position:relative; z-index:3; height:100%; display:flex; flex-direction:column; align-items:center; padding:52px 40px 40px; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a8178; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 0 4px rgba(250,72,220,.14); }\n.h1{ font-size:clamp(30px,4vw,52px); font-weight:600; letter-spacing:-.025em; margin:14px 0 0; color:#211E1B; text-align:center; }\n.h1 .g{ color:#8a8178; font-weight:400; }\n.stage{ position:relative; flex:1; width:100%; max-width:1040px; display:flex; align-items:center; justify-content:center; }\nsvg.machine{ width:100%; height:auto; max-height:440px; display:block; overflow:visible; }\n.chips{ position:absolute; left:2%; top:50%; transform:translateY(-50%); z-index:4; display:flex; flex-direction:column; gap:10px; }\n.chip{ display:flex; align-items:center; gap:9px; background:#fff; border:1.5px solid #2A2622; border-radius:9px; padding:9px 12px; cursor:pointer; box-shadow:2px 3px 0 rgba(42,38,34,.12); transition:transform .14s, box-shadow .14s; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; color:#2A2622; }\n.chip:hover{ transform:translate(-1px,-1px); box-shadow:3px 4px 0 rgba(42,38,34,.16); }\n.chip.spent{ opacity:.4; }\n.chip .ci{ width:16px; height:16px; opacity:.75; }\n.chip .cl{ color:#8a8178; }\n.decis{ position:absolute; right:1%; top:50%; transform:translateY(-50%); z-index:4; width:212px; background:#fff; border:1.5px solid #2A2622; border-radius:11px; padding:14px 15px; box-shadow:4px 6px 0 rgba(42,38,34,.14); opacity:0; transition:opacity .3s, transform .3s; }\n.decis.show{ opacity:1; }\n.decis .dh{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.16em; text-transform:uppercase; color:#a24c96; margin-bottom:8px; }\n.decis .dv{ font-size:15px; font-weight:600; color:#211E1B; line-height:1.35; min-height:40px; }\n.decis .dk{ margin-top:10px; display:inline-flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7a9; }\n.decis .dk.on b{ color:#8a3d80; }\n.payoff{ margin-top:6px; font-family:ui-monospace,Menlo,monospace; font-size:12px; letter-spacing:.12em; text-transform:uppercase; color:#6f6459; }\n.payoff b{ color:#2A2622; }\n@media (max-width:820px){ .chips{ position:relative; left:auto; top:auto; transform:none; flex-direction:row; flex-wrap:wrap; justify-content:center; margin-bottom:10px; } .decis{ position:relative; right:auto; top:auto; transform:none; margin-top:12px; } .wrap{ padding:32px 20px; } }\n@media (prefers-reduced-motion:reduce){ .idle{ animation:none !important; } }\n`,\n  render(d2){\n    // machine SVG — neutral chassis, charcoal ink; color appears only when energized (via mounted)\n    var M = `<svg class=\"machine\" viewBox=\"0 0 1000 460\" fill=\"none\">\n      <defs>\n        <filter id=\"soft\" x=\"-30%\" y=\"-30%\" width=\"160%\" height=\"160%\"><feGaussianBlur stdDeviation=\"7\"/></filter>\n      </defs>\n      <!-- contact shadow -->\n      <ellipse cx=\"520\" cy=\"410\" rx=\"300\" ry=\"26\" fill=\"#2A2622\" opacity=\"0.10\" filter=\"url(#soft)\"/>\n      <!-- gauge -->\n      <path d=\"M410 120 A110 110 0 0 1 630 120\" stroke=\"#2A2622\" stroke-width=\"2\" opacity=\".35\" fill=\"none\"/>\n      <path id=\"gaugeArc\" d=\"M410 120 A110 110 0 0 1 630 120\" stroke=\"#FA48DC\" stroke-width=\"4\" fill=\"none\" stroke-linecap=\"round\" stroke-dasharray=\"345\" stroke-dashoffset=\"345\"/>\n      <g id=\"needle\" transform=\"rotate(-52 520 128)\"><line x1=\"520\" y1=\"128\" x2=\"520\" y2=\"52\" stroke=\"#2A2622\" stroke-width=\"3\" stroke-linecap=\"round\"/></g>\n      <circle cx=\"520\" cy=\"128\" r=\"6\" fill=\"#2A2622\"/>\n      <text x=\"520\" y=\"150\" text-anchor=\"middle\" font-family=\"ui-monospace,Menlo,monospace\" font-size=\"13\" fill=\"#6f6459\">~2000 tok/s</text>\n      <!-- body -->\n      <rect x=\"330\" y=\"176\" width=\"380\" height=\"200\" rx=\"18\" fill=\"#EDE9E1\" stroke=\"#2A2622\" stroke-width=\"2.5\"/>\n      <rect x=\"330\" y=\"176\" width=\"380\" height=\"20\" rx=\"10\" fill=\"#e2ddd2\" stroke=\"#2A2622\" stroke-width=\"2.5\"/>\n      <!-- intake trumpets left -->\n      ${[0,1,2,3].map(function(i){var y=210+i*44;return '<path d=\"M300 '+(y-14)+' L330 '+(y-9)+' L330 '+(y+9)+' L300 '+(y+14)+' Z\" fill=\"#e2ddd2\" stroke=\"#2A2622\" stroke-width=\"2\" data-boca=\"'+i+'\"/>';}).join('')}\n      <!-- gear -->\n      <g id=\"gear\" transform=\"translate(520 276)\"><g id=\"gearSpin\">\n        ${(function(){var t='';for(var k=0;k<10;k++){var a=k*36*Math.PI/180;var x1=Math.cos(a)*44,y1=Math.sin(a)*44,x2=Math.cos(a)*54,y2=Math.sin(a)*54;t+='<line x1=\"'+x1.toFixed(1)+'\" y1=\"'+y1.toFixed(1)+'\" x2=\"'+x2.toFixed(1)+'\" y2=\"'+y2.toFixed(1)+'\" stroke=\"#2A2622\" stroke-width=\"4\" stroke-linecap=\"round\"/>';}return t;})()}\n        <circle r=\"44\" fill=\"#EDE9E1\" stroke=\"#2A2622\" stroke-width=\"2.5\"/>\n        <circle id=\"gearCore\" r=\"26\" fill=\"#EDE9E1\" stroke=\"#2A2622\" stroke-width=\"2\"/>\n        <circle r=\"7\" fill=\"#2A2622\"/>\n      </g></g>\n      <!-- output chute right -->\n      <path d=\"M710 250 L760 250 L760 302 L710 302 Z\" fill=\"#e2ddd2\" stroke=\"#2A2622\" stroke-width=\"2\"/>\n      <!-- current path (energized only) -->\n      <path id=\"cur\" d=\"M330 276 L476 276\" stroke=\"#FA48DC\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-dasharray=\"150\" stroke-dashoffset=\"150\" opacity=\"0\"/>\n      <path id=\"cur2\" d=\"M564 276 L735 276\" stroke=\"#FA48DC\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-dasharray=\"175\" stroke-dashoffset=\"175\" opacity=\"0\"/>\n    </svg>`;\n    var chips=[\n      ['pergunta','texto','0','M2 4h12M2 8h9M2 12h11'],\n      ['áudio do cliente','voz','1','M2 8h2l2-5 3 10 2-6 2 3h2'],\n      ['foto de nota','imagem','2','M2 3h12v10H2z M5 7l3 3 3-4'],\n      ['print da tela','visão','3','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"wrap\">'+\n          '<div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">Mostre o caso. <span class=\"g\">Ele decide.</span></h1>'+\n          '<div class=\"stage\">'+\n            '<div class=\"chips\" data-chips>'+ chips.map(function(c){ return '<button class=\"chip\" data-chip=\"'+c[2]+'\"><svg class=\"ci\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"#2A2622\" stroke-width=\"1.4\"><path d=\"'+c[3]+'\"/></svg><span>'+c[0]+'</span></button>'; }).join('') +'</div>'+\n            M +\n            '<div class=\"decis\"><div class=\"dh\">Decisão</div><div class=\"dv\" data-dv></div><div class=\"dk\" data-dk>1 motor · 4 entradas</div></div>'+\n          '</div>'+\n          '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var svg=root.querySelector('svg.machine');\n    var decis=root.querySelector('.decis');\n    var dv=root.querySelector('[data-dv]'), dk=root.querySelector('[data-dk]');\n    var gearSpin=svg.querySelector('#gearSpin'), gearCore=svg.querySelector('#gearCore');\n    var cur=svg.querySelector('#cur'), cur2=svg.querySelector('#cur2'), needle=svg.querySelector('#needle'), arc=svg.querySelector('#gaugeArc');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DECS={ '0':'“Responder: prazo é 5 dias úteis.”', '1':'→ Transferir ao gerente.', '2':'✓ Reembolso aprovado · R$ 240', '3':'→ Classificar: chamado técnico' };\n    var bocaY={ '0':210,'1':254,'2':298,'3':342 };\n    var busy=false, rot=0, spinning=false, raf=null, chips=Array.prototype.slice.call(root.querySelectorAll('.chip'));\n    // idle affordance: gentle pulse on first chip\n    if(!reduce){ chips[0].classList.add('idle'); chips[0].style.animation='chippulse 2.4s ease-in-out infinite'; var s=document.createElement('style'); s.textContent='@keyframes chippulse{0%,100%{transform:none}50%{transform:translate(-2px,-2px)}}'; root.appendChild(s); }\n    function spinLoop(){ if(!spinning){ return; } rot+=6; gearSpin.setAttribute('transform','rotate('+rot+')'); raf=requestAnimationFrame(spinLoop); }\n    function setCur(el,on){ el.style.transition='stroke-dashoffset .5s cubic-bezier(.2,.8,.2,1), opacity .2s'; el.style.opacity=on?'1':'0'; el.style.strokeDashoffset=on?'0':el.getAttribute('stroke-dasharray'); }\n    function reset(){ spinning=false; if(raf)cancelAnimationFrame(raf); gearCore.setAttribute('fill','#EDE9E1');\n      setCur(cur,false); setCur(cur2,false); arc.style.transition='stroke-dashoffset .4s'; arc.style.strokeDashoffset='345';\n      needle.style.transition='transform .5s'; needle.setAttribute('transform','rotate(-52 520 128)');\n      decis.classList.remove('show'); dv.textContent=''; dk.classList.remove('on'); chips.forEach(function(c){c.classList.remove('spent');}); busy=false; }\n    function fire(k){ if(busy) return; busy=true; chips.forEach(function(c){c.style.animation='';});\n      var chip=root.querySelector('.chip[data-chip=\"'+k+'\"]'); if(chip)chip.classList.add('spent');\n      // reposition cur to the chosen boca\n      var y=bocaY[k]; cur.setAttribute('d','M300 '+y+' L476 276');\n      setCur(cur,true);\n      setTimeout(function(){ spinning=true; spinLoop(); gearCore.setAttribute('fill','#FA48DC'); },420);\n      setTimeout(function(){ setCur(cur2,true); // out to chute\n        needle.style.transition='transform .7s cubic-bezier(.2,.8,.2,1)'; needle.setAttribute('transform','rotate(52 520 128)');\n        arc.style.transition='stroke-dashoffset .7s'; arc.style.strokeDashoffset='0'; },760);\n      setTimeout(function(){ // decision reveals\n        spinning=false; if(raf)cancelAnimationFrame(raf);\n        decis.classList.add('show'); dk.classList.add('on'); dk.innerHTML='<b>~2000 tok/s</b>';\n        var full=DECS[k]||''; var i=0; var iv=setInterval(function(){ i++; dv.textContent=full.slice(0,i); if(i>=full.length){ clearInterval(iv); } },22);\n      },1300);\n      setTimeout(reset, 4200);\n    }\n    chips.forEach(function(c){ d2.on(c,'click', function(){ fire(c.getAttribute('data-chip')); }); });\n    // auto-demo once shortly after load (so idle isn't dead), only if visible + not reduced\n    if(!reduce){ var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting && !busy){ setTimeout(function(){ if(!busy) fire('2'); },900); io.disconnect(); } }); },{threshold:.3}); io.observe(root.querySelector('.stage')); }\n    else { decis.classList.add('show'); dv.textContent=DECS['2']; dk.innerHTML='<b>~2000 tok/s</b>'; arc.style.strokeDashoffset='0'; needle.setAttribute('transform','rotate(52 520 128)'); }\n  }\n}"}}}}}}}},{"_id":"6a7409da9754f002640b78ad","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"sXNScmAJLOuVyW_tzC8Ti","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:radial-gradient(120% 90% at 38% 30%, #0d0b12 0%, #08070b 60%, #060509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:2;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:46px; left:56px; z-index:6; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#7a7480; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 10px #FA48DC; }\n.h1{ font-size:clamp(28px,3.4vw,46px); font-weight:500; letter-spacing:-.025em; margin:12px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:12px 0 0; font-size:14px; line-height:1.5; color:#9a949c; max-width:40ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#b58cae; font-weight:400; }\n.body{ position:absolute; inset:150px 56px 96px; z-index:5; display:flex; gap:40px; align-items:center; }\n.stage{ position:relative; flex:1.5; min-width:0; }\nsvg.machine{ width:100%; height:auto; max-height:420px; display:block; overflow:visible; }\n.chips{ position:absolute; left:0; top:50%; transform:translateY(-50%); z-index:6; display:flex; flex-direction:column; gap:9px; }\n.chip{ display:flex; align-items:center; gap:9px; background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.14); border-radius:9px; padding:9px 12px; cursor:pointer; transition:.15s; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; color:#cfc9d2; }\n.chip:hover{ border-color:rgba(250,72,220,.6); color:#fff; }\n.chip.spent{ opacity:.4; }\n.chip .ci{ width:15px; height:15px; opacity:.8; }\n/* ficha técnica */\n.spec{ flex:1; min-width:230px; border-left:1px solid rgba(255,255,255,.1); padding-left:34px; }\n.spec .sh{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7a7480; margin-bottom:16px; }\n.frow{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding:11px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.frow .fk{ font-size:13px; color:#EDECEF; }\n.frow .fk small{ display:block; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7a7480; margin-top:2px; letter-spacing:.02em; }\n.frow .fv{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#c98fbf; white-space:nowrap; font-variant-numeric:tabular-nums; text-align:right; }\n.frow .fv.lang{ color:#EDECEF; }\n.decis{ position:absolute; right:0; top:50%; transform:translateY(-50%) translateX(6px); z-index:7; width:198px; background:rgba(14,9,14,.94); border:1px solid rgba(250,72,220,.4); border-radius:8px; padding:13px 14px; opacity:0; transition:.3s; box-shadow:0 18px 50px rgba(0,0,0,.5); }\n.decis.show{ opacity:1; transform:translateY(-50%) translateX(0); }\n.decis .dh{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.16em; text-transform:uppercase; color:#c26db8; margin-bottom:7px; }\n.decis .dv{ font-size:14px; font-weight:500; color:#fff; line-height:1.35; min-height:38px; }\n.payoff{ position:absolute; left:0; right:0; bottom:40px; text-align:center; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; }\n.payoff b{ color:#c98fbf; }\n@media (max-width:960px){ .body{ position:relative; inset:auto; flex-direction:column; padding:24px; } .head,.seed{ position:relative; inset:auto; left:auto; top:auto; right:auto; text-align:left; padding:20px 24px 0; } .spec{ border-left:none; border-top:1px solid rgba(255,255,255,.1); padding-left:0; padding-top:20px; width:100%; } .payoff{ position:relative; bottom:auto; margin:16px 0; } }\n@media (prefers-reduced-motion:reduce){ .chip{ animation:none !important; } }\n`,\n  render(d2){\n    var machine = `<svg class=\"machine\" viewBox=\"0 0 820 440\" fill=\"none\">\n      <defs><filter id=\"glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\"><feGaussianBlur stdDeviation=\"4\"/></filter></defs>\n      <!-- gauge -->\n      <path d=\"M300 120 A100 100 0 0 1 500 120\" stroke=\"#3a3540\" stroke-width=\"2\" fill=\"none\"/>\n      <path id=\"gaugeArc\" d=\"M300 120 A100 100 0 0 1 500 120\" stroke=\"#FA48DC\" stroke-width=\"3.5\" fill=\"none\" stroke-linecap=\"round\" stroke-dasharray=\"314\" stroke-dashoffset=\"314\"/>\n      <g id=\"needle\" transform=\"rotate(-52 400 128)\"><line x1=\"400\" y1=\"128\" x2=\"400\" y2=\"58\" stroke=\"#cfc9d2\" stroke-width=\"2.5\" stroke-linecap=\"round\"/></g>\n      <circle cx=\"400\" cy=\"128\" r=\"5\" fill=\"#cfc9d2\"/>\n      <text x=\"400\" y=\"150\" text-anchor=\"middle\" font-family=\"ui-monospace,Menlo,monospace\" font-size=\"12\" fill=\"#7a7480\">~2000 tok/s</text>\n      <!-- body -->\n      <rect x=\"230\" y=\"176\" width=\"340\" height=\"184\" rx=\"16\" fill=\"rgba(255,255,255,0.028)\" stroke=\"rgba(255,255,255,0.22)\" stroke-width=\"2\"/>\n      <rect x=\"230\" y=\"176\" width=\"340\" height=\"16\" rx=\"8\" fill=\"rgba(255,255,255,0.05)\" stroke=\"rgba(255,255,255,0.22)\" stroke-width=\"2\"/>\n      <!-- intake trumpets + labels -->\n      ${[['texto',210],['voz',252],['imagem',294],['visão',336]].map(function(o,i){var y=o[1];return '<path d=\"M196 '+(y-13)+' L230 '+(y-8)+' L230 '+(y+8)+' L196 '+(y+13)+' Z\" fill=\"rgba(255,255,255,0.05)\" stroke=\"rgba(255,255,255,0.28)\" stroke-width=\"1.6\" data-boca=\"'+i+'\"/><text x=\"188\" y=\"'+(y+4)+'\" text-anchor=\"end\" font-family=\"ui-monospace,Menlo,monospace\" font-size=\"10\" fill=\"#7a7480\">'+o[0]+'</text>';}).join('')}\n      <!-- gear -->\n      <g transform=\"translate(400 268)\"><g id=\"gearSpin\">\n        ${(function(){var t='';for(var k=0;k<10;k++){var a=k*36*Math.PI/180;t+='<line x1=\"'+(Math.cos(a)*40).toFixed(1)+'\" y1=\"'+(Math.sin(a)*40).toFixed(1)+'\" x2=\"'+(Math.cos(a)*50).toFixed(1)+'\" y2=\"'+(Math.sin(a)*50).toFixed(1)+'\" stroke=\"rgba(255,255,255,0.3)\" stroke-width=\"3.5\" stroke-linecap=\"round\"/>';}return t;})()}\n        <circle r=\"40\" fill=\"rgba(255,255,255,0.03)\" stroke=\"rgba(255,255,255,0.28)\" stroke-width=\"2\"/>\n        <circle id=\"gearCore\" r=\"22\" fill=\"rgba(255,255,255,0.04)\" stroke=\"rgba(255,255,255,0.28)\" stroke-width=\"1.6\"/>\n        <circle r=\"6\" fill=\"#cfc9d2\"/>\n      </g></g>\n      <!-- output chute -->\n      <path d=\"M570 244 L616 244 L616 292 L570 292 Z\" fill=\"rgba(255,255,255,0.05)\" stroke=\"rgba(255,255,255,0.24)\" stroke-width=\"1.6\"/>\n      <!-- current -->\n      <path id=\"cur\" d=\"M230 268 L358 268\" stroke=\"#FA48DC\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-dasharray=\"130\" stroke-dashoffset=\"130\" opacity=\"0\"/>\n      <path id=\"cur2\" d=\"M442 268 L595 268\" stroke=\"#FA48DC\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-dasharray=\"155\" stroke-dashoffset=\"155\" opacity=\"0\"/>\n    </svg>`;\n    var chips=[['texto · pergunta','0','M2 4h12M2 8h9M2 12h11'],['voz · áudio','1','M2 8h2l2-5 3 10 2-6 2 3h2'],['imagem · nota','2','M2 3h12v10H2z M5 7l3 3 3-4'],['visão · tela','3','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z']];\n    var feats=[\n      ['Multimodal','texto · voz · imagem · visão','4 entradas',''],\n      ['Idiomas','entende e responde','PT · EN · ES · +40','lang'],\n      ['Velocidade','geração streaming','~2000 tok/s',''],\n      ['Contexto','memória por chamada','128k tokens',''],\n      ['Decisão','estruturada, não prosa','auditável',''],\n      ['Modelo','padrão nativo Data²','cerebras','']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">Mostre o caso. <span class=\"g\">Ele decide.</span></h1>'+\n          '<div class=\"h1s\">A inteligência do runtime: entende qualquer entrada, decide e responde — na hora.</div></div>'+\n        '<div class=\"seed\">domain · engine<br>estado · <b>nominal</b><br>latência · <b data-lat>18</b>ms</div>'+\n        '<div class=\"body\">'+\n          '<div class=\"stage\">'+\n            '<div class=\"chips\" data-chips>'+ chips.map(function(c){ return '<button class=\"chip\" data-chip=\"'+c[1]+'\"><svg class=\"ci\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"'+c[2]+'\"/></svg><span>'+c[0]+'</span></button>'; }).join('') +'</div>'+\n            machine +\n            '<div class=\"decis\"><div class=\"dh\">Decisão</div><div class=\"dv\" data-dv></div></div>'+\n          '</div>'+\n          '<div class=\"spec\"><div class=\"sh\">Ficha técnica</div>'+\n            feats.map(function(f){ return '<div class=\"frow\"><div class=\"fk\">'+f[0]+'<small>'+f[1]+'</small></div><div class=\"fv '+f[3]+'\">'+f[2]+'</div></div>'; }).join('')+\n          '</div>'+\n        '</div>'+\n        '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var svg=root.querySelector('svg.machine'); var decis=root.querySelector('.decis'); var dv=root.querySelector('[data-dv]'); var lat=root.querySelector('[data-lat]');\n    var gearSpin=svg.querySelector('#gearSpin'), gearCore=svg.querySelector('#gearCore'), cur=svg.querySelector('#cur'), cur2=svg.querySelector('#cur2'), needle=svg.querySelector('#needle'), arc=svg.querySelector('#gaugeArc');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DECS={'0':'“Prazo é 5 dias úteis.”','1':'→ Transferir ao gerente','2':'✓ Reembolso R$ 240','3':'→ Classificar: técnico'};\n    var bocaY={'0':210,'1':252,'2':294,'3':336};\n    var busy=false, rot=0, spinning=false, raf=null, chips=Array.prototype.slice.call(root.querySelectorAll('.chip'));\n    if(!reduce){ var s=document.createElement('style'); s.textContent='@keyframes cp{0%,100%{transform:none}50%{transform:translateX(3px)}}'; root.appendChild(s); chips[0].style.animation='cp 2.4s ease-in-out infinite'; }\n    function spin(){ if(!spinning)return; rot+=6; gearSpin.setAttribute('transform','rotate('+rot+')'); raf=requestAnimationFrame(spin); }\n    function setCur(el,on){ el.style.transition='stroke-dashoffset .5s cubic-bezier(.2,.8,.2,1), opacity .2s'; el.style.opacity=on?'1':'0'; el.style.strokeDashoffset=on?'0':el.getAttribute('stroke-dasharray'); }\n    function reset(){ spinning=false; if(raf)cancelAnimationFrame(raf); gearCore.setAttribute('fill','rgba(255,255,255,0.04)'); gearCore.setAttribute('stroke','rgba(255,255,255,0.28)'); setCur(cur,false); setCur(cur2,false); arc.style.transition='stroke-dashoffset .4s'; arc.style.strokeDashoffset='314'; needle.style.transition='transform .5s'; needle.setAttribute('transform','rotate(-52 400 128)'); decis.classList.remove('show'); dv.textContent=''; chips.forEach(function(c){c.classList.remove('spent');}); busy=false; }\n    function fire(k){ if(busy)return; busy=true; chips.forEach(function(c){c.style.animation='';}); var ch=root.querySelector('.chip[data-chip=\"'+k+'\"]'); if(ch)ch.classList.add('spent');\n      cur.setAttribute('d','M196 '+bocaY[k]+' L358 268'); setCur(cur,true);\n      setTimeout(function(){ spinning=true; spin(); gearCore.setAttribute('fill','#FA48DC'); gearCore.setAttribute('stroke','#FA48DC'); },420);\n      setTimeout(function(){ setCur(cur2,true); needle.style.transition='transform .7s cubic-bezier(.2,.8,.2,1)'; needle.setAttribute('transform','rotate(52 400 128)'); arc.style.transition='stroke-dashoffset .7s'; arc.style.strokeDashoffset='0'; },760);\n      setTimeout(function(){ spinning=false; if(raf)cancelAnimationFrame(raf); decis.classList.add('show'); if(lat)lat.textContent=(12+Math.floor(Math.random()*12)); var full=DECS[k]||''; var i=0; var iv=setInterval(function(){ i++; dv.textContent=full.slice(0,i); if(i>=full.length)clearInterval(iv); },22); },1300);\n      setTimeout(reset,4200);\n    }\n    chips.forEach(function(c){ d2.on(c,'click',function(){ fire(c.getAttribute('data-chip')); }); });\n    if(!reduce){ var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting && !busy){ setTimeout(function(){ if(!busy) fire('2'); },900); io.disconnect(); } }); },{threshold:.25}); io.observe(root.querySelector('.stage')); }\n    else { decis.classList.add('show'); dv.textContent=DECS['2']; arc.style.strokeDashoffset='0'; needle.setAttribute('transform','rotate(52 400 128)'); }\n  }\n}\n"}}}}}}}},{"_id":"6a740d6ad5a555faccfdb44a","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"uHB8UGh4_h0DwxJ7qPgJl","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:radial-gradient(80% 70% at 34% 44%, #17091a 0%, #0b0710 46%, #070509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.glow{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:1; }\n.vig{ position:absolute; inset:0; z-index:2; pointer-events:none; background:radial-gradient(75% 70% at 34% 44%, transparent 55%, rgba(4,3,6,.6) 100%); }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:4; }\n.head{ position:absolute; top:46px; left:56px; z-index:6; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a7488; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 12px 2px #FA48DC; }\n.h1{ font-size:clamp(28px,3.4vw,46px); font-weight:500; letter-spacing:-.025em; margin:12px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:12px 0 0; font-size:14px; line-height:1.5; color:#9a949c; max-width:38ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:6; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#c98fbf; font-weight:400; font-variant-numeric:tabular-nums; }\n.svgl{ position:absolute; inset:0; z-index:5; width:100%; height:100%; pointer-events:none; }\n.chips{ position:absolute; left:56px; top:50%; transform:translateY(-50%); z-index:7; display:flex; flex-direction:column; gap:10px; }\n.chip{ display:flex; align-items:center; gap:9px; background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.14); border-radius:999px; padding:9px 15px; cursor:pointer; transition:.16s; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; color:#cfc9d2; backdrop-filter:blur(3px); }\n.chip:hover{ border-color:rgba(250,72,220,.65); color:#fff; box-shadow:0 0 20px rgba(250,72,220,.2); }\n.chip.spent{ opacity:.45; }\n.chip .ci{ width:15px; height:15px; opacity:.8; }\n.decis{ position:absolute; z-index:8; width:210px; background:rgba(16,8,15,.86); border:1px solid rgba(250,72,220,.42); border-radius:12px; padding:15px 16px; opacity:0; transform:translateY(8px) scale(.98); transition:.4s cubic-bezier(.2,.8,.2,1); box-shadow:0 26px 70px rgba(0,0,0,.6), 0 0 46px rgba(250,72,220,.16); backdrop-filter:blur(6px); }\n.decis.show{ opacity:1; transform:none; }\n.decis .dh{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:#d07fc4; margin-bottom:8px; }\n.decis .dv{ font-size:15px; font-weight:500; color:#fff; line-height:1.35; min-height:40px; }\n.decis .dc{ margin-top:11px; display:flex; align-items:center; gap:7px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7f7; opacity:0; transition:opacity .3s; }\n.decis .dc.on{ opacity:1; } .decis .dc b{ color:#FA8CE8; }\n.spec{ position:absolute; right:56px; top:50%; transform:translateY(-50%); z-index:6; width:300px; border-left:1px solid rgba(255,255,255,.1); padding-left:30px; }\n.spec .sh{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7a7480; margin-bottom:14px; }\n.frow{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding:11px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.frow .fk{ font-size:13px; color:#EDECEF; } .frow .fk small{ display:block; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7a7480; margin-top:2px; }\n.frow .fv{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#c98fbf; white-space:nowrap; text-align:right; }\n.frow .fv.lang{ color:#EDECEF; }\n.payoff{ position:absolute; left:0; right:0; bottom:40px; text-align:center; z-index:6; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; }\n.payoff b{ color:#c98fbf; }\n@media (max-width:980px){ .spec{ position:relative; right:auto; top:auto; transform:none; width:auto; border-left:none; border-top:1px solid rgba(255,255,255,.1); margin:20px 24px; padding:20px 0 0; } .chips{ position:relative; left:auto; top:auto; transform:none; flex-direction:row; flex-wrap:wrap; padding:0 24px; } .head,.seed{ position:relative; inset:auto; padding:20px 24px 0; text-align:left; } .payoff{ position:relative; bottom:auto; margin-top:16px; } }\n@media (prefers-reduced-motion:reduce){ .chip{ animation:none !important; } }\n`,\n  render(d2){\n    var chips=[['texto · pergunta','0','M2 4h12M2 8h9M2 12h11'],['voz · áudio','1','M2 8h2l2-5 3 10 2-6 2 3h2'],['imagem · nota','2','M2 3h12v10H2z M5 7l3 3 3-4'],['visão · tela','3','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z']];\n    var feats=[['Multimodal','texto · voz · imagem · visão','4 entradas',''],['Idiomas','entende e responde','PT · EN · ES · +40','lang'],['Velocidade','geração em streaming','~2000 tok/s',''],['Contexto','memória por chamada','128k tokens',''],['Decisão','estruturada, não prosa','auditável',''],['Modelo','padrão nativo Data²','cerebras','']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"glow\" data-glow></canvas>'+\n        '<svg class=\"svgl\" data-svgl preserveAspectRatio=\"none\"></svg>'+\n        '<div class=\"vig\"></div><div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">Mostre o caso. <span class=\"g\">Ele decide.</span></h1>'+\n          '<div class=\"h1s\">A inteligência do runtime: entende qualquer entrada, raciocina e devolve uma decisão — na hora.</div></div>'+\n        '<div class=\"seed\">domain · engine<br>estado · <b>nominal</b><br>latência · <b data-lat>17</b>ms</div>'+\n        '<div class=\"chips\" data-chips>'+ chips.map(function(c){ return '<button class=\"chip\" data-chip=\"'+c[1]+'\"><svg class=\"ci\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"'+c[2]+'\"/></svg><span>'+c[0]+'</span></button>'; }).join('') +'</div>'+\n        '<div class=\"decis\" data-decis><div class=\"dh\">Decisão</div><div class=\"dv\" data-dv></div><div class=\"dc\" data-dc></div></div>'+\n        '<div class=\"spec\"><div class=\"sh\">Ficha técnica</div>'+ feats.map(function(f){ return '<div class=\"frow\"><div class=\"fk\">'+f[0]+'<small>'+f[1]+'</small></div><div class=\"fv '+f[3]+'\">'+f[2]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), cv=root.querySelector('[data-glow]'), svgl=root.querySelector('[data-svgl]');\n    var decis=root.querySelector('[data-decis]'), dv=root.querySelector('[data-dv]'), dc=root.querySelector('[data-dc]'), lat=root.querySelector('[data-lat]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var DPR=Math.min(2,(window.devicePixelRatio||1)); var gx=cv.getContext('2d');\n    var W=0,H=0,CX=0,CY=0;\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.40; CY=H*0.48; cv.width=W*DPR; cv.height=H*DPR; gx.setTransform(DPR,0,0,DPR,0,0);\n      svgl.setAttribute('viewBox','0 0 '+W+' '+H); positionDom(); }\n    function positionDom(){ decis.style.left=(CX+150)+'px'; decis.style.top=(CY-40)+'px'; }\n    // build filaments (SVG) radiating from core — the \"reasoning\"\n    var NS='http://www.w3.org/2000/svg', fils=[];\n    function buildFils(){ svgl.innerHTML=''; fils=[];\n      var n=reduce?8:16;\n      for(var i=0;i<n;i++){ var ang=(-0.85+1.7*(i/(n-1)))*Math.PI*0.5; // fan to the right\n        var len=120+ (i%3)*70 + Math.random()*40;\n        var ex=CX+Math.cos(ang)*len, ey=CY+Math.sin(ang)*len*0.85;\n        var mx=CX+Math.cos(ang)*len*0.5-10, my=CY+Math.sin(ang)*len*0.5-30;\n        var p=document.createElementNS(NS,'path'); p.setAttribute('d','M '+CX+' '+CY+' Q '+mx+' '+my+' '+ex+' '+ey);\n        p.setAttribute('fill','none'); p.setAttribute('stroke','#FA48DC'); p.setAttribute('stroke-width', i%3===0?'1.6':'1'); p.setAttribute('stroke-linecap','round');\n        var L=Math.hypot(ex-CX,ey-CY)*1.35; p.style.strokeDasharray=L; p.style.strokeDashoffset=L; p.style.opacity=(i%3===0?'0.75':'0.4');\n        p.style.transition='stroke-dashoffset .9s cubic-bezier(.2,.8,.2,1), opacity .5s';\n        svgl.appendChild(p);\n        var tip=document.createElementNS(NS,'circle'); tip.setAttribute('r','2.5'); tip.setAttribute('cx',ex); tip.setAttribute('cy',ey); tip.setAttribute('fill','#FA8CE8'); tip.style.opacity='0'; tip.style.transition='opacity .4s'; svgl.appendChild(tip);\n        fils.push({p:p,tip:tip,L:L,live:(i%3===0)}); }\n    }\n    function growFils(on){ fils.forEach(function(f){ if(on){ f.p.style.strokeDashoffset= f.live?'0':(f.L*0.45); f.p.style.opacity=f.live?'0.9':'0.28'; if(f.live) setTimeout(function(){f.tip.style.opacity='1';},650);} else { f.p.style.strokeDashoffset=f.L; f.p.style.opacity=f.live?'0.5':'0.28'; f.tip.style.opacity='0'; } }); }\n\n    // canvas: core glow + energy motes on fire\n    var motes=[], t0=performance.now(), coreHot=0;\n    function loop(t){ if(!run)return;\n      gx.globalCompositeOperation='source-over'; gx.fillStyle='rgba(9,6,11,0.26)'; gx.fillRect(0,0,W,H);\n      gx.globalCompositeOperation='lighter';\n      var pulse=0.5+0.5*Math.sin(t*0.0016);\n      // baked core glow (layers)\n      var R=90+pulse*24+coreHot*40;\n      var g=gx.createRadialGradient(CX,CY,0,CX,CY,R); g.addColorStop(0,'rgba(255,140,235,'+(0.35+coreHot*0.4)+')'); g.addColorStop(.35,'rgba(250,72,220,'+(0.14+coreHot*0.2)+')'); g.addColorStop(1,'rgba(160,40,220,0)');\n      gx.fillStyle=g; gx.beginPath(); gx.arc(CX,CY,R,0,6.2832); gx.fill();\n      // nucleus\n      gx.beginPath(); gx.arc(CX,CY,7+pulse*3+coreHot*5,0,6.2832); gx.fillStyle='rgba(255,225,248,'+(0.85+coreHot*0.15)+')'; gx.fill();\n      if(coreHot>0)coreHot-=0.012;\n      // motes (on fire): travel from chip x into core, then out along a live filament\n      for(var i=motes.length-1;i>=0;i--){ var m=motes[i]; m.p+=m.sp; if(m.p>1){ motes.splice(i,1); continue; }\n        var x=m.x+(CX-m.x)*m.p, y=m.y+(CY-m.y)*m.p; gx.beginPath(); gx.arc(x,y,1.8,0,6.28); gx.fillStyle='rgba(255,150,235,'+(0.8*(1-m.p))+')'; gx.fill(); }\n      gx.globalCompositeOperation='source-over';\n      raf=requestAnimationFrame(loop);\n    }\n    var DECS={'0':'“Prazo é 5 dias úteis.”','1':'→ Transferir ao gerente','2':'✓ Reembolso R$ 240','3':'→ Classificar: chamado técnico'};\n    var chipEls=Array.prototype.slice.call(root.querySelectorAll('.chip')), busy=false;\n    function fire(k){ if(busy)return; busy=true; chipEls.forEach(function(c){c.style.animation='';});\n      var ch=root.querySelector('.chip[data-chip=\"'+k+'\"]'); if(ch)ch.classList.add('spent');\n      var r=ch.getBoundingClientRect(), sr=st.getBoundingClientRect(); var sx=r.right-sr.left, sy=r.top-sr.top+r.height/2;\n      decis.classList.remove('show'); dc.classList.remove('on'); dv.textContent='';\n      coreHot=1; for(var i=0;i<18;i++) motes.push({x:sx,y:sy,p:Math.random()*-0.4,sp:0.02+Math.random()*0.02});\n      setTimeout(function(){ growFils(true); },300);\n      setTimeout(function(){ decis.classList.add('show'); if(lat)lat.textContent=(12+Math.floor(Math.random()*12));\n        var full=DECS[k]||''; var i=0; var iv=setInterval(function(){ i++; dv.textContent=full.slice(0,i); if(i>=full.length){ clearInterval(iv); dc.classList.add('on'); dc.innerHTML='<b>~2000 tok/s</b> · auditável'; } },24);\n      },1150);\n      setTimeout(function(){ growFils(false); decis.classList.remove('show'); dv.textContent=''; dc.classList.remove('on'); chipEls.forEach(function(c){c.classList.remove('spent');}); busy=false; },4600);\n    }\n    var raf=null, run=true;\n    size(); d2.on(window,'resize',size); buildFils();\n    if(!reduce){ if(!root.querySelector('style[data-cp]')){ var s=document.createElement('style'); s.setAttribute('data-cp',''); s.textContent='@keyframes cpp{0%,100%{transform:none}50%{transform:translateX(3px)}}'; root.appendChild(s);} chipEls[0].style.animation='cpp 2.4s ease-in-out infinite';\n      raf=requestAnimationFrame(loop);\n      var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run){run=true;raf=requestAnimationFrame(loop);} if(!busy) setTimeout(function(){ if(!busy) fire('2'); },1000); } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.15}); io.observe(st);\n    } else { growFils(true); decis.classList.add('show'); dv.textContent=DECS['2']; dc.classList.add('on'); dc.innerHTML='<b>~2000 tok/s</b> · auditável'; gx.clearRect(0,0,W,H); }\n    chipEls.forEach(function(c){ d2.on(c,'click',function(){ fire(c.getAttribute('data-chip')); }); });\n  }\n}\n"}}}}}}}},{"_id":"6a740e12669cd00c3487b278","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"EDJ9JbK6KxhazUqCavLd_","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:radial-gradient(78% 70% at 36% 46%, #180a1c 0%, #0c0712 46%, #070509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; perspective:1000px; }\n.aura{ position:absolute; z-index:1; width:640px; height:640px; border-radius:50%; pointer-events:none;\n  background:radial-gradient(circle, rgba(250,72,220,.22) 0%, rgba(176,72,250,.10) 34%, rgba(120,40,200,0) 70%);\n  filter:blur(8px); transition:transform .3s ease-out; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:46px; left:56px; z-index:7; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a7488; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 12px 2px #FA48DC; }\n.h1{ font-size:clamp(28px,3.4vw,46px); font-weight:500; letter-spacing:-.025em; margin:12px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:12px 0 0; font-size:14px; line-height:1.5; color:#9a949c; max-width:38ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:7; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#c98fbf; font-weight:400; font-variant-numeric:tabular-nums; }\n.goowrap{ position:absolute; z-index:4; transition:transform .3s ease-out; will-change:transform; }\nsvg.goo{ overflow:visible; display:block; }\n.chips{ position:absolute; left:56px; top:50%; transform:translateY(-50%); z-index:8; display:flex; flex-direction:column; gap:11px; }\n.chip{ display:flex; align-items:center; gap:9px; background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.14); border-radius:999px; padding:10px 16px; cursor:pointer; transition:.16s cubic-bezier(.2,.8,.2,1); font-family:ui-monospace,Menlo,monospace; font-size:11.5px; color:#cfc9d2; backdrop-filter:blur(3px); }\n.chip:hover{ border-color:rgba(250,72,220,.7); color:#fff; box-shadow:0 0 26px rgba(250,72,220,.28); transform:translateX(4px) scale(1.03); }\n.chip.spent{ opacity:.45; }\n.chip .ci{ width:15px; height:15px; opacity:.8; }\n.decis{ position:absolute; z-index:9; width:206px; background:rgba(16,8,15,.82); border:1px solid rgba(250,72,220,.42); border-radius:13px; padding:15px 16px; opacity:0; transform:translateY(10px) scale(.97); transition:.45s cubic-bezier(.2,.8,.2,1); box-shadow:0 26px 70px rgba(0,0,0,.6), 0 0 46px rgba(250,72,220,.18); backdrop-filter:blur(7px); }\n.decis.show{ opacity:1; transform:none; }\n.decis .dh{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:#d07fc4; margin-bottom:8px; }\n.decis .dv{ font-size:15px; font-weight:500; color:#fff; line-height:1.35; min-height:40px; }\n.decis .dc{ margin-top:11px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7fd0a0; opacity:0; transition:.3s; }\n.decis .dc.on{ opacity:1; } .decis .dc b{ color:#FA8CE8; }\n.spec{ position:absolute; right:56px; top:50%; transform:translateY(-50%); z-index:7; width:300px; border-left:1px solid rgba(255,255,255,.1); padding-left:30px; }\n.spec .sh{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7a7480; margin-bottom:14px; }\n.frow{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding:11px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.frow .fk{ font-size:13px; color:#EDECEF; } .frow .fk small{ display:block; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7a7480; margin-top:2px; }\n.frow .fv{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#c98fbf; white-space:nowrap; text-align:right; } .frow .fv.lang{ color:#EDECEF; }\n.payoff{ position:absolute; left:0; right:0; bottom:40px; text-align:center; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; }\n.payoff b{ color:#c98fbf; }\n.fidge{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:#4f4a52; }\n@media (max-width:980px){ .spec{ position:relative; right:auto; top:auto; transform:none; width:auto; border-left:none; border-top:1px solid rgba(255,255,255,.1); margin:20px 24px; padding:20px 0 0; } .chips{ position:relative; left:auto; top:auto; transform:none; flex-direction:row; flex-wrap:wrap; padding:0 24px; } .head,.seed{ position:relative; inset:auto; padding:20px 24px 0; text-align:left; } .payoff{ position:relative; bottom:auto; margin-top:16px; } }\n@media (prefers-reduced-motion:reduce){ .chip{ animation:none !important; } }\n`,\n  render(d2){\n    var chips=[['texto · pergunta','0','M2 4h12M2 8h9M2 12h11'],['voz · áudio','1','M2 8h2l2-5 3 10 2-6 2 3h2'],['imagem · nota','2','M2 3h12v10H2z M5 7l3 3 3-4'],['visão · tela','3','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z']];\n    var feats=[['Multimodal','texto · voz · imagem · visão','4 entradas',''],['Idiomas','entende e responde','PT · EN · ES · +40','lang'],['Velocidade','geração em streaming','~2000 tok/s',''],['Contexto','memória por chamada','128k tokens',''],['Decisão','estruturada, não prosa','auditável',''],['Modelo','padrão nativo Data²','cerebras','']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"aura\" data-aura></div>'+\n        '<div class=\"goowrap\" data-goowrap>'+\n          '<svg class=\"goo\" data-goo width=\"520\" height=\"520\" viewBox=\"0 0 520 520\">'+\n            '<defs><filter id=\"goo\" x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"180%\">'+\n              '<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"13\" result=\"b\"/>'+\n              '<feColorMatrix in=\"b\" mode=\"matrix\" values=\"1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 24 -11\" result=\"g\"/>'+\n              '<feBlend in=\"SourceGraphic\" in2=\"g\"/>'+\n            '</filter>'+\n            '<radialGradient id=\"blobg\" cx=\"42%\" cy=\"38%\"><stop offset=\"0\" stop-color=\"#FFC8F2\"/><stop offset=\"55%\" stop-color=\"#FA48DC\"/><stop offset=\"100%\" stop-color=\"#8B2FB0\"/></radialGradient></defs>'+\n            '<g data-blobs filter=\"url(#goo)\">'+\n              [0,1,2,3,4,5].map(function(i){return '<circle data-blob=\"'+i+'\" cx=\"260\" cy=\"260\" r=\"'+(i===0?46:26)+'\" fill=\"url(#blobg)\"/>';}).join('')+\n            '</g>'+\n            '<circle data-nucleus cx=\"260\" cy=\"260\" r=\"10\" fill=\"#FFE6F8\"/>'+\n          '</svg>'+\n        '</div>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">Mostre o caso. <span class=\"g\">Ele decide.</span></h1>'+\n          '<div class=\"h1s\">A inteligência do runtime: entende qualquer entrada, raciocina e devolve uma decisão — na hora.</div></div>'+\n        '<div class=\"seed\">domain · engine<br>estado · <b>nominal</b><br>latência · <b data-lat>17</b>ms</div>'+\n        '<div class=\"chips\" data-chips>'+ chips.map(function(c){ return '<button class=\"chip\" data-chip=\"'+c[1]+'\"><svg class=\"ci\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"'+c[2]+'\"/></svg><span>'+c[0]+'</span></button>'; }).join('') +'</div>'+\n        '<div class=\"decis\" data-decis><div class=\"dh\">Decisão</div><div class=\"dv\" data-dv></div><div class=\"dc\" data-dc></div></div>'+\n        '<div class=\"spec\"><div class=\"sh\">Ficha técnica</div>'+ feats.map(function(f){ return '<div class=\"frow\"><div class=\"fk\">'+f[0]+'<small>'+f[1]+'</small></div><div class=\"fv '+f[3]+'\">'+f[2]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"fidge\" data-fidge>mexa o mouse · clique um caso</div>'+\n        '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), goowrap=root.querySelector('[data-goowrap]'), aura=root.querySelector('[data-aura]');\n    var svg=root.querySelector('[data-goo]'), nucleus=root.querySelector('[data-nucleus]');\n    var blobs=Array.prototype.slice.call(root.querySelectorAll('[data-blob]'));\n    var decis=root.querySelector('[data-decis]'), dv=root.querySelector('[data-dv]'), dc=root.querySelector('[data-dc]'), lat=root.querySelector('[data-lat]');\n    var chipEls=Array.prototype.slice.call(root.querySelectorAll('.chip')), fidge=root.querySelector('[data-fidge]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var W=0,H=0,CX=0,CY=0, GX=260,GY=260; // goo local center\n    function size(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.40; CY=H*0.50;\n      goowrap.style.left=(CX-260)+'px'; goowrap.style.top=(CY-260)+'px';\n      aura.style.left=(CX-320)+'px'; aura.style.top=(CY-320)+'px';\n      decis.style.left=(CX+140)+'px'; decis.style.top=(CY-46)+'px';\n      if(fidge){ fidge.style.left=(CX-70)+'px'; fidge.style.top=(CY+150)+'px'; } }\n    size(); d2.on(window,'resize',size);\n\n    // blob model: orbit around swarm center (GX,GY) which springs toward mouse\n    var B=blobs.map(function(el,i){ return { el:el, base:(i===0?0:26), ang:Math.random()*6.28, rad:(i===0?0:60+Math.random()*34), sp:(0.4+Math.random()*0.7)*(i%2?1:-1), ph:Math.random()*6, r:(i===0?46:26) }; });\n    var tmx=GX,tmy=GY, mx=GX,my=GY, energized=0, tiltX=0,tiltY=0, ttiltX=0,ttiltY=0;\n    // pointer → fidget: swarm center leans toward mouse; scene tilts (3d)\n    function onmove(e){ var r=st.getBoundingClientRect(); var px=(e.clientX-r.left), py=(e.clientY-r.top);\n      // swarm target biased toward pointer (organic, damped)\n      tmx=GX + Math.max(-70,Math.min(70,(px-CX)*0.5)); tmy=GY + Math.max(-70,Math.min(70,(py-CY)*0.5));\n      ttiltX = Math.max(-7,Math.min(7,-(py-CY)/H*14)); ttiltY = Math.max(-7,Math.min(7,(px-CX)/W*14)); if(fidge)fidge.style.opacity='0'; }\n    d2.on(st,'pointermove', onmove);\n    d2.on(st,'pointerleave', function(){ tmx=GX; tmy=GY; ttiltX=0; ttiltY=0; });\n\n    var drops=[]; // absorbed droplets giving a quick energize\n    var raf=null, run=true, t0=performance.now();\n    function frame(t){ if(!run)return; var tt=(t-t0)/1000;\n      mx+=(tmx-mx)*0.08; my+=(tmy-my)*0.08; tiltX+=(ttiltX-tiltX)*0.08; tiltY+=(ttiltY-tiltY)*0.08;\n      goowrap.style.transform='rotateX('+tiltX.toFixed(2)+'deg) rotateY('+tiltY.toFixed(2)+'deg)';\n      aura.style.transform='translate('+((mx-GX)*0.6).toFixed(1)+'px,'+((my-GY)*0.6).toFixed(1)+'px) scale('+(1+energized*0.18).toFixed(3)+')';\n      if(energized>0)energized-=0.012;\n      B.forEach(function(b,i){ if(i===0){ b.el.setAttribute('cx',mx.toFixed(1)); b.el.setAttribute('cy',my.toFixed(1)); b.el.setAttribute('r',(46+energized*10+Math.sin(tt*1.6)*2).toFixed(1)); return; }\n        b.ang+=b.sp*0.01; var rad=b.rad*(1+ (energized*0.25) + Math.sin(tt*1.1+b.ph)*0.08);\n        var x=mx+Math.cos(b.ang)*rad, y=my+Math.sin(b.ang)*rad*0.82;\n        b.el.setAttribute('cx',x.toFixed(1)); b.el.setAttribute('cy',y.toFixed(1)); b.el.setAttribute('r',(b.base*(0.9+energized*0.4)+Math.sin(tt*1.4+b.ph)*3).toFixed(1)); });\n      nucleus.setAttribute('cx',mx.toFixed(1)); nucleus.setAttribute('cy',my.toFixed(1)); nucleus.setAttribute('r',(9+energized*5+Math.sin(tt*2)*1.2).toFixed(1)); nucleus.setAttribute('opacity',(0.85+energized*0.15).toFixed(2));\n      raf=requestAnimationFrame(frame);\n    }\n    var DECS={'0':'“Prazo é 5 dias úteis.”','1':'→ Transferir ao gerente','2':'✓ Reembolso R$ 240','3':'→ Classificar: chamado técnico'};\n    var busy=false;\n    function fire(k){ if(busy)return; busy=true; chipEls.forEach(function(c){c.style.animation='';}); var ch=root.querySelector('.chip[data-chip=\"'+k+'\"]'); if(ch)ch.classList.add('spent');\n      decis.classList.remove('show'); dc.classList.remove('on'); dv.textContent='';\n      energized=1; // gooey pulse — the droplet merges\n      setTimeout(function(){ decis.classList.add('show'); if(lat)lat.textContent=(12+Math.floor(Math.random()*12));\n        var full=DECS[k]||''; var i=0; var iv=setInterval(function(){ i++; dv.textContent=full.slice(0,i); if(i>=full.length){ clearInterval(iv); dc.classList.add('on'); dc.innerHTML='<b>~2000 tok/s</b> · auditável'; } },24);\n      },1000);\n      setTimeout(function(){ decis.classList.remove('show'); dv.textContent=''; dc.classList.remove('on'); chipEls.forEach(function(c){c.classList.remove('spent');}); busy=false; },4600);\n    }\n    chipEls.forEach(function(c){ d2.on(c,'click',function(){ energized=1; fire(c.getAttribute('data-chip')); });\n      d2.on(c,'mouseenter', function(){ energized=Math.max(energized,0.4); }); });\n    if(!reduce){ if(!root.querySelector('style[data-cp]')){ var s=document.createElement('style'); s.setAttribute('data-cp',''); s.textContent='@keyframes cpp{0%,100%{transform:none}50%{transform:translateX(3px)}}'; root.appendChild(s);} chipEls[0].style.animation='cpp 2.4s ease-in-out infinite';\n      raf=requestAnimationFrame(frame);\n      var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run){run=true;raf=requestAnimationFrame(frame);} if(!busy) setTimeout(function(){ if(!busy) fire('2'); },1400); } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.15}); io.observe(st);\n    } else { decis.classList.add('show'); dv.textContent=DECS['2']; dc.classList.add('on'); dc.innerHTML='<b>~2000 tok/s</b> · auditável'; }\n  }\n}"}}}}}}}},{"_id":"6a74115a9b80399cc1ea8cca","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"0phdBligzVRNJx8BE2Pmq","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:840px; overflow:hidden;\n  background:radial-gradient(80% 72% at 38% 46%, #160a1a 0%, #0b0711 46%, #070509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n.aura{ position:absolute; z-index:1; width:720px; height:720px; border-radius:50%; pointer-events:none;\n  background:radial-gradient(circle, rgba(250,72,220,.20) 0%, rgba(176,72,250,.08) 38%, rgba(120,40,200,0) 70%); filter:blur(10px); transition:transform .25s ease-out; }\ncanvas.gl{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:46px; left:56px; z-index:7; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a7488; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 12px 2px #FA48DC; }\n.h1{ font-size:clamp(28px,3.4vw,46px); font-weight:500; letter-spacing:-.025em; margin:12px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:12px 0 0; font-size:14px; line-height:1.5; color:#9a949c; max-width:38ch; }\n.seed{ position:absolute; top:52px; right:56px; z-index:7; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#c98fbf; font-weight:400; font-variant-numeric:tabular-nums; }\n.chips{ position:absolute; left:56px; top:50%; transform:translateY(-50%); z-index:8; display:flex; flex-direction:column; gap:11px; }\n.chip{ display:flex; align-items:center; gap:9px; background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.14); border-radius:999px; padding:10px 16px; cursor:pointer; transition:.16s cubic-bezier(.2,.8,.2,1); font-family:ui-monospace,Menlo,monospace; font-size:11.5px; color:#cfc9d2; backdrop-filter:blur(3px); }\n.chip:hover{ border-color:rgba(250,72,220,.7); color:#fff; box-shadow:0 0 26px rgba(250,72,220,.28); transform:translateX(4px) scale(1.03); }\n.chip.spent{ opacity:.45; } .chip .ci{ width:15px; height:15px; opacity:.8; }\n.decis{ position:absolute; z-index:9; width:206px; background:rgba(16,8,15,.82); border:1px solid rgba(250,72,220,.42); border-radius:13px; padding:15px 16px; opacity:0; transform:translateY(10px) scale(.97); transition:.45s cubic-bezier(.2,.8,.2,1); box-shadow:0 26px 70px rgba(0,0,0,.6), 0 0 46px rgba(250,72,220,.18); backdrop-filter:blur(7px); }\n.decis.show{ opacity:1; transform:none; }\n.decis .dh{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:#d07fc4; margin-bottom:8px; }\n.decis .dv{ font-size:15px; font-weight:500; color:#fff; line-height:1.35; min-height:40px; }\n.decis .dc{ margin-top:11px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7fd0a0; opacity:0; transition:.3s; } .decis .dc.on{ opacity:1; } .decis .dc b{ color:#FA8CE8; }\n.spec{ position:absolute; right:56px; top:50%; transform:translateY(-50%); z-index:7; width:300px; border-left:1px solid rgba(255,255,255,.1); padding-left:30px; }\n.spec .sh{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7a7480; margin-bottom:14px; }\n.frow{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding:11px 0; border-bottom:1px solid rgba(255,255,255,.07); }\n.frow .fk{ font-size:13px; color:#EDECEF; } .frow .fk small{ display:block; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#7a7480; margin-top:2px; }\n.frow .fv{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#c98fbf; white-space:nowrap; text-align:right; } .frow .fv.lang{ color:#EDECEF; }\n.payoff{ position:absolute; left:0; right:0; bottom:40px; text-align:center; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:11.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#c98fbf; }\n.fidge{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:#4f4a52; transition:opacity .4s; }\n@media (max-width:980px){ .spec{ position:relative; right:auto; top:auto; transform:none; width:auto; border-left:none; border-top:1px solid rgba(255,255,255,.1); margin:20px 24px; padding:20px 0 0; } .chips{ position:relative; left:auto; top:auto; transform:none; flex-direction:row; flex-wrap:wrap; padding:0 24px; } .head,.seed{ position:relative; inset:auto; padding:20px 24px 0; text-align:left; } .payoff{ position:relative; bottom:auto; margin-top:16px; } }\n@media (prefers-reduced-motion:reduce){ .chip{ animation:none !important; } }\n`,\n  render(d2){\n    var chips=[['texto · pergunta','0','M2 4h12M2 8h9M2 12h11'],['voz · áudio','1','M2 8h2l2-5 3 10 2-6 2 3h2'],['imagem · nota','2','M2 3h12v10H2z M5 7l3 3 3-4'],['visão · tela','3','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z']];\n    var feats=[['Multimodal','texto · voz · imagem · visão','4 entradas',''],['Idiomas','entende e responde','PT · EN · ES · +40','lang'],['Velocidade','geração em streaming','~2000 tok/s',''],['Contexto','memória por chamada','128k tokens',''],['Decisão','estruturada, não prosa','auditável',''],['Modelo','padrão nativo Data²','cerebras','']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"aura\" data-aura></div>'+\n        '<canvas class=\"gl\" data-gl></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">Mostre o caso. <span class=\"g\">Ele decide.</span></h1>'+\n          '<div class=\"h1s\">A inteligência do runtime: entende qualquer entrada, raciocina e devolve uma decisão — na hora.</div></div>'+\n        '<div class=\"seed\">domain · engine<br>estado · <b>nominal</b><br>latência · <b data-lat>17</b>ms</div>'+\n        '<div class=\"chips\" data-chips>'+ chips.map(function(c){ return '<button class=\"chip\" data-chip=\"'+c[1]+'\"><svg class=\"ci\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"'+c[2]+'\"/></svg><span>'+c[0]+'</span></button>'; }).join('') +'</div>'+\n        '<div class=\"decis\" data-decis><div class=\"dh\">Decisão</div><div class=\"dv\" data-dv></div><div class=\"dc\" data-dc></div></div>'+\n        '<div class=\"spec\"><div class=\"sh\">Ficha técnica</div>'+ feats.map(function(f){ return '<div class=\"frow\"><div class=\"fk\">'+f[0]+'<small>'+f[1]+'</small></div><div class=\"fv '+f[3]+'\">'+f[2]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"fidge\" data-fidge>mexa o mouse · clique um caso</div>'+\n        '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), cv=root.querySelector('[data-gl]'), aura=root.querySelector('[data-aura]');\n    var decis=root.querySelector('[data-decis]'), dv=root.querySelector('[data-dv]'), dc=root.querySelector('[data-dc]'), lat=root.querySelector('[data-lat]'), fidge=root.querySelector('[data-fidge]');\n    var chipEls=Array.prototype.slice.call(root.querySelectorAll('.chip'));\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var W=0,H=0,CX=0,CY=0, BW=760, BH=620; // blob canvas box (css)\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.40; CY=H*0.50;\n      cv.style.left=(CX-BW/2)+'px'; cv.style.top=(CY-BH/2)+'px'; cv.style.width=BW+'px'; cv.style.height=BH+'px';\n      aura.style.left=(CX-360)+'px'; aura.style.top=(CY-360)+'px';\n      decis.style.left=(CX+150)+'px'; decis.style.top=(CY-46)+'px';\n      if(fidge){ fidge.style.left=(CX-70)+'px'; fidge.style.top=(CY+170)+'px'; }\n      var DPR=Math.min(1.5,(window.devicePixelRatio||1)); cv.width=Math.round(BW*DPR); cv.height=Math.round(BH*DPR); if(gl) gl.viewport(0,0,cv.width,cv.height); }\n\n    var gl=cv.getContext('webgl',{alpha:true,premultipliedAlpha:false,antialias:true});\n    var raf=null, run=true;\n    if(!gl){ // graceful fallback: css blob\n      cv.style.display='none'; var f=document.createElement('div'); f.style.cssText='position:absolute;z-index:2;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle at 42% 38%,#FFC8F2,#FA48DC 55%,#8B2FB0);filter:blur(2px);box-shadow:0 0 60px rgba(250,72,220,.5)'; st.appendChild(f); layout(); f.style.left=(CX-110)+'px'; f.style.top=(CY-110)+'px'; }\n    else {\n      var vsrc='attribute vec2 p;void main(){gl_Position=vec4(p,0.0,1.0);}';\n      var fsrc=[\n'precision highp float;',\n'uniform vec2 uRes; uniform float uTime; uniform vec2 uCenter; uniform vec2 uVel; uniform float uEnergy;',\n'float smin(float a,float b,float k){ float h=clamp(0.5+0.5*(b-a)/k,0.0,1.0); return mix(b,a,h)-k*h*(1.0-h);} ',\n'float sdSph(vec3 p,vec3 c,float r){ return length(p-c)-r; }',\n'float map(vec3 p){ float t=uTime; float k=0.42;',\n'  float d=sdSph(p,vec3(0.0),0.50+0.04*sin(t*1.2)+uEnergy*0.13);',\n'  for(int i=0;i<5;i++){ float fi=float(i); float a=t*(0.45+fi*0.12)+fi*1.9; float rr=0.40+0.09*sin(t*0.6+fi);',\n'    vec3 c=vec3(cos(a)*rr, sin(a*1.13)*rr*0.82, sin(a*0.6)*0.4);',\n'    c.xy+=uVel*0.4*(0.5+0.5*sin(fi));',\n'    d=smin(d, sdSph(p,c,0.19+0.04*sin(t+fi)+uEnergy*0.07), k);',\n'  } return d; }',\n'vec3 nrm(vec3 p){ vec2 e=vec2(0.0012,0.0); return normalize(vec3(map(p+e.xyy)-map(p-e.xyy),map(p+e.yxy)-map(p-e.yxy),map(p+e.yyx)-map(p-e.yyx))); }',\n'void main(){ vec2 uv=1.85*(gl_FragCoord.xy-0.5*uRes)/uRes.y;',\n'  vec3 ro=vec3(0.0,0.0,2.7); vec3 rd=normalize(vec3(uv,-1.6));',\n'  ro.xy-=uCenter;',\n'  float t=0.0; vec3 p; float d; float hit=0.0;',\n'  for(int i=0;i<80;i++){ p=ro+rd*t; d=map(p); if(d<0.0016){hit=1.0;break;} t+=d; if(t>6.5)break; }',\n'  vec3 col=vec3(0.0); float al=0.0;',\n'  if(hit>0.5){ vec3 n=nrm(p); vec3 L=normalize(vec3(-0.45,0.72,0.55)); vec3 L2=normalize(vec3(0.6,-0.3,0.5));',\n'    float diff=max(dot(n,L),0.0); float diff2=max(dot(n,L2),0.0)*0.4;',\n'    float fres=pow(1.0-max(dot(n,-rd),0.0),3.0);',\n'    float spec=pow(max(dot(reflect(-L,n),-rd),0.0),46.0);',\n'    vec3 deep=vec3(0.42,0.06,0.42); vec3 lit=vec3(1.0,0.32,0.9);',\n'    col=mix(deep,lit,diff)+diff2*vec3(0.5,0.18,0.55); ',\n'    col+=fres*vec3(1.0,0.6,0.98)*1.15; col+=spec*vec3(1.0); col+=uEnergy*vec3(0.55,0.12,0.45);',\n'    al=1.0; }',\n'  gl_FragColor=vec4(col,al); }'].join('\\n');\n      function sh(type,src){ var s=gl.createShader(type); gl.shaderSource(s,src); gl.compileShader(s); return s; }\n      var prog=gl.createProgram(); gl.attachShader(prog,sh(gl.VERTEX_SHADER,vsrc)); gl.attachShader(prog,sh(gl.FRAGMENT_SHADER,fsrc)); gl.linkProgram(prog); gl.useProgram(prog);\n      var buf=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,buf); gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);\n      var loc=gl.getAttribLocation(prog,'p'); gl.enableVertexAttribArray(loc); gl.vertexAttribPointer(loc,2,gl.FLOAT,false,0,0);\n      var uRes=gl.getUniformLocation(prog,'uRes'), uTime=gl.getUniformLocation(prog,'uTime'), uCenter=gl.getUniformLocation(prog,'uCenter'), uVel=gl.getUniformLocation(prog,'uVel'), uEnergy=gl.getUniformLocation(prog,'uEnergy');\n      gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA); gl.clearColor(0,0,0,0);\n      layout();\n      var cx=0,cy=0, tcx=0,tcy=0, pcx=0,pcy=0, energy=0, t0=performance.now();\n      function onmove(e){ var r=cv.getBoundingClientRect(); var nx=((e.clientX-r.left)/r.width-0.5)*2.0; var ny=((e.clientY-r.top)/r.height-0.5)*2.0;\n        tcx=Math.max(-0.30,Math.min(0.30,nx*0.36)); tcy=Math.max(-0.24,Math.min(0.24,-ny*0.36)); if(fidge)fidge.style.opacity='0';\n        aura.style.transform='translate('+(nx*36).toFixed(0)+'px,'+(ny*36).toFixed(0)+'px)'; }\n      d2.on(st,'pointermove',onmove); d2.on(st,'pointerleave',function(){ tcx=0;tcy=0; aura.style.transform=''; });\n      function frame(t){ if(!run)return; var tt=(t-t0)/1000; pcx=cx; pcy=cy; cx+=(tcx-cx)*0.07; cy+=(tcy-cy)*0.07;\n        var vx=(cx-pcx), vy=(cy-pcy); if(energy>0)energy-=0.012;\n        gl.uniform2f(uRes,cv.width,cv.height); gl.uniform1f(uTime,tt); gl.uniform2f(uCenter,cx,cy); gl.uniform2f(uVel,vx*4.0,vy*4.0); gl.uniform1f(uEnergy,Math.max(0,energy));\n        gl.clear(gl.COLOR_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES,0,3); raf=requestAnimationFrame(frame); }\n      // expose energy setter\n      root.__energize=function(){ energy=1; };\n      if(!reduce){ raf=requestAnimationFrame(frame); } else { gl.uniform2f(uRes,cv.width,cv.height); gl.uniform1f(uTime,1.5); gl.uniform2f(uCenter,0,0); gl.uniform2f(uVel,0,0); gl.uniform1f(uEnergy,0.3); gl.clear(gl.COLOR_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES,0,3); }\n      var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;t0=performance.now();raf=requestAnimationFrame(frame);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.05}); io.observe(st);\n    }\n    d2.on(window,'resize',layout);\n\n    // decision interaction\n    var DECS={'0':'“Prazo é 5 dias úteis.”','1':'→ Transferir ao gerente','2':'✓ Reembolso R$ 240','3':'→ Classificar: chamado técnico'};\n    var busy=false;\n    function fire(k){ if(busy)return; busy=true; chipEls.forEach(function(c){c.style.animation='';}); var ch=root.querySelector('.chip[data-chip=\"'+k+'\"]'); if(ch)ch.classList.add('spent');\n      decis.classList.remove('show'); dc.classList.remove('on'); dv.textContent=''; if(root.__energize)root.__energize();\n      setTimeout(function(){ decis.classList.add('show'); if(lat)lat.textContent=(12+Math.floor(Math.random()*12)); var full=DECS[k]||''; var i=0; var iv=setInterval(function(){ i++; dv.textContent=full.slice(0,i); if(i>=full.length){ clearInterval(iv); dc.classList.add('on'); dc.innerHTML='<b>~2000 tok/s</b> · auditável'; } },24); },1000);\n      setTimeout(function(){ decis.classList.remove('show'); dv.textContent=''; dc.classList.remove('on'); chipEls.forEach(function(c){c.classList.remove('spent');}); busy=false; },4600);\n    }\n    chipEls.forEach(function(c){ d2.on(c,'click',function(){ if(root.__energize)root.__energize(); fire(c.getAttribute('data-chip')); }); });\n    if(!reduce){ if(!root.querySelector('style[data-cp]')){ var s=document.createElement('style'); s.setAttribute('data-cp',''); s.textContent='@keyframes cpp{0%,100%{transform:none}50%{transform:translateX(3px)}}'; root.appendChild(s);} chipEls[0].style.animation='cpp 2.4s ease-in-out infinite';\n      var io2=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting && !busy){ setTimeout(function(){ if(!busy) fire('2'); },1600); io2.disconnect(); } }); },{threshold:.2}); io2.observe(st);\n    } else { decis.classList.add('show'); dv.textContent=DECS['2']; dc.classList.add('on'); dc.innerHTML='<b>~2000 tok/s</b> · auditável'; }\n  }\n}"}}}}}}}},{"_id":"6a74166b669cd00c3487bbb7","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"HiIRGOonLUaqX6v4rjUIy","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:860px; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 40%, #160a1a 0%, #0b0711 46%, #070509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n.aura{ position:absolute; z-index:1; width:560px; height:560px; border-radius:50%; pointer-events:none;\n  background:radial-gradient(circle, rgba(250,72,220,.18) 0%, rgba(176,72,250,.07) 40%, rgba(120,40,200,0) 70%); filter:blur(10px); transition:transform .25s ease-out; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a7488; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 12px 2px #FA48DC; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:38ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#c98fbf; font-weight:400; font-variant-numeric:tabular-nums; }\n/* demo stage panel (right of core) */\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#a86aa0; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\ncanvas.demo{ position:absolute; inset:0; width:100%; height:100%; }\n.dov{ position:absolute; inset:0; padding:18px; }\n.mono{ font-family:ui-monospace,Menlo,monospace; }\n.tw{ font-family:ui-monospace,Menlo,monospace; font-size:13px; line-height:1.7; color:#e8dce6; white-space:pre-wrap; }\n.tw .cur{ display:inline-block; width:8px; height:15px; background:#FA48DC; vertical-align:-2px; margin-left:1px; animation:bl 1s steps(2) infinite; } @keyframes bl{50%{opacity:0}}\n.bub{ max-width:80%; padding:9px 13px; border-radius:12px; font-size:13px; margin:6px 0; opacity:0; transform:translateY(6px); transition:.35s; }\n.bub.in{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.12); color:#cfc9d2; }\n.bub.out{ background:rgba(250,72,220,.14); border:1px solid rgba(250,72,220,.4); color:#f0d8ec; margin-left:auto; }\n.bub.show{ opacity:1; transform:none; }\n.tag2{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:9.5px; color:#fff; background:rgba(10,4,9,.82); border:1px solid; padding:2px 6px; border-radius:5px; opacity:0; transition:.25s; white-space:nowrap; } .tag2.show{ opacity:1; }\n.dcard{ position:absolute; left:18px; right:18px; bottom:16px; background:rgba(16,8,15,.9); border:1px solid rgba(250,72,220,.4); border-radius:10px; padding:11px 13px; opacity:0; transform:translateY(8px); transition:.4s; }\n.dcard.show{ opacity:1; transform:none; } .dcard .dl{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.16em; text-transform:uppercase; color:#c26db8; } .dcard .dvv{ font-size:14px; color:#fff; margin-top:4px; }\n/* cards */\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(250,72,220,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FA48DC; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; } .fc.on .fs{ color:#a86aa0; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#c98fbf; }\n@media (max-width:1080px){ .cards{ flex-wrap:wrap; } .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); } .stage{ position:relative; width:auto; } }\n@media (prefers-reduced-motion:reduce){ .fc{ animation:none!important; } }\n`,\n  render(d2){\n    var F=[\n      ['decisao','Raciocínio','decide com o porquê','texto · regras','M2 4h12M2 8h9M2 12h11'],\n      ['voz','Voz in/out','ouve e responde falando','STT+TTS · PT·EN·ES','M2 8h2l2-5 3 10 2-6 2 3h2'],\n      ['imagem','Imagem','gera a partir do texto','difusão · sob demanda','M2 3h12v10H2z M5 7l3 3 3-4'],\n      ['visao','Visão','lê documentos e fotos','OCR + detecção','M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z'],\n      ['embeddings','Busca','encontra por significado','vetor · kNN','M7 7a4 4 0 105 5 M11 11l3 3'],\n      ['streaming','Streaming','tempo real, 128k','~2000 tok/s','M2 6h14M2 10h16M2 14h10']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"aura\" data-aura></div>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">Mostre o caso. <span class=\"g\">Ele decide.</span></h1>'+\n          '<div class=\"h1s\">A inteligência do runtime — multimodal. Escolha uma capacidade: ela acontece ao vivo.</div></div>'+\n        '<div class=\"seed\">domain · engine<br>idiomas · <b>PT·EN·ES·+40</b><br>latência · <b data-lat>17</b>ms</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> Decisão</div>'+\n          '<div class=\"st-box\"><canvas class=\"demo\" data-demo width=\"880\" height=\"500\"></canvas><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" style=\"color:#c98fbf\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\"><b>Qualquer entrada</b> · uma decisão · na hora</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]'), aura=root.querySelector('[data-aura]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), demo=root.querySelector('[data-demo]'), dov=root.querySelector('[data-dov]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var W=0,H=0,CX=0,CY=0,CBW=520,CBH=520;\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; CX=W*0.30; CY=H*0.46;\n      core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      aura.style.left=(CX-280)+'px'; aura.style.top=(CY-280)+'px';\n      stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px';\n      var DP=Math.min(1.5,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); if(gl)gl.viewport(0,0,core.width,core.height); }\n\n    // ---- gooey core shader ----\n    var gl=core.getContext('webgl',{alpha:true,premultipliedAlpha:false,antialias:true}); var setEnergy=function(){};\n    if(gl){ var vs='attribute vec2 p;void main(){gl_Position=vec4(p,0.,1.);}';\n      var fs=['precision highp float;','uniform vec2 uRes;uniform float uTime;uniform vec2 uCenter;uniform vec2 uVel;uniform float uEnergy;',\n      'float smin(float a,float b,float k){float h=clamp(.5+.5*(b-a)/k,0.,1.);return mix(b,a,h)-k*h*(1.-h);} ',\n      'float sp(vec3 p,vec3 c,float r){return length(p-c)-r;}',\n      'float map(vec3 p){float t=uTime;float k=.42;float d=sp(p,vec3(0.),.5+.04*sin(t*1.2)+uEnergy*.13);',\n      'for(int i=0;i<5;i++){float fi=float(i);float a=t*(.45+fi*.12)+fi*1.9;float rr=.40+.09*sin(t*.6+fi);',\n      'vec3 c=vec3(cos(a)*rr,sin(a*1.13)*rr*.82,sin(a*.6)*.4);c.xy+=uVel*.4*(.5+.5*sin(fi));',\n      'd=smin(d,sp(p,c,.19+.04*sin(t+fi)+uEnergy*.07),k);}return d;}',\n      'vec3 nr(vec3 p){vec2 e=vec2(.0012,0.);return normalize(vec3(map(p+e.xyy)-map(p-e.xyy),map(p+e.yxy)-map(p-e.yxy),map(p+e.yyx)-map(p-e.yyx)));}',\n      'void main(){vec2 uv=1.85*(gl_FragCoord.xy-.5*uRes)/uRes.y;vec3 ro=vec3(0.,0.,2.7);vec3 rd=normalize(vec3(uv,-1.6));ro.xy-=uCenter;',\n      'float t=0.;vec3 p;float d;float hit=0.;for(int i=0;i<80;i++){p=ro+rd*t;d=map(p);if(d<.0016){hit=1.;break;}t+=d;if(t>6.5)break;}',\n      'vec3 col=vec3(0.);float al=0.;if(hit>.5){vec3 n=nr(p);vec3 L=normalize(vec3(-.45,.72,.55));vec3 L2=normalize(vec3(.6,-.3,.5));',\n      'float df=max(dot(n,L),0.);float df2=max(dot(n,L2),0.)*.4;float fr=pow(1.-max(dot(n,-rd),0.),3.);float sc=pow(max(dot(reflect(-L,n),-rd),0.),46.);',\n      'vec3 deep=vec3(.42,.06,.42);vec3 lit=vec3(1.,.32,.9);col=mix(deep,lit,df)+df2*vec3(.5,.18,.55);col+=fr*vec3(1.,.6,.98)*1.15;col+=sc*vec3(1.);col+=uEnergy*vec3(.55,.12,.45);al=1.;}',\n      'gl_FragColor=vec4(col,al);}'].join('\\n');\n      function mk(t,s){var x=gl.createShader(t);gl.shaderSource(x,s);gl.compileShader(x);return x;}\n      var pr=gl.createProgram();gl.attachShader(pr,mk(gl.VERTEX_SHADER,vs));gl.attachShader(pr,mk(gl.FRAGMENT_SHADER,fs));gl.linkProgram(pr);gl.useProgram(pr);\n      var bf=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,bf);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);\n      var lp=gl.getAttribLocation(pr,'p');gl.enableVertexAttribArray(lp);gl.vertexAttribPointer(lp,2,gl.FLOAT,false,0,0);\n      var uRes=gl.getUniformLocation(pr,'uRes'),uTime=gl.getUniformLocation(pr,'uTime'),uCenter=gl.getUniformLocation(pr,'uCenter'),uVel=gl.getUniformLocation(pr,'uVel'),uEnergy=gl.getUniformLocation(pr,'uEnergy');\n      gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);\n      var cx=0,cy=0,tcx=0,tcy=0,pcx=0,pcy=0,energy=0,t0=performance.now();\n      setEnergy=function(){energy=1;};\n      d2.on(st,'pointermove',function(e){var r=core.getBoundingClientRect();var nx=((e.clientX-r.left)/r.width-.5)*2,ny=((e.clientY-r.top)/r.height-.5)*2;tcx=Math.max(-.3,Math.min(.3,nx*.36));tcy=Math.max(-.24,Math.min(.24,-ny*.36));aura.style.transform='translate('+(nx*30).toFixed(0)+'px,'+(ny*30).toFixed(0)+'px)';});\n      d2.on(st,'pointerleave',function(){tcx=0;tcy=0;aura.style.transform='';});\n      var crun=true; function cframe(t){ if(!crun)return; var tt=(t-t0)/1000; pcx=cx;pcy=cy; cx+=(tcx-cx)*.07;cy+=(tcy-cy)*.07; if(energy>0)energy-=.012;\n        gl.uniform2f(uRes,core.width,core.height);gl.uniform1f(uTime,tt);gl.uniform2f(uCenter,cx,cy);gl.uniform2f(uVel,(cx-pcx)*4,(cy-pcy)*4);gl.uniform1f(uEnergy,Math.max(0,energy));\n        gl.clear(gl.COLOR_BUFFER_BIT);gl.drawArrays(gl.TRIANGLES,0,3); rafc=requestAnimationFrame(cframe); }\n      var rafc=null; var ioC=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!crun){crun=true;t0=performance.now();rafc=requestAnimationFrame(cframe);} } else { crun=false; if(rafc)cancelAnimationFrame(rafc);} });},{threshold:.02});\n      if(!reduce) rafc=requestAnimationFrame(cframe); else { gl.uniform2f(uRes,core.width,core.height);gl.uniform1f(uTime,1.4);gl.uniform2f(uCenter,0,0);gl.uniform2f(uVel,0,0);gl.uniform1f(uEnergy,.25);gl.clear(gl.COLOR_BUFFER_BIT);gl.drawArrays(gl.TRIANGLES,0,3);}\n    }\n    layout(); d2.on(window,'resize',layout); if(gl){ var ioc=new IntersectionObserver(function(){},{}); }\n\n    // ---- demo stage (concrete per-modality) ----\n    var dx=demo.getContext('2d'), SW=880,SH=500, active='decisao', dtimers=[];\n    function clearD(){ dtimers.forEach(clearTimeout); dtimers=[]; dov.innerHTML=''; dx.clearRect(0,0,SW,SH); if(demoRaf)cancelAnimationFrame(demoRaf); demoRaf=null; }\n    var demoRaf=null;\n    var NAMES={decisao:'Decisão',voz:'Voz · entra e sai',imagem:'Geração de imagem',visao:'Visão computacional',embeddings:'Busca semântica',streaming:'Streaming'};\n    function run(k){ active=k; clearD(); setEnergy(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      if(k==='decisao'){ dov.innerHTML='<div class=\"tw\" data-tw></div>'; var el=dov.querySelector('[data-tw]'); var full='› cruzando sinais do caso…\\\\n› regra auditável aplicada\\\\n\\\\nDECISÃO: reter cliente — oferta + CS hoje.'; var i=0; var iv=setInterval(function(){ if(active!=='decisao'){clearInterval(iv);return;} i++; el.innerHTML=full.slice(0,i).replace(/\\\\n/g,'<br>')+'<span class=\"cur\"></span>'; if(i>=full.length){clearInterval(iv); el.innerHTML=full.replace(/\\\\n/g,'<br>');} },26); }\n      else if(k==='voz'){ dov.innerHTML='<div class=\"bub in mono\">🎙 “Cadê meu pedido 8421?”</div><div class=\"bub out mono\">“Sai amanhã 14h — rastreio enviado.”</div>';\n        dtimers.push(setTimeout(function(){ if(active==='voz')dov.querySelector('.bub.in').classList.add('show'); },250)); dtimers.push(setTimeout(function(){ if(active==='voz')dov.querySelector('.bub.out').classList.add('show'); },1500));\n        var t0=performance.now(); function wv(t){ if(active!=='voz')return; var y=SH*0.72; dx.clearRect(0,SH*0.55,SW,SH*0.45); dx.beginPath(); for(var x=0;x<=SW;x+=6){ var e=Math.sin(x*0.02+ (t-t0)*0.006)*0.5+Math.sin(x*0.05-(t-t0)*0.009)*0.3; var amp=46*(0.4+0.6*Math.abs(Math.sin((t-t0)*0.002+x*0.002))); if(x===0)dx.moveTo(x,y+e*amp); else dx.lineTo(x,y+e*amp);} var g=dx.createLinearGradient(0,0,SW,0); g.addColorStop(0,'rgba(250,72,220,.3)');g.addColorStop(.5,'#FA48DC');g.addColorStop(1,'rgba(77,207,250,.7)'); dx.strokeStyle=g; dx.lineWidth=2.4; dx.stroke(); demoRaf=requestAnimationFrame(wv);} demoRaf=requestAnimationFrame(wv); }\n      else if(k==='imagem'){ dov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:0;top:-2px;font-size:11px;color:#8a848c\">prompt · “frasco de perfume, luz suave”</div>'; var it0=performance.now(); function img(t){ if(active!=='imagem')return; var p=Math.min(1,(t-it0)/2600); var BS=200,bx=SW/2-BS/2,by=SH/2-BS/2+10; var res=Math.max(5,Math.round(5+(1-p)*42)); var cell=Math.ceil(BS/Math.ceil(BS/res)); for(var y=0;y<BS;y+=cell){ for(var x=0;x<BS;x+=cell){ var ddx=(x+cell/2-BS/2)/(BS*0.42),ddy=(y+cell/2-BS/2)/(BS*0.42); var dd=Math.sqrt(ddx*ddx+ddy*ddy*1.6); var body=Math.max(0,1-Math.abs(dd-0.5)*2.4)+(dd<0.36?0.5:0); var nz=(1-p)*(Math.random()-0.5)*1.3; var v=Math.max(0,Math.min(1,body+nz)); dx.fillStyle='rgb('+Math.round(60+v*195)+','+Math.round(14+v*60)+','+Math.round(80+v*150)+')'; dx.fillRect(bx+x,by+y,cell+1,cell+1);} } dx.strokeStyle='rgba(255,255,255,.12)'; dx.strokeRect(bx,by,BS,BS); if(p<1)demoRaf=requestAnimationFrame(img);} demoRaf=requestAnimationFrame(img); }\n      else if(k==='visao'){ var tags=[[.30,.22,.4,.22,'nota fiscal','#FA48DC',.35],[.34,.5,.26,.1,'R$ 1.240,00','#48FAA1',.7],[.55,.66,.3,.09,'CNPJ 12.345…','#4DA4FA',1.0]]; tags.forEach(function(tg,i){ var el=document.createElement('div'); el.className='tag2'; el.style.borderColor=tg[5]; el.style.color=tg[5]; el.textContent=tg[4]; el.setAttribute('data-vt',i); dov.appendChild(el); }); var vt0=performance.now(); function vis(t){ if(active!=='visao')return; var p=Math.min(1,(t-vt0)/2400); var BW=300,BH=200,bx=SW/2-BW/2,by=SH/2-BH/2+8; var g=dx.createLinearGradient(bx,by,bx+BW,by+BH); g.addColorStop(0,'#241a2a');g.addColorStop(1,'#0f0a14'); dx.fillStyle=g; dx.fillRect(bx,by,BW,BH); dx.strokeStyle='rgba(255,255,255,.05)'; for(var i2=0;i2<6;i2++)dx.strokeRect(bx+22+i2*4,by+22+i2*3,BW*.6,13); tags.forEach(function(tg,i){ if(p>tg[6]/2.2){ dx.strokeStyle=tg[5]; dx.lineWidth=1.4; dx.setLineDash([6,4]); dx.strokeRect(bx+tg[0]*BW,by+tg[1]*BH,tg[2]*BW,tg[3]*BH); dx.setLineDash([]); var el=dov.querySelector('[data-vt=\"'+i+'\"]'); if(el){ el.style.left=((bx+tg[0]*BW)/SW*100)+'%'; el.style.top=(((by+tg[1]*BH)/SH*100)-6)+'%'; el.classList.add('show'); } } }); dx.strokeStyle='rgba(255,255,255,.12)'; dx.strokeRect(bx,by,BW,BH); demoRaf=requestAnimationFrame(vis);} demoRaf=requestAnimationFrame(vis); }\n      else if(k==='embeddings'){ var pts=[]; var cl=[[SW*0.32,SH*0.4,'#FA48DC'],[SW*0.62,SH*0.36,'#48FAA1'],[SW*0.5,SH*0.68,'#4DA4FA']]; for(var i=0;i<46;i++){var c=cl[i%3];pts.push({x:Math.random()*SW,y:Math.random()*SH,tx:c[0]+(Math.random()-.5)*130,ty:c[1]+(Math.random()-.5)*110,c:c[2]});} function emb(){ if(active!=='embeddings')return; dx.clearRect(0,0,SW,SH); pts.forEach(function(p){p.x+=(p.tx-p.x)*.06;p.y+=(p.ty-p.y)*.06;dx.beginPath();dx.arc(p.x,p.y,3,0,6.28);dx.fillStyle=p.c;dx.fill();}); demoRaf=requestAnimationFrame(emb);} demoRaf=requestAnimationFrame(emb); dov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:0;bottom:-2px;font-size:11px;color:#8a848c\">vizinhos por significado</div>'; }\n      else if(k==='streaming'){ var toks=[],n=0; dov.innerHTML='<div class=\"mono\" data-sc style=\"position:absolute;right:0;bottom:-2px;font-size:20px;color:#fff\">0 tok</div>'; function str(){ if(active!=='streaming')return; dx.fillStyle='rgba(11,7,17,.28)';dx.fillRect(0,0,SW,SH); dx.globalCompositeOperation='lighter'; for(var k2=0;k2<6;k2++)toks.push({x:0,y:SH*0.2+Math.random()*SH*0.6,v:6+Math.random()*10}); n+=Math.round(40+Math.random()*90); var el=dov.querySelector('[data-sc]'); if(el)el.textContent=n.toLocaleString('pt-BR')+' tok'; for(var i=toks.length-1;i>=0;i--){var p=toks[i];p.x+=p.v;if(p.x>SW){toks.splice(i,1);continue;}dx.beginPath();dx.arc(p.x,p.y,1.8,0,6.28);dx.fillStyle='rgba(255,120,230,.8)';dx.fill();} if(toks.length>420)toks.splice(0,toks.length-420); dx.globalCompositeOperation='source-over'; demoRaf=requestAnimationFrame(str);} demoRaf=requestAnimationFrame(str); }\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run(c.getAttribute('data-f')); }); });\n    run('decisao');\n    if(!reduce){ var io2=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ /* keep current */ } });},{threshold:.2}); io2.observe(st);\n      // gentle idle hint: cycle to voz once after a bit\n      setTimeout(function(){ if(active==='decisao') run('voz'); },5200);\n    }\n  }\n}\n"}}}}}}}},{"_id":"6a7422617b69f6e94451e5ac","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"0MfwBc5HuDLpCuTOU8c_p","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction DOM_T(){ return {\n  pt:{ n_decisao:'Raciocínio', n_voz:'Voz · entra e sai', n_imagem:'Imagem', n_visao:'Visão', n_embeddings:'Busca', n_streaming:'Streaming', d_decisao:'decide com o porquê', d_voz:'conversa por voz, do início ao fim', d_imagem:'gera a partir do texto', d_visao:'lê documento e entende o contexto — até 5 fotos por vez', d_embeddings:'busca o que importa — antes de responder', d_streaming:'chega enquanto é gerado, milhares de tokens por segundo', s_decisao:'texto · regras', s_imagem:'imagem na hora', s_visao:'nota fiscal · laudo · print', s_embeddings:'sem palavra exata', nm_decisao:'Decisão', nm_voz:'Voz · entra e sai', nm_imagem:'Geração de imagem', nm_visao:'Visão computacional', nm_embeddings:'Busca semântica', nm_streaming:'Streaming', h1a:'Inteligência multimodal.', h1b:'Nativa na runtime.', h1s:'Texto, voz, imagem e visão — uma decisão auditável, na hora. Escolha a capacidade: ela acontece ao vivo.', seedA:'domain · engine', seedB:'idiomas · <b>PT·EN·ES·+40</b>', seedC:'latência · <b data-lat>17</b>ms', payoffA:'Qualquer entrada', payoffB:'uma decisão · na hora', dec_l1:'› cruzando sinais do caso…', dec_l2:'› regra auditável aplicada', dec_l3:'DECISÃO: reter cliente — oferta + CS hoje.', voz_in:'▸ entra · “Cadê meu pedido 8421?”', voz_out:'“Sai amanhã 14h — rastreio enviado.”', if_gera:'gera', if_variacoes:'variações', if_edita:'edita', if_estilo:'estilo', if_demanda:'sob demanda', img_gera_q:'prompt: \"frasco, luz suave\"', img_difusao:'difusão', img_gerada:'imagem gerada', img_var_q:'1 prompt → 4 variações', img_regiao:'região', img_rotulo:'rótulo central', img_acao:'ação', img_regenerar:'regenerar', img_regenerado:'trecho regenerado', img_estilo_q:'mesma forma · novo tom', img_estilo_lbl:'estilo', img_tom_magenta:'tom magenta', img_tom_violeta:'tom violeta', img_tom_rosa:'tom rosa', img_demanda_q:'gerado sob demanda', img_demanda_small:'imagens · on-request', gen_sing:'geração', gen_plur:'gerações', vis_nf:'nota fiscal', emb_label:'vizinhos por significado', pf1v:'+3B', pf1l:'tokens/mês · 1 cliente', pf2v:'~2.000/s', pf2l:'tokens entregues', pf3v:'até 5', pf3l:'imagens por chamada' },\n  en:{ n_decisao:'Reasoning', n_voz:'Voice · in and out', n_imagem:'Image', n_visao:'Vision', n_embeddings:'Search', n_streaming:'Streaming', d_decisao:'decides with the why', d_voz:'talks by voice, start to finish', d_imagem:'generates from text', d_visao:'reads the document, gets the context — up to 5 photos at once', d_embeddings:'finds what matters — before it answers', d_streaming:'arrives as it is generated, thousands of tokens per second', s_decisao:'text · rules', s_imagem:'images on the spot', s_visao:'invoice · report · screenshot', s_embeddings:'no exact keywords', nm_decisao:'Decision', nm_voz:'Voice · in and out', nm_imagem:'Image generation', nm_visao:'Computer vision', nm_embeddings:'Semantic search', nm_streaming:'Streaming', h1a:'Multimodal intelligence.', h1b:'Native to the runtime.', h1s:'Text, voice, image and vision — one auditable decision, on the spot. Pick a capability: it happens live.', seedA:'domain · engine', seedB:'languages · <b>PT·EN·ES·+40</b>', seedC:'latency · <b data-lat>17</b>ms', payoffA:'Any input', payoffB:'one decision · on the spot', dec_l1:'› cross-referencing case signals…', dec_l2:'› auditable rule applied', dec_l3:'DECISION: retain customer — offer + CS today.', voz_in:'▸ in · “Where is my order 8421?”', voz_out:'“Ships tomorrow 2pm — tracking sent.”', if_gera:'generate', if_variacoes:'variations', if_edita:'edit', if_estilo:'style', if_demanda:'on demand', img_gera_q:'prompt: \"bottle, soft light\"', img_difusao:'diffusion', img_gerada:'image generated', img_var_q:'1 prompt → 4 variations', img_regiao:'region', img_rotulo:'center label', img_acao:'action', img_regenerar:'regenerate', img_regenerado:'region regenerated', img_estilo_q:'same shape · new tone', img_estilo_lbl:'style', img_tom_magenta:'magenta tone', img_tom_violeta:'violet tone', img_tom_rosa:'pink tone', img_demanda_q:'generated on demand', img_demanda_small:'images · on-request', gen_sing:'generation', gen_plur:'generations', vis_nf:'invoice', emb_label:'neighbors by meaning', pf1v:'+3B', pf1l:'tokens/mo · 1 client', pf2v:'~2,000/s', pf2l:'tokens delivered', pf3v:'up to 5', pf3l:'images per call' },\n  es:{ n_decisao:'Razonamiento', n_voz:'Voz · entra y sale', n_imagem:'Imagen', n_visao:'Visión', n_embeddings:'Búsqueda', n_streaming:'Streaming', d_decisao:'decide con el porqué', d_voz:'conversa por voz, de principio a fin', d_imagem:'genera a partir del texto', d_visao:'lee el documento y entiende el contexto — hasta 5 fotos a la vez', d_embeddings:'busca lo que importa — antes de responder', d_streaming:'llega mientras se genera, miles de tokens por segundo', s_decisao:'texto · reglas', s_imagem:'imagen al instante', s_visao:'factura · informe · captura', s_embeddings:'sin palabra exacta', nm_decisao:'Decisión', nm_voz:'Voz · entra y sale', nm_imagem:'Generación de imagen', nm_visao:'Visión por computadora', nm_embeddings:'Búsqueda semántica', nm_streaming:'Streaming', h1a:'Inteligencia multimodal.', h1b:'Nativa en el runtime.', h1s:'Texto, voz, imagen y visión — una decisión auditable, al instante. Elige la capacidad: sucede en vivo.', seedA:'domain · engine', seedB:'idiomas · <b>PT·EN·ES·+40</b>', seedC:'latencia · <b data-lat>17</b>ms', payoffA:'Cualquier entrada', payoffB:'una decisión · al instante', dec_l1:'› cruzando señales del caso…', dec_l2:'› regla auditable aplicada', dec_l3:'DECISIÓN: retener cliente — oferta + CS hoy.', voz_in:'▸ entra · “¿Dónde está mi pedido 8421?”', voz_out:'“Sale mañana 14h — rastreo enviado.”', if_gera:'genera', if_variacoes:'variaciones', if_edita:'edita', if_estilo:'estilo', if_demanda:'bajo demanda', img_gera_q:'prompt: \"frasco, luz suave\"', img_difusao:'difusión', img_gerada:'imagen generada', img_var_q:'1 prompt → 4 variaciones', img_regiao:'región', img_rotulo:'etiqueta central', img_acao:'acción', img_regenerar:'regenerar', img_regenerado:'zona regenerada', img_estilo_q:'misma forma · nuevo tono', img_estilo_lbl:'estilo', img_tom_magenta:'tono magenta', img_tom_violeta:'tono violeta', img_tom_rosa:'tono rosa', img_demanda_q:'generado bajo demanda', img_demanda_small:'imágenes · on-request', gen_sing:'generación', gen_plur:'generaciones', vis_nf:'factura', emb_label:'vecinos por significado', pf1v:'+3B', pf1l:'tokens/mes · 1 cliente', pf2v:'~2.000/s', pf2l:'tokens entregados', pf3v:'hasta 5', pf3l:'imágenes por llamada' }\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #150a19 0%, #0b0711 46%, #070509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\n.aura{ position:absolute; z-index:1; width:560px; height:560px; border-radius:50%; pointer-events:none;\n  background:radial-gradient(circle, rgba(250,72,220,.16) 0%, rgba(176,72,250,.06) 42%, rgba(120,40,200,0) 70%); filter:blur(12px); transition:transform .25s ease-out; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a7488; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA48DC; box-shadow:0 0 12px 2px #FA48DC; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:38ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f56; line-height:1.7; }\n.seed b{ color:#c98fbf; font-weight:400; font-variant-numeric:tabular-nums; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#a86aa0; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\ncanvas.demo{ position:absolute; inset:0; width:100%; height:100%; }\n.dov{ position:absolute; inset:0; padding:18px; }\n.mono{ font-family:ui-monospace,Menlo,monospace; }\n.tw{ font-family:ui-monospace,Menlo,monospace; font-size:13px; line-height:1.7; color:#e8dce6; white-space:pre-wrap; }\n.tw .cur{ display:inline-block; width:8px; height:15px; background:#FA48DC; vertical-align:-2px; margin-left:1px; animation:bl 1s steps(2) infinite; } @keyframes bl{50%{opacity:0}}\n.bub{ max-width:80%; padding:9px 13px; border-radius:12px; font-size:13px; margin:6px 0; opacity:0; transform:translateY(6px); transition:.35s; }\n.bub.in{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.12); color:#cfc9d2; }\n.bub.out{ background:rgba(250,72,220,.14); border:1px solid rgba(250,72,220,.4); color:#f0d8ec; margin-left:auto; }\n.bub.show{ opacity:1; transform:none; }\n.tag2{ position:absolute; font-family:ui-monospace,Menlo,monospace; font-size:9.5px; color:#fff; background:rgba(10,4,9,.82); border:1px solid; padding:2px 6px; border-radius:5px; opacity:0; transition:.25s; white-space:nowrap; } .tag2.show{ opacity:1; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(250,72,220,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FA48DC; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; } .fc.on .fs{ color:#a86aa0; }\n.proof{ position:absolute; left:0; right:0; bottom:26px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.06em; color:#8a848c; } .proof b{ color:#c98fbf; font-weight:500; }\n.payoff{ position:absolute; left:0; right:0; bottom:8px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#c98fbf; }\n@media (max-width:900px){\n  :host{ height:auto; }\n  .st{ min-height:0; height:auto; display:flex; flex-direction:column; align-items:stretch; padding:36px 20px 26px; gap:22px; }\n  .aura{ display:none; }\n  .head{ position:relative; top:auto; left:auto; order:1; }\n  .h1s{ max-width:none; }\n  .seed{ position:relative; top:auto; right:auto; text-align:left; order:2; }\n  canvas.core{ position:relative !important; left:auto !important; top:auto !important; margin:0 auto; order:3; }\n  .stage{ position:relative !important; left:auto !important; top:auto !important; width:100%; max-width:440px; margin:0 auto; order:4; }\n  .cards{ position:relative; left:auto; right:auto; bottom:auto; padding:0; flex-wrap:wrap; order:5; }\n  .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); }\n  .proof{ position:relative; bottom:auto; left:auto; right:auto; order:6; margin-top:6px; }\n  .payoff{ position:relative; bottom:auto; order:7; margin-top:2px; }\n}\n@media (max-width:560px){\n  .st{ padding:28px 16px 22px; }\n  .h1{ font-size:clamp(23px,7vw,30px); }\n  .fc{ flex:1 1 42%; padding:13px 12px 12px; }\n  .seed{ display:none; }\n}\n.ichips{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:14px; }\n.ichip{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.04em; text-transform:uppercase; color:#8a848c; padding:4px 9px; border:1px solid rgba(255,255,255,.12); border-radius:20px; cursor:pointer; transition:.2s; white-space:nowrap; }\n.ichip:hover{ color:#c98fbf; border-color:rgba(250,72,220,.4); }\n.ichip.on{ color:#0b0711; background:#FA48DC; border-color:#FA48DC; }\n.idov{ position:relative; font-family:ui-monospace,Menlo,monospace; }\n.rec{ font-size:12.5px; line-height:1.7; } .rec .k{ color:#8a848c; } .rec .v{ color:#EDECEF; } .rec .t{ color:#FA48DC; font-size:10px; }\n.chk{ opacity:0; transition:.3s; color:#FA48DC; font-size:12.5px; } .chk.on{ opacity:1; }\n.q{ font-size:13px; color:#EDECEF; } .q .cur{ display:inline-block; width:8px; height:15px; background:#FA48DC; vertical-align:-2px; margin-left:1px; animation:bl 1s steps(2) infinite; }\n.prog{ margin-top:12px; height:4px; border-radius:2px; background:rgba(255,255,255,.08); overflow:hidden; } .prog i{ display:block; height:100%; width:0; background:#FA48DC; transition:width .12s linear; }\n.vgrid{ display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:10px; } .vcell{ height:44px; border:1px solid rgba(255,255,255,.1); border-radius:8px; position:relative; overflow:hidden; opacity:0; transform:scale(.9); transition:.4s; } .vcell.on{ opacity:1; transform:none; } .vcell b{ position:absolute; bottom:4px; left:7px; font-size:9px; color:rgba(255,255,255,.65); font-weight:400; }\n.sw{ display:flex; gap:7px; margin-top:12px; } .sw i{ width:26px; height:26px; border-radius:6px; display:inline-block; opacity:0; transform:translateY(4px); transition:.32s; } .sw i.on{ opacity:1; transform:none; }\n.big{ position:absolute; left:0; right:0; top:52%; transform:translateY(-50%); text-align:center; font-size:clamp(26px,4vw,42px); color:#F4F2F6; font-variant-numeric:tabular-nums; letter-spacing:-.02em; } .big small{ display:block; font-size:10px; letter-spacing:.14em; color:#8a848c; text-transform:uppercase; margin-top:6px; }\n@media (prefers-reduced-motion:reduce){ .fc{ animation:none!important; } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=DOM_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['decisao',t('n_decisao'),t('d_decisao'),t('s_decisao'),'M2 4h12M2 8h9M2 12h11'],\n      ['voz',t('n_voz'),t('d_voz'),'STT+TTS · PT·EN·ES','M2 8h2l2-5 3 10 2-6 2 3h2'],\n      ['imagem',t('n_imagem'),t('d_imagem'),t('s_imagem'),'M2 3h12v10H2z M5 7l3 3 3-4'],\n      ['visao',t('n_visao'),t('d_visao'),t('s_visao'),'M8 4C3 4 1 8 1 8s2 4 7 4 7-4 7-4-2-4-7-4z M8 6a2 2 0 100 4 2 2 0 000-4z'],\n      ['embeddings',t('n_embeddings'),t('d_embeddings'),t('s_embeddings'),'M7 7a4 4 0 105 5 M11 11l3 3'],\n      ['streaming',t('n_streaming'),t('d_streaming'),'~2000 tok/s','M2 6h14M2 10h16M2 14h10']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"aura\" data-aura></div>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Domain</div>'+\n          '<h1 class=\"h1\">'+t('h1a')+' <span class=\"g\">'+t('h1b')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('h1s')+'</div></div>'+\n        '<div class=\"seed\">'+t('seedA')+'<br>'+t('seedB')+'<br>'+t('seedC')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('nm_decisao')+'</div>'+\n          '<div class=\"st-box\"><canvas class=\"demo\" data-demo width=\"880\" height=\"500\"></canvas><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" style=\"color:#c98fbf\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"proof\" data-proof><b>'+t('pf1v')+'</b> '+t('pf1l')+' · <b>'+t('pf2v')+'</b> '+t('pf2l')+' · <b>'+t('pf3v')+'</b> '+t('pf3l')+'</div>'+\n        '<div class=\"payoff\"><b>'+t('payoffA')+'</b> · '+t('payoffB')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=DOM_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]'), aura=root.querySelector('[data-aura]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), demo=root.querySelector('[data-demo]'), dov=root.querySelector('[data-dov]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1, R=1;\n    var pts=[];\n    function build(){ pts=[]; var step=Math.max(26, Math.round(CBW/16)); var half=CBW/2;\n      for(var gy=-half+step/2; gy<half; gy+=step){ for(var gx=-half+step/2; gx<half; gx+=step){ var d=Math.hypot(gx,gy); if(d>half-6) continue; pts.push({x:gx,y:gy,a:Math.atan2(gy,gx),d:d}); } } R=half; }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; var mobile=W<=900;\n      if(mobile){ CBW=CBH=Math.min(Math.round(W-40),380);\n        core.style.left=''; core.style.top='';\n        aura.style.left=''; aura.style.top='';\n        stage.style.left=''; stage.style.top='';\n        if(head)head.style.left=''; if(seed)seed.style.right='';\n        CX=W/2; CY=CBH/2;\n      } else { CBW=560; CBH=560; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; CY=H*0.46;\n        core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px';\n        aura.style.left=(CX-280)+'px'; aura.style.top=(CY-280)+'px';\n        stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px';\n        if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px';\n      }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); build(); }\n    layout(); d2.on(window,'resize',layout);\n\n    // mouse in core-local coords (0,0 = center); rest gently orbits\n    var mx=0,my=0,tmx=9999,tmy=0, hasMouse=false, energy=0, t0=performance.now(), crun=true, rafc=null;\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); tmx=(e.clientX-r.left)-CBW/2; tmy=(e.clientY-r.top)-CBH/2; hasMouse=true;\n      aura.style.transform='translate('+(tmx*0.10).toFixed(0)+'px,'+(tmy*0.10).toFixed(0)+'px)'; });\n    d2.on(st,'pointerleave',function(){ hasMouse=false; aura.style.transform=''; });\n    function cframe(t){ if(!crun)return; var tt=(t-t0)/1000;\n      // target point = mouse, or a slow orbiting point when idle (keeps it alive, satisfying)\n      var gx,gy; if(hasMouse){ mx+=(tmx-mx)*0.12; my+=(tmy-my)*0.12; gx=mx; gy=my; } else { gx=Math.cos(tt*0.5)*R*0.42; gy=Math.sin(tt*0.5*1.1)*R*0.32; mx+=(gx-mx)*0.05; my+=(gy-my)*0.05; }\n      if(energy>0)energy-=0.012;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      fx.globalCompositeOperation='lighter';\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; var dx=mx-p.x, dy=my-p.y; var dd=Math.hypot(dx,dy);\n        var ta=Math.atan2(dy,dx); // smooth angle lerp\n        var diff=Math.atan2(Math.sin(ta-p.a),Math.cos(ta-p.a)); p.a+=diff*0.14;\n        var inten=Math.max(0, 1-dd/(R*0.9)); inten=inten*inten; var glow=inten+energy*0.5;\n        var len=5+inten*15+energy*4; var al=0.10+glow*0.8; if(al>1)al=1;\n        var r2=250, g2=72+Math.round(glow*120), b2=220;\n        fx.strokeStyle='rgba('+r2+','+g2+','+b2+','+al.toFixed(3)+')'; fx.lineWidth=1.1+inten*0.9; fx.lineCap='round';\n        var cx=Math.cos(p.a), cy=Math.sin(p.a);\n        fx.beginPath(); fx.moveTo(p.x-cx*len*0.5, p.y-cy*len*0.5); fx.lineTo(p.x+cx*len*0.5, p.y+cy*len*0.5); fx.stroke();\n      }\n      // core node at the focus\n      var pulse=0.5+0.5*Math.sin(tt*1.6);\n      var g=fx.createRadialGradient(mx,my,0,mx,my,40+energy*30); g.addColorStop(0,'rgba(255,180,240,'+(0.5+energy*0.4)+')'); g.addColorStop(1,'rgba(250,72,220,0)');\n      fx.fillStyle=g; fx.beginPath(); fx.arc(mx,my,40+energy*30,0,6.28); fx.fill();\n      fx.fillStyle='rgba(255,225,248,'+(0.85)+')'; fx.beginPath(); fx.arc(mx,my,3.5+pulse*1.5+energy*3,0,6.28); fx.fill();\n      fx.restore(); fx.globalCompositeOperation='source-over';\n      rafc=requestAnimationFrame(cframe);\n    }\n    if(!reduce){ rafc=requestAnimationFrame(cframe); } else { /* static: point outward */ fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2); pts.forEach(function(p){ fx.strokeStyle='rgba(250,110,220,0.4)'; fx.lineWidth=1.2; var cx=Math.cos(p.a),cy=Math.sin(p.a); fx.beginPath(); fx.moveTo(p.x-cx*5,p.y-cy*5); fx.lineTo(p.x+cx*5,p.y+cy*5); fx.stroke(); }); fx.restore(); }\n    var ioC=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!crun&&!reduce){crun=true;t0=performance.now();rafc=requestAnimationFrame(cframe);} } else { crun=false; if(rafc)cancelAnimationFrame(rafc); } }); },{threshold:.02}); ioC.observe(st);\n    function setEnergy(){ energy=1; }\n\n    // ---- demo stage ----\n    var dx=demo.getContext('2d'), SW=880,SH=500, active='decisao', dtimers=[], demoRaf=null;\n    function clearD(){ dtimers.forEach(clearTimeout); dtimers=[]; dov.innerHTML=''; dx.clearRect(0,0,SW,SH); if(demoRaf)cancelAnimationFrame(demoRaf); demoRaf=null; }\n    var NAMES={decisao:t('nm_decisao'),voz:t('nm_voz'),imagem:t('nm_imagem'),visao:t('nm_visao'),embeddings:t('nm_embeddings'),streaming:t('nm_streaming')};\n    function run(k){ active=k; clearD(); setEnergy(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      if(k==='decisao'){ dov.innerHTML='<div class=\"tw\" data-tw></div>'; var el=dov.querySelector('[data-tw]'); var full=''+t('dec_l1')+'\\\\n'+t('dec_l2')+'\\\\n\\\\n'+t('dec_l3')+''; var i=0; var iv=setInterval(function(){ if(active!=='decisao'){clearInterval(iv);return;} i++; el.innerHTML=full.slice(0,i).replace(/\\\\n/g,'<br>')+'<span class=\"cur\"></span>'; if(i>=full.length){clearInterval(iv); el.innerHTML=full.replace(/\\\\n/g,'<br>');} },26); }\n      else if(k==='voz'){ dov.innerHTML='<div class=\"bub in mono\">'+t('voz_in')+'</div><div class=\"bub out mono\">'+t('voz_out')+'</div>';\n        dtimers.push(setTimeout(function(){ if(active==='voz')dov.querySelector('.bub.in').classList.add('show'); },250)); dtimers.push(setTimeout(function(){ if(active==='voz')dov.querySelector('.bub.out').classList.add('show'); },1500));\n        var vt0=performance.now(); function wv(t){ if(active!=='voz')return; var y=SH*0.72; dx.clearRect(0,SH*0.55,SW,SH*0.45); dx.beginPath(); for(var x=0;x<=SW;x+=6){ var e=Math.sin(x*0.02+(t-vt0)*0.006)*0.5+Math.sin(x*0.05-(t-vt0)*0.009)*0.3; var amp=46*(0.4+0.6*Math.abs(Math.sin((t-vt0)*0.002+x*0.002))); if(x===0)dx.moveTo(x,y+e*amp); else dx.lineTo(x,y+e*amp);} var g=dx.createLinearGradient(0,0,SW,0); g.addColorStop(0,'rgba(250,72,220,.3)');g.addColorStop(.5,'#FA48DC');g.addColorStop(1,'rgba(77,207,250,.7)'); dx.strokeStyle=g; dx.lineWidth=2.4; dx.stroke(); demoRaf=requestAnimationFrame(wv);} demoRaf=requestAnimationFrame(wv); }\n      else if(k==='imagem'){\n        var IMAG=[250,72,220], INOISE=[92,108,124], IPAL=[[250,72,220],[176,72,250],[247,120,192]];\n        var iR=165, iCX=SW/2, iCY=SH/2, iN=180, iPts=[], ienergy=1;\n        function iEase(t){ return t<0.5? 2*t*t : 1-Math.pow(-2*t+2,2)/2; }\n        function iMix(a,b,f){ if(f<0)f=0; if(f>1)f=1; return [a[0]+(b[0]-a[0])*f,a[1]+(b[1]-a[1])*f,a[2]+(b[2]-a[2])*f]; }\n        function iInBottle(x,y){ var ax=Math.abs(x); if(y<-0.55){ return ax<0.18&&y>-0.76; } if(y<-0.36){ return ax<0.115; } if(y<0.70){ if(y>0.56){ var dy=(y-0.56)/0.14; return ax<0.30*Math.sqrt(Math.max(0,1-dy*dy)); } return ax<0.30; } return false; }\n        function iRand(){ for(var g=0;g<60;g++){ var x=(Math.random()*2-1)*0.34,y=(Math.random()*2-1)*0.80; if(iInBottle(x,y))return [x,y]; } return [0,0]; }\n        for(var ii=0;ii<iN;ii++){ var s=iRand(); var na=Math.random()*6.2832,nr=Math.sqrt(Math.random())*0.92; iPts.push({sx:s[0],sy:s[1],nx:Math.cos(na)*nr,ny:Math.sin(na)*nr,ph:Math.random()*6.2832,delay:Math.random()*0.85,emit:Math.random(),q:ii%4,x:Math.cos(na)*nr,y:Math.sin(na)*nr}); }\n        var imode='gera', imodeStart=performance.now(), igen=0, ilastLoop=-1, iTimers=[], iIntervals=[];\n        function iClearFacet(){ iTimers.forEach(clearTimeout); iTimers=[]; iIntervals.forEach(clearInterval); iIntervals=[]; }\n        var IFACETS=[['gera',t('if_gera')],['variacoes',t('if_variacoes')],['edita',t('if_edita')],['estilo',t('if_estilo')],['demanda',t('if_demanda')]];\n        dov.innerHTML='<div class=\"ichips\" data-ichips>'+IFACETS.map(function(f){ return '<div class=\"ichip\" data-if=\"'+f[0]+'\">'+f[1]+'</div>'; }).join('')+'</div><div class=\"idov\" data-idov></div>';\n        var idov=dov.querySelector('[data-idov]');\n        function iFacet(f){ imode=f; imodeStart=performance.now(); igen=0; ilastLoop=-1; ienergy=1; setEnergy(); iClearFacet();\n          Array.prototype.slice.call(dov.querySelectorAll('.ichip')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-if')===f); });\n          if(f==='gera'){ idov.innerHTML='<div class=\"q\">'+t('img_gera_q')+'<span class=\"cur\"></span></div><div class=\"rec\" style=\"margin-top:10px\"><span class=\"k\">'+t('img_difusao')+'</span> <span class=\"v\" data-p>0%</span> <span class=\"t\">de-noise</span></div><div class=\"prog\"><i data-bar></i></div><div class=\"chk\" data-chk style=\"margin-top:10px\">◆ '+t('img_gerada')+'</div>';\n            var pc=0,iv=setInterval(function(){ if(active!=='imagem'||imode!=='gera'){clearInterval(iv);return;} var el=idov.querySelector('[data-p]'),bar=idov.querySelector('[data-bar]'); if(!el||!el.isConnected){clearInterval(iv);return;} pc+=Math.round(3+Math.random()*7); if(pc>=100){pc=100;clearInterval(iv);var c=idov.querySelector('[data-chk]');if(c)c.classList.add('on');} el.textContent=pc+'%'; if(bar)bar.style.width=pc+'%'; },110); iIntervals.push(iv); }\n          else if(f==='variacoes'){ idov.innerHTML='<div class=\"q\" style=\"font-size:12px\">'+t('img_var_q')+'</div><div class=\"vgrid\">'+[1,2,3,4].map(function(n){ var c=IPAL[(n-1)%3]; return '<div class=\"vcell\" data-v'+n+' style=\"background:linear-gradient(135deg,rgba(250,72,220,.16),rgba('+c[0]+','+c[1]+','+c[2]+',.14))\"><b>v'+n+'</b></div>'; }).join('')+'</div>';\n            [1,2,3,4].forEach(function(n,i){ iTimers.push(setTimeout(function(){ if(active!=='imagem'||imode!=='variacoes')return; var e=idov.querySelector('[data-v'+n+']'); if(e)e.classList.add('on'); },350+i*260)); }); }\n          else if(f==='edita'){ idov.innerHTML='<div class=\"rec\"><div><span class=\"k\">'+t('img_regiao')+'</span> <span class=\"v\">'+t('img_rotulo')+'</span></div><div><span class=\"k\">'+t('img_acao')+'</span> <span class=\"v\">'+t('img_regenerar')+'</span> <span class=\"t\">inpaint</span></div></div><div class=\"prog\"><i data-bar></i></div><div class=\"chk\" data-chk style=\"margin-top:10px\">◆ '+t('img_regenerado')+'</div>';\n            var pc=0,iv=setInterval(function(){ if(active!=='imagem'||imode!=='edita'){clearInterval(iv);return;} var bar=idov.querySelector('[data-bar]'); if(!bar||!bar.isConnected){clearInterval(iv);return;} pc+=6; if(pc>=100){pc=100;clearInterval(iv);var c=idov.querySelector('[data-chk]');if(c)c.classList.add('on');} bar.style.width=pc+'%'; },90); iIntervals.push(iv); }\n          else if(f==='estilo'){ idov.innerHTML='<div class=\"q\" style=\"font-size:12px\">'+t('img_estilo_q')+'</div><div class=\"rec\" style=\"margin-top:8px\"><span class=\"k\">'+t('img_estilo_lbl')+'</span> <span class=\"v\" data-s>'+t('img_tom_magenta')+'</span></div><div class=\"sw\"><i data-c0 style=\"background:#FA48DC\"></i><i data-c1 style=\"background:#B048FA\"></i><i data-c2 style=\"background:#F778C0\"></i></div>';\n            ['data-c0','data-c1','data-c2'].forEach(function(h,i){ iTimers.push(setTimeout(function(){ if(active!=='imagem'||imode!=='estilo')return; var e=idov.querySelector('['+h+']'); if(e)e.classList.add('on'); },400+i*260)); });\n            var styles=[t('img_tom_magenta'),t('img_tom_violeta'),t('img_tom_rosa')],si=0,iv=setInterval(function(){ if(active!=='imagem'||imode!=='estilo'){clearInterval(iv);return;} var el=idov.querySelector('[data-s]'); if(!el||!el.isConnected){clearInterval(iv);return;} si=(si+1)%styles.length; el.textContent=styles[si]; },1400); iIntervals.push(iv); }\n          else if(f==='demanda'){ idov.innerHTML='<div class=\"q\" style=\"font-size:12px\">'+t('img_demanda_q')+'</div><div class=\"big\"><span data-b>0</span><small>'+t('img_demanda_small')+'</small></div>';\n            var n=0,iv=setInterval(function(){ if(active!=='imagem'||imode!=='demanda'){clearInterval(iv);return;} var el=idov.querySelector('[data-b]'); if(!el||!el.isConnected){clearInterval(iv);return;} n+=Math.round(1+Math.random()*3); el.textContent=n.toLocaleString('pt-BR'); },260); iIntervals.push(iv); }\n        }\n        function iframe(t){ if(active!=='imagem')return; if(!demo.isConnected)return; var mt=(t-imodeStart)/1000; if(ienergy>0)ienergy-=0.01;\n          dx.clearRect(0,0,SW,SH); dx.save(); dx.translate(iCX,iCY);\n          var loopLen=2.6,phase=0; if(imode==='demanda'){ phase=(mt%loopLen)/loopLen; var li=Math.floor(mt/loopLen); if(li!==ilastLoop){ilastLoop=li;igen++;} }\n          dx.globalCompositeOperation='lighter';\n          for(var i=0;i<iPts.length;i++){ var p=iPts[i]; var tgx=p.sx*iR,tgy=p.sy*iR,col=IMAG,resF=1;\n            if(imode==='gera'){ var rp=iEase(Math.max(0,Math.min(1,(mt-p.delay)/1.05))); tgx=(p.nx*iR)+(p.sx*iR-p.nx*iR)*rp; tgy=(p.ny*iR)+(p.sy*iR-p.ny*iR)*rp; col=iMix(INOISE,IMAG,rp); resF=rp; }\n            else if(imode==='variacoes'){ var bf=iEase(Math.max(0,Math.min(1,mt/1.15))); var qx=(p.q%2?1:-1)*0.42*iR,qy=(p.q<2?-1:1)*0.40*iR; var mvx=qx+p.sx*0.46*iR,mvy=qy+p.sy*0.46*iR; tgx=p.sx*iR+(mvx-p.sx*iR)*bf; tgy=p.sy*iR+(mvy-p.sy*iR)*bf; col=IPAL[p.q%3]; }\n            else if(imode==='edita'){ if(p.sy>-0.14&&p.sy<0.16){ var e=(mt%2.6)/2.6,k; if(e<0.42){k=1-(e/0.42);}else{k=(e-0.42)/0.58;} k=iEase(k); tgx=(p.nx*iR)+(p.sx*iR-p.nx*iR)*k; tgy=(p.ny*iR)+(p.sy*iR-p.ny*iR)*k; col=iMix(INOISE,IMAG,k); resF=0.4+k*0.6; } }\n            else if(imode==='estilo'){ var u=(p.sy*0.9+mt*0.45); var seg=((u%1)+1)%1; var idx=Math.floor(seg*3)%3; var nx=(idx+1)%3; var fr=(seg*3)%1; col=iMix(IPAL[idx],IPAL[nx],fr); }\n            else if(imode==='demanda'){ if(phase*1.28>p.emit){ tgx=p.sx*iR; tgy=p.sy*iR; col=IMAG; } else { tgx=-iR*1.15+p.emit*iR*0.25; tgy=p.sy*iR+Math.sin(mt*3+p.ph)*iR*0.02; col=iMix(INOISE,IMAG,0.3); resF=0.35; } }\n            p.x+=(tgx-p.x)*0.10; p.y+=(tgy-p.y)*0.10;\n            var inten=0.5; if(imode==='gera')inten=0.30+resF*0.4;\n            var a=(0.22+inten*0.62+ienergy*0.22)*resF; if(a>1)a=1; if(a<0)a=0; var sz=1.6+inten*2.0;\n            dx.fillStyle='rgba('+(col[0]|0)+','+(col[1]|0)+','+(col[2]|0)+','+a.toFixed(3)+')'; dx.beginPath(); dx.arc(p.x,p.y,sz,0,6.2832); dx.fill();\n          }\n          dx.restore(); dx.globalCompositeOperation='source-over';\n          if(imode==='demanda'){ dx.save(); dx.font='12px ui-monospace,monospace'; dx.textAlign='center'; dx.fillStyle='rgba(250,72,220,.85)'; dx.fillText(igen+' '+(igen===1?t('gen_sing'):t('gen_plur')), iCX, iCY+iR*0.92); dx.restore(); }\n          demoRaf=requestAnimationFrame(iframe);\n        }\n        var iorder=['gera','variacoes','edita','estilo','demanda'], icur=0;\n        function iAdvance(){ if(active!=='imagem')return; icur=(icur+1)%iorder.length; iFacet(iorder[icur]); dtimers.push(setTimeout(iAdvance,4200)); }\n        Array.prototype.slice.call(dov.querySelectorAll('.ichip')).forEach(function(c){ d2.on(c,'click',function(){ var f=c.getAttribute('data-if'); icur=iorder.indexOf(f); iFacet(f); }); });\n        demoRaf=requestAnimationFrame(iframe);\n        iFacet('gera');\n        if(!reduce){ dtimers.push(setTimeout(iAdvance,4200)); }\n      }\n      else if(k==='visao'){ var tags=[[.30,.22,.4,.22,t('vis_nf'),'#FA48DC',.35],[.34,.5,.26,.1,'R$ 1.240,00','#48FAA1',.7],[.55,.66,.3,.09,'CNPJ 12.345…','#4DA4FA',1.0]]; tags.forEach(function(tg,i){ var el=document.createElement('div'); el.className='tag2'; el.style.borderColor=tg[5]; el.style.color=tg[5]; el.textContent=tg[4]; el.setAttribute('data-vt',i); dov.appendChild(el); }); var vt0=performance.now(); function vis(t){ if(active!=='visao')return; var p=Math.min(1,(t-vt0)/2400); var BW=300,BH=200,bx=SW/2-BW/2,by=SH/2-BH/2+8; var g=dx.createLinearGradient(bx,by,bx+BW,by+BH); g.addColorStop(0,'#241a2a');g.addColorStop(1,'#0f0a14'); dx.fillStyle=g; dx.fillRect(bx,by,BW,BH); dx.strokeStyle='rgba(255,255,255,.05)'; for(var i2=0;i2<6;i2++)dx.strokeRect(bx+22+i2*4,by+22+i2*3,BW*.6,13); tags.forEach(function(tg,i){ if(p>tg[6]/2.2){ dx.strokeStyle=tg[5]; dx.lineWidth=1.4; dx.setLineDash([6,4]); dx.strokeRect(bx+tg[0]*BW,by+tg[1]*BH,tg[2]*BW,tg[3]*BH); dx.setLineDash([]); var el=dov.querySelector('[data-vt=\"'+i+'\"]'); if(el){ el.style.left=((bx+tg[0]*BW)/SW*100)+'%'; el.style.top=(((by+tg[1]*BH)/SH*100)-6)+'%'; el.classList.add('show'); } } }); dx.strokeStyle='rgba(255,255,255,.12)'; dx.strokeRect(bx,by,BW,BH); demoRaf=requestAnimationFrame(vis);} demoRaf=requestAnimationFrame(vis); }\n      else if(k==='embeddings'){ var epts=[]; var cl=[[SW*0.32,SH*0.4,'#FA48DC'],[SW*0.62,SH*0.36,'#48FAA1'],[SW*0.5,SH*0.68,'#4DA4FA']]; for(var i=0;i<46;i++){var c=cl[i%3];epts.push({x:Math.random()*SW,y:Math.random()*SH,tx:c[0]+(Math.random()-.5)*130,ty:c[1]+(Math.random()-.5)*110,c:c[2]});} function emb(){ if(active!=='embeddings')return; dx.clearRect(0,0,SW,SH); epts.forEach(function(p){p.x+=(p.tx-p.x)*.06;p.y+=(p.ty-p.y)*.06;dx.beginPath();dx.arc(p.x,p.y,3,0,6.28);dx.fillStyle=p.c;dx.fill();}); demoRaf=requestAnimationFrame(emb);} demoRaf=requestAnimationFrame(emb); dov.innerHTML='<div class=\"mono\" style=\"position:absolute;left:0;bottom:-2px;font-size:11px;color:#8a848c\">'+t('emb_label')+'</div>'; }\n      else if(k==='streaming'){ var toks=[],n=0; dov.innerHTML='<div class=\"mono\" data-sc style=\"position:absolute;right:0;bottom:-2px;font-size:20px;color:#fff\">0 tok</div>'; function str(){ if(active!=='streaming')return; dx.fillStyle='rgba(11,7,17,.28)';dx.fillRect(0,0,SW,SH); dx.globalCompositeOperation='lighter'; for(var k2=0;k2<6;k2++)toks.push({x:0,y:SH*0.2+Math.random()*SH*0.6,v:6+Math.random()*10}); n+=Math.round(40+Math.random()*90); var el=dov.querySelector('[data-sc]'); if(el)el.textContent=n.toLocaleString('pt-BR')+' tok'; for(var i=toks.length-1;i>=0;i--){var p=toks[i];p.x+=p.v;if(p.x>SW){toks.splice(i,1);continue;}dx.beginPath();dx.arc(p.x,p.y,1.8,0,6.28);dx.fillStyle='rgba(255,120,230,.8)';dx.fill();} if(toks.length>420)toks.splice(0,toks.length-420); dx.globalCompositeOperation='source-over'; demoRaf=requestAnimationFrame(str);} demoRaf=requestAnimationFrame(str); }\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run(c.getAttribute('data-f')); }); });\n    run('decisao');\n    if(!reduce){ dtimers.push(setTimeout(function(){ if(active==='decisao') run('voz'); },5200)); }\n  }\n}"}}}}}}}},{"_id":"6a749d168f24583f86b72d60","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"un9qyTTYV7_wdv0oKSkWY","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:860px; overflow:hidden;\n  background:radial-gradient(80% 68% at 50% 46%, #0d0a1a 0%, #0a0812 46%, #060509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.bus{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:52%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.28em; text-transform:uppercase; color:#8a86a2; display:flex; align-items:center; gap:8px; }\n.eyebrow .d1{ width:8px; height:8px; border-radius:50%; background:#8448FA; box-shadow:0 0 12px 2px #8448FA; }\n.eyebrow .arw{ color:#5a5570; }\n.eyebrow .d2{ width:8px; height:8px; border-radius:50%; background:#48FAFA; box-shadow:0 0 12px 2px #48FAFA; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:42ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.13em; color:#544f5e; line-height:1.7; }\n.seed b{ color:#9f8fd6; font-weight:400; font-variant-numeric:tabular-nums; } .seed b.c{ color:#7fcdd6; }\n.endlbl{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.16em; text-transform:uppercase; }\n.endlbl .t{ font-size:12.5px; font-weight:600; letter-spacing:.04em; text-transform:none; }\n.endlbl .s{ color:#6f6a7e; font-size:9.5px; }\n.stage{ position:absolute; z-index:7; width:min(34%,400px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7f9ad6; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:216px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); padding:16px; }\n.row{ display:flex; align-items:center; gap:9px; font-family:ui-monospace,Menlo,monospace; font-size:12px; margin:7px 0; opacity:0; transform:translateY(6px); transition:.34s; }\n.row.show{ opacity:1; transform:none; }\n.row .k{ padding:5px 10px; border-radius:8px; border:1px solid; white-space:nowrap; }\n.k.in{ background:rgba(132,72,250,.14); border-color:rgba(132,72,250,.45); color:#cbb8f4; }\n.k.out{ background:rgba(72,250,250,.12); border-color:rgba(72,250,250,.4); color:#a8ecec; }\n.k.ok{ background:rgba(102,250,72,.12); border-color:rgba(102,250,72,.4); color:#bff0a8; }\n.k.err{ background:rgba(250,72,72,.13); border-color:rgba(250,72,72,.45); color:#f4b8b8; }\n.row .ar{ color:#5a5570; }\n.row .mut{ color:#7a7488; font-size:11px; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(120,120,250,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:linear-gradient(90deg,#8448FA,#48FAFA); }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; } .fc.on .fs{ color:#7f9ad6; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#9f8fd6; } .payoff b.c{ color:#7fcdd6; }\n@media (max-width:1080px){ .cards{ flex-wrap:wrap; } .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); } .stage{ position:relative; width:auto; } }\n`,\n  render(d2){\n    var F=[\n      ['webhook','Rush · Inbound','escuta cada evento','webhook · SIP · cron','M3 9h8M8 5l3 4-3 4'],\n      ['entrega','Connect · Outbound','entrega em sistemas','HTTP · auth · retry','M3 9h8M8 5l3 4-3 4'],\n      ['rota','Roteamento','1 evento → N destinos','fan-out','M4 9h4M8 9l4-4M8 9l4 4M8 9l4 0'],\n      ['transforma','Transformação','molda o payload no caminho','map · shape','M3 6h8M3 12h8M11 4l2 2-2 2'],\n      ['retry','Resiliência','retry + backoff auditável','entrega garantida','M13 9a4 4 0 11-1.2-2.9M13 4v3h-3'],\n      ['tempo','Tempo real','throughput ao vivo','eventos/s','M2 12l3-5 3 3 3-6 3 8']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"bus\" data-bus></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"d1\"></span> Data² · Rush <span class=\"arw\">+</span> Connect <span class=\"d2\"></span> · Barramento</div>'+\n          '<h1 class=\"h1\">Entra evento. <span class=\"g\">Sai integração.</span></h1>'+\n          '<div class=\"h1s\">Rush escuta cada evento; Connect entrega em qualquer sistema. Entre os dois, o barramento do runtime. Escolha um fluxo: ele acontece ao vivo.</div></div>'+\n        '<div class=\"seed\">barramento · in→out<br>conectores · <b>webhook·SIP·HTTP</b><br>entrega · <b class=\"c\">at-least-once</b></div>'+\n        '<div class=\"endlbl\" data-lblR><div class=\"t\" style=\"color:#b79cf5\">Rush</div><div class=\"s\">escuta · inbound</div></div>'+\n        '<div class=\"endlbl\" data-lblC style=\"text-align:right\"><div class=\"t\" style=\"color:#8fe6e6\">Connect</div><div class=\"s\">entrega · outbound</div></div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span style=\"width:7px;height:7px;border-radius:50%;background:#8448FA;display:inline-block\"></span> Webhook</div>'+\n          '<div class=\"st-box\" data-box></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#9f9ad6\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">Um <b>evento</b> entra · atravessa o barramento · sai <b class=\"c\">integrado</b>, na hora</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), bus=root.querySelector('[data-bus]');\n    var lblR=root.querySelector('[data-lblR]'), lblC=root.querySelector('[data-lblC]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), box=root.querySelector('[data-box]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var bx=bus.getContext('2d');\n    var W=0,H=0,DP=1, BW=0,BH=0, BL=0,BT=0;\n    var xL,xR,yMid, node={r:0,c:0};\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height;\n      BW=Math.round(W*0.62); BH=380; BL=40; BT=Math.round(H*0.46-BH/2);\n      bus.style.left=BL+'px'; bus.style.top=BT+'px'; bus.style.width=BW+'px'; bus.style.height=BH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); bus.width=Math.round(BW*DP); bus.height=Math.round(BH*DP); bx.setTransform(DP,0,0,DP,0,0);\n      xL=BW*0.10; xR=BW*0.90; yMid=BH*0.5;\n      lblR.style.left=(BL+xL-14)+'px'; lblR.style.top=(BT+yMid-64)+'px';\n      lblC.style.left=(BL+xR-72)+'px'; lblC.style.top=(BT+yMid+40)+'px';\n      stage.style.left=Math.min(W-420, BL+BW-30)+'px'; stage.style.top=(BT+ (BH-248)/2)+'px'; }\n    layout(); d2.on(window,'resize',layout);\n\n    // bezier spine with mouse-bent control point\n    function spineY(){ return yMid; }\n    var ctrlY=yMid, ctrlTY=yMid, mX=9999,mY=0, hasMouse=false, energy=0, t0=performance.now(), run=true, raf=null;\n    d2.on(st,'pointermove',function(e){ var r=bus.getBoundingClientRect(); mX=(e.clientX-r.left); mY=(e.clientY-r.top); hasMouse=true; });\n    d2.on(st,'pointerleave',function(){ hasMouse=false; });\n    function bez(t){ // quadratic P0(xL,y0) P1(cx,ctrlY) P2(xR,y1)\n      var y0=yMid-12, y1=yMid+12, cx=(xL+xR)/2; var u=1-t;\n      var x=u*u*xL + 2*u*t*cx + t*t*xR;\n      var y=u*u*y0 + 2*u*t*ctrlY + t*t*y1;\n      return [x,y];\n    }\n    var packets=[], spawnAcc=0, deliveries=[], sweeps=[];\n    function spawn(){ packets.push({t:0, sp:0.0042+Math.random()*0.0018, hue:0}); node.r=1; sweeps.push({at:'r',r:0}); }\n    function draw(t){ if(!run)return; var dt=(t-t0); t0=t;\n      // mouse bends the control point toward cursor Y (fidget warp)\n      if(hasMouse){ var infl=Math.max(0,1-Math.abs(mX-BW/2)/(BW*0.6)); ctrlTY=yMid + (mY-yMid)*0.55*infl; } else { ctrlTY=yMid + Math.sin(t*0.0009)*22; }\n      ctrlY+=(ctrlTY-ctrlY)*0.06;\n      if(energy>0)energy-=0.02; if(node.r>0)node.r-=0.05; if(node.c>0)node.c-=0.05;\n      bx.clearRect(0,0,BW,BH);\n      // spine glow (violet→cyan)\n      var grad=bx.createLinearGradient(xL,0,xR,0); grad.addColorStop(0,'rgba(132,72,250,0.85)'); grad.addColorStop(1,'rgba(72,250,250,0.85)');\n      bx.save(); bx.globalCompositeOperation='lighter';\n      // under-glow\n      bx.lineWidth=9; bx.strokeStyle=grad; bx.globalAlpha=0.10+energy*0.12; bx.beginPath(); for(var s=0;s<=1.0001;s+=0.02){ var p=bez(s); if(s===0)bx.moveTo(p[0],p[1]); else bx.lineTo(p[0],p[1]); } bx.stroke();\n      // crisp spine\n      bx.globalAlpha=0.5+energy*0.4; bx.lineWidth=1.4; bx.beginPath(); for(var s2=0;s2<=1.0001;s2+=0.02){ var p2=bez(s2); if(s2===0)bx.moveTo(p2[0],p2[1]); else bx.lineTo(p2[0],p2[1]); } bx.stroke();\n      bx.globalAlpha=1;\n      // packets\n      for(var i=packets.length-1;i>=0;i--){ var pk=packets[i]; var boost=1; if(hasMouse){ var pp=bez(pk.t); var dm=Math.hypot(pp[0]-mX,pp[1]-mY); if(dm<90)boost=1.9-dm/90*0.9; }\n        pk.t+=pk.sp*(dt/16.7)*boost; if(pk.t>=1){ node.c=1; deliveries.push({r:0}); sweeps.push({at:'c',r:0}); packets.splice(i,1); continue; }\n        var pos=bez(pk.t); var r2=Math.round(132+ (72-132)*pk.t), g2=Math.round(72+(250-72)*pk.t), b2=250;\n        // trail\n        var tp=bez(Math.max(0,pk.t-0.05));\n        var lg=bx.createLinearGradient(tp[0],tp[1],pos[0],pos[1]); lg.addColorStop(0,'rgba('+r2+','+g2+','+b2+',0)'); lg.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0.8)');\n        bx.strokeStyle=lg; bx.lineWidth=2.4*boost; bx.beginPath(); bx.moveTo(tp[0],tp[1]); bx.lineTo(pos[0],pos[1]); bx.stroke();\n        var gg=bx.createRadialGradient(pos[0],pos[1],0,pos[0],pos[1],8*boost); gg.addColorStop(0,'rgba('+r2+','+g2+','+b2+',1)'); gg.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)'); bx.fillStyle=gg; bx.beginPath(); bx.arc(pos[0],pos[1],8*boost,0,6.28); bx.fill();\n      }\n      // nodes\n      function ring(x,y,col,pulse){ bx.strokeStyle=col; bx.globalAlpha=0.9; bx.lineWidth=1.6; bx.beginPath(); bx.arc(x,y,11,0,6.28); bx.stroke(); if(pulse>0){ bx.globalAlpha=pulse*0.7; bx.lineWidth=2; bx.beginPath(); bx.arc(x,y,11+(1-pulse)*26,0,6.28); bx.stroke(); } var gc=bx.createRadialGradient(x,y,0,x,y,16); gc.addColorStop(0,col.replace('1)','0.5)')); gc.addColorStop(1,col.replace('1)','0)')); bx.globalAlpha=1; bx.fillStyle=gc; bx.beginPath(); bx.arc(x,y,16,0,6.28); bx.fill(); }\n      var pL=bez(0), pR=bez(1);\n      ring(pL[0],pL[1],'rgba(160,120,250,1)',node.r);\n      ring(pR[0],pR[1],'rgba(90,240,240,1)',node.c);\n      // delivery ripples cleanup\n      for(var d3=deliveries.length-1;d3>=0;d3--){ deliveries[d3].r+=0.04; if(deliveries[d3].r>1)deliveries.splice(d3,1); }\n      bx.restore();\n      // spawn cadence\n      spawnAcc+=dt; var interval= reduce?99999: (900 - energy*500); if(spawnAcc>interval){ spawnAcc=0; spawn(); }\n      raf=requestAnimationFrame(draw);\n    }\n    if(!reduce){ spawn(); raf=requestAnimationFrame(function(t){t0=t;draw(t);}); }\n    else { // static: spine + 3 packets + nodes\n      var grad=bx.createLinearGradient(xL,0,xR,0); grad.addColorStop(0,'#8448FA'); grad.addColorStop(1,'#48FAFA'); bx.strokeStyle=grad; bx.lineWidth=1.6; bx.beginPath(); for(var s=0;s<=1.001;s+=0.02){var p=bez(s); if(s===0)bx.moveTo(p[0],p[1]);else bx.lineTo(p[0],p[1]);} bx.stroke(); [0.25,0.55,0.8].forEach(function(tt){var p=bez(tt); bx.fillStyle='rgba(160,200,250,.9)'; bx.beginPath(); bx.arc(p[0],p[1],4,0,6.28); bx.fill();}); }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;t0=performance.now();raf=requestAnimationFrame(draw);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.02}); io.observe(st);\n\n    // ---- concrete stage ----\n    var timers=[], intervals=[];\n    function clearS(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; box.innerHTML=''; }\n    function rowEl(html){ var e=document.createElement('div'); e.className='row'; e.innerHTML=html; box.appendChild(e); return e; }\n    function showSeq(rows){ rows.forEach(function(r,i){ var e=rowEl(r); timers.push(setTimeout(function(){ e.classList.add('show'); }, 260+i*620)); }); }\n    var NAMES={webhook:'Webhook',entrega:'Entrega',rota:'Roteamento',transforma:'Transformação',retry:'Resiliência',tempo:'Tempo real'};\n    var DOT={webhook:'#8448FA',entrega:'#48FAFA',rota:'#8448FA',transforma:'#a48fe0',retry:'#66FA48',tempo:'#48FAFA'};\n    function run2(k){ energy=1; clearS(); sth.innerHTML='<span style=\"width:7px;height:7px;border-radius:50%;background:'+DOT[k]+';display:inline-block\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='webhook') showSeq(['<span class=\"k in\">POST /pedido</span><span class=\"ar\">▸</span><span class=\"mut\">{ id: 8421 }</span>','<span class=\"mut\">Rush captura o evento</span>','<span class=\"k out\">→ ERP</span><span class=\"ar\">▸</span><span class=\"k ok\">200 OK</span>']);\n      else if(k==='entrega') showSeq(['<span class=\"mut\">evento no barramento</span>','<span class=\"k out\">Connect · HTTP</span><span class=\"ar\">▸</span><span class=\"mut\">auth + payload</span>','<span class=\"k out\">→ sistema externo</span><span class=\"ar\">▸</span><span class=\"k ok\">201</span>']);\n      else if(k==='rota') showSeq(['<span class=\"k in\">pedido.pago</span>','<span class=\"k out\">→ ERP</span><span class=\"k ok\">ok</span>','<span class=\"k out\">→ e-mail</span><span class=\"k ok\">ok</span>','<span class=\"k out\">→ WhatsApp</span><span class=\"k ok\">ok</span>']);\n      else if(k==='transforma') showSeq(['<span class=\"k in\">payload cru</span><span class=\"mut\">snake_case, R$\"1.240,00\"</span>','<span class=\"mut\">map no caminho</span>','<span class=\"k out\">shaped</span><span class=\"mut\">{ total: 1240.0 }</span>']);\n      else if(k==='retry') showSeq(['<span class=\"k out\">→ gateway</span><span class=\"ar\">▸</span><span class=\"k err\">503</span>','<span class=\"mut\">backoff · retry 2/3</span>','<span class=\"k out\">→ gateway</span><span class=\"ar\">▸</span><span class=\"k ok\">200 OK</span>']);\n      else if(k==='tempo'){ var e=rowEl('<span class=\"mut\">eventos processados</span><span class=\"k out\" data-c style=\"font-size:16px\">0</span>'); e.classList.add('show'); var n=0; var iv=setInterval(function(){ if(!box.contains(e)){clearInterval(iv);return;} n+=Math.round(20+Math.random()*60); var c=e.querySelector('[data-c]'); if(c)c.textContent=n.toLocaleString('pt-BR')+' /s'; },140); timers.push(function(){clearInterval(iv);}); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('webhook');\n    if(!reduce){ timers.push(setTimeout(function(){ if(root.querySelector('.fc.on')&&root.querySelector('.fc.on').getAttribute('data-f')==='webhook') run2('rota'); }, 6000)); }\n  }\n}"}}}}}}}},{"_id":"6a74c723b56e0bf3babb604c","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"U4g7zTUC7RI956nMfKG1y","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction BAR_T(){ return {\n  pt:{ d_webhook:'Venda, ligação, mensagem, horário marcado: tudo que acontece entra por aqui.', d_entrega:'Cada sistema recebe do jeito que entende — ERP, e-mail, WhatsApp.', d_rota:'Chega um pedido: o estoque, o financeiro e o cliente ficam sabendo — cada um do seu jeito.', d_transforma:'O que chega bagunçado sai no formato que cada sistema entende.', d_retry:'Se o sistema do outro lado cair, a mensagem espera e tenta de novo — nada se perde.', d_tempo:'Você vê o movimento passando no segundo em que acontece.', n_webhook:'Rush · o que chega', n_entrega:'Connect · o que sai', n_rota:'Roteamento', n_transforma:'Transformação', n_retry:'Resiliência', n_tempo:'Tempo real', s_retry:'entrega garantida', s_tempo:'eventos/s', eyebrow_bus:'Barramento', h1a:'Entra evento.', h1b:'Sai integração.', h1s:'O que acontece no seu negócio entra pelo Rush; o Connect entrega a cada sistema do jeito que ele entende. Escolha um fluxo: ele acontece ao vivo.', seedA:'barramento · in→out', seedB:'fontes · <b>webhook·SIP·cron·WABA</b>', seedC:'entrega · <b class=\"c\">garantida</b>', lbl_rush_s:'o que chega', lbl_conn_s:'o que sai', payoff_html:'Tudo que <b>acontece</b> · um barramento · todos os sistemas <b class=\"c\">sabendo</b>', nm_webhook:'Webhook', nm_entrega:'Entrega', nm_rota:'Roteamento', nm_transforma:'Transformação', nm_retry:'Resiliência', nm_tempo:'Tempo real', r_post:'POST /pedido', r_pedidopago:'pedido.pago', r_payloadcru:'dado cru', r_eventos:'eventos' },\n  en:{ d_webhook:'A sale, a call, a message, a scheduled time: everything that happens comes in here.', d_entrega:'Every system gets it the way it understands — ERP, e-mail, WhatsApp.', d_rota:'An order arrives: inventory, finance and the customer all find out — each in its own way.', d_transforma:'What arrives messy leaves in the shape each system understands.', d_retry:'If the system on the other side goes down, the message waits and tries again — nothing gets lost.', d_tempo:'You watch the movement go by the second it happens.', n_webhook:'Rush · what comes in', n_entrega:'Connect · what goes out', n_rota:'Routing', n_transforma:'Transformation', n_retry:'Resilience', n_tempo:'Real-time', s_retry:'guaranteed delivery', s_tempo:'events/s', eyebrow_bus:'Bus', h1a:'Event in.', h1b:'Integration out.', h1s:'Whatever happens in your business comes in through Rush; Connect delivers it to each system in the shape it understands. Pick a flow: it happens live.', seedA:'bus · in→out', seedB:'sources · <b>webhook·SIP·cron·WABA</b>', seedC:'delivery · <b class=\"c\">guaranteed</b>', lbl_rush_s:'what comes in', lbl_conn_s:'what goes out', payoff_html:'Everything that <b>happens</b> · one bus · every system <b class=\"c\">in the know</b>', nm_webhook:'Webhook', nm_entrega:'Delivery', nm_rota:'Routing', nm_transforma:'Transformation', nm_retry:'Resilience', nm_tempo:'Real-time', r_post:'POST /order', r_pedidopago:'order.paid', r_payloadcru:'raw data', r_eventos:'events' },\n  es:{ d_webhook:'Una venta, una llamada, un mensaje, una hora agendada: todo lo que pasa entra por aquí.', d_entrega:'Cada sistema recibe como lo entiende — ERP, e-mail, WhatsApp.', d_rota:'Llega un pedido: inventario, finanzas y el cliente se enteran — cada uno a su manera.', d_transforma:'Lo que llega desordenado sale en el formato que cada sistema entiende.', d_retry:'Si el sistema del otro lado se cae, el mensaje espera y vuelve a intentar — nada se pierde.', d_tempo:'Ves el movimiento pasar en el segundo en que sucede.', n_webhook:'Rush · lo que llega', n_entrega:'Connect · lo que sale', n_rota:'Enrutamiento', n_transforma:'Transformación', n_retry:'Resiliencia', n_tempo:'Tiempo real', s_retry:'entrega garantizada', s_tempo:'eventos/s', eyebrow_bus:'Bus', h1a:'Entra el evento.', h1b:'Sale la integración.', h1s:'Lo que pasa en tu negocio entra por Rush; Connect lo entrega a cada sistema como ese sistema lo entiende. Elige un flujo: sucede en vivo.', seedA:'bus · in→out', seedB:'fuentes · <b>webhook·SIP·cron·WABA</b>', seedC:'entrega · <b class=\"c\">garantizada</b>', lbl_rush_s:'lo que llega', lbl_conn_s:'lo que sale', payoff_html:'Todo lo que <b>pasa</b> · un bus · todos los sistemas <b class=\"c\">enterados</b>', nm_webhook:'Webhook', nm_entrega:'Entrega', nm_rota:'Enrutamiento', nm_transforma:'Transformación', nm_retry:'Resiliencia', nm_tempo:'Tiempo real', r_post:'POST /pedido', r_pedidopago:'pedido.pago', r_payloadcru:'dato crudo', r_eventos:'eventos' }\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(82% 70% at 50% 44%, #0e0a1c 0%, #0a0812 46%, #060509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.pipe{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.05; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:9; max-width:52%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.28em; text-transform:uppercase; color:#8a86a2; display:flex; align-items:center; gap:8px; }\n.eyebrow .d1{ width:8px; height:8px; border-radius:50%; background:#8448FA; box-shadow:0 0 12px 2px #8448FA; }\n.eyebrow .arw{ color:#5a5570; } .eyebrow .d2{ width:8px; height:8px; border-radius:50%; background:#48FAFA; box-shadow:0 0 12px 2px #48FAFA; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:44ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:9; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.13em; color:#544f5e; line-height:1.7; }\n.seed b{ color:#9f8fd6; font-weight:400; font-variant-numeric:tabular-nums; } .seed b.c{ color:#7fcdd6; }\n.chip{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.04em; padding:5px 9px; border-radius:8px; border:1px solid rgba(255,255,255,.1); background:rgba(255,255,255,.03); color:#8f8a9c; white-space:nowrap; transition:.28s; }\n.chip.src{ transform:translate(-100%,-50%); } .chip.dst{ transform:translate(0,-50%); }\n.chip.lit{ color:#EDECEF; border-color:rgba(72,250,250,.55); box-shadow:0 0 16px rgba(72,250,250,.25); }\n.chip.litv.lit{ border-color:rgba(132,72,250,.6); box-shadow:0 0 16px rgba(132,72,250,.28); }\n.nodelbl{ position:absolute; z-index:7; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.16em; text-transform:uppercase; }\n.nodelbl .t{ font-size:12.5px; font-weight:600; letter-spacing:.04em; text-transform:none; } .nodelbl .s{ color:#6f6a7e; font-size:9.5px; }\n.stage{ position:absolute; z-index:8; left:50%; transform:translateX(-50%); width:min(560px,64%); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7f9ad6; margin-bottom:10px; display:flex; align-items:center; gap:8px; justify-content:center; }\n.st-box{ position:relative; display:flex; gap:10px; justify-content:center; flex-wrap:wrap; }\n.row{ display:flex; align-items:center; gap:9px; font-family:ui-monospace,Menlo,monospace; font-size:12px; opacity:0; transform:translateY(6px); transition:.34s; }\n.row.show{ opacity:1; transform:none; }\n.row .k{ padding:5px 10px; border-radius:8px; border:1px solid; white-space:nowrap; }\n.k.in{ background:rgba(132,72,250,.14); border-color:rgba(132,72,250,.45); color:#cbb8f4; }\n.k.out{ background:rgba(72,250,250,.12); border-color:rgba(72,250,250,.4); color:#a8ecec; }\n.k.ok{ background:rgba(102,250,72,.12); border-color:rgba(102,250,72,.4); color:#bff0a8; }\n.k.err{ background:rgba(250,72,72,.13); border-color:rgba(250,72,72,.45); color:#f4b8b8; }\n.row .ar{ color:#5a5570; } .row .mut{ color:#7a7488; font-size:11px; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:9; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(120,120,250,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:linear-gradient(90deg,#8448FA,#48FAFA); }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; } .fc.on .fs{ color:#7f9ad6; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:9; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#9f8fd6; } .payoff b.c{ color:#7fcdd6; }\n@media (max-width:900px){\n  :host{ height:auto; }\n  .st{ min-height:0; height:auto; display:flex; flex-direction:column; align-items:stretch; padding:36px 20px 26px; gap:20px; }\n  .head{ position:relative; top:auto; left:auto; max-width:none; order:1; }\n  .h1s{ max-width:none; }\n  .seed{ position:relative; top:auto; right:auto; text-align:left; order:2; }\n  canvas.pipe{ position:relative !important; left:auto !important; top:auto !important; order:3; }\n  .chip,.nodelbl{ display:none !important; }\n  .stage{ position:relative !important; left:auto !important; top:auto !important; transform:none !important; width:100%; max-width:560px; margin:0 auto; order:4; }\n  .cards{ position:relative; left:auto; right:auto; bottom:auto; padding:0; flex-wrap:wrap; order:5; }\n  .fc{ max-width:none; flex:1 1 30%; border-bottom:1px solid rgba(255,255,255,.05); }\n  .payoff{ position:relative; bottom:auto; order:6; margin-top:2px; }\n}\n@media (max-width:560px){\n  .st{ padding:28px 16px 22px; }\n  .h1{ font-size:clamp(23px,7vw,30px); }\n  .fc{ flex:1 1 42%; padding:13px 12px 12px; }\n  .seed{ display:none; }\n}\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=BAR_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['webhook',t('n_webhook'),t('d_webhook'),'webhook · SIP · cron','M3 9h8M8 5l3 4-3 4'],\n      ['entrega',t('n_entrega'),t('d_entrega'),'HTTP · auth · retry','M3 9h8M8 5l3 4-3 4'],\n      ['rota',t('n_rota'),t('d_rota'),'fan-out','M4 9h4M8 9l4-4M8 9l4 4M8 9l4 0'],\n      ['transforma',t('n_transforma'),t('d_transforma'),'map · shape','M3 6h8M3 12h8M11 4l2 2-2 2'],\n      ['retry',t('n_retry'),t('d_retry'),t('s_retry'),'M13 9a4 4 0 11-1.2-2.9M13 4v3h-3'],\n      ['tempo',t('n_tempo'),t('d_tempo'),t('s_tempo'),'M2 12l3-5 3 3 3-6 3 8']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"pipe\" data-pipe></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"d1\"></span> Data² · Rush <span class=\"arw\">+</span> Connect <span class=\"d2\"></span> · '+t('eyebrow_bus')+'</div>'+\n          '<h1 class=\"h1\">'+t('h1a')+' <span class=\"g\">'+t('h1b')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('h1s')+'</div></div>'+\n        '<div class=\"seed\">'+t('seedA')+'<br>'+t('seedB')+'<br>'+t('seedC')+'</div>'+\n        '<div class=\"nodelbl\" data-lblR><div class=\"t\" style=\"color:#b79cf5\">Rush</div><div class=\"s\">'+t('lbl_rush_s')+'</div></div>'+\n        '<div class=\"nodelbl\" data-lblC style=\"text-align:right\"><div class=\"t\" style=\"color:#8fe6e6\">Connect</div><div class=\"s\">'+t('lbl_conn_s')+'</div></div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span style=\"width:7px;height:7px;border-radius:50%;background:#8448FA;display:inline-block\"></span> Webhook</div>'+\n          '<div class=\"st-box\" data-box></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#9f9ad6\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">'+t('payoff_html')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=BAR_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), pipe=root.querySelector('[data-pipe]');\n    var lblR=root.querySelector('[data-lblR]'), lblC=root.querySelector('[data-lblC]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), box=root.querySelector('[data-box]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var px=pipe.getContext('2d');\n    var W=0,H=0,DP=1, PW=0,PH=0,PL=0,PT=0;\n    var SRC=[{k:'Webhook'},{k:'SIP'},{k:'Cron'},{k:'WABA'}], DST=[{k:'ERP'},{k:'E-mail'},{k:'WhatsApp'},{k:'Gateway'}];\n    var srcEls=[], dstEls=[];\n    var xRush,xConn,yMid, srcAnchors=[], dstAnchors=[];\n    var amb=[];\n    function mkChips(){ srcEls.forEach(function(e){e.remove();}); dstEls.forEach(function(e){e.remove();}); srcEls=[]; dstEls=[];\n      SRC.forEach(function(s,i){ var e=document.createElement('div'); e.className='chip src litv'; e.textContent=s.k; st.appendChild(e); srcEls.push(e); });\n      DST.forEach(function(s,i){ var e=document.createElement('div'); e.className='chip dst'; e.textContent=s.k; st.appendChild(e); dstEls.push(e); }); }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; var mobile=W<=900;\n      H = mobile ? Math.min(Math.round(W*0.9),360) : r.height;\n      if(mobile){ var cs=getComputedStyle(st); W = st.clientWidth - parseFloat(cs.paddingLeft||0) - parseFloat(cs.paddingRight||0); }\n      PL=0; PT=0; PW=W; PH=H;\n      if(mobile){ pipe.style.left=''; pipe.style.top=''; } else { pipe.style.left='0px'; pipe.style.top='0px'; }\n      pipe.style.width=W+'px'; pipe.style.height=H+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); pipe.width=Math.round(W*DP); pipe.height=Math.round(H*DP); px.setTransform(DP,0,0,DP,0,0);\n      var CW=mobile?W:Math.min(W,1500), offX=(W-CW)/2;\n      yMid=H*0.40; xRush=offX+CW*0.24; xConn=offX+CW*0.76;\n      // source/dest anchors spread vertically around yMid\n      srcAnchors=[]; dstAnchors=[]; var sx=offX+CW*0.085, dx=offX+CW*0.915, spread=Math.min(190,H*0.5);\n      SRC.forEach(function(s,i){ var y=yMid + (i-(SRC.length-1)/2)*(spread/(SRC.length-1)); srcAnchors.push({x:sx,y:y}); if(srcEls[i]){ srcEls[i].style.left=(sx-14)+'px'; srcEls[i].style.top=y+'px'; } });\n      DST.forEach(function(s,i){ var y=yMid + (i-(DST.length-1)/2)*(spread/(DST.length-1)); dstAnchors.push({x:dx,y:y}); if(dstEls[i]){ dstEls[i].style.left=(dx+14)+'px'; dstEls[i].style.top=y+'px'; } });\n      lblR.style.left=(xRush-14)+'px'; lblR.style.top=(yMid-60)+'px';\n      lblC.style.left=(xConn-72)+'px'; lblC.style.top=(yMid+34)+'px';\n      if(mobile){ stage.style.top=''; if(head)head.style.left=''; if(seed)seed.style.right=''; } else { stage.style.top=(yMid+150)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      // ambient particles\n      if(!amb.length){ for(var i=0;i<46;i++){ amb.push({x:Math.random(),y:Math.random(),s:0.02+Math.random()*0.05,r:0.6+Math.random()*1.6,c:Math.random()<0.5?'132,72,250':'72,250,250',a:0.05+Math.random()*0.12}); } } }\n    mkChips(); layout(); d2.on(window,'resize',layout);\n\n    var STR=3; // bus strands\n    var ctrlY=0, ctrlTY=0, mX=9999,mY=0,hasMouse=false, energy=0, tprev=performance.now(), run=true, raf=null;\n    d2.on(st,'pointermove',function(e){ var r=pipe.getBoundingClientRect(); mX=(e.clientX-r.left); mY=(e.clientY-r.top); hasMouse=true; });\n    d2.on(st,'pointerleave',function(){ hasMouse=false; });\n    function bez(t,off){ var y0=yMid-10+off, y1=yMid+10+off, cx=(xRush+xConn)/2; var u=1-t;\n      var x=u*u*xRush + 2*u*t*cx + t*t*xConn; var y=u*u*y0 + 2*u*t*(yMid+ctrlY+off) + t*t*y1; return [x,y]; }\n    var packets=[], spawnAcc=0, dstIdx=0;\n    function spawnFromSource(){ var si=(Math.random()*SRC.length)|0; if(srcEls[si]){ srcEls[si].classList.add('lit'); (function(el){ setTimeout(function(){ if(el.isConnected)el.classList.remove('lit'); },700); })(srcEls[si]); } packets.push({t:0, sp:0.0040+Math.random()*0.0018, strand:(Math.random()*STR)|0, from:si}); energy=Math.min(1,energy+0.25); }\n    function draw(t){ if(!pipe.isConnected) return; if(!run)return; var dt=(t-tprev); tprev=t;\n      if(hasMouse){ var infl=Math.max(0,1-Math.abs(mX-(xRush+xConn)/2)/((xConn-xRush)*0.75)); ctrlTY=(mY-yMid)*0.5*infl; } else { ctrlTY=Math.sin(t*0.0009)*20; }\n      ctrlY+=(ctrlTY-ctrlY)*0.06; if(energy>0)energy-=0.008;\n      px.clearRect(0,0,PW,PH);\n      px.save(); px.globalCompositeOperation='lighter';\n      // ambient\n      for(var i=0;i<amb.length;i++){ var p=amb[i]; p.y-=p.s*(dt/16.7)*0.004; if(p.y<-0.02)p.y=1.02; var ax=p.x*PW, ay=p.y*PH; px.fillStyle='rgba('+p.c+','+p.a+')'; px.beginPath(); px.arc(ax,ay,p.r,0,6.28); px.fill(); }\n      // source feeders → Rush\n      for(var s2=0;s2<srcAnchors.length;s2++){ var a=srcAnchors[s2]; var g=px.createLinearGradient(a.x,a.y,xRush,yMid); g.addColorStop(0,'rgba(132,72,250,0.05)'); g.addColorStop(1,'rgba(132,72,250,0.28)'); px.strokeStyle=g; px.lineWidth=1; px.beginPath(); px.moveTo(a.x,a.y); px.quadraticCurveTo((a.x+xRush)/2, a.y, xRush, yMid); px.stroke(); px.fillStyle='rgba(160,120,250,.5)'; px.beginPath(); px.arc(a.x,a.y,2.2,0,6.28); px.fill(); }\n      // dest feeders ← Connect\n      for(var d2i=0;d2i<dstAnchors.length;d2i++){ var b=dstAnchors[d2i]; var lit=(dstEls[d2i]&&dstEls[d2i].classList.contains('lit')); var g2=px.createLinearGradient(xConn,yMid,b.x,b.y); g2.addColorStop(0,'rgba(72,250,250,'+(lit?0.5:0.28)+')'); g2.addColorStop(1,'rgba(72,250,250,0.05)'); px.strokeStyle=g2; px.lineWidth=lit?1.8:1; px.beginPath(); px.moveTo(xConn,yMid); px.quadraticCurveTo((xConn+b.x)/2, b.y, b.x, b.y); px.stroke(); px.fillStyle='rgba(90,240,240,.5)'; px.beginPath(); px.arc(b.x,b.y,2.2,0,6.28); px.fill(); }\n      // bus strands\n      var grad=px.createLinearGradient(xRush,0,xConn,0); grad.addColorStop(0,'rgba(132,72,250,0.85)'); grad.addColorStop(1,'rgba(72,250,250,0.85)');\n      for(var sN=0;sN<STR;sN++){ var off=(sN-(STR-1)/2)*7; px.globalAlpha=0.10+energy*0.10; px.lineWidth=6; px.strokeStyle=grad; px.beginPath(); for(var s=0;s<=1.0001;s+=0.03){ var pp=bez(s,off); if(s===0)px.moveTo(pp[0],pp[1]); else px.lineTo(pp[0],pp[1]); } px.stroke();\n        px.globalAlpha=0.42; px.lineWidth=1.1; px.beginPath(); for(var s3=0;s3<=1.0001;s3+=0.03){ var p3=bez(s3,off); if(s3===0)px.moveTo(p3[0],p3[1]); else px.lineTo(p3[0],p3[1]); } px.stroke(); }\n      px.globalAlpha=1;\n      // packets\n      for(var k=packets.length-1;k>=0;k--){ var pk=packets[k]; var off2=(pk.strand-(STR-1)/2)*7; var boost=1; if(hasMouse){ var pc=bez(pk.t,off2); var dm=Math.hypot(pc[0]-mX,pc[1]-mY); if(dm<80)boost=1.8-dm/80*0.8; }\n        pk.t+=pk.sp*(dt/16.7)*boost; if(pk.t>=1){ dstIdx=(dstIdx+1)%dstEls.length; if(dstEls[dstIdx]){ var el=dstEls[dstIdx]; el.classList.add('lit'); (function(e){ setTimeout(function(){ if(e.isConnected)e.classList.remove('lit'); },650); })(el); } packets.splice(k,1); continue; }\n        var pos=bez(pk.t,off2); var rr=Math.round(132+(72-132)*pk.t), gg2=Math.round(72+(250-72)*pk.t), bb=250;\n        var tp=bez(Math.max(0,pk.t-0.05),off2); var lg=px.createLinearGradient(tp[0],tp[1],pos[0],pos[1]); lg.addColorStop(0,'rgba('+rr+','+gg2+','+bb+',0)'); lg.addColorStop(1,'rgba('+rr+','+gg2+','+bb+',0.85)'); px.strokeStyle=lg; px.lineWidth=2.2*boost; px.beginPath(); px.moveTo(tp[0],tp[1]); px.lineTo(pos[0],pos[1]); px.stroke();\n        var rg=px.createRadialGradient(pos[0],pos[1],0,pos[0],pos[1],7*boost); rg.addColorStop(0,'rgba('+rr+','+gg2+','+bb+',1)'); rg.addColorStop(1,'rgba('+rr+','+gg2+','+bb+',0)'); px.fillStyle=rg; px.beginPath(); px.arc(pos[0],pos[1],7*boost,0,6.28); px.fill(); }\n      // nodes\n      function ring(x,y,col){ px.strokeStyle=col; px.globalAlpha=0.9; px.lineWidth=1.6; px.beginPath(); px.arc(x,y,12,0,6.28); px.stroke(); var gc=px.createRadialGradient(x,y,0,x,y,20); gc.addColorStop(0,col.replace('1)','0.45)')); gc.addColorStop(1,col.replace('1)','0)')); px.globalAlpha=1; px.fillStyle=gc; px.beginPath(); px.arc(x,y,20,0,6.28); px.fill(); }\n      ring(xRush,yMid,'rgba(160,120,250,1)'); ring(xConn,yMid,'rgba(90,240,240,1)');\n      px.restore();\n      spawnAcc+=dt; var interval=reduce?99999:820; if(spawnAcc>interval){ spawnAcc=0; spawnFromSource(); }\n      raf=requestAnimationFrame(draw);\n    }\n    if(!reduce){ spawnFromSource(); raf=requestAnimationFrame(function(t){tprev=t;draw(t);}); }\n    else { var grad=px.createLinearGradient(xRush,0,xConn,0); grad.addColorStop(0,'#8448FA'); grad.addColorStop(1,'#48FAFA'); px.strokeStyle=grad; px.lineWidth=1.4; for(var sN=0;sN<STR;sN++){ var off=(sN-(STR-1)/2)*7; px.beginPath(); for(var s=0;s<=1.001;s+=0.03){var p=bez(s,off); if(s===0)px.moveTo(p[0],p[1]);else px.lineTo(p[0],p[1]);} px.stroke(); } }\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;tprev=performance.now();raf=requestAnimationFrame(draw);} } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.02}); io.observe(st);\n\n    // ---- concrete stage ----\n    var timers=[], intervals=[];\n    function clearS(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; box.innerHTML=''; }\n    function rowEl(html){ var e=document.createElement('div'); e.className='row'; e.innerHTML=html; box.appendChild(e); return e; }\n    function showSeq(rows){ rows.forEach(function(r,i){ var e=rowEl(r); timers.push(setTimeout(function(){ if(e.isConnected)e.classList.add('show'); }, 220+i*560)); }); }\n    var NAMES={webhook:t('nm_webhook'),entrega:t('nm_entrega'),rota:t('nm_rota'),transforma:t('nm_transforma'),retry:t('nm_retry'),tempo:t('nm_tempo')};\n    var DOT={webhook:'#8448FA',entrega:'#48FAFA',rota:'#8448FA',transforma:'#a48fe0',retry:'#66FA48',tempo:'#48FAFA'};\n    function run2(k){ energy=1; clearS(); sth.innerHTML='<span style=\"width:7px;height:7px;border-radius:50%;background:'+DOT[k]+';display:inline-block\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='webhook') showSeq(['<span class=\"k in\">'+t('r_post')+'</span>','<span class=\"ar\">▸</span>','<span class=\"k out\">→ ERP</span>','<span class=\"k ok\">200 OK</span>']);\n      else if(k==='entrega') showSeq(['<span class=\"k out\">Connect · HTTP</span>','<span class=\"ar\">▸</span>','<span class=\"mut\">auth + payload</span>','<span class=\"k ok\">201</span>']);\n      else if(k==='rota') showSeq(['<span class=\"k in\">'+t('r_pedidopago')+'</span>','<span class=\"ar\">▸</span>','<span class=\"k out\">ERP</span>','<span class=\"k out\">e-mail</span>','<span class=\"k out\">WhatsApp</span>']);\n      else if(k==='transforma') showSeq(['<span class=\"k in\">'+t('r_payloadcru')+'</span>','<span class=\"ar\">▸</span>','<span class=\"mut\">map</span>','<span class=\"ar\">▸</span>','<span class=\"k out\">shaped</span>']);\n      else if(k==='retry') showSeq(['<span class=\"k out\">→ gateway</span>','<span class=\"k err\">503</span>','<span class=\"mut\">retry 2/3</span>','<span class=\"k ok\">200 OK</span>']);\n      else if(k==='tempo'){ var e=rowEl('<span class=\"mut\">'+t('r_eventos')+'</span><span class=\"k out\" data-c style=\"font-size:16px\">0</span>'); e.classList.add('show'); var n=0; var iv=setInterval(function(){ if(!e.isConnected){clearInterval(iv);return;} n+=Math.round(20+Math.random()*60); var c=e.querySelector('[data-c]'); if(c)c.textContent=n.toLocaleString('pt-BR')+' /s'; },140); intervals.push(iv); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('webhook');\n    if(!reduce){ timers.push(setTimeout(function(){ var on=root.querySelector('.fc.on'); if(on&&on.getAttribute('data-f')==='webhook') run2('rota'); }, 6000)); }\n  }\n}\n"}}}}}}}},{"_id":"6a75d30d8bf663d9684a9afb","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"0DlHiRiwaG_sHb4o4mqIj","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; height:100%; min-height:560px; overflow:hidden;\n  background:radial-gradient(70% 90% at 62% 40%, #12101c 0%, #0a0912 46%, #060509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; align-items:center; }\n.glow{ position:absolute; inset:0; z-index:1; }\n.wrap{ position:relative; z-index:3; width:100%; max-width:1180px; margin:0 auto; padding:0 56px; display:grid; grid-template-columns:1fr 1fr; gap:40px; align-items:center; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.28em; text-transform:uppercase; color:#8a8496; display:flex; align-items:center; gap:8px; }\n.eyebrow .d{ width:8px;height:8px;border-radius:50%;background:#FA48DC;box-shadow:0 0 12px 2px #FA48DC; }\n.prompt{ margin-top:20px; border:1px solid rgba(255,255,255,.14); border-radius:14px; background:rgba(255,255,255,.03); padding:15px 16px; display:flex; align-items:center; gap:10px; min-height:56px; box-shadow:0 8px 40px rgba(0,0,0,.4); }\n.prompt .q{ color:#5a5566; font-family:ui-monospace,Menlo,monospace; font-size:13px; }\n.prompt .txt{ font-size:15px; color:#EDECEF; min-height:20px; }\n.prompt .cur{ display:inline-block; width:9px; height:17px; background:#FA48DC; vertical-align:-3px; margin-left:1px; animation:bl 1s steps(2) infinite; }\n@keyframes bl{ 50%{opacity:0} }\n.hint{ margin-top:12px; font-size:12px; color:#6b6675; font-family:ui-monospace,Menlo,monospace; }\n.palette{ margin-top:26px; display:flex; gap:10px; flex-wrap:wrap; }\n.pd{ display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.04em; color:#615c6b; transition:color .3s; }\n.pd .dot{ width:9px; height:9px; border-radius:50%; background:currentColor; opacity:.28; transition:opacity .3s, box-shadow .3s; }\n.pd.lit{ color:#cfc9d6; } .pd.lit .dot{ opacity:1; box-shadow:0 0 12px 2px var(--c); background:var(--c); }\n.stage{ position:relative; height:420px; display:flex; align-items:center; justify-content:center; }\n.screen{ position:relative; width:352px; border-radius:16px; background:linear-gradient(180deg,#141220,#0d0b16); border:1px solid rgba(255,255,255,.1); box-shadow:0 30px 80px rgba(0,0,0,.55); overflow:hidden; }\n.sbar{ height:34px; display:flex; align-items:center; gap:6px; padding:0 12px; border-bottom:1px solid rgba(255,255,255,.07); }\n.sbar i{ width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.16); }\n.sbar .url{ margin-left:8px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#6b6675; opacity:0; transition:opacity .5s; }\n.sbody{ position:relative; padding:14px; min-height:250px; }\n.layer{ display:flex; flex-direction:column; gap:10px; }\n.blk{ position:relative; border-radius:10px; padding:11px 12px; border:1px solid; opacity:0; transform:translateY(14px) scale(.96); transition:opacity .45s, transform .45s cubic-bezier(.34,1.56,.64,1); }\n.blk.in{ opacity:1; transform:none; } .blk.gone{ opacity:0; transform:translateY(-10px) scale(.97); transition:opacity .38s, transform .38s ease; }\n.blk .tag{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.1em; text-transform:uppercase; }\n.blk .lbl{ margin-top:4px; font-size:13px; color:#EDECEF; }\n.blk .bar{ margin-top:9px; height:5px; border-radius:3px; background:rgba(255,255,255,.08); overflow:hidden; }\n.blk .bar > i{ display:block; height:100%; width:0; border-radius:3px; transition:width .7s ease .1s; }\n.badge{ position:absolute; top:12px; right:12px; z-index:5; display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.1em; color:#66FA48; background:rgba(102,250,72,.1); border:1px solid rgba(102,250,72,.4); border-radius:20px; padding:4px 10px; opacity:0; transform:translateY(-6px) scale(.9); transition:.4s cubic-bezier(.34,1.56,.64,1); }\n.badge.on{ opacity:1; transform:none; }\n.badge .p{ width:7px;height:7px;border-radius:50%;background:#66FA48;box-shadow:0 0 10px 2px #66FA48; animation:pp 1.4s ease-in-out infinite; }\n@keyframes pp{ 50%{ opacity:.4; transform:scale(.7) } }\n/* pseudo-app mockup (o produtinho final) */\n.app{ display:flex; flex-direction:column; gap:9px; opacity:0; transform:translateY(12px); transition:opacity .55s, transform .55s cubic-bezier(.22,1,.36,1); }\n.app.in{ opacity:1; transform:none; }\n.app .ah{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:#8a8496; display:flex; align-items:center; gap:7px; }\n.app .ah::before{ content:''; width:7px;height:7px;border-radius:50%; background:var(--acc); box-shadow:0 0 10px 1px var(--acc); }\n.chat{ display:flex; flex-direction:column; gap:6px; }\n.bub{ max-width:84%; padding:8px 11px; border-radius:11px; font-size:12.5px; line-height:1.35; }\n.bub.q{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.1); color:#cfc9d2; }\n.bub.a{ margin-left:auto; color:#f2ecf1; }\n.agent{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#66FA48; display:flex; align-items:center; gap:6px; }\n.kpis{ display:flex; gap:8px; }\n.kpis span{ flex:1; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.08); border-radius:8px; padding:8px 9px; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#d7d2dc; }\n.chart{ display:flex; align-items:flex-end; gap:5px; height:62px; }\n.chart i{ flex:1; background:linear-gradient(180deg,var(--acc),rgba(255,255,255,.03)); border-radius:3px 3px 0 0; opacity:.85; }\n.alert{ font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#FADC48; }\n.row2{ display:flex; justify-content:space-between; align-items:center; font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#d7d2dc; padding:8px 10px; background:rgba(255,255,255,.03); border-radius:8px; }\n.row2 .ok{ color:#66FA48; }\n.foot{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#6b6675; }\n.gal{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; }\n.gal i{ aspect-ratio:1; border-radius:8px; background:linear-gradient(135deg,var(--acc),rgba(255,255,255,.04)); opacity:.9; }\n@media (max-width:900px){ .wrap{ grid-template-columns:1fr; gap:28px; } .stage{ height:360px; } .screen{ width:300px; } }\n@media (prefers-reduced-motion:reduce){ .blk,.app{ transition:none } .badge .p,.prompt .cur{ animation:none } }\n`,\n  render(d2){\n    var COMPS=[['UI','#4866FA'],['Registry','#FA4848'],['Media','#FADC48'],['ID','#48FAA1'],['Connect','#48FAFA'],['Domain','#FA48DC'],['Rush','#8448FA'],['Cashier','#BFFA48']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"glow\" data-glow></canvas>'+\n        '<div class=\"wrap\">'+\n          '<div class=\"left\">'+\n            '<div class=\"eyebrow\"><span class=\"d\"></span> Descreva. Veja nascer.</div>'+\n            '<div class=\"prompt\"><span class=\"q\">›</span><span class=\"txt\" data-txt></span><span class=\"cur\"></span></div>'+\n            '<div class=\"hint\">Uma necessidade. Os componentes se montam. No ar.</div>'+\n            '<div class=\"palette\" data-palette>'+ COMPS.map(function(c){ return '<span class=\"pd\" data-c=\"'+c[0]+'\" style=\"--c:'+c[1]+';color:'+c[1]+'\"><span class=\"dot\"></span>'+c[0]+'</span>'; }).join('') +'</div>'+\n          '</div>'+\n          '<div class=\"stage\">'+\n            '<div class=\"screen\">'+\n              '<div class=\"sbar\"><i></i><i></i><i></i><span class=\"url\" data-url></span></div>'+\n              '<div class=\"badge\" data-badge><span class=\"p\"></span> no ar</div>'+\n              '<div class=\"sbody\" data-body></div>'+\n            '</div>'+\n          '</div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var st=root.querySelector('[data-st]'), glow=root.querySelector('[data-glow]');\n    var txt=root.querySelector('[data-txt]'), body=root.querySelector('[data-body]'), badge=root.querySelector('[data-badge]'), url=root.querySelector('[data-url]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var SOL=[\n      { need:'Cortar 40% do custo de atendimento', url:'atendimento.data2.app', acc:'#FA48DC', blocks:[\n          {c:'Rush', col:'#8448FA', t:'Escuta a chamada'},{c:'Domain', col:'#FA48DC', t:'IA resolve na hora'},\n          {c:'Connect', col:'#48FAFA', t:'Integra o CRM'},{c:'UI', col:'#4866FA', t:'Painel do time'} ],\n        app:'<div class=\"ah\">Atendimento · ao vivo</div><div class=\"chat\"><div class=\"bub q\">Cadê meu pedido 8421?</div><div class=\"bub a\" style=\"background:rgba(250,72,220,.15);border:1px solid rgba(250,72,220,.42)\">Sai amanhã, 14h — rastreio no seu e-mail.</div></div><div class=\"agent\">◈ agente resolveu · 0 na fila</div>' },\n      { need:'Conciliar estoque em tempo real', url:'estoque.data2.app', acc:'#4866FA', blocks:[\n          {c:'Registry', col:'#FA4848', t:'Os dados, vivos'},{c:'Rush', col:'#8448FA', t:'Cada movimento, um evento'},\n          {c:'Domain', col:'#FA48DC', t:'Alerta antes de faltar'},{c:'UI', col:'#4866FA', t:'Tela de controle'} ],\n        app:'<div class=\"ah\">Estoque · tempo real</div><div class=\"kpis\"><span>1.204 SKUs</span><span>giro 3.2×</span><span>ruptura 0,4%</span></div><div class=\"chart\"><i style=\"height:38%\"></i><i style=\"height:62%\"></i><i style=\"height:50%\"></i><i style=\"height:78%\"></i><i style=\"height:66%\"></i><i style=\"height:92%\"></i><i style=\"height:71%\"></i></div><div class=\"alert\">⚠ repor SKU-88 em 2 dias</div>' },\n      { need:'Cobrar e conciliar pagamentos', url:'pagamentos.data2.app', acc:'#BFFA48', blocks:[\n          {c:'Cashier', col:'#BFFA48', t:'Cobrança nativa'},{c:'Connect', col:'#48FAFA', t:'Fala com o gateway'},\n          {c:'Registry', col:'#FA4848', t:'Concilia sozinho'},{c:'ID', col:'#48FAA1', t:'Quem pode ver'} ],\n        app:'<div class=\"ah\">Pagamentos · conciliado</div><div class=\"row2\"><span>R$ 1.240,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>R$ 890,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>R$ 3.110,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"foot\">3.482 transações hoje · 0 divergências</div>' },\n      { need:'Estúdio de imagem do produto', url:'estudio.data2.app', acc:'#FADC48', blocks:[\n          {c:'Media', col:'#FADC48', t:'Gera a imagem'},{c:'Registry', col:'#FA4848', t:'Puxa o catálogo'},\n          {c:'UI', col:'#4866FA', t:'Galeria pronta'} ],\n        app:'<div class=\"ah\">Estúdio · imagens</div><div class=\"gal\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div><div class=\"foot\">8 imagens geradas · prontas pro catálogo</div>' }\n    ];\n\n    var gx=glow.getContext('2d'), W=0,H=0,DP=1, spots=[];\n    function resize(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; DP=Math.min(2,(window.devicePixelRatio||1)); glow.width=Math.round(W*DP); glow.height=Math.round(H*DP); gx.setTransform(DP,0,0,DP,0,0); }\n    resize(); d2.on(window,'resize',resize);\n    var running=true, raf=null;\n    function frame(){ if(!glow.isConnected)return; if(!running)return; gx.clearRect(0,0,W,H); gx.globalCompositeOperation='lighter';\n      for(var i=0;i<spots.length;i++){ var s=spots[i]; s.life-=0.006; if(s.life<=0){spots.splice(i,1);i--;continue;} var rr=s.r*(1.2-s.life*0.4); var g=gx.createRadialGradient(s.x*W,s.y*H,0,s.x*W,s.y*H,rr); g.addColorStop(0,'rgba('+s.rgb+','+(0.16*s.life)+')'); g.addColorStop(1,'rgba('+s.rgb+',0)'); gx.fillStyle=g; gx.beginPath(); gx.arc(s.x*W,s.y*H,rr,0,6.28); gx.fill(); }\n      gx.globalCompositeOperation='source-over'; raf=requestAnimationFrame(frame); }\n    if(!reduce){ raf=requestAnimationFrame(frame); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!running&&!reduce){running=true;raf=requestAnimationFrame(frame);} } else { running=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.05}); io.observe(st);\n    function hexRgb(h){ return parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16); }\n    function hexA(h,a){ return 'rgba('+hexRgb(h)+','+a+')'; }\n    function puff(col){ spots.push({x:0.62+(Math.random()-.5)*0.18, y:0.42+(Math.random()-.5)*0.24, r:180, life:1, rgb:hexRgb(col)}); }\n\n    var timers=[];\n    function clr(){ timers.forEach(clearTimeout); timers=[]; }\n    function litPalette(name, on){ var el=root.querySelector('.pd[data-c=\"'+name+'\"]'); if(el)el.classList.toggle('lit', on); }\n    function resetPalette(){ Array.prototype.slice.call(root.querySelectorAll('.pd')).forEach(function(e){e.classList.remove('lit');}); }\n\n    var si=0;\n    function typeNeed(str, done){ var i=0; txt.textContent=''; (function step(){ if(!txt.isConnected)return; if(i>str.length){ done&&done(); return; } txt.textContent=str.slice(0,i); i++; timers.push(setTimeout(step, 22+Math.random()*30)); })(); }\n\n    function assemble(sol, done){\n      body.innerHTML=''; badge.classList.remove('on'); url.style.opacity='0'; url.textContent=sol.url; resetPalette();\n      var layer=document.createElement('div'); layer.className='layer'; body.appendChild(layer);\n      var made=[];\n      sol.blocks.forEach(function(b){ var el=document.createElement('div'); el.className='blk';\n        el.style.background='linear-gradient(180deg,'+hexA(b.col,0.13)+','+hexA(b.col,0.05)+')'; el.style.borderColor=hexA(b.col,0.4);\n        el.innerHTML='<div class=\"tag\" style=\"color:'+b.col+'\">'+b.c+'</div><div class=\"lbl\">'+b.t+'</div><div class=\"bar\"><i style=\"background:'+b.col+'\"></i></div>';\n        layer.appendChild(el); made.push(el); });\n      var k=0;\n      (function next(){ if(!body.isConnected)return; if(k>=sol.blocks.length){ timers.push(setTimeout(function(){ revealApp(sol, layer, done); }, 620)); return; }\n        var b=sol.blocks[k], el=made[k]; el.classList.add('in'); litPalette(b.c, true); puff(b.col);\n        var bar=el.querySelector('.bar > i'); if(bar) timers.push(setTimeout(function(){ if(bar.isConnected)bar.style.width=(58+Math.random()*38)+'%'; }, 110));\n        k++; timers.push(setTimeout(next, 500)); })();\n    }\n    function revealApp(sol, layer, done){\n      if(!body.isConnected)return;\n      Array.prototype.slice.call(layer.querySelectorAll('.blk')).forEach(function(e){ e.classList.add('gone'); });\n      timers.push(setTimeout(function(){ if(!body.isConnected)return;\n        var app=document.createElement('div'); app.className='app'; app.style.setProperty('--acc', sol.acc); app.innerHTML=sol.app;\n        body.innerHTML=''; body.appendChild(app); void app.offsetWidth; app.classList.add('in');\n        puff(sol.acc); badge.classList.add('on'); url.style.opacity='1';\n        timers.push(setTimeout(function(){ done&&done(); }, 2400));\n      }, 420));\n    }\n\n    function cycle(){ if(!st.isConnected)return; var sol=SOL[si%SOL.length]; si++; clr();\n      typeNeed(sol.need, function(){ timers.push(setTimeout(function(){ assemble(sol, function(){ timers.push(setTimeout(cycle, 700)); }); }, 340)); }); }\n\n    if(reduce){ var sol=SOL[0]; txt.textContent=sol.need; sol.blocks.forEach(function(b){litPalette(b.c,true);});\n      var app=document.createElement('div'); app.className='app in'; app.style.setProperty('--acc', sol.acc); app.innerHTML=sol.app; body.appendChild(app);\n      badge.classList.add('on'); url.textContent=sol.url; url.style.opacity='1'; }\n    else { timers.push(setTimeout(cycle, 500)); }\n  }\n}\n"}}}}}}}},{"_id":"6a79e8aa59537a9b7a8666c2","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"XV258QE_XjmhXMxfjwKix","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.dk{ position:relative; width:100%; height:100%; min-height:720px; overflow:hidden;\n  background:radial-gradient(75% 80% at 50% 36%, #0f1512 0%, #0a0d0c 46%, #060807 100%);\n  color:#ECEFEC; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; --acc:#48FAA1; --mag:#FA48DC; }\n.amb{ position:absolute; inset:0; z-index:1; }\n.grain{ position:absolute; inset:0; z-index:2; opacity:.05; pointer-events:none; mix-blend-mode:overlay;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.slide{ position:absolute; inset:0; z-index:3; display:flex; flex-direction:column; justify-content:center; padding:0 clamp(48px,7vw,120px); opacity:0; transform:translateY(22px); transition:opacity .5s ease, transform .6s cubic-bezier(.22,1,.36,1); pointer-events:none; }\n.slide.on{ opacity:1; transform:none; pointer-events:auto; }\n.split{ display:grid; grid-template-columns:1.05fr .95fr; gap:48px; align-items:center; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:12px; letter-spacing:.26em; text-transform:uppercase; color:#7f9a8c; display:flex; align-items:center; gap:9px; }\n.eyebrow::before{ content:''; width:9px;height:9px;border-radius:50%;background:var(--acc);box-shadow:0 0 12px 2px var(--acc); }\nh1.big{ font-size:clamp(40px,6vw,96px); font-weight:500; letter-spacing:-.03em; line-height:.99; margin:22px 0 0; color:#F6F8F6; }\nh2.hd{ font-size:clamp(28px,4vw,58px); font-weight:500; letter-spacing:-.025em; line-height:1.05; margin:18px 0 0; color:#F6F8F6; max-width:20ch; }\n.hd .g,.big .g{ color:#7f8a82; }\n.sub{ margin:22px 0 0; font-size:clamp(15px,1.5vw,21px); line-height:1.5; color:#a6b0a9; max-width:44ch; }\n.sig{ font-family:ui-monospace,Menlo,monospace; font-size:13px; letter-spacing:.14em; color:#7f9a8c; }\n.sig b{ color:var(--acc); font-weight:400; }\n.cobrand{ position:absolute; top:34px; left:clamp(48px,7vw,120px); z-index:6; display:flex; align-items:center; gap:14px; }\n.cobrand .x{ color:#5f6a62; font-size:14px; }\n.wm{ height:19px; width:auto; fill:#ECEFEC; display:inline-block; vertical-align:middle; }\n.idlogo{ height:22px; width:auto; display:inline-block; vertical-align:middle; filter:brightness(0) invert(1); opacity:.92; }\n.cover-logos{ display:flex; align-items:center; gap:20px; margin-bottom:6px; }\n.cover-logos .wm{ height:30px; } .cover-logos .idlogo{ height:34px; } .cover-logos .x{ color:#5f6a62; font-size:20px; }\n/* plain capability tiles */\n.tiles{ margin-top:30px; display:flex; gap:12px; flex-wrap:wrap; }\n.tile{ border:1px solid rgba(255,255,255,.12); border-radius:12px; padding:14px 18px; background:rgba(255,255,255,.02); font-size:15px; color:#d4dcd6; display:flex; align-items:center; gap:9px; }\n.tile i{ width:8px;height:8px;border-radius:50%;background:var(--acc); }\n/* illustration column */\n.illu{ display:flex; align-items:center; justify-content:center; }\n.illu svg{ width:100%; max-width:440px; height:auto; }\n/* logo wall */\n.wall{ margin-top:30px; display:grid; grid-template-columns:repeat(4,1fr); gap:20px 28px; max-width:920px; align-items:center; }\n.wall img{ height:34px; width:100%; object-fit:contain; filter:grayscale(1) brightness(1.7); opacity:.62; transition:opacity .3s; }\n/* screenshot slots */\n.shot{ position:relative; width:100%; border-radius:14px; border:1.5px dashed rgba(72,250,161,.4); background:repeating-linear-gradient(135deg,rgba(255,255,255,.014) 0 14px,rgba(255,255,255,0) 14px 28px); display:flex; align-items:center; justify-content:center; }\n.shot.hero{ aspect-ratio:16/9.2; }\n.shot.mini{ aspect-ratio:4/3; }\n.shot .lab{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.1em; color:#7f9a8c; text-align:center; padding:8px; }\n.shot .lab b{ color:#ECEFEC; display:block; font-size:13px; margin-bottom:3px; letter-spacing:.05em; }\n.mosaic{ margin-top:26px; display:grid; grid-template-columns:repeat(3,1fr); gap:14px; max-width:1000px; }\n/* highlights list */\n.hl{ margin-top:26px; display:flex; flex-direction:column; gap:14px; max-width:640px; }\n.hli{ display:flex; gap:13px; align-items:flex-start; }\n.hli .n{ font-family:ui-monospace,Menlo,monospace; font-size:13px; color:var(--acc); min-width:20px; padding-top:2px; }\n.hli .tx{ font-size:17px; color:#e2e7e3; line-height:1.35; }\n/* steps (light) */\n.steps{ margin-top:30px; display:flex; gap:40px; }\n.stp .k{ font-family:ui-monospace,Menlo,monospace; font-size:12px; color:var(--acc); }\n.stp .st{ margin-top:8px; font-size:18px; color:#ECEFEC; }\n/* cue */\n.cue{ margin-top:26px; display:inline-flex; align-items:center; gap:11px; font-family:ui-monospace,Menlo,monospace; font-size:14px; color:var(--acc); border:1px solid rgba(72,250,161,.4); border-radius:12px; padding:12px 20px; }\n.cue .pl{ width:0;height:0;border-left:11px solid var(--acc); border-top:7px solid transparent; border-bottom:7px solid transparent; }\n/* chrome */\n.chrome{ position:absolute; z-index:8; left:0; right:0; bottom:26px; display:flex; align-items:center; justify-content:center; gap:16px; }\n.dots{ display:flex; gap:7px; } .dot{ width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.2); cursor:pointer; transition:.25s; } .dot.on{ background:var(--acc); box-shadow:0 0 10px 1px var(--acc); width:20px; border-radius:4px; }\n.arw{ position:absolute; top:50%; transform:translateY(-50%); z-index:8; width:44px;height:44px; border-radius:50%; border:1px solid rgba(255,255,255,.12); background:rgba(255,255,255,.03); color:#c4ccc6; cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:18px; transition:.2s; }\n.arw:hover{ background:rgba(72,250,161,.1); border-color:rgba(72,250,161,.4); color:#ECEFEC; } .arw.l{ left:22px; } .arw.r{ right:22px; }\n.counter{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.14em; color:#7f8a82; font-variant-numeric:tabular-nums; }\n.lang{ position:absolute; top:32px; right:clamp(48px,7vw,120px); z-index:9; display:flex; gap:2px; border:1px solid rgba(255,255,255,.14); border-radius:9px; overflow:hidden; }\n.lang button{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.1em; padding:6px 11px; background:transparent; color:#8a948c; border:0; cursor:pointer; transition:.2s; } .lang button.on{ background:var(--acc); color:#06110c; }\n@media (max-width:900px){ .split{ grid-template-columns:1fr; gap:26px; } .wall{ grid-template-columns:repeat(3,1fr); } .tiles{ } .steps{ flex-direction:column; gap:16px; } .mosaic{ grid-template-columns:1fr; } }\n@media (prefers-reduced-motion:reduce){ .slide{ transition:opacity .2s } }\n.dk .shot.filled{ border-style:solid; border-color:rgba(255,255,255,.12); overflow:hidden; padding:0; background:#0d0b16 }\n.dk .shotimg{ width:100%; height:100%; object-fit:cover; display:block }\n.dk .shotcap{ position:absolute; left:10px; bottom:8px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.08em; color:#ECEFEC; background:rgba(6,8,7,.7); padding:3px 8px; border-radius:6px }\n.dk .mosaic{ grid-template-columns:repeat(2,1fr) !important }\n.dk .shot.mini{ aspect-ratio:16/9 !important }\n/* email gate overlay (additive) */\n.gate{ position:absolute; inset:0; z-index:30; display:flex; align-items:center; justify-content:center; padding:32px; background:radial-gradient(75% 80% at 50% 36%, #0f1512 0%, #0a0d0c 60%, #060807 100%); }\n.gate.hide{ display:none; }\n.gate.fade{ opacity:0; transition:opacity .5s ease; pointer-events:none; }\n.gate-inner{ width:100%; max-width:520px; display:flex; flex-direction:column; align-items:center; text-align:center; }\n.gate-logos{ display:flex; align-items:center; gap:18px; margin-bottom:34px; }\n.gate-logos .wm{ height:28px; } .gate-logos .idlogo{ height:32px; } .gate-logos .x{ color:#5f6a62; font-size:18px; }\n.gate-hd{ font-size:clamp(28px,4vw,44px); font-weight:500; letter-spacing:-.025em; color:#F6F8F6; line-height:1.03; }\n.gate-sub{ margin-top:14px; font-size:clamp(15px,1.6vw,19px); color:#a6b0a9; line-height:1.5; max-width:34ch; }\n.gate-form{ margin-top:30px; display:flex; gap:10px; width:100%; max-width:440px; }\n.gate-input{ flex:1; min-width:0; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.16); border-radius:12px; padding:14px 16px; color:#ECEFEC; font-size:16px; font-family:inherit; outline:none; transition:border-color .2s, box-shadow .2s; }\n.gate-input::placeholder{ color:#6f7a72; }\n.gate-input:focus{ border-color:var(--acc); box-shadow:0 0 0 3px rgba(72,250,161,.15); }\n.gate-input.err{ border-color:var(--mag); box-shadow:0 0 0 3px rgba(250,72,220,.18); }\n.gate-btn{ background:var(--acc); color:#06110c; border:0; border-radius:12px; padding:14px 22px; font-size:15px; font-weight:600; cursor:pointer; white-space:nowrap; transition:transform .15s, opacity .2s; font-family:inherit; }\n.gate-btn:hover{ transform:translateY(-1px); }\n.gate-btn:disabled{ opacity:.6; cursor:default; }\n.gate-msg{ margin-top:16px; font-size:13px; font-family:ui-monospace,Menlo,monospace; letter-spacing:.04em; color:var(--mag); min-height:16px; }\n@media (max-width:560px){ .gate-form{ flex-direction:column; } }\n`,\n  render(d2){\n    var IDLOGO='https://www.data2.media/file/iJAH8x45WikT3f536xX_0';\n    var CLIENTS=['r0b6UXkNSkKzDD5GPDTFK','VR0VixxFAZTHgLXRYUUs5','B72VtT-7YowXGdS1Fqs29','XrOEYO8oD3Le-dC81nM78','V-GVbgbYcdvaELyGQEbnK','S4L0-2_yOpFnPQDMQ8Xcl','ACXUAElkoiqyEE4f9WcR_','kgs_NnlJILqT1KJAT86Va','U246pqsqfTwJWjSc1hvPi','s6sAs999GNPdIDMZ2GxU6','hu3Bd1NMBS-Zdnfutgiya','_4_vBm9wpt2PvjYvdZEK8','7ksjnPfsAkO5TkKkqwOhY','vfSpx_vbSyTYE-FYkVr6j','KRm24SmZEbTtNv2OUGzTW','Xk4U2iO00Hg0PVhqO5Yde'].map(function(id){return 'https://www.data2.media/file/'+id;});\n    function T(es,pt){ return 'data-es=\"'+es+'\" data-pt=\"'+pt+'\"'; }\n    function wm(){ return '<svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" aria-label=\"Data2\"><use href=\"#d2wm\"/></svg>'; }\n    function idl(){ return '<img class=\"idlogo\" src=\"'+IDLOGO+'\" alt=\"ID Energy\">'; }\n    // simple illustrations\n    var ILLU_FLOW='<svg viewBox=\"0 0 440 240\" fill=\"none\"><circle cx=\"70\" cy=\"120\" r=\"26\" stroke=\"#7f8a82\" stroke-width=\"1.4\"/><text x=\"70\" y=\"124\" fill=\"#a6b0a9\" font-size=\"11\" text-anchor=\"middle\" font-family=\"monospace\">?</text><path d=\"M104 120 H320\" stroke=\"url(#g1)\" stroke-width=\"1.5\" stroke-dasharray=\"4 5\"/><defs><linearGradient id=\"g1\" x1=\"0\" x2=\"1\"><stop offset=\"0\" stop-color=\"#7f8a82\"/><stop offset=\"1\" stop-color=\"#48FAA1\"/></linearGradient></defs><rect x=\"322\" y=\"78\" width=\"96\" height=\"84\" rx=\"10\" fill=\"rgba(72,250,161,.08)\" stroke=\"#48FAA1\" stroke-width=\"1.4\"/><rect x=\"336\" y=\"94\" width=\"52\" height=\"6\" rx=\"3\" fill=\"#48FAA1\" opacity=\".8\"/><rect x=\"336\" y=\"108\" width=\"68\" height=\"6\" rx=\"3\" fill=\"#48FAA1\" opacity=\".5\"/><rect x=\"336\" y=\"122\" width=\"40\" height=\"6\" rx=\"3\" fill=\"#48FAA1\" opacity=\".5\"/><circle cx=\"410\" cy=\"70\" r=\"4\" fill=\"#48FAA1\"/></svg>';\n    var ILLU_DOCS='<svg viewBox=\"0 0 440 260\" fill=\"none\"><g stroke=\"#6f7a72\" stroke-width=\"1.2\" opacity=\".8\"><rect x=\"30\" y=\"40\" width=\"52\" height=\"66\" rx=\"5\" transform=\"rotate(-12 56 73)\"/><rect x=\"96\" y=\"150\" width=\"52\" height=\"66\" rx=\"5\" transform=\"rotate(9 122 183)\"/><rect x=\"40\" y=\"150\" width=\"52\" height=\"66\" rx=\"5\" transform=\"rotate(-6 66 183)\"/><rect x=\"110\" y=\"46\" width=\"52\" height=\"66\" rx=\"5\" transform=\"rotate(7 136 79)\"/></g><path d=\"M180 130 H250\" stroke=\"#48FAA1\" stroke-width=\"1.5\" stroke-dasharray=\"4 5\"/><rect x=\"252\" y=\"72\" width=\"158\" height=\"116\" rx=\"12\" fill=\"rgba(72,250,161,.07)\" stroke=\"#48FAA1\" stroke-width=\"1.5\"/><rect x=\"268\" y=\"90\" width=\"90\" height=\"7\" rx=\"3\" fill=\"#48FAA1\" opacity=\".85\"/><rect x=\"268\" y=\"106\" width=\"126\" height=\"6\" rx=\"3\" fill=\"#ECEFEC\" opacity=\".22\"/><rect x=\"268\" y=\"120\" width=\"110\" height=\"6\" rx=\"3\" fill=\"#ECEFEC\" opacity=\".22\"/><rect x=\"268\" y=\"150\" width=\"40\" height=\"20\" rx=\"5\" fill=\"rgba(72,250,161,.2)\" stroke=\"#48FAA1\"/><rect x=\"316\" y=\"150\" width=\"40\" height=\"20\" rx=\"5\" fill=\"rgba(250,72,220,.15)\" stroke=\"#FA48DC\"/></svg>';\n\n    var slides=[];\n    // 1 cover\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"cover-logos\">'+wm()+'<span class=\"x\">×</span>'+idl()+'</div>'+\n      '<h1 class=\"big\" '+T('De la necesidad a la producción.','Da necessidade à produção.')+'>De la necesidad a la producción.</h1>'+\n      '<div class=\"sub\" style=\"font-size:clamp(19px,2vw,28px);color:#c4ccc6;max-width:none\" '+T('El resto es demo.','O resto é demo.')+'>El resto es demo.</div>'+\n      '<div class=\"sig\" style=\"margin-top:38px\" '+T('Necesidad <b>elevada</b> a producción','Necessidade <b>elevada</b> à produção')+'>Necesidad elevada a producción</div>'+\n    '</div>');\n    // 2 quiénes somos\n    slides.push('<div class=\"slide\"><div class=\"split\"><div>'+\n      '<div class=\"eyebrow\" '+T('Quiénes somos','Quem somos')+'>Quiénes somos</div>'+\n      '<h2 class=\"hd\" '+T('Convertimos el problema de tu operación en software funcionando.','Transformamos o problema da sua operação em software funcionando.')+'>Convertimos el problema de tu operación en software funcionando.</h2>'+\n      '<div class=\"sub\" '+T('Sin grandes proyectos. Sin años de espera. Software de verdad, en producción — en semanas.','Sem grandes projetos. Sem anos de espera. Software de verdade, no ar — em semanas.')+'>Sin grandes proyectos. Sin años de espera. Software de verdad, en producción — en semanas.</div>'+\n      '</div><div class=\"illu\">'+ILLU_FLOW+'</div></div></div>');\n    // 3 la plataforma\n    var TILES_ES=['Pantallas','Datos','Integraciones','Automatización','Inteligencia'];\n    var TILES_PT=['Telas','Dados','Integrações','Automação','Inteligência'];\n    var tiles=TILES_ES.map(function(t,i){return '<div class=\"tile\"><i></i><span '+T(TILES_ES[i],TILES_PT[i])+'>'+t+'</span></div>';}).join('');\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"eyebrow\" '+T('La plataforma','A plataforma')+'>La plataforma</div>'+\n      '<h2 class=\"hd\" style=\"max-width:24ch\" '+T('Todo lo que un sistema necesita, en un solo lugar.','Tudo que um sistema precisa, num só lugar.')+'>Todo lo que un sistema necesita, en un solo lugar.</h2>'+\n      '<div class=\"tiles\">'+tiles+'</div>'+\n      '<div class=\"sub\" '+T('Y funciona sobre los sistemas que ya tienes — sin reemplazar nada.','E funciona sobre os sistemas que você já tem — sem substituir nada.')+'>Y funciona sobre los sistemas que ya tienes — sin reemplazar nada.</div>'+\n    '</div>');\n    // 4 clientes\n    var wall=CLIENTS.map(function(u){return '<img src=\"'+u+'\" alt=\"\">';}).join('');\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"eyebrow\" '+T('Confían en nosotros','Confiam na gente')+'>Confían en nosotros</div>'+\n      '<h2 class=\"hd\" '+T('Empresas que ya lo pusieron en producción.','Empresas que já colocaram no ar.')+'>Empresas que ya lo pusieron en producción.</h2>'+\n      '<div class=\"wall\">'+wall+'</div>'+\n    '</div>');\n    // 5 la pregunta (case setup)\n    slides.push('<div class=\"slide\"><div class=\"split\"><div>'+\n      '<div class=\"eyebrow\" '+T('Un caso para ID Energy','Um caso pra ID Energy')+'>Un caso para ID Energy</div>'+\n      '<h2 class=\"hd\" '+T('¿Cómo podría Data² ayudar a ID Energy?','Como a Data² poderia ajudar a ID Energy?')+'>¿Cómo podría Data² ayudar a ID Energy?</h2>'+\n      '<div class=\"sub\" '+T('Creamos un caso para mostrarlo: el Expediente Vivo — de la información dispersa de los proyectos a una cartera siempre al día.','Criamos um caso pra mostrar: o Expediente Vivo — da informação dispersa dos projetos a uma carteira sempre em dia.')+'>Creamos un caso para mostrarlo: el Expediente Vivo — de la información dispersa de los proyectos a una cartera siempre al día.</div>'+\n      '</div><div class=\"illu\">'+ILLU_DOCS+'</div></div></div>');\n    // 6 o caso (Cockpit hero)\n    slides.push('<div class=\"slide\"><div class=\"split\"><div>'+\n      '<div class=\"eyebrow\">Expediente Vivo</div>'+\n      '<h2 class=\"hd\" '+T('Toda la información de los proyectos, viva y en un solo lugar.','Toda a informação dos projetos, viva e num só lugar.')+'>Toda la información de los proyectos, viva y en un solo lugar.</h2>'+\n      '<div class=\"sub\" '+T('De documentos, correos y planillas dispersos — a una cartera de proyectos que se mantiene sola.','De documentos, e-mails e planilhas espalhados — a uma carteira de projetos que se mantém sozinha.')+'>De documentos, correos y planillas dispersos — a una cartera de proyectos que se mantiene sola.</div>'+\n      '</div><div><div class=\"shot hero filled\"><img class=\"shotimg\" src=\"https://www.data2.media/file/i-3aTS2LbcaIEo2FVzIOz\" alt=\"Cockpit\"></div></div></div></div>');\n    // 7 highlights + mosaico\n    var HL=[\n      ['Conversa con los sistemas que ya tienes.','Conversa com os sistemas que você já tem.'],\n      ['Convierte el papeleo en decisión.','Transforma a papelada em decisão.'],\n      ['La cartera siempre al día, con el riesgo a la vista.','A carteira sempre em dia, com o risco à vista.'],\n      ['Cada número con origen claro — listo para auditoría.','Cada número com origem clara — pronto pra auditoria.'],\n      ['En producción en semanas, no en años.','No ar em semanas, não em anos.']\n    ];\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"eyebrow\" '+T('Qué cambia para ID Energy','O que muda pra ID Energy')+'>Qué cambia para ID Energy</div>'+\n      '<div class=\"split\" style=\"grid-template-columns:1fr 1fr;margin-top:14px\"><div class=\"hl\">'+HL.map(function(h,i){return '<div class=\"hli\"><span class=\"n\">0'+(i+1)+'</span><span class=\"tx\" '+T(h[0],h[1])+'>'+h[0]+'</span></div>';}).join('')+'</div>'+\n      '<div class=\"mosaic\"><div class=\"shot mini filled\"><img class=\"shotimg\" src=\"https://www.data2.media/file/y1RT4iSAPL6EtDKkRMbSs\" alt=\"Cartera\"><div class=\"shotcap\">Cartera</div></div><div class=\"shot mini filled\"><img class=\"shotimg\" src=\"https://www.data2.media/file/nQz37Xefg0Q23N3-G5Eb6\" alt=\"Roadmap\"><div class=\"shotcap\">Roadmap</div></div><div class=\"shot mini filled\"><img class=\"shotimg\" src=\"https://www.data2.media/file/r7FjbuLQlZj6ZB-P0lTJY\" alt=\"Documentos\"><div class=\"shotcap\">Documentos</div></div><div class=\"shot mini filled\"><img class=\"shotimg\" src=\"https://www.data2.media/file/OK-FdbKcqUUJIIZIxcVbq\" alt=\"Expediente\"><div class=\"shotcap\">Expediente</div></div></div>'+\n      '</div></div>');\n    // 8 ver ao vivo (discreto)\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"eyebrow\" '+T('Si hay tiempo','Se der tempo')+'>Si hay tiempo</div>'+\n      '<h2 class=\"hd\" '+T('¿Lo vemos en vivo?','Vamos ver ao vivo?')+'>¿Lo vemos en vivo?</h2>'+\n      '<div class=\"cue\"><span class=\"pl\"></span> <a href=\"https://idenergy.next.data2.app\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:4px;cursor:pointer\">idenergy.next.data2.app</a></div>'+\n    '</div>');\n    // 9 cómo trabajamos (sutil)\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"eyebrow\" '+T('Cómo trabajamos','Como trabalhamos')+'>Cómo trabajamos</div>'+\n      '<h2 class=\"hd\" '+T('Entramos junto a tu equipo. En semanas, está en producción.','Entramos junto do seu time. Em semanas, está no ar.')+'>Entramos junto a tu equipo. En semanas, está en producción.</h2>'+\n      '<div class=\"steps\">'+\n        '<div class=\"stp\"><div class=\"k\">30 min</div><div class=\"st\" '+T('Entender el problema','Entender o problema')+'>Entender el problema</div></div>'+\n        '<div class=\"stp\"><div class=\"k\" '+T('Unas semanas','Umas semanas')+'>Unas semanas</div><div class=\"st\" '+T('Construir, juntos','Construir, juntos')+'>Construir, juntos</div></div>'+\n        '<div class=\"stp\"><div class=\"k\" '+T('En producción','Em produção')+'>En producción</div><div class=\"st\" '+T('Funcionando de verdad','Funcionando de verdade')+'>Funcionando de verdad</div></div>'+\n      '</div>'+\n    '</div>');\n    // 10 fecho\n    slides.push('<div class=\"slide\">'+\n      '<div class=\"cover-logos\" style=\"margin-bottom:26px\">'+wm()+'<span class=\"x\">×</span>'+idl()+'</div>'+\n      '<h2 class=\"hd\" '+T('¿Empezamos por un problema real?','Vamos começar por um problema real?')+'>¿Empezamos por un problema real?</h2>'+\n      '<div class=\"sig\" style=\"margin-top:26px\" '+T('Necesidad <b>elevada</b> a producción','Necessidade <b>elevada</b> à produção')+'>Necesidad elevada a producción</div>'+\n    '</div>');\n\n    var n=slides.length, dots='';\n    for(var i=0;i<n;i++){ dots+='<span class=\"dot\" data-i=\"'+i+'\"></span>'; }\n    var GATE='<div class=\"gate\" data-gate>'+\n      '<div class=\"gate-inner\">'+\n        '<div class=\"gate-logos\">'+wm()+'<span class=\"x\">×</span>'+idl()+'</div>'+\n        '<div class=\"gate-hd\" data-es=\"Antes de empezar\" data-pt=\"Antes de começar\">Antes de empezar</div>'+\n        '<div class=\"gate-sub\" data-es=\"Déjanos tu correo para ver la presentación.\" data-pt=\"Deixe seu e-mail para ver a apresentação.\">Déjanos tu correo para ver la presentación.</div>'+\n        '<div class=\"gate-form\">'+\n          '<input class=\"gate-input\" type=\"email\" inputmode=\"email\" autocomplete=\"email\" data-gate-email placeholder=\"nombre@empresa.com\">'+\n          '<button class=\"gate-btn\" data-gate-go data-es=\"Ver la presentación\" data-pt=\"Ver a apresentação\">Ver la presentación</button>'+\n        '</div>'+\n        '<div class=\"gate-msg\" data-gate-msg></div>'+\n      '</div>'+\n    '</div>';\n    return '<div class=\"dk\" data-dk>'+\n      '<svg width=\"0\" height=\"0\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><symbol id=\"d2wm\" viewBox=\"0 0 459.554 148.471\"><g transform=\"translate(-678.859 -300.605)\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\" fill=\"#fff\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\" fill=\"#fff\"/></g></symbol></svg>'+\n      '<canvas class=\"amb\" data-amb></canvas><div class=\"grain\"></div>'+\n      '<div class=\"cobrand\">'+wm()+'<span class=\"x\">×</span>'+idl()+'</div>'+\n      '<div class=\"lang\"><button data-l=\"es\" class=\"on\">ES</button><button data-l=\"pt\">PT</button></div>'+\n      slides.join('')+\n      '<div class=\"arw l\" data-prev>‹</div><div class=\"arw r\" data-next>›</div>'+\n      '<div class=\"chrome\"><span class=\"counter\" data-counter>01 / '+(n<10?'0'+n:n)+'</span><span class=\"dots\">'+dots+'</span></div>'+\n      GATE+\n    '</div>';\n  },\n  mounted(d2, root){\n    var dk=root.querySelector('[data-dk]'), amb=root.querySelector('[data-amb]');\n    var slides=Array.prototype.slice.call(root.querySelectorAll('.slide'));\n    var dots=Array.prototype.slice.call(root.querySelectorAll('.dot'));\n    var counter=root.querySelector('[data-counter]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var n=slides.length, cur=0;\n    function pad(x){ return x<10?'0'+x:''+x; }\n    function show(i){ cur=(i+n)%n; slides.forEach(function(s,k){ s.classList.toggle('on',k===cur); }); dots.forEach(function(d,k){ d.classList.toggle('on',k===cur); }); if(counter)counter.textContent=pad(cur+1)+' / '+pad(n); }\n    function setLang(l){ Array.prototype.slice.call(root.querySelectorAll('[data-es]')).forEach(function(el){ var v=el.getAttribute('data-'+l); if(v!=null) el.innerHTML=v; }); Array.prototype.slice.call(root.querySelectorAll('.lang button')).forEach(function(b){ b.classList.toggle('on', b.getAttribute('data-l')===l); }); }\n    setLang('es'); show(0);\n    // ===== EMAIL GATE (additive) =====\n    var gate=root.querySelector('[data-gate]');\n    if(gate){\n      var UNLOCK_KEY='idenergy-deck-unlocked';\n      var gIn=gate.querySelector('[data-gate-email]');\n      var gBtn=gate.querySelector('[data-gate-go]');\n      var gMsg=gate.querySelector('[data-gate-msg]');\n      var gateLang='es';\n      var GMSG={ invalid:{es:'Introduce un correo válido.',pt:'Digite um e-mail válido.'}, err:{es:'No se pudo guardar. Inténtalo de nuevo.',pt:'Não foi possível salvar. Tente de novo.'}, sending:{es:'Enviando…',pt:'Enviando…'} };\n      var GPH={es:'nombre@empresa.com',pt:'nome@empresa.com'};\n      function applyGateLang(l){ gateLang=l; if(gIn) gIn.setAttribute('placeholder', GPH[l]||GPH.es); }\n      applyGateLang('es');\n      Array.prototype.slice.call(root.querySelectorAll('.lang button')).forEach(function(b){ d2.on(b,'click',function(){ applyGateLang(b.getAttribute('data-l')); if(gMsg)gMsg.textContent=''; }); });\n      var unlocked=false; try{ unlocked=(window.localStorage && localStorage.getItem(UNLOCK_KEY)==='1'); }catch(e){}\n      if(unlocked){ gate.classList.add('hide'); }\n      var EMAIL_RE=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n      var submitting=false;\n      function reveal(){ gate.classList.add('fade'); setTimeout(function(){ gate.classList.add('hide'); }, 540); }\n      function submitGate(){\n        if(submitting) return;\n        var em=((gIn && gIn.value)||'').trim();\n        if(!EMAIL_RE.test(em)){ if(gIn)gIn.classList.add('err'); if(gMsg){gMsg.style.color='';gMsg.textContent=(GMSG.invalid[gateLang]||GMSG.invalid.es);} if(gIn)gIn.focus(); return; }\n        if(gIn)gIn.classList.remove('err');\n        submitting=true; if(gBtn)gBtn.disabled=true; if(gMsg){ gMsg.style.color='#7f9a8c'; gMsg.textContent=(GMSG.sending[gateLang]||GMSG.sending.es); }\n        d2.rush('idenergy-deck-save-lead').invoke({ email: em, idioma: gateLang, origem: 'idenergy-deck' }).then(function(res){\n          var out=(res && res.data) ? res.data : res;\n          if(out && out.ok){ try{ localStorage.setItem(UNLOCK_KEY,'1'); }catch(e){} reveal(); } else { throw new Error('save failed'); }\n        }).catch(function(){ submitting=false; if(gBtn)gBtn.disabled=false; if(gMsg){gMsg.style.color='';gMsg.textContent=(GMSG.err[gateLang]||GMSG.err.es);} });\n      }\n      if(gBtn) d2.on(gBtn,'click',function(){ submitGate(); });\n      if(gIn) d2.on(gIn,'keydown',function(e){ e.stopPropagation(); if(e.key==='Enter'){ e.preventDefault(); submitGate(); } });\n      d2.on(gate,'click',function(e){ e.stopPropagation(); });\n    }\n    d2.on(root.querySelector('[data-next]'),'click',function(){ show(cur+1); });\n    d2.on(root.querySelector('[data-prev]'),'click',function(){ show(cur-1); });\n    dots.forEach(function(dt){ d2.on(dt,'click',function(){ show(parseInt(dt.getAttribute('data-i'),10)); }); });\n    Array.prototype.slice.call(root.querySelectorAll('.lang button')).forEach(function(b){ d2.on(b,'click',function(){ setLang(b.getAttribute('data-l')); }); });\n    d2.on(window,'keydown',function(e){ if(!dk.isConnected)return; if(e.key==='ArrowRight'||e.key===' '){ show(cur+1); } else if(e.key==='ArrowLeft'){ show(cur-1); } else if(e.key==='Home'){ show(0); } else if(e.key==='End'){ show(n-1); } });\n    d2.on(dk,'click',function(e){ if(e.target.closest('.arw,.dot,.lang,.cue'))return; var r=dk.getBoundingClientRect(); if(e.clientX-r.left < r.width*0.30){ show(cur-1); } else if(e.clientX-r.left > r.width*0.70){ show(cur+1); } });\n    // ambient\n    var ax=amb.getContext('2d'), W=0,H=0,DP=1, orbs=[];\n    function resize(){ var r=dk.getBoundingClientRect(); W=r.width; H=r.height; DP=Math.min(2,(window.devicePixelRatio||1)); amb.width=Math.round(W*DP); amb.height=Math.round(H*DP); ax.setTransform(DP,0,0,DP,0,0); }\n    resize(); d2.on(window,'resize',resize);\n    for(var i=0;i<5;i++){ orbs.push({x:Math.random(),y:Math.random(),r:200+Math.random()*150,dx:(Math.random()-.5)*0.00006,dy:(Math.random()-.5)*0.00006,c:i%3===0?'250,72,220':'72,250,161'}); }\n    var running=true, raf=null;\n    function frame(){ if(!amb.isConnected)return; if(!running)return; ax.clearRect(0,0,W,H); ax.globalCompositeOperation='lighter';\n      for(var i=0;i<orbs.length;i++){ var o=orbs[i]; o.x+=o.dx; o.y+=o.dy; if(o.x<-.1||o.x>1.1)o.dx*=-1; if(o.y<-.1||o.y>1.1)o.dy*=-1; var g=ax.createRadialGradient(o.x*W,o.y*H,0,o.x*W,o.y*H,o.r); g.addColorStop(0,'rgba('+o.c+',0.06)'); g.addColorStop(1,'rgba('+o.c+',0)'); ax.fillStyle=g; ax.beginPath(); ax.arc(o.x*W,o.y*H,o.r,0,6.28); ax.fill(); }\n      ax.globalCompositeOperation='source-over'; raf=requestAnimationFrame(frame); }\n    if(!reduce){ raf=requestAnimationFrame(frame); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!running&&!reduce){running=true;raf=requestAnimationFrame(frame);} } else { running=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.02}); io.observe(dk);\n  }\n}\n"}}}}}}}},{"_id":"6a7a008eb908a4b0a3cf34c7","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-industrias","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;height:100%}\n*{box-sizing:border-box}\n.wrap{background:#060708;color:#F4F6F8;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;min-height:100%;height:100%;overflow-y:auto;padding:56px clamp(20px,5vw,80px) 80px}\n.hd{max-width:1120px;margin:0 auto 30px}\n.eb{font-family:'IBM Plex Mono',ui-monospace,Menlo,monospace;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:#6B7178}\n.hd h2{font-size:clamp(30px,4vw,52px);font-weight:500;letter-spacing:-.025em;margin:14px 0 0;line-height:1.02}\n.hd p{margin:14px 0 0;font-size:clamp(15px,1.6vw,19px);color:#A7ADB5;max-width:56ch}\n.stack{max-width:1120px;margin:0 auto;display:flex;flex-direction:column;gap:20px}\n.sk{color:#6B7178;font-family:'IBM Plex Mono',monospace;font-size:13px;padding:40px 0}\n`,\n  render(d2){\n    const lang = D2LANG(d2);\n    const TT = COMP_T(); const t = k => (TT[lang]&&TT[lang][k]) || TT.en[k] || k;\n    const pick = (rec,base) => { if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n    const pickName = rec => lang==='pt' ? (rec.name_pt||'') : (rec['name_'+lang] || rec.name_pt || '');\n    let ds = d2.data('industries');\n    try{ if(!ds || (!ds.loading && !(((typeof ds.records==='function'&&ds.records())||[]).length))){ const g=d2.data('cms-industriesDataSet'); if(g) ds=g; } }catch(e){ try{ ds=d2.data('cms-industriesDataSet')||ds; }catch(_){} }\n    if(!ds){ return `<div class=\"wrap\"><div class=\"sk\">${t('nods')}</div></div>`; }\n    if(ds.loading){ return `<div class=\"wrap\"><div class=\"sk\">${t('loading')}</div></div>`; }\n    let recs = (((typeof ds.records==='function'&&ds.records())||[])).filter(r=>r&&r.ativo!==false).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const cards = recs.map(function(r){ try{\n      var rawS = (lang==='pt') ? r.solucoes : (r['solucoes_'+lang] || r.solucoes);\n      var sols = parseSols(rawS);\n      var inner = d2.render('www@industry-highlight',{\n      name_pt:pickName(r), name_en:r.name_en, hue:r.hue, dor:pick(r,'dor'), oferta:pick(r,'oferta'),\n      construimos:pick(r,'construimos'), capacidades:pick(r,'capacidades'), runtimes:r.produtos_runtimes, alavancas:pick(r,'alavancas'),\n      manchete:pick(r,'manchete'),\n      sol1_t:(sols[0]&&sols[0].titulo)||'', sol1_g:(sols[0]&&sols[0].gancho)||'',\n      sol2_t:(sols[1]&&sols[1].titulo)||'', sol2_g:(sols[1]&&sols[1].gancho)||''\n    },{key:r.slug||r._id, style:'display:block;width:100%;height:auto'});\n      var sl = String(r.slug||'').replace(/[^a-zA-Z0-9\\-_]/g,'');\n      return sl ? '<div data-nav data-href=\"/industrias/'+sl+'\" style=\"cursor:pointer\">'+inner+'</div>' : inner;\n    }catch(e){ return ''; } }).join('');\n    return `<div class=\"wrap\">\n      <div class=\"hd\"><div class=\"eb\">${t('eb')}</div><h2>${t('h2')}</h2>\n      <p>${t('p')}</p></div>\n      <div class=\"stack\">${cards}</div>\n    </div>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction parseSols(raw){\n  var arr = Array.isArray(raw)?raw:[]; var out=[];\n  for(var k=0;k<arr.length;k++){ var x=arr[k], o=x;\n    if(typeof x==='string'){ try{ o=JSON.parse(x); }catch(e){ o=null; } }\n    if(o && typeof o==='object' && !Array.isArray(o) && (o.titulo||o.gancho)) out.push(o); }\n  return out;\n}\nfunction COMP_T(){ return {\n  pt:{ nods:'Sem dataset industries.', loading:'Carregando setores...', eb:'Setores', h2:'O setor muda. A distância até produção, não.', p:'A mesma plataforma, moldada para a dor de cada operação — no ar em semanas, não trimestres.' },\n  en:{ nods:'No industries dataset.', loading:'Loading sectors...', eb:'Sectors', h2:'The sector changes. The distance to production does not.', p:'The same platform, shaped to each operation’s pain — live in weeks, not quarters.' },\n  es:{ nods:'Sin dataset industries.', loading:'Cargando sectores...', eb:'Sectores', h2:'El sector cambia. La distancia a producción, no.', p:'La misma plataforma, moldeada al dolor de cada operación — en el aire en semanas, no trimestres.' }\n}; }"}},"industries":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"industries"}}}}}}}}}},{"_id":"6a7a00b54def1d6e41b86896","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"industry-highlight","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block}\n*{box-sizing:border-box}\n.ih{--s1:#0C0E11;--s2:#14171B;--hi:#F4F6F8;--mid:#A7ADB5;--low:#6B7178;--hair:rgba(255,255,255,.08);--mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;--disp:'Helvetica Neue',Helvetica,Arial,sans-serif;position:relative;background:var(--s1);border:1px solid var(--hair);border-radius:18px;padding:34px 34px 30px;color:var(--hi);font-family:var(--disp);overflow:hidden}\n.ih::before{content:'';position:absolute;inset:0 0 auto 0;height:3px;background:var(--hue)}\n.glow{position:absolute;top:-120px;right:-80px;width:340px;height:340px;border-radius:50%;background:radial-gradient(circle,var(--hue),transparent 70%);opacity:.14;pointer-events:none}\n.eb{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--low);display:flex;align-items:center;gap:9px}\n.eb .d{width:8px;height:8px;border-radius:50%;background:var(--hue);box-shadow:0 0 12px 1px var(--hue)}\nh3.nm{font-size:clamp(26px,3vw,40px);font-weight:500;letter-spacing:-.02em;margin:14px 0 0;line-height:1.02}\n.lead{margin:12px 0 0;font-size:clamp(15px,1.5vw,19px);line-height:1.45;color:var(--hi);max-width:60ch}\n.man{margin:14px 0 0;font-size:clamp(18px,2vw,26px);line-height:1.25;letter-spacing:-.015em;color:var(--hi);font-weight:600;max-width:32ch;text-wrap:balance}\n.sols{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:22px}\n.sols .sol{background:var(--s2);border:1px solid var(--hair);border-radius:12px;padding:16px 17px;transition:border-color .16s}\n.ih:hover .sols .sol{border-color:rgba(255,255,255,.16)}\n.sols .st{font-size:14.5px;font-weight:600;color:var(--hi);line-height:1.3}\n.sols .st .m{color:var(--hue);font-size:9px;margin-right:7px;vertical-align:2px}\n.sols .sg{margin-top:7px;font-size:13px;line-height:1.45;color:var(--mid)}\n.two{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:22px}\n.box{background:var(--s2);border:1px solid var(--hair);border-radius:12px;padding:15px 16px}\n.box .k{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--low);margin-bottom:7px}\n.box .v{font-size:14px;line-height:1.45;color:var(--mid)}\n.caps{margin-top:18px;display:grid;grid-template-columns:1fr 1fr;gap:8px}\n.cap{display:flex;gap:9px;align-items:flex-start;font-size:13.5px;line-height:1.35;color:var(--mid)}\n.cap .m{color:var(--hue);flex:none;margin-top:1px;font-size:10px}\n.foot{margin-top:22px;display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;border-top:1px solid var(--hair);padding-top:18px}\n.rts{display:flex;gap:7px;flex-wrap:wrap}\n.rt{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--mid);border:1px solid var(--hair);border-radius:999px;padding:5px 11px;background:var(--s2)}\n.alv{display:flex;gap:22px;flex-wrap:wrap}\n.al{font-family:var(--mono);font-size:13px;color:var(--hue);display:flex;align-items:center;gap:7px}\n.al::before{content:'▸';opacity:.7}\n@media(max-width:640px){.two,.caps,.sols{grid-template-columns:1fr}}\n`,\n  render(d2){\n    const p = d2.params;\n    const lang = D2LANG(d2);\n    const TT = IH_T();\n    const t = k => (TT[lang] && TT[lang][k]) || TT.en[k] || k;\n    const esc = s => String(s==null?'':s).replace(/[&<>]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;'}[c]));\n    const hue = p.hue || '#2E8CFF';\n    const caps = Array.isArray(p.capacidades)?p.capacidades:[];\n    const rts = Array.isArray(p.runtimes)?p.runtimes:[];\n    const alv = Array.isArray(p.alavancas)?p.alavancas:[];\n    const hasNew = !!(p.manchete || p.sol1_t);\n    const solTeaser = [[p.sol1_t,p.sol1_g],[p.sol2_t,p.sol2_g]].filter(s=>s[0]).map(s=>`<div class=\"sol\"><div class=\"st\"><span class=\"m\">◆</span>${esc(s[0])}</div><div class=\"sg\">${esc(s[1]||'')}</div></div>`).join('');\n    const bodyNew = `<div class=\"man\">${esc(p.manchete||p.construimos||'')}</div>`+(solTeaser?`<div class=\"sols\">${solTeaser}</div>`:'');\n    const bodyOld = `<div class=\"lead\">${esc(p.construimos||'')}</div>\n      <div class=\"two\">\n        <div class=\"box\"><div class=\"k\">${esc(t('pain'))}</div><div class=\"v\">${esc(p.dor||'')}</div></div>\n        <div class=\"box\"><div class=\"k\">${esc(t('runs'))}</div><div class=\"v\">${esc(p.oferta||'')}</div></div>\n      </div>\n      <div class=\"caps\">${caps.map(c=>`<div class=\"cap\"><span class=\"m\">◆</span><span>${esc(c)}</span></div>`).join('')}</div>`;\n    return `<section class=\"ih\" style=\"--hue:${esc(hue)}\">\n      <div class=\"glow\"></div>\n      <div class=\"eb\"><span class=\"d\"></span> ${esc(p.name_en||t('sector'))}</div>\n      <h3 class=\"nm\">${esc(p.name_pt||'')}</h3>\n      ${hasNew ? bodyNew : bodyOld}\n      <div class=\"foot\">\n        <div class=\"rts\">${rts.map(r=>`<span class=\"rt\">${esc(r)}</span>`).join('')}</div>\n        <div class=\"alv\">${alv.map(a=>`<span class=\"al\">${esc(a)}</span>`).join('')}</div>\n      </div>\n    </section>`;\n  }\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction IH_T(){ return {\n  pt:{ pain:'A dor', runs:'Como roda', sector:'Setor' },\n  en:{ pain:'The pain', runs:'How it runs', sector:'Sector' },\n  es:{ pain:'El dolor', runs:'Cómo funciona', sector:'Sector' }\n}; }"}},"name_pt":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"name_pt"}}}},"name_en":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"name_en"}}}},"hue":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"hue"}}}},"dor":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"dor"}}}},"oferta":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"oferta"}}}},"construimos":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"construimos"}}}},"capacidades":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"capacidades"}}}},"runtimes":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"runtimes"}}}},"alavancas":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"alavancas"}}}},"manchete":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"manchete"}}}},"sol1_t":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sol1_t"}}}},"sol1_g":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sol1_g"}}}},"sol2_t":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sol2_t"}}}},"sol2_g":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sol2_g"}}}}}}}}}},{"_id":"6a7b0e41fd6bd0a3b4a1f55a","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"site-menu","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;height:100%}\n*{box-sizing:border-box}\n.wrap{--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;background:var(--surface-0);color:var(--ink-hi);font-family:var(--font-display);--verme:#E93355;height:auto;width:100%;overflow:visible}\nheader.hd{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:22px;padding:14px 32px;background:rgba(6,7,8,.72);backdrop-filter:blur(20px);border-bottom:1px solid var(--hairline)}\n.logo{cursor:pointer;display:inline-flex;align-items:center}\n.wm{height:20px;width:auto;display:block}\n.fbrand .wm{height:26px;width:auto;display:block}\n.drawer-top .wm{height:22px}\nnav.top{display:flex;gap:22px;margin-left:12px}\nnav.top a{color:var(--ink-mid);text-decoration:none;font-size:14px;cursor:pointer}\nnav.top a.active,nav.top a:hover{color:var(--ink-hi)}\n.navitem{position:relative;display:inline-flex;align-items:center}\n.navitem .navlbl{color:var(--ink-mid);font-size:14px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:color .16s}\n.navitem .navlbl::after{content:'';width:5px;height:5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);margin-top:-2px;opacity:.45;transition:transform .18s,opacity .18s}\n.navitem:hover .navlbl,.navitem.mopen .navlbl,.navitem.active .navlbl,.navitem .navlbl.active{color:var(--ink-hi)}\n.navitem.mopen .navlbl::after{transform:rotate(-135deg);opacity:.9}\n.megapanel{position:fixed;top:var(--hd-h,65px);left:0;right:0;z-index:200;background:rgba(9,11,13,.92);backdrop-filter:blur(26px) saturate(1.1);border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);box-shadow:0 40px 90px rgba(0,0,0,.55);opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .18s ease,transform .18s ease,visibility .18s;pointer-events:none}\n.megapanel.open{opacity:1;visibility:visible;transform:none;pointer-events:auto}\n.megainner{max-width:1160px;margin:0 auto;padding:26px 32px 30px}\n.megahead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:18px}\n.megahead .mt{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-low)}\n.megahead .mall{color:var(--verme);font-size:13px;text-decoration:none;cursor:pointer}\n.megahead .mall:hover{opacity:.8}\n.mega-grid{display:grid;gap:14px}\n.mg-plat{grid-template-columns:1fr 1fr 1.15fr}\n.mcol{display:flex;flex-direction:column;gap:4px}\n.mcol-h{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low);margin-bottom:6px}\n.mitem{display:block;text-decoration:none;border-radius:10px;padding:9px 12px;transition:background .16s;cursor:pointer}\n.mitem:hover{background:rgba(255,255,255,.05)}\n.mitem .mi-t{color:var(--ink-hi);font-size:14.5px}\n.mitem .mi-d{color:var(--ink-mid);font-size:12.5px;line-height:1.4;margin-top:3px}\n.mcol-rt{border-left:1px solid var(--hairline);padding-left:18px}\n.mrt{display:flex;align-items:center;gap:10px;text-decoration:none;border-radius:10px;padding:8px 12px;cursor:pointer;transition:background .16s}\n.mrt:hover{background:rgba(255,255,255,.05)}\n.mrt .mrt-dot{width:9px;height:9px;border-radius:3px;flex:none;box-shadow:0 0 10px var(--accent)}\n.mrt .mrt-n{color:var(--ink-hi);font-family:var(--font-mono);font-size:13px;letter-spacing:.04em}\n.mrt .mrt-p{color:var(--ink-mid);font-size:11.5px;margin-left:auto;text-align:right;max-width:19ch;line-height:1.3}\n.mcol-rt .mrt{padding:6px 12px}\n.mcol-rt .mrt-cap{color:var(--ink-mid);font-size:11.5px;line-height:1.4;margin:-2px 0 9px;max-width:30ch}\n.mrt .mrt-live{color:var(--verme);font-size:11px;max-width:none;margin-left:auto}\n.mg-prod{grid-template-columns:repeat(4,1fr)}\n.mprod{display:block;text-decoration:none;border:1px solid var(--hairline);border-radius:12px;padding:14px 15px;background:rgba(255,255,255,.02);transition:.16s;cursor:pointer}\n.mprod:hover{border-color:var(--accent);transform:translateY(-2px)}\n.mprod.soon{cursor:default;opacity:.72}\n.mprod.soon:hover{transform:none;border-color:var(--hairline)}\n.mprod .mp-n{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:13px;letter-spacing:.08em;color:var(--ink-hi)}\n.mprod .mp-n .chip{width:9px;height:9px;border-radius:3px}\n.mprod .mp-soon{font-family:var(--font-mono);font-size:9px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 5px;margin-left:auto;letter-spacing:.04em}\n.mprod .mp-t{color:var(--ink-mid);font-size:12px;line-height:1.4;margin-top:8px}\n.mg-ind{grid-template-columns:repeat(3,1fr)}\n.mind{display:block;text-decoration:none;border:1px solid var(--hairline);border-radius:12px;padding:13px 15px;background:rgba(255,255,255,.02);transition:.16s;cursor:pointer}\n.mind:hover{border-color:var(--accent);transform:translateY(-2px)}\n.mind .mi2-n{display:flex;align-items:center;gap:8px;font-size:14.5px;color:var(--ink-hi)}\n.mind .mi2-n .chip{width:10px;height:10px;border-radius:3px}\n.mind .mi2-d{color:var(--ink-mid);font-size:12px;line-height:1.45;margin-top:7px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n@media(max-width:900px){.megapanel{display:none!important}}\n.spacer{flex:1}\n.lang{color:var(--ink-mid);font-size:13px;margin-right:6px}\n.cta{background:var(--action);color:#fff;border:none;border-radius:8px;padding:10px 16px;font-size:14px;cursor:pointer;font-family:inherit}\n.cta:hover{background:var(--action-hi)}\n.lang{display:inline-flex;align-items:center;gap:5px}\n.lang .glb{width:13px;height:13px;opacity:.65}\n.lgs{display:inline-flex;align-items:center;gap:6px}\n.lgs .lg{cursor:pointer;color:var(--ink-low);font-size:13px;letter-spacing:.02em;transition:color .15s;-webkit-user-select:none;user-select:none}\n.lgs .lg:hover{color:var(--ink-mid)}\n.lgs .lg.on{color:var(--ink-hi);font-weight:700}\n.lgs i{color:var(--ink-faint);font-style:normal;font-size:11px;margin:0 1px}\n.burger{display:none;flex-direction:column;justify-content:center;gap:4px;width:40px;height:40px;padding:0;border:1px solid var(--hairline);border-radius:9px;background:rgba(255,255,255,.03);cursor:pointer}\n.burger span{display:block;width:17px;height:1.6px;margin:0 auto;background:var(--ink-hi);transition:.2s}\n.drawer{position:fixed;inset:0;z-index:300;visibility:hidden;opacity:0;transition:opacity .22s ease}\n.drawer.open{visibility:visible;opacity:1}\n.drawer-scrim{position:absolute;inset:0;background:rgba(4,5,6,.62);backdrop-filter:blur(4px)}\n.drawer-inner{position:absolute;top:0;right:0;height:100%;width:min(86vw,340px);background:rgba(9,11,13,.98);border-left:1px solid var(--hairline);box-shadow:-30px 0 80px rgba(0,0,0,.6);transform:translateX(103%);transition:transform .28s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;padding:18px 20px 28px;overflow-y:auto}\n.drawer.open .drawer-inner{transform:none}\n.drawer-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}\n.drawer-x{background:none;border:none;color:var(--ink-mid);font-size:19px;cursor:pointer;width:40px;height:40px}\n.drawer-nav{display:flex;flex-direction:column}\n.drawer-nav a{color:var(--ink-hi);text-decoration:none;font-size:18px;padding:15px 4px;border-bottom:1px solid var(--hairline);cursor:pointer}\n.drawer-nav a:active{color:var(--action)}\n.drawer-cta{margin-top:22px;width:100%;padding:14px;font-size:15px;border-radius:10px}\n@media(max-width:900px){nav.top{display:none}.burger{display:flex}}\n`,\n  render(d2){\n    let R=null; try{ R = d2.router ? d2.router('site_router') : null; }catch(e){ R=null; }\n    let rpath = (R && typeof R.path === 'string') ? (R.path || '/') : null;\n    const path = rpath || d2.state.path || '/';\n    const params = (R && R.params) || {};\n    var lang = D2LANG(d2); var TT = MENU_T(); var t = function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; }; var pick = function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang]||rec[base]||''; };\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const nav = dd('cms-nav-itemsDataSet');\n    const top = nav.filter(n=>n.kind==='top').sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const cta = nav.find(n=>n.kind==='cta') || {label:t('cta_fallback'),href:'/consultoria'};\n    const foot = nav.filter(n=>n.kind==='footer').sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n\n    const megaKeys = {'/plataforma':'plataforma','/produtos':'produtos','/industrias':'industrias'};\n    const isActive = h => (h==='/'? path==='/' : (path===h || path.indexOf(h+'/')===0));\n    const navHtml = top.map(n=>{\n      const mk = megaKeys[n.href];\n      const cls = isActive(n.href)?'active':'';\n      if(mk){ return `<div class=\"navitem has-mega ${cls}\" data-mega=\"${mk}\"><span class=\"navlbl ${cls}\">${esc(pick(n,'label'))}</span></div>`; }\n      return `<a data-nav data-href=\"${esc(n.href)}\" class=\"${cls}\">${esc(pick(n,'label'))}</a>`;\n    }).join('');\n    const megaProds = (dd('cms-productsDataSet')||[]).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const megaInds = (dd('cms-industriesDataSet')||[]).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const megaRts = (dd('cms-runtimesDataSet')||[]);\n    const megaConcepts = nav.filter(n=>n.kind==='mega'&&n.href.indexOf('/runtimes/')<0).sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const megaRuntimes = nav.filter(n=>n.kind==='mega'&&n.href.indexOf('/runtimes/')>=0).sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const blurbs = {'/plataforma/como-funciona':t('blurb_how'),'/plataforma/data2-lang':t('blurb_lang'),'/plataforma/data-framework':t('blurb_framework'),'/plataforma/agent-native':t('blurb_agent')};\n    const rtMeta = {}; megaRts.forEach(r=>{ rtMeta[r.name]={papel:r.papel,accent:r.accent}; });\n    const conceptCols = [megaConcepts.slice(0,2), megaConcepts.slice(2,4)];\n    const liveMap = {}; megaRuntimes.forEach(r=>{ liveMap[(r.label||'').toLowerCase()] = r.href; });\n    const megaPlat = `<div class=\"megapanel\" data-megapanel=\"plataforma\"><div class=\"megainner\"><div class=\"megahead\"><span class=\"mt\">${t('plat_eyebrow')}</span><a class=\"mall\" data-nav data-href=\"/plataforma\">${t('plat_all')}</a></div><div class=\"mega-grid mg-plat\">${conceptCols.map(col=>`<div class=\"mcol\">${col.map(c=>`<a class=\"mitem\" data-nav data-href=\"${esc(c.href)}\"><div class=\"mi-t\">${esc(pick(c,'label'))}</div><div class=\"mi-d\">${esc(blurbs[c.href]||'')}</div></a>`).join('')}</div>`).join('')}<div class=\"mcol mcol-rt\"><div class=\"mcol-h\">${t('plat_comps')}</div><div class=\"mrt-cap\">${t('plat_cap')}</div>${megaProds.map(p=>{const ac=esc(p.accent||'#3A7BFF');const live=liveMap[(p.key||'').toLowerCase()];const href=esc(live||'/produtos');return `<a class=\"mrt\" data-nav data-href=\"${href}\" style=\"--accent:${ac}\"><span class=\"mrt-dot\" style=\"background:${ac}\"></span><span class=\"mrt-n\">${esc(pick(p,'name'))}</span>${live?'<span class=\"mrt-p mrt-live\">'+t('live')+'</span>':''}</a>`;}).join('')}</div></div></div></div>`;\n    const megaProd = `<div class=\"megapanel\" data-megapanel=\"produtos\"><div class=\"megainner\"><div class=\"megahead\"><span class=\"mt\">${t('prod_eyebrow')}</span><a class=\"mall\" data-nav data-href=\"/produtos\">${t('prod_all')}</a></div><div class=\"mega-grid mg-prod\">${megaProds.map(p=>{const ac=esc(p.accent||'#3A7BFF');const soon=p.status==='em-breve';return `<a class=\"mprod${soon?' soon':''}\" ${soon?'':`data-nav data-href=\"/produtos\"`} style=\"--accent:${ac}\"><div class=\"mp-n\"><span class=\"chip\" style=\"background:${ac}\"></span>${esc(pick(p,'name'))}${soon?'<span class=\"mp-soon\">'+t('soon')+'</span>':''}</div><div class=\"mp-t\">${esc(pick(p,'tagline'))}</div></a>`;}).join('')}</div></div></div>`;\n    const megaInd = `<div class=\"megapanel\" data-megapanel=\"industrias\"><div class=\"megainner\"><div class=\"megahead\"><span class=\"mt\">${t('ind_eyebrow')}</span><a class=\"mall\" data-nav data-href=\"/industrias\">${t('ind_all')}</a></div><div class=\"mega-grid mg-ind\">${megaInds.map(i=>{const hue=esc(i.hue||'#3A7BFF');return `<a class=\"mind\" data-nav data-href=\"/industrias/${esc(i.slug)}\" style=\"--accent:${hue}\"><div class=\"mi2-n\"><span class=\"chip\" style=\"background:${hue}\"></span>${esc(lang==='pt'?i.name_pt:(i['name_'+lang]||i.name_pt))}</div><div class=\"mi2-d\">${esc(pick(i,'dor'))}</div></a>`;}).join('')}</div></div></div>`;\n    const megaPanels = megaPlat + megaProd + megaInd;\n    const header = `${D2WM()}<header class=\"hd\">\n      <div class=\"logo\" data-nav data-href=\"/\"><svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><use href=\"#d2wm\"/></svg></div>\n      <nav class=\"top\">${navHtml}</nav>\n      <div class=\"spacer\"></div>\n      <span class=\"lang\"><svg class=\"glb\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18\"/><path d=\"M12 3c2.6 2.7 2.6 15.4 0 18M12 3c-2.6 2.7-2.6 15.4 0 18\"/></svg><span class=\"lgs\">${['pt','en','es'].map(function(lc){return '<span class=\"lg'+(lang===lc?' on':'')+'\" data-locale=\"'+lc+'\">'+lc.toUpperCase()+'</span>';}).join('<i>·</i>')}</span></span>\n      <button class=\"cta\" data-nav data-href=\"${esc(cta.href)}\">${esc(pick(cta,'label'))} →</button>\n      <button class=\"burger\" data-burger aria-label=\"Menu\" aria-expanded=\"false\"><span></span><span></span><span></span></button>\n    </header>\n    <div class=\"drawer\" data-drawer><div class=\"drawer-scrim\" data-drawer-close></div><div class=\"drawer-inner\"><div class=\"drawer-top\"><svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><use href=\"#d2wm\"/></svg><button class=\"drawer-x\" data-drawer-close aria-label=\"${t('close')}\"><svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\"/></svg></button></div><nav class=\"drawer-nav\">${top.map(n=>`<a data-nav data-href=\"${esc(n.href)}\">${esc(pick(n,'label'))}</a>`).join('')}</nav><button class=\"cta drawer-cta\" data-nav data-href=\"${esc(cta.href)}\">${esc(pick(cta,'label'))} →</button></div></div>${megaPanels}`;\n    return `<div class=\"wrap\" id=\"scrollwrap\">${header}</div>`;\n  },\n  mounted(d2, root){\n    try{ var saved=localStorage.getItem('d2_site_lang'); if(saved&&['pt','en','es'].indexOf(saved)>=0){ var s=d2.store('siteLocale'); if(s&&s.get('lang')!==saved) s.set('lang',saved); } }catch(_){}\n    d2.on('[data-locale]','click',function(e){ var el=e.target.closest('[data-locale]'); if(!el) return; e.preventDefault(); e.stopPropagation(); var lg=el.getAttribute('data-locale'); try{ d2.store('siteLocale').set('lang',lg); }catch(_){} try{ localStorage.setItem('d2_site_lang',lg); }catch(_){} });\n    d2.on('[data-nav]','click',(e)=>{\n      const el = e.target.closest('[data-nav]');\n      if(!el) return;\n      const h = el.getAttribute('data-href');\n      if(h){ e.preventDefault(); d2.state.path = h; const w=d2.$('#scrollwrap'); if(w) w.scrollTop=0; try{ d2.router('site_router').goTo(h); }catch(_){} }\n    });\n    megaSetup(d2);\n    drawerSetup(d2);\n  }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction MENU_T(){ return {\n  pt:{plat_eyebrow:'A plataforma',plat_all:'Ver visão geral →',plat_comps:'Os componentes da runtime',plat_cap:'Data² é a runtime — os oito produtos que você compra são componentes dela.',live:'ao vivo →',prod_eyebrow:'Produtos — o que você compra',prod_all:'Ver todos →',ind_eyebrow:'Nove indústrias, uma runtime',ind_all:'Ver todas →',soon:'em breve',cta_fallback:'Falar com a gente',close:'Fechar',blurb_how:'Da necessidade ao sistema em produção.',blurb_lang:'A linguagem única da runtime.',blurb_framework:'DataSource → DataSet → o dado é seu.',blurb_agent:'O builder, também aberto a agentes.'},\n  en:{plat_eyebrow:'The platform',plat_all:'See overview →',plat_comps:'The components of the runtime',plat_cap:'Data² is the runtime — the eight products you buy are its components.',live:'live →',prod_eyebrow:'Products — what you buy',prod_all:'See all →',ind_eyebrow:'Nine industries, one runtime',ind_all:'See all →',soon:'soon',cta_fallback:'Talk to us',close:'Close',blurb_how:'From necessity to a system in production.',blurb_lang:'The one language of the runtime.',blurb_framework:'DataSource → DataSet → the data is yours.',blurb_agent:'The builder, also open to agents.'},\n  es:{plat_eyebrow:'La plataforma',plat_all:'Ver visión general →',plat_comps:'Los componentes del runtime',plat_cap:'Data² es el runtime — los ocho productos que compras son sus componentes.',live:'en vivo →',prod_eyebrow:'Productos — lo que compras',prod_all:'Ver todos →',ind_eyebrow:'Nueve industrias, un solo runtime',ind_all:'Ver todas →',soon:'pronto',cta_fallback:'Hablar con nosotros',close:'Cerrar',blurb_how:'De la necesidad al sistema en producción.',blurb_lang:'El lenguaje único del runtime.',blurb_framework:'DataSource → DataSet → el dato es tuyo.',blurb_agent:'El builder, también abierto a agentes.'}\n}; }\nfunction D2WM(){return '<svg width=\"0\" height=\"0\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><symbol id=\"d2wm\" viewBox=\"0 0 459.554 148.471\"><g transform=\"translate(-678.859 -300.605)\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\" fill=\"#fff\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\" fill=\"#fff\"/></g></symbol></svg>';}\nfunction megaSetup(d2){\n  const root = d2.root || (typeof document!=='undefined'?document:null);\n  if(!root) return;\n  let closeTimer=null;\n  const kill=()=>{ if(closeTimer){clearTimeout(closeTimer);closeTimer=null;} };\n  const panels = ()=> Array.prototype.slice.call(root.querySelectorAll('[data-megapanel]'));\n  const trigs = ()=> Array.prototype.slice.call(root.querySelectorAll('[data-mega]'));\n  const openMenu=(key)=>{ kill(); const hd=root.querySelector('header.hd'); const hb=hd?Math.round(hd.getBoundingClientRect().height):65; panels().forEach(p=>{ p.style.top=hb+'px'; p.classList.toggle('open',p.getAttribute('data-megapanel')===key); }); trigs().forEach(t=>t.classList.toggle('mopen',t.getAttribute('data-mega')===key)); };\n  const closeAll=()=>{ kill(); panels().forEach(p=>p.classList.remove('open')); trigs().forEach(t=>t.classList.remove('mopen')); };\n  const scheduleClose=()=>{ kill(); closeTimer=setTimeout(closeAll,180); };\n  d2.on(root,'mouseover',(e)=>{ const t=e.target.closest&&e.target.closest('[data-mega]'); if(t){ openMenu(t.getAttribute('data-mega')); return; } if(e.target.closest&&e.target.closest('[data-megapanel]')){ kill(); } });\n  d2.on(root,'mouseout',(e)=>{ const from=e.target.closest&&(e.target.closest('[data-mega]')||e.target.closest('[data-megapanel]')); if(!from) return; const to=e.relatedTarget; const stay=to&&to.closest&&(to.closest('[data-mega]')||to.closest('[data-megapanel]')); if(!stay) scheduleClose(); });\n  d2.on('[data-mega]','click',(e)=>{ const t=e.target.closest('[data-mega]'); if(!t) return; e.preventDefault(); const key=t.getAttribute('data-mega'); if(t.classList.contains('mopen')) closeAll(); else openMenu(key); });\n  d2.on(root,'click',(e)=>{ if(!(e.target.closest&&(e.target.closest('[data-mega]')||e.target.closest('[data-megapanel]')))) closeAll(); });\n  d2.on(root,'keydown',(e)=>{ if(e.key==='Escape'||e.keyCode===27) closeAll(); });\n}\nfunction drawerSetup(d2){\n  const root = d2.root || (typeof document!=='undefined'?document:null); if(!root) return;\n  const dr = function(){ return root.querySelector('[data-drawer]'); };\n  const close = function(){ const d=dr(); if(d) d.classList.remove('open'); };\n  d2.on('[data-burger]','click',function(e){ e.preventDefault(); const d=dr(); if(d) d.classList.toggle('open'); });\n  d2.on('[data-drawer-close]','click',function(e){ e.preventDefault(); close(); });\n  d2.on(root,'keydown',function(e){ if(e.key==='Escape'||e.keyCode===27) close(); });\n}"}}}}}}}},{"_id":"6a7b12fd0c3e9170c50c6189","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"site-shell-v3","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;height:100%}\n*{box-sizing:border-box}\n.wrap{--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;background:var(--surface-0);color:var(--ink-hi);font-family:var(--font-display);--verme:#E93355;height:100vh;width:100%;overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth;-webkit-overflow-scrolling:touch}\n.pagehost{width:100%;display:block}\n.wm{height:20px;width:auto;display:block}\n.fbrand .wm{height:26px;width:auto;display:block}\n.cardd{font-size:13px;color:var(--ink-mid);line-height:1.45}\n.mig{min-height:64vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;padding:80px 24px}\n.mig .em{font-family:var(--font-mono);font-size:14px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-mid)}\n.mig .path{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-faint)}\nfooter{border-top:1px solid var(--hairline);background:var(--surface-1);padding:48px 32px}\n.fcols{max-width:1160px;margin:0 auto;display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr;gap:24px}\n.fbrand{font-weight:700;font-size:18px}\n.fcol h4{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-low);margin:0 0 12px}\n.fcol a{display:block;color:var(--ink-mid);text-decoration:none;font-size:14px;margin-bottom:8px;cursor:pointer}\n.fcol a:hover{color:var(--ink-hi)}\n.fcol a.flang{cursor:pointer;display:inline-block;margin-right:12px}\n.fcol a.flang.on{color:var(--ink-hi);font-weight:700}\n.seal{max-width:1160px;margin:26px auto 0;font-size:12px;color:var(--ink-low);display:flex;gap:8px;align-items:center}\n.dot{width:6px;height:6px;border-radius:50%;background:var(--action);display:inline-block}\n@media(max-width:900px){.fcols{grid-template-columns:1fr 1fr}footer{padding:40px 18px}}\n@media(max-width:560px){.fcols{grid-template-columns:1fr}}\n`,\n  render(d2){\n    let R=null; try{ R = d2.router ? d2.router('site_router') : null; }catch(e){ R=null; }\n    let rpath = (R && typeof R.path === 'string') ? (R.path || '/') : null;\n    const path = rpath || d2.state.path || '/';\n    const params = (R && R.params) || {};\n    var lang = D2LANG(d2); var TT = SHELL_T(); var t = function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; };\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const nav = dd('cms-nav-itemsDataSet');\n    const foot = nav.filter(n=>n.kind==='footer').sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    const pick = (rec,base)=>{ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n\n    const header = d2.render('www@site-menu', {}, { style:'position:sticky;top:0;z-index:50;height:auto;display:block;width:100%' });\n\n    const footer = `<footer><div class=\"fcols\">\n      <div class=\"fcol\"><div class=\"fbrand\"><svg class=\"wm\" viewBox=\"0 0 459.554 148.471\" role=\"img\" aria-label=\"Data²\"><use href=\"#d2wm\"/></svg></div><div class=\"cardd\" style=\"margin-top:10px;max-width:30ch\">${t('brand_tag')}</div></div>\n      <div class=\"fcol\"><h4>${t('col_platform')}</h4><a data-nav data-href=\"/plataforma\">${t('link_how')}</a><a data-nav data-href=\"/produtos\">${t('link_products')}</a><a data-nav data-href=\"/plataforma/data-framework\">${t('link_framework')}</a></div>\n      <div class=\"fcol\"><h4>${t('col_industries')}</h4><a data-nav data-href=\"/industrias\">${t('link_all')}</a><a data-nav data-href=\"/casos\">${t('link_cases')}</a></div>\n      <div class=\"fcol\"><h4>${t('col_company')}</h4>${foot.map(f=>`<a data-nav data-href=\"${esc(f.href)}\">${esc(pick(f,'label'))}</a>`).join('')}</div>\n      <div class=\"fcol\"><h4>${t('col_language')}</h4>${['pt','en','es'].map(function(lc){return '<a class=\"flang'+(lang===lc?' on':'')+'\" data-locale=\"'+lc+'\">'+lc.toUpperCase()+'</a>';}).join('')}</div>\n    </div><div class=\"seal\"><span class=\"dot\"></span> ${t('seal')}</div></footer>`;\n\n    const disp = dispatch(path, params);\n    const KNOWN = ['www@page-home','www@page-industrias','www@page-plataforma','www@page-comofunciona','www@page-dataframework','www@page-agentnative','www@page-data2lang','www@page-produtos','www@page-industria','www@page-consultoria','www@page-precos','www@page-empresa','www@page-contato','www@page-carreiras','www@page-recursos','www@page-casos','www@page-caso','www@page-produto','www@page-runtime']; // pages that exist today — extend as each page component ships\n    // datasets a page component needs as params: child-param-name -> global CMS dataset ref\n    const PAGE_DATA = { 'www@page-industrias': { industries: 'cms-industriesDataSet' } };\n    let body;\n    if (disp.ref && KNOWN.indexOf(disp.ref) >= 0) {\n      const pp = Object.assign({}, disp.pageParams);\n      const dmap = PAGE_DATA[disp.ref];\n      if (dmap) { for (const k in dmap){ pp[k] = dmap[k]; } }\n      try { body = d2.render(disp.ref, pp, { style:'height:auto;width:100%;display:block' }); }\n      catch(e){ body = MIG(esc, path, t); }\n    } else {\n      body = MIG(esc, path, t);\n    }\n\n    return `${D2WM()}<div class=\"wrap\" id=\"scrollwrap\">${header}<div class=\"pagehost\">${body}</div>${footer}</div>`;\n  },\n  mounted(d2, root){\n    d2.on('[data-locale]','click',function(e){ var el=e.target.closest('[data-locale]'); if(!el) return; e.preventDefault(); e.stopPropagation(); var lg=el.getAttribute('data-locale'); try{ d2.store('siteLocale').set('lang',lg); }catch(_){} try{ localStorage.setItem('d2_site_lang',lg); }catch(_){} });\n    d2.on('[data-nav]','click',(e)=>{\n      const el = e.target.closest('[data-nav]');\n      if(!el) return;\n      const h = el.getAttribute('data-href');\n      if(h){ e.preventDefault(); d2.state.path = h; const w=d2.$('#scrollwrap'); if(w) w.scrollTop=0; try{ d2.router('site_router').goTo(h); }catch(_){} }\n    });\n  }\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction SHELL_T(){ return {\n  pt:{brand_tag:'Necessidade elevada à produção.',col_platform:'Plataforma',link_how:'Como funciona',link_products:'Produtos',link_framework:'Data Framework',col_industries:'Indústrias',link_all:'Ver todas',link_cases:'Casos',col_company:'Empresa',col_language:'Idioma',seal:'Feito no runtime Data²',mig:'· em migração ·'},\n  en:{brand_tag:'Necessity, raised to production.',col_platform:'Platform',link_how:'How it works',link_products:'Products',link_framework:'Data Framework',col_industries:'Industries',link_all:'See all',link_cases:'Cases',col_company:'Company',col_language:'Language',seal:'Built on the Data² runtime',mig:'· migration in progress ·'},\n  es:{brand_tag:'La necesidad, elevada a producción.',col_platform:'Plataforma',link_how:'Cómo funciona',link_products:'Productos',link_framework:'Data Framework',col_industries:'Industrias',link_all:'Ver todas',link_cases:'Casos',col_company:'Empresa',col_language:'Idioma',seal:'Hecho en el runtime Data²',mig:'· en migración ·'}\n}; }\nfunction dispatch(path, params){\n  const seg = (path||'/').split('/').filter(Boolean);\n  const exact = {\n    '/': 'www@page-home',\n    '/plataforma': 'www@page-plataforma',\n    '/plataforma/como-funciona': 'www@page-comofunciona',\n    '/plataforma/data-framework': 'www@page-dataframework',\n    '/plataforma/agent-native': 'www@page-agentnative',\n    '/plataforma/data2-lang': 'www@page-data2lang',\n    '/produtos': 'www@page-produtos',\n    '/industrias': 'www@page-industrias',\n    '/casos': 'www@page-casos',\n    '/consultoria': 'www@page-consultoria',\n    '/precos': 'www@page-precos',\n    '/empresa': 'www@page-empresa',\n    '/empresa/contato': 'www@page-contato',\n    '/empresa/carreiras': 'www@page-carreiras',\n    '/recursos': 'www@page-recursos'\n  };\n  if (exact[path]) return { ref: exact[path], pageParams: {} };\n  if (seg[0]==='plataforma' && seg[1]==='runtimes' && seg[2]) return { ref:'www@page-runtime', pageParams:{ key: params.key || seg[2], rkey: params.key || seg[2] } };\n  if (seg[0]==='produtos' && seg[1]) return { ref:'www@page-produto', pageParams:{ slug: params.slug || seg[1] } };\n  if (seg[0]==='industrias' && seg[1]) return { ref:'www@page-industria', pageParams:{ slug: params.slug || seg[1] } };\n  if (seg[0]==='casos' && seg[1]) return { ref:'www@page-caso', pageParams:{ slug: params.slug || seg[1] } };\n  return { ref:null, pageParams:{} };\n}\n\nfunction MIG(esc, path, t){\n  return `<div class=\"mig\"><div class=\"em\">${t('mig')}</div><div class=\"path\">${esc(path)}</div></div>`;\n}\n\nfunction D2WM(){return '<svg width=\"0\" height=\"0\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><symbol id=\"d2wm\" viewBox=\"0 0 459.554 148.471\"><g transform=\"translate(-678.859 -300.605)\"><path d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6T203.1-77.5a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\" transform=\"translate(664.5 447)\" fill=\"#fff\"/><path d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\" transform=\"translate(1095.5 395)\" fill=\"#fff\"/></g></symbol></svg>';}\n"}}}}}}}},{"_id":"6a7b1922c9940e37623c4579","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-plataforma","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n@media(max-width:900px){.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.p-map{position:relative;margin-top:44px;padding:44px 0 8px}\n.p-rail{position:absolute;top:66px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.6}\n.p-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;position:relative;z-index:1}\n.p-stage{display:flex;flex-direction:column;align-items:flex-start}\n.p-node{width:18px;height:18px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);margin:0 0 20px}\n.p-node.n2,.p-node.n4{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.p-node.n3{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.p-st-n{font-size:16px;color:var(--ink-hi);letter-spacing:-.01em;margin-bottom:6px}\n.p-st-d{font-size:12.5px;color:var(--ink-mid);line-height:1.5}\n.p-triad{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.p-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.p-rt b{color:var(--ink-hi)}\n.p-substrate{display:flex;align-items:center;gap:14px;margin-top:20px;border:1px solid var(--hairline);border-radius:14px;padding:18px 20px;background:linear-gradient(180deg,rgba(58,123,255,.06),transparent)}\n.p-sub-k{width:10px;height:36px;border-radius:4px;background:linear-gradient(180deg,var(--action),var(--action-hi));flex:none;box-shadow:0 0 16px rgba(58,123,255,.4)}\n.p-sub-t{font-size:15px;color:var(--ink-hi)}\n.p-sub-d{font-size:13px;color:var(--ink-mid);margin-top:3px;line-height:1.5}\n.p-rtcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-rtcard{border:1px solid var(--hairline);border-left:3px solid var(--accent);border-radius:14px;padding:22px;background:var(--surface-1);cursor:pointer;transition:.18s}\n.p-rtcard:hover{transform:translateY(-3px);border-color:var(--accent)}\n.p-rtc-h{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;color:var(--ink-hi)}\n.p-rtc-dot{width:10px;height:10px;border-radius:3px}\n.p-rtc-p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:10px}\n.p-rtc-d{color:var(--ink-mid);font-size:13px;line-height:1.55;margin-top:10px}\n.p-agent{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-acard{border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1)}\n.p-acard .p-ac-k{font-family:var(--font-mono);font-size:12px;color:var(--verme);letter-spacing:.14em}\n.p-acard h4{margin:12px 0 8px;font-size:18px;color:var(--ink-hi)}\n.p-acard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n@media(max-width:900px){.p-flow{grid-template-columns:1fr;gap:14px}.p-rail{display:none}.p-rtcards,.p-agent{grid-template-columns:1fr}}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}}`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    const expHero = d2.render('www@exp-copiloto', {}, {style:'display:block;width:100%'});\n    return `${expHero}<main class=\"pageframe\">${renderPlataforma(d2, esc, dd)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\n\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\n\nfunction d2ConceptHero(esc, hue, eyebrow, name, dor){\n  return '<span class=\"back\" data-nav data-href=\"/plataforma\">← A plataforma</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h1 class=\"i-name stag\">'+esc(name)+'</h1><div class=\"i-dor stag\"><b>'+esc(dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n}\nfunction d2Close(esc, head, sub){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">Falar com a gente →</button></div></section>';\n}\n\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction d2IFlow(esc, hue, nodes){\n  return '<div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+nodes.length+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes.map(function(n){return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+esc(n.c||hue)+'\"></div><div class=\"i-pn\">'+esc(n.n)+'</div><div class=\"i-pr\">'+esc(n.d||'')+'</div></div>';}).join('')+'</div>';\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction PL_T(){ return {\n pt:{\n  back_home:'← Início', cta_talk:'Marcar uma conversa →',\n  hero_eb:'A plataforma · nós e fluxos', hero_h:'Não é um stack. É uma runtime.', hero_sub:'Uma linguagem. Todo o software. Dados, telas, lógica, eventos, integrações e IA — tudo dito do mesmo jeito.',\n  map_eb:'O mapa', map_h:'Como um sistema nasce.', map_sub:'Da intenção à produção, num fluxo contínuo — cada nó é uma capacidade real da runtime.',\n  map_n1_n:'Intenção', map_n1_d:'Você — ou um agente — descreve o que o sistema precisa fazer.',\n  map_n2_d:'No builder, a intenção vira sistema — pela sua mão ou pela de um agente, sob as mesmas regras.',\n  map_n3_d:'Uma só linguagem descreve UI, dados, fluxos e regras — toda a runtime a fala.',\n  map_n4_n:'Componentes', map_n4_d:'Rush escuta, Connect integra, Domain decide — os componentes que sustentam o sistema.',\n  map_n5_n:'Produção', map_n5_d:'Rodando de verdade, sob as suas regras — e o dado nunca sai do seu domínio.',\n  sub_d:'A fundação por baixo de tudo: DataSource → DataSet, busca semântica e own-your-data por construção.',\n  prod_eb:'Os produtos', prod_h:'Oito produtos, uma só runtime.', prod_sub:'Cada produto é uma face do mesmo motor — não SDKs soltos que você costura.', soon:'em breve',\n  comp_eb:'Os componentes', comp_h:'Três trabalhos. Um sistema.', comp_sub:'Toda operação escuta o que chega, fala com o que já usa e decide. Cada trabalho tem componente próprio — e os três nascem ligados.',\n  df1_lab:'Origem · DataSource', df1_h:'Tabela, API ou IA', df1_p:'Tabela própria, API de terceiros ou resposta de modelo — a origem muda, o sistema nem percebe.',\n  df2_lab:'Acesso · DataSet', df2_h:'Uma só interface', df2_p:'Tela, fluxo e agente leem tudo pelo mesmo acesso — busca semântica, filtro e agregação inclusos.',\n  df3_lab:'Propriedade', df3_h:'O dado é seu', df3_p:'Tudo roda no seu domínio, com governança e auditoria — o dado não passeia.',\n  dframe_h:'O dado é seu — por construção.', dframe_sub:'A origem é detalhe; o acesso é uniforme; a propriedade é sua.',\n  an_h:'Feito para gente. Aberto a agentes.', an_sub:'O mesmo builder de sempre — do seu lado, não no seu lugar. Também aberto a agentes, com validação em tempo de escrita.',\n  ag1_h:'Do seu lado', ag1_p:'Quem constrói é você. Agentes aceleram, revisam, sugerem — a decisão continua na sua mão.',\n  ag2_h:'Validação em tempo de escrita', ag2_p:'Cada mudança é checada quando é escrita — os erros clássicos são barrados antes de virarem bug em produção.',\n  ag3_h:'Um sistema só', ag3_p:'UI, dados, fluxos e integrações na mesma linguagem — o sistema inteiro, não um fragmento.',\n  close_h:'Chega de montar. Comece a rodar.', close_sub:'A runtime já existe — dados, telas, lógica e IA falando a mesma língua. O que falta é o seu sistema rodando nela.'\n },\n en:{\n  back_home:'← Home', cta_talk:'Book a conversation →',\n  hero_eb:'The platform · nodes and flows', hero_h:\"It's not a stack. It's a runtime.\", hero_sub:'One language. All the software. Data, screens, logic, events, integrations and AI — all said the same way.',\n  map_eb:'The map', map_h:'How a system is born.', map_sub:'From intent to production, in one continuous flow — each node is a real capability of the runtime.',\n  map_n1_n:'Intent', map_n1_d:'You — or an agent — describe what the system needs to do.',\n  map_n2_d:'In the builder, intent becomes system — by your hand or an agent’s, under the same rules.',\n  map_n3_d:'One language describes UI, data, flows and rules — the whole runtime speaks it.',\n  map_n4_n:'Components', map_n4_d:'Rush listens, Connect integrates, Domain decides — the components that sustain the system.',\n  map_n5_n:'Production', map_n5_d:'Running for real, under your rules — and the data never leaves your domain.',\n  sub_d:'The foundation beneath everything: DataSource → DataSet, semantic search and own-your-data by design.',\n  prod_eb:'The products', prod_h:'Eight products, one runtime.', prod_sub:'Each product is a face of the same engine — not loose SDKs you stitch together.', soon:'soon',\n  comp_eb:'The components', comp_h:'Three jobs. One system.', comp_sub:'Every operation listens to what comes in, talks to what it already uses, and decides. Each job has its own component — and the three are born connected.',\n  df1_lab:'Origin · DataSource', df1_h:'Table, API or AI', df1_p:'Your own table, a third-party API or a model’s answer — the origin changes, the system doesn’t notice.',\n  df2_lab:'Access · DataSet', df2_h:'One interface', df2_p:'Screens, flows and agents read everything through the same access — semantic search, filtering and aggregation included.',\n  df3_lab:'Ownership', df3_h:'The data is yours', df3_p:'Everything runs in your domain, with governance and auditing — the data doesn’t wander.',\n  dframe_h:'The data is yours — by design.', dframe_sub:'The origin is a detail; access is uniform; ownership is yours.',\n  an_h:'Made for people. Open to agents.', an_sub:'The same builder as always — on your side, not in your place. Also open to agents, with write-time validation.',\n  ag1_h:'On your side', ag1_p:'You’re the one who builds. Agents accelerate, review, suggest — the decision stays in your hands.',\n  ag2_h:'Write-time validation', ag2_p:'Every change is checked as it’s written — the classic mistakes are stopped before they become bugs in production.',\n  ag3_h:'One single system', ag3_p:'UI, data, flows and integrations in the same language — the whole system, not a fragment.',\n  close_h:'Stop assembling. Start running.', close_sub:'The runtime already exists — data, screens, logic and AI speaking the same language. What’s missing is your system running on it.'\n },\n es:{\n  back_home:'← Inicio', cta_talk:'Agendar una conversación →',\n  hero_eb:'La plataforma · nodos y flujos', hero_h:'No es un stack. Es un runtime.', hero_sub:'Un lenguaje. Todo el software. Datos, pantallas, lógica, eventos, integraciones e IA — todo dicho de la misma forma.',\n  map_eb:'El mapa', map_h:'Cómo nace un sistema.', map_sub:'De la intención a la producción, en un flujo continuo — cada nodo es una capacidad real del runtime.',\n  map_n1_n:'Intención', map_n1_d:'Tú — o un agente — describes lo que el sistema necesita hacer.',\n  map_n2_d:'En el builder, la intención se vuelve sistema — por tu mano o la de un agente, bajo las mismas reglas.',\n  map_n3_d:'Un solo lenguaje describe UI, datos, flujos y reglas — todo el runtime lo habla.',\n  map_n4_n:'Componentes', map_n4_d:'Rush escucha, Connect integra, Domain decide — los componentes que sostienen el sistema.',\n  map_n5_n:'Producción', map_n5_d:'Funcionando de verdad, bajo tus reglas — y el dato nunca sale de tu dominio.',\n  sub_d:'La base debajo de todo: DataSource → DataSet, búsqueda semántica y own-your-data por diseño.',\n  prod_eb:'Los productos', prod_h:'Ocho productos, un solo runtime.', prod_sub:'Cada producto es una cara del mismo motor — no SDKs sueltos que tú coses.', soon:'pronto',\n  comp_eb:'Los componentes', comp_h:'Tres trabajos. Un sistema.', comp_sub:'Toda operación escucha lo que llega, habla con lo que ya usa y decide. Cada trabajo tiene su propio componente — y los tres nacen conectados.',\n  df1_lab:'Origen · DataSource', df1_h:'Tabla, API o IA', df1_p:'Tabla propia, API de terceros o respuesta de un modelo — el origen cambia, el sistema ni lo nota.',\n  df2_lab:'Acceso · DataSet', df2_h:'Una sola interfaz', df2_p:'Pantalla, flujo y agente leen todo por el mismo acceso — búsqueda semántica, filtro y agregación incluidos.',\n  df3_lab:'Propiedad', df3_h:'El dato es tuyo', df3_p:'Todo corre en tu dominio, con gobernanza y auditoría — el dato no pasea.',\n  dframe_h:'El dato es tuyo — por diseño.', dframe_sub:'El origen es un detalle; el acceso es uniforme; la propiedad es tuya.',\n  an_h:'Hecho para personas. Abierto a agentes.', an_sub:'El mismo builder de siempre — de tu lado, no en tu lugar. También abierto a agentes, con validación en tiempo de escritura.',\n  ag1_h:'De tu lado', ag1_p:'Quien construye eres tú. Los agentes aceleran, revisan, sugieren — la decisión sigue en tu mano.',\n  ag2_h:'Validación en tiempo de escritura', ag2_p:'Cada cambio se verifica al escribirse — los errores clásicos se frenan antes de volverse bugs en producción.',\n  ag3_h:'Un solo sistema', ag3_p:'UI, datos, flujos e integraciones en el mismo lenguaje — el sistema entero, no un fragmento.',\n  close_h:'Deja de ensamblar. Ponlo a correr.', close_sub:'El runtime ya existe — datos, pantallas, lógica e IA hablando el mismo idioma. Lo que falta es tu sistema corriendo en él.'\n }\n}; }\nfunction renderPlataforma(d2, esc, dd){\n  const lang = D2LANG(d2);\n  const TT = PL_T(); const t = k => (TT[lang]&&TT[lang][k]) || TT.en[k] || k;\n  const pick = (rec, base) => { if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n  const prods = (dd('cms-productsDataSet')).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n  const rts = (dd('cms-runtimesDataSet')).slice().sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n  const rtHref = {'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  const map = `<div class=\"p-map\" data-reveal><div class=\"p-rail\"></div><div class=\"p-flow\"><div class=\"p-stage stag\"><div class=\"p-node n1\"></div><div class=\"p-st-n\">${t('map_n1_n')}</div><div class=\"p-st-d\">${t('map_n1_d')}</div></div><div class=\"p-stage stag\"><div class=\"p-node n2\"></div><div class=\"p-st-n\">Builder</div><div class=\"p-st-d\">${t('map_n2_d')}</div></div><div class=\"p-stage stag\"><div class=\"p-node n3\"></div><div class=\"p-st-n\">data2-lang</div><div class=\"p-st-d\">${t('map_n3_d')}</div></div><div class=\"p-stage stag\"><div class=\"p-node n4\"></div><div class=\"p-st-n\">${t('map_n4_n')}</div><div class=\"p-st-d\">${t('map_n4_d')}</div></div><div class=\"p-stage stag\"><div class=\"p-node n5\"></div><div class=\"p-st-n\">${t('map_n5_n')}</div><div class=\"p-st-d\">${t('map_n5_d')}</div></div></div><div class=\"p-triad stag\">${rts.map(r=>`<span class=\"p-rt\" style=\"--accent:${esc(r.accent||'#3A7BFF')}\"><b>${esc(r.name)}</b> · ${esc(pick(r,'papel'))}</span>`).join('')}</div><div class=\"p-substrate stag\"><span class=\"p-sub-k\"></span><div><div class=\"p-sub-t\">Data Framework</div><div class=\"p-sub-d\">${t('sub_d')}</div></div></div></div>`;\n  const prodCards = `<div class=\"d-prods stag\">${prods.map(p=>`<div class=\"d-prod\"><div class=\"pn\"><span class=\"chip\" style=\"background:${esc(p.accent||'#3A7BFF')}\"></span>${esc(p.name)}${p.status==='em-breve'?`<span class=\"soon\">${t('soon')}</span>`:''}</div><div class=\"pt\">${esc(pick(p,'description')||pick(p,'tagline'))}</div></div>`).join('')}</div>`;\n  const rtCards = `<div class=\"p-rtcards stag\">${rts.map(r=>{const ac=esc(r.accent||'#3A7BFF');return `<div class=\"p-rtcard\" data-nav data-href=\"${esc(rtHref[r.name]||'/plataforma')}\" style=\"--accent:${ac}\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:${ac}\"></span>${esc(r.name)}</div><div class=\"p-rtc-p\">${esc(pick(r,'papel'))}</div><div class=\"p-rtc-d\">${esc(pick(r,'description'))}</div></div>`;}).join('')}</div>`;\n  const df = `<div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">${t('df1_lab')}</div><h4>${t('df1_h')}</h4><p>${t('df1_p')}</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">${t('df2_lab')}</div><h4>${t('df2_h')}</h4><p>${t('df2_p')}</p></div><div class=\"d-dfcard\"><div class=\"lab\">${t('df3_lab')}</div><h4>${t('df3_h')}</h4><p>${t('df3_p')}</p></div></div>`;\n  const agent = `<div class=\"p-agent stag\"><div class=\"p-acard\"><div class=\"p-ac-k\">01</div><h4>${t('ag1_h')}</h4><p>${t('ag1_p')}</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">02</div><h4>${t('ag2_h')}</h4><p>${t('ag2_p')}</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">03</div><h4>${t('ag3_h')}</h4><p>${t('ag3_p')}</p></div></div>`;\n  return `<span class=\"back\" data-nav data-href=\"/\">${t('back_home')}</span><section class=\"p-hero\"><div class=\"d-eyebrow\"><span class=\"k\"></span>${t('hero_eb')}</div><h1 class=\"d-head big\">${t('hero_h')}</h1><div class=\"d-sub\">${t('hero_sub')}</div><div class=\"d-cta\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">${t('cta_talk')}</button></div></section><section class=\"d-sec\"><div class=\"d-eyebrow\"><span class=\"k\"></span>${t('map_eb')}</div><h2 class=\"d-head\">${t('map_h')}</h2><div class=\"d-sub\">${t('map_sub')}</div>${map}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>${t('prod_eb')}</div><h2 class=\"d-head stag\">${t('prod_h')}</h2><div class=\"d-sub stag\">${t('prod_sub')}</div>${prodCards}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>${t('comp_eb')}</div><h2 class=\"d-head stag\">${t('comp_h')}</h2><div class=\"d-sub stag\">${t('comp_sub')}</div>${rtCards}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Data Framework</div><h2 class=\"d-head stag\">${t('dframe_h')}</h2><div class=\"d-sub stag\">${t('dframe_sub')}</div>${df}</section><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>Agent-native</div><h2 class=\"d-head stag\">${t('an_h')}</h2><div class=\"d-sub stag\">${t('an_sub')}</div>${agent}</section><section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">${t('close_h')}</h2><div class=\"d-sub stag\">${t('close_sub')}</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">${t('cta_talk')}</button></div></section>`;\n}\n"}}}}}}}},{"_id":"6a7b19ebf676a5fd51630201","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-comofunciona","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n@media(max-width:900px){.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.p-map{position:relative;margin-top:44px;padding:44px 0 8px}\n.p-rail{position:absolute;top:66px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.6}\n.p-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;position:relative;z-index:1}\n.p-stage{display:flex;flex-direction:column;align-items:flex-start}\n.p-node{width:18px;height:18px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);margin:0 0 20px}\n.p-node.n2,.p-node.n4{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.p-node.n3{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.p-st-n{font-size:16px;color:var(--ink-hi);letter-spacing:-.01em;margin-bottom:6px}\n.p-st-d{font-size:12.5px;color:var(--ink-mid);line-height:1.5}\n.p-triad{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.p-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.p-rt b{color:var(--ink-hi)}\n.p-substrate{display:flex;align-items:center;gap:14px;margin-top:20px;border:1px solid var(--hairline);border-radius:14px;padding:18px 20px;background:linear-gradient(180deg,rgba(58,123,255,.06),transparent)}\n.p-sub-k{width:10px;height:36px;border-radius:4px;background:linear-gradient(180deg,var(--action),var(--action-hi));flex:none;box-shadow:0 0 16px rgba(58,123,255,.4)}\n.p-sub-t{font-size:15px;color:var(--ink-hi)}\n.p-sub-d{font-size:13px;color:var(--ink-mid);margin-top:3px;line-height:1.5}\n.p-rtcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-rtcard{border:1px solid var(--hairline);border-left:3px solid var(--accent);border-radius:14px;padding:22px;background:var(--surface-1);cursor:pointer;transition:.18s}\n.p-rtcard:hover{transform:translateY(-3px);border-color:var(--accent)}\n.p-rtc-h{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;color:var(--ink-hi)}\n.p-rtc-dot{width:10px;height:10px;border-radius:3px}\n.p-rtc-p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:10px}\n.p-rtc-d{color:var(--ink-mid);font-size:13px;line-height:1.55;margin-top:10px}\n.p-agent{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-acard{border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1)}\n.p-acard .p-ac-k{font-family:var(--font-mono);font-size:12px;color:var(--verme);letter-spacing:.14em}\n.p-acard h4{margin:12px 0 8px;font-size:18px;color:var(--ink-hi)}\n.p-acard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n@media(max-width:900px){.p-flow{grid-template-columns:1fr;gap:14px}.p-rail{display:none}.p-rtcards,.p-agent{grid-template-columns:1fr}}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}}`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    return `<main class=\"pageframe\">${renderComoFunciona(d2, esc, dd)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\n\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction d2RtCards(esc, dd, t, pick){\n  var rtHref={'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('rt_eb'))+'</div><h2 class=\"d-head stag\">'+esc(t('rt_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('rt_sub'))+'</div><div class=\"p-rtcards stag\">'+rts.map(function(r){var ac=esc(r.accent||'#3A7BFF');return '<div class=\"p-rtcard\" data-nav data-href=\"'+esc(rtHref[r.name]||'/plataforma')+'\" style=\"--accent:'+ac+'\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:'+ac+'\"></span>'+esc(r.name)+'</div><div class=\"p-rtc-p\">'+esc(pick(r,'papel'))+'</div><div class=\"p-rtc-d\">'+esc(pick(r,'description'))+'</div></div>';}).join('')+'</div></section>';\n}\nfunction d2ConceptHero(esc, hue, eyebrow, name, dor, back){\n  return '<span class=\"back\" data-nav data-href=\"/plataforma\">'+esc(back||'← A plataforma')+'</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h1 class=\"i-name stag\">'+esc(name)+'</h1><div class=\"i-dor stag\"><b>'+esc(dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n}\nfunction d2Close(esc, head, sub, cta){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(cta||'Marcar uma conversa →')+'</button></div></section>';\n}\nfunction d2Statement(esc, eyebrow, head, proof){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-faces stag\"><div class=\"d-face plat\" style=\"grid-column:1/-1\"><p style=\"max-width:62ch;font-size:16px\">'+esc(proof)+'</p></div></div></section>';\n}\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction d2IFlow(esc, hue, nodes){\n  return '<div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+nodes.length+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes.map(function(n){return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+esc(n.c||hue)+'\"></div><div class=\"i-pn\">'+esc(n.n)+'</div><div class=\"i-pr\">'+esc(n.d||'')+'</div></div>';}).join('')+'</div>';\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CF_T(){ return {\n pt:{\n  hero_eb:'Plataforma · Como funciona', hero_name:'Da necessidade à primeira tela rodando. Sem troca de baldes.', hero_dor:'Intenção, builder, língua, componentes, produção: um fluxo só, sem o sistema parado entre etapas. É assim que a máquina anda.',\n  map_eb:'O caminho', map_h:'Da intenção à produção.', map_sub:'Um fluxo contínuo — cada nó é uma capacidade real da runtime.',\n  s1_t:'Intenção', s1_d:'Você — ou um agente — descreve em linguagem natural o que o sistema precisa fazer.',\n  s2_d:'O builder de sempre, do seu lado — e também aberto a agentes, com validação em tempo de escrita.',\n  s3_d:'Uma só linguagem descreve UI, dados, fluxos e regras. Toda a runtime a fala.',\n  s4_t:'Componentes', s4_d:'O que chega, o que sai e o que se decide — cada trabalho com componente próprio, ligados de nascença.',\n  s5_t:'Produção', s5_d:'Rodando de verdade, sob as suas regras. O dado nunca sai do seu domínio.',\n  faces_eb:'A virada', faces_h:'Projeto que dura um trimestre nasce velho.',\n  faces_p:'Quando o cronograma tradicional entrega a primeira tela, o requisito já mudou duas vezes. No Data², a primeira versão roda em produção em semanas — e acompanha o negócio, porque mudar é reescrever uma linha, não reabrir um projeto.',\n  lev_eb:'O que muda', lev_h:'O calendário, reescrito.', lev1:'Em produção em semanas, não trimestres', lev2:'A primeira versão nasce em produção', lev3:'Mudar é uma linha, não um novo projeto', lev4:'Uma runtime, uma língua, um sistema',\n  rt_eb:'Os componentes', rt_h:'Quem toca o sistema depois que entra no ar.', rt_sub:'Rush escuta o que chega, Connect fala com o que você já usa, Domain decide — todos os dias, sem ninguém abrir chamado.',\n  close_h:'Seu próximo sistema não precisa de um trimestre.', close_sub:'Esse caminho roda toda semana, com sistema de verdade na esteira. Falta o seu.', cta_btn:'Marcar uma conversa →', back_plat:'← A plataforma'\n },\n en:{\n  hero_eb:'Platform · How it works', hero_name:'From necessity to the first screen running. No bucket brigade.', hero_dor:'Intent, builder, language, components, production: one flow, with no system idling between stages. That’s how the machine moves.',\n  map_eb:'The path', map_h:'From intent to production.', map_sub:'One continuous flow — each node is a real capability of the runtime.',\n  s1_t:'Intent', s1_d:'You — or an agent — describe in natural language what the system needs to do.',\n  s2_d:'The same builder, on your side — and also open to agents, with write-time validation.',\n  s3_d:'One language describes UI, data, flows and rules. The whole runtime speaks it.',\n  s4_t:'Components', s4_d:'What comes in, what goes out, what gets decided — each job with its own component, connected from birth.',\n  s5_t:'Production', s5_d:'Running for real, under your rules. The data never leaves your domain.',\n  faces_eb:'The shift', faces_h:'A project that takes a quarter is born old.',\n  faces_p:'By the time a traditional roadmap ships its first screen, the requirement has already changed twice. On Data², the first version runs in production within weeks — and keeps up with the business, because a change is a line, not a reopened project.',\n  lev_eb:'What changes', lev_h:'The calendar, rewritten.', lev1:'In production in weeks, not quarters', lev2:'The first version is born in production', lev3:'A change is a line, not a new project', lev4:'One runtime, one language, one system',\n  rt_eb:'The components', rt_h:'Who runs the system once it’s live.', rt_sub:'Rush listens to what comes in, Connect talks to what you already use, Domain decides — every day, with no ticket opened.',\n  close_h:'Your next system doesn’t need a quarter.', close_sub:'This path runs every week, with real systems on the line. Yours is missing.', cta_btn:'Book a conversation →', back_plat:'← The platform'\n },\n es:{\n  hero_eb:'Plataforma · Cómo funciona', hero_name:'De la necesidad a la primera pantalla funcionando. Sin cadena de traspasos.', hero_dor:'Intención, builder, lenguaje, componentes, producción: un solo flujo, sin sistema detenido entre etapas. Así se mueve la máquina.',\n  map_eb:'El camino', map_h:'De la intención a la producción.', map_sub:'Un flujo continuo — cada nodo es una capacidad real del runtime.',\n  s1_t:'Intención', s1_d:'Tú — o un agente — describes en lenguaje natural lo que el sistema necesita hacer.',\n  s2_d:'El builder de siempre, de tu lado — y también abierto a agentes, con validación en tiempo de escritura.',\n  s3_d:'Un solo lenguaje describe UI, datos, flujos y reglas. Todo el runtime lo habla.',\n  s4_t:'Componentes', s4_d:'Lo que llega, lo que sale, lo que se decide — cada trabajo con su propio componente, conectados de nacimiento.',\n  s5_t:'Producción', s5_d:'Funcionando de verdad, bajo tus reglas. El dato nunca sale de tu dominio.',\n  faces_eb:'El giro', faces_h:'Un proyecto que tarda un trimestre nace viejo.',\n  faces_p:'Cuando el roadmap tradicional entrega la primera pantalla, el requisito ya cambió dos veces. En Data², la primera versión corre en producción en semanas — y acompaña al negocio, porque cambiar es una línea, no reabrir un proyecto.',\n  lev_eb:'Lo que cambia', lev_h:'El calendario, reescrito.', lev1:'En producción en semanas, no trimestres', lev2:'La primera versión nace en producción', lev3:'Cambiar es una línea, no un proyecto nuevo', lev4:'Un solo runtime, un solo lenguaje, un sistema',\n  rt_eb:'Los componentes', rt_h:'Quién lleva el sistema cuando ya está en el aire.', rt_sub:'Rush escucha lo que llega, Connect habla con lo que ya usas, Domain decide — todos los días, sin que nadie abra un ticket.',\n  close_h:'Tu próximo sistema no necesita un trimestre.', close_sub:'Este camino corre todas las semanas, con sistemas de verdad en la línea. Falta el tuyo.', cta_btn:'Agendar una conversación →', back_plat:'← La plataforma'\n }\n}; }\nfunction renderComoFunciona(d2, esc, dd){\n  var lang=D2LANG(d2);\n  var TT=CF_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n  var hue='#3A7BFF';\n  var stages=[{n:'n1',t:t('s1_t'),d:t('s1_d')},{n:'n2',t:'Builder',d:t('s2_d')},{n:'n3',t:'data2-lang',d:t('s3_d')},{n:'n4',t:t('s4_t'),d:t('s4_d')},{n:'n5',t:t('s5_t'),d:t('s5_d')}];\n  var map='<section class=\"d-sec\"><div class=\"d-eyebrow\"><span class=\"k\"></span>'+esc(t('map_eb'))+'</div><h2 class=\"d-head\">'+esc(t('map_h'))+'</h2><div class=\"d-sub\">'+esc(t('map_sub'))+'</div><div class=\"p-map\" data-reveal><div class=\"p-rail\"></div><div class=\"p-flow\">'+stages.map(function(s){return '<div class=\"p-stage stag\"><div class=\"p-node '+s.n+'\"></div><div class=\"p-st-n\">'+esc(s.t)+'</div><div class=\"p-st-d\">'+esc(s.d)+'</div></div>';}).join('')+'</div></div></section>';\n  return d2ConceptHero(esc,hue,t('hero_eb'),t('hero_name'),t('hero_dor'),t('back_plat'))+map+d2Statement(esc,t('faces_eb'),t('faces_h'),t('faces_p'))+d2LeverSec(esc,t('lev_eb'),t('lev_h'),[t('lev1'),t('lev2'),t('lev3'),t('lev4')])+d2RtCards(esc,dd,t,pick)+d2Close(esc,t('close_h'),t('close_sub'),t('cta_btn'));\n}\n"}}}}}}}},{"_id":"6a7b19ebf676a5fd51630206","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-dataframework","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n@media(max-width:900px){.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.p-map{position:relative;margin-top:44px;padding:44px 0 8px}\n.p-rail{position:absolute;top:66px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.6}\n.p-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;position:relative;z-index:1}\n.p-stage{display:flex;flex-direction:column;align-items:flex-start}\n.p-node{width:18px;height:18px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);margin:0 0 20px}\n.p-node.n2,.p-node.n4{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.p-node.n3{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.p-st-n{font-size:16px;color:var(--ink-hi);letter-spacing:-.01em;margin-bottom:6px}\n.p-st-d{font-size:12.5px;color:var(--ink-mid);line-height:1.5}\n.p-triad{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.p-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.p-rt b{color:var(--ink-hi)}\n.p-substrate{display:flex;align-items:center;gap:14px;margin-top:20px;border:1px solid var(--hairline);border-radius:14px;padding:18px 20px;background:linear-gradient(180deg,rgba(58,123,255,.06),transparent)}\n.p-sub-k{width:10px;height:36px;border-radius:4px;background:linear-gradient(180deg,var(--action),var(--action-hi));flex:none;box-shadow:0 0 16px rgba(58,123,255,.4)}\n.p-sub-t{font-size:15px;color:var(--ink-hi)}\n.p-sub-d{font-size:13px;color:var(--ink-mid);margin-top:3px;line-height:1.5}\n.p-rtcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-rtcard{border:1px solid var(--hairline);border-left:3px solid var(--accent);border-radius:14px;padding:22px;background:var(--surface-1);cursor:pointer;transition:.18s}\n.p-rtcard:hover{transform:translateY(-3px);border-color:var(--accent)}\n.p-rtc-h{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;color:var(--ink-hi)}\n.p-rtc-dot{width:10px;height:10px;border-radius:3px}\n.p-rtc-p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:10px}\n.p-rtc-d{color:var(--ink-mid);font-size:13px;line-height:1.55;margin-top:10px}\n.p-agent{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-acard{border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1)}\n.p-acard .p-ac-k{font-family:var(--font-mono);font-size:12px;color:var(--verme);letter-spacing:.14em}\n.p-acard h4{margin:12px 0 8px;font-size:18px;color:var(--ink-hi)}\n.p-acard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n@media(max-width:900px){.p-flow{grid-template-columns:1fr;gap:14px}.p-rail{display:none}.p-rtcards,.p-agent{grid-template-columns:1fr}}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}}`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    return `<main class=\"pageframe\">${renderDataFramework(d2, esc, dd)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\n\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction d2RtCards(esc, dd, t, pick){\n  var rtHref={'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('rt_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('rt_head'))+'</h2><div class=\"d-sub stag\">'+esc(t('rt_sub'))+'</div><div class=\"p-rtcards stag\">'+rts.map(function(r){var ac=esc(r.accent||'#3A7BFF');return '<div class=\"p-rtcard\" data-nav data-href=\"'+esc(rtHref[r.name]||'/plataforma')+'\" style=\"--accent:'+ac+'\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:'+ac+'\"></span>'+esc(r.name)+'</div><div class=\"p-rtc-p\">'+esc(pick(r,'papel'))+'</div><div class=\"p-rtc-d\">'+esc(pick(r,'description'))+'</div></div>';}).join('')+'</div></section>';\n}\nfunction d2ConceptHero(esc, hue, eyebrow, name, dor, t){\n  return '<span class=\"back\" data-nav data-href=\"/plataforma\">'+esc(t('back_plataforma'))+'</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h1 class=\"i-name stag\">'+esc(name)+'</h1><div class=\"i-dor stag\"><b>'+esc(dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n}\nfunction d2Close(esc, head, sub, t){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(t('cta_talk'))+'</button></div></section>';\n}\nfunction d2Statement(esc, eyebrow, head, proof){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-faces stag\"><div class=\"d-face plat\" style=\"grid-column:1/-1\"><p style=\"max-width:62ch;font-size:16px\">'+esc(proof)+'</p></div></div></section>';\n}\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction d2IFlow(esc, hue, nodes){\n  return '<div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+nodes.length+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes.map(function(n){return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+esc(n.c||hue)+'\"></div><div class=\"i-pn\">'+esc(n.n)+'</div><div class=\"i-pr\">'+esc(n.d||'')+'</div></div>';}).join('')+'</div>';\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction DF_T(){ return {\npt:{\nback_plataforma:'← A plataforma',\nhero_eyebrow:'Plataforma · Data Framework', hero_name:'O dado é seu.', hero_dor:'DataSource → DataSet → propriedade. A origem é detalhe; o acesso é uniforme; o dado nunca sai do seu domínio.',\ndf_eyebrow:'Origem → Acesso → Propriedade', df_head:'Três camadas, um princípio.',\ndf_c1_lab:'Origem · DataSource', df_c1_h:'Tabela, API ou IA', df_c1_p:'De onde o dado vem é detalhe de implementação — tabela própria, API externa ou resposta de IA.',\ndf_c2_lab:'Acesso · DataSet', df_c2_h:'Uma só interface', df_c2_p:'Busca semântica, filtro e agregação sobre qualquer origem. A UI fala com o DataSet, nunca com a origem.',\ndf_c3_lab:'Propriedade', df_c3_h:'O dado é seu', df_c3_p:'Nada sai do seu domínio. Own-your-data por construção, com governança e auditoria por policy.',\nflow_eyebrow:'O pipeline', flow_head:'Como o dado flui.', flow_n1_d:'a origem', flow_n2_d:'acesso uniforme', flow_n3_n:'Consumo', flow_n3_d:'UI · agente · fluxo',\nfaces_eyebrow:'A tese', faces_head:'Dado na nuvem do fornecedor não é ativo. É aluguel.',\nfaces_p:'Pergunte o que acontece no fim do contrato: no SaaS tradicional sobra um export e a boa vontade de quem vendeu. No Data², o dado nasce no seu domínio e nunca sai — governança, auditoria e portabilidade valem desde o primeiro registro, não na letra miúda da rescisão.',\nlever_eyebrow:'Por construção', lever_head:'Garantias que não dependem de contrato.', lever_1:'origens unificadas', lever_2:'busca semântica nativa', lever_3:'dado no seu domínio', lever_4:'governança por policy',\nclose_head:'O dado é seu. Ponto.', close_sub:'A origem pode ser tabela, API ou IA — o endereço do dado não muda: o seu domínio, desde o primeiro registro.', cta_talk:'Marcar uma conversa →',\nrt_eyebrow:'Os componentes', rt_head:'O dado não fica parado.', rt_sub:'Rush traz o que acontece, Connect busca o que já existe, Domain decide em cima. O dado vira ação — não relatório.'\n},\nen:{\nback_plataforma:'← The platform',\nhero_eyebrow:'Platform · Data Framework', hero_name:'The data is yours.', hero_dor:'DataSource → DataSet → ownership. The origin is a detail; access is uniform; the data never leaves your domain.',\ndf_eyebrow:'Origin → Access → Ownership', df_head:'Three layers, one principle.',\ndf_c1_lab:'Origin · DataSource', df_c1_h:'Table, API or AI', df_c1_p:'Where the data comes from is an implementation detail — your own table, an external API or an AI response.',\ndf_c2_lab:'Access · DataSet', df_c2_h:'One single interface', df_c2_p:'Semantic search, filtering and aggregation over any origin. The UI talks to the DataSet, never to the origin.',\ndf_c3_lab:'Ownership', df_c3_h:'The data is yours', df_c3_p:'Nothing leaves your domain. Own-your-data by construction, with governance and auditing by policy.',\nflow_eyebrow:'The pipeline', flow_head:'How the data flows.', flow_n1_d:'the origin', flow_n2_d:'uniform access', flow_n3_n:'Consumption', flow_n3_d:'UI · agent · flow',\nfaces_eyebrow:'The thesis', faces_head:'Data in your vendor’s cloud isn’t an asset. It’s rent.',\nfaces_p:'Ask what happens when the contract ends: with traditional SaaS you’re left with an export and the goodwill of whoever sold it. On Data², the data is born in your domain and never leaves — governance, auditing and portability hold from the first record, not in the fine print of the exit.',\nlever_eyebrow:'By construction', lever_head:'Guarantees that don’t depend on a contract.', lever_1:'unified origins', lever_2:'native semantic search', lever_3:'data in your domain', lever_4:'governance by policy',\nclose_head:'The data is yours. Period.', close_sub:'The origin can be a table, an API or AI — the data’s address never changes: your domain, from the very first record.', cta_talk:'Book a conversation →',\nrt_eyebrow:'The components', rt_head:'Your data doesn’t sit still.', rt_sub:'Rush brings in what happens, Connect fetches what already exists, Domain decides on top. Data becomes action — not a report.'\n},\nes:{\nback_plataforma:'← La plataforma',\nhero_eyebrow:'Plataforma · Data Framework', hero_name:'El dato es tuyo.', hero_dor:'DataSource → DataSet → propiedad. El origen es un detalle; el acceso es uniforme; el dato nunca sale de tu dominio.',\ndf_eyebrow:'Origen → Acceso → Propiedad', df_head:'Tres capas, un principio.',\ndf_c1_lab:'Origen · DataSource', df_c1_h:'Tabla, API o IA', df_c1_p:'De dónde viene el dato es un detalle de implementación — tabla propia, API externa o respuesta de IA.',\ndf_c2_lab:'Acceso · DataSet', df_c2_h:'Una sola interfaz', df_c2_p:'Búsqueda semántica, filtro y agregación sobre cualquier origen. La UI habla con el DataSet, nunca con el origen.',\ndf_c3_lab:'Propiedad', df_c3_h:'El dato es tuyo', df_c3_p:'Nada sale de tu dominio. Own-your-data por construcción, con gobernanza y auditoría por policy.',\nflow_eyebrow:'El pipeline', flow_head:'Cómo fluye el dato.', flow_n1_d:'el origen', flow_n2_d:'acceso uniforme', flow_n3_n:'Consumo', flow_n3_d:'UI · agente · flujo',\nfaces_eyebrow:'La tesis', faces_head:'El dato en la nube del proveedor no es un activo. Es alquiler.',\nfaces_p:'Pregunta qué pasa cuando termina el contrato: en el SaaS tradicional te queda un export y la buena voluntad de quien lo vendió. En Data², el dato nace en tu dominio y nunca sale — gobernanza, auditoría y portabilidad valen desde el primer registro, no en la letra pequeña de la salida.',\nlever_eyebrow:'Por construcción', lever_head:'Garantías que no dependen de un contrato.', lever_1:'orígenes unificados', lever_2:'búsqueda semántica nativa', lever_3:'dato en tu dominio', lever_4:'gobernanza por policy',\nclose_head:'El dato es tuyo. Punto.', close_sub:'El origen puede ser una tabla, una API o IA — la dirección del dato no cambia: tu dominio, desde el primer registro.', cta_talk:'Agendar una conversación →',\nrt_eyebrow:'Los componentes', rt_head:'El dato no se queda quieto.', rt_sub:'Rush trae lo que pasa, Connect busca lo que ya existe, Domain decide encima. El dato se vuelve acción — no un informe.'\n}\n};}\nfunction renderDataFramework(d2, esc, dd){\n  var lang=D2LANG(d2);\n  var TT=DF_T(); var t=function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; };\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang]||rec[base]||''; };\n  var hue='#1FD48F';\n  var df='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('df_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('df_head'))+'</h2><div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">'+esc(t('df_c1_lab'))+'</div><h4>'+esc(t('df_c1_h'))+'</h4><p>'+esc(t('df_c1_p'))+'</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">'+esc(t('df_c2_lab'))+'</div><h4>'+esc(t('df_c2_h'))+'</h4><p>'+esc(t('df_c2_p'))+'</p></div><div class=\"d-dfcard\"><div class=\"lab\">'+esc(t('df_c3_lab'))+'</div><h4>'+esc(t('df_c3_h'))+'</h4><p>'+esc(t('df_c3_p'))+'</p></div></div></section>';\n  var flow='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('flow_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('flow_head'))+'</h2>'+d2IFlow(esc,hue,[{n:'DataSource',d:t('flow_n1_d'),c:hue},{n:'DataSet',d:t('flow_n2_d'),c:hue},{n:t('flow_n3_n'),d:t('flow_n3_d'),c:hue}])+'</section>';\n  return d2ConceptHero(esc,hue,t('hero_eyebrow'),t('hero_name'),t('hero_dor'),t)+df+flow+d2Statement(esc,t('faces_eyebrow'),t('faces_head'),t('faces_p'))+d2LeverSec(esc,t('lever_eyebrow'),t('lever_head'),[t('lever_1'),t('lever_2'),t('lever_3'),t('lever_4')])+d2RtCards(esc,dd,t,pick)+d2Close(esc,t('close_head'),t('close_sub'),t);\n}\n"}}}}}}}},{"_id":"6a7b19ebfd6bd0a3b4a21597","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-agentnative","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n@media(max-width:900px){.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.p-map{position:relative;margin-top:44px;padding:44px 0 8px}\n.p-rail{position:absolute;top:66px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.6}\n.p-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;position:relative;z-index:1}\n.p-stage{display:flex;flex-direction:column;align-items:flex-start}\n.p-node{width:18px;height:18px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);margin:0 0 20px}\n.p-node.n2,.p-node.n4{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.p-node.n3{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.p-st-n{font-size:16px;color:var(--ink-hi);letter-spacing:-.01em;margin-bottom:6px}\n.p-st-d{font-size:12.5px;color:var(--ink-mid);line-height:1.5}\n.p-triad{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.p-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.p-rt b{color:var(--ink-hi)}\n.p-substrate{display:flex;align-items:center;gap:14px;margin-top:20px;border:1px solid var(--hairline);border-radius:14px;padding:18px 20px;background:linear-gradient(180deg,rgba(58,123,255,.06),transparent)}\n.p-sub-k{width:10px;height:36px;border-radius:4px;background:linear-gradient(180deg,var(--action),var(--action-hi));flex:none;box-shadow:0 0 16px rgba(58,123,255,.4)}\n.p-sub-t{font-size:15px;color:var(--ink-hi)}\n.p-sub-d{font-size:13px;color:var(--ink-mid);margin-top:3px;line-height:1.5}\n.p-rtcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-rtcard{border:1px solid var(--hairline);border-left:3px solid var(--accent);border-radius:14px;padding:22px;background:var(--surface-1);cursor:pointer;transition:.18s}\n.p-rtcard:hover{transform:translateY(-3px);border-color:var(--accent)}\n.p-rtc-h{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;color:var(--ink-hi)}\n.p-rtc-dot{width:10px;height:10px;border-radius:3px}\n.p-rtc-p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:10px}\n.p-rtc-d{color:var(--ink-mid);font-size:13px;line-height:1.55;margin-top:10px}\n.p-agent{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-acard{border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1)}\n.p-acard .p-ac-k{font-family:var(--font-mono);font-size:12px;color:var(--verme);letter-spacing:.14em}\n.p-acard h4{margin:12px 0 8px;font-size:18px;color:var(--ink-hi)}\n.p-acard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n@media(max-width:900px){.p-flow{grid-template-columns:1fr;gap:14px}.p-rail{display:none}.p-rtcards,.p-agent{grid-template-columns:1fr}}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}}`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    const expBuilderHero = d2.render('www@exp-builder', {}, {style:'display:block;width:100%'});\n    return `${expBuilderHero}<main class=\"pageframe\">${renderAgentNative(d2, esc, dd)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\n\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction d2RtCards(esc, dd, t, pick){\n  var rtHref={'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('rt_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('rt_head'))+'</h2><div class=\"d-sub stag\">'+esc(t('rt_sub'))+'</div><div class=\"p-rtcards stag\">'+rts.map(function(r){var ac=esc(r.accent||'#3A7BFF');return '<div class=\"p-rtcard\" data-nav data-href=\"'+esc(rtHref[r.name]||'/plataforma')+'\" style=\"--accent:'+ac+'\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:'+ac+'\"></span>'+esc(r.name)+'</div><div class=\"p-rtc-p\">'+esc(pick(r,'papel'))+'</div><div class=\"p-rtc-d\">'+esc(pick(r,'description'))+'</div></div>';}).join('')+'</div></section>';\n}\nfunction d2ConceptHero(esc, hue, eyebrow, name, dor, t){\n  return '<span class=\"back\" data-nav data-href=\"/plataforma\">'+esc(t('back_plataforma'))+'</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h1 class=\"i-name stag\">'+esc(name)+'</h1><div class=\"i-dor stag\"><b>'+esc(dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n}\nfunction d2Close(esc, head, sub, t){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(t('cta_talk'))+'</button></div></section>';\n}\nfunction d2Statement(esc, eyebrow, head, proof){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-faces stag\"><div class=\"d-face plat\" style=\"grid-column:1/-1\"><p style=\"max-width:62ch;font-size:16px\">'+esc(proof)+'</p></div></div></section>';\n}\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction d2IFlow(esc, hue, nodes){\n  return '<div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+nodes.length+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes.map(function(n){return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+esc(n.c||hue)+'\"></div><div class=\"i-pn\">'+esc(n.n)+'</div><div class=\"i-pr\">'+esc(n.d||'')+'</div></div>';}).join('')+'</div>';\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction AN_T(){ return {\npt:{\nback_plataforma:'← A plataforma',\nhero_eyebrow:'Plataforma · Agent-native', hero_name:'Do seu lado, não no seu lugar.', hero_dor:'O mesmo builder de sempre: quem constrói é você; o agente compõe os mesmos primitivos governados, validados em tempo de escrita.',\nagent_eyebrow:'Agent-native', agent_head:'O que “aberto a agentes” quer dizer.',\nagent_c1_h:'Do seu lado', agent_c1_p:'O mesmo builder de sempre. Quem constrói é você — agentes entram como ajuda, não no seu lugar.',\nagent_c2_h:'Validação em tempo de escrita', agent_c2_p:'Cada mudança é checada quando é escrita — os erros clássicos são barrados antes de virarem bug em produção.',\nagent_c3_h:'Um sistema só', agent_c3_p:'UI, dados, fluxos e integrações na mesma linguagem — o sistema inteiro, não um fragmento.',\nfaces_eyebrow:'Sem mágica', faces_head:'Velocidade que você não audita é dívida.',\nfaces_p:'A ferramenta de IA da moda entrega uma demo na sexta — e um sistema órfão na segunda, num código que ninguém assina. No Data², o agente compõe os mesmos primitivos governados que você, validados na hora da escrita. Seu time lê, muda e desfaz. Quem constrói é você; o agente acelera a sua mão.',\nlever_eyebrow:'O que muda', lever_head:'Regras que o agente também segue.', lever_1:'mais rápido da intenção ao ar', lever_2:'sem código opaco', lever_3:'validado em tempo de escrita', lever_4:'uma só runtime',\nclose_head:'Você constrói. Agentes ajudam.', close_sub:'A demo de sexta não vira órfã na segunda: o que o agente compõe, seu time lê, muda e desfaz.', cta_talk:'Marcar uma conversa →',\nrt_eyebrow:'Os componentes', rt_head:'Quem faz o trabalho.', rt_sub:'Rush escuta, Connect conecta, Domain decide — os mesmos blocos, com você ou com o agente.'\n},\nen:{\nback_plataforma:'← The platform',\nhero_eyebrow:'Platform · Agent-native', hero_name:'By your side, not in your place.', hero_dor:'The same builder as always: you are the one who builds; the agent composes the same governed primitives, validated at write time.',\nagent_eyebrow:'Agent-native', agent_head:'What “open to agents” actually means.',\nagent_c1_h:'By your side', agent_c1_p:'The same builder as always. You are the one who builds — agents come in as help, not in your place.',\nagent_c2_h:'Validation at write time', agent_c2_p:'Every change is checked as it is written — the classic mistakes are blocked before they become a bug in production.',\nagent_c3_h:'One single system', agent_c3_p:'UI, data, flows and integrations in the same language — the whole system, not a fragment.',\nfaces_eyebrow:'No magic', faces_head:'Speed you can’t audit is debt.',\nfaces_p:'The AI tool of the week hands you a demo on Friday — and an orphaned system on Monday, in code nobody signs. On Data², the agent composes the same governed primitives you do, validated at write time. Your team reads it, changes it, undoes it. You are the one who builds; the agent speeds up your hand.',\nlever_eyebrow:'What changes', lever_head:'Rules the agent follows too.', lever_1:'faster from intent to live', lever_2:'no opaque code', lever_3:'validated at write time', lever_4:'one single runtime',\nclose_head:'You build. Agents help.', close_sub:'Friday’s demo isn’t an orphan by Monday: what the agent composes, your team reads, changes and undoes.', cta_talk:'Book a conversation →',\nrt_eyebrow:'The components', rt_head:'Who does the work.', rt_sub:'Rush listens, Connect connects, Domain decides — the same blocks, with you or with the agent.'\n},\nes:{\nback_plataforma:'← La plataforma',\nhero_eyebrow:'Plataforma · Agent-native', hero_name:'A tu lado, no en tu lugar.', hero_dor:'El mismo builder de siempre: quien construye eres tú; el agente compone los mismos primitivos gobernados, validados en tiempo de escritura.',\nagent_eyebrow:'Agent-native', agent_head:'Qué significa “abierto a agentes”.',\nagent_c1_h:'A tu lado', agent_c1_p:'El mismo builder de siempre. Quien construye eres tú — los agentes entran como ayuda, no en tu lugar.',\nagent_c2_h:'Validación en tiempo de escritura', agent_c2_p:'Cada cambio se verifica cuando se escribe — los errores clásicos se bloquean antes de convertirse en un bug en producción.',\nagent_c3_h:'Un solo sistema', agent_c3_p:'UI, datos, flujos e integraciones en el mismo lenguaje — el sistema entero, no un fragmento.',\nfaces_eyebrow:'Sin magia', faces_head:'La velocidad que no puedes auditar es deuda.',\nfaces_p:'La herramienta de IA de moda te entrega una demo el viernes — y un sistema huérfano el lunes, en un código que nadie firma. En Data², el agente compone los mismos primitivos gobernados que tú, validados al escribirse. Tu equipo lo lee, lo cambia, lo deshace. Quien construye eres tú; el agente acelera tu mano.',\nlever_eyebrow:'Lo que cambia', lever_head:'Reglas que el agente también sigue.', lever_1:'más rápido de la intención al aire', lever_2:'sin código opaco', lever_3:'validado en tiempo de escritura', lever_4:'un solo runtime',\nclose_head:'Tú construyes. Los agentes ayudan.', close_sub:'La demo del viernes no queda huérfana el lunes: lo que el agente compone, tu equipo lo lee, lo cambia y lo deshace.', cta_talk:'Agendar una conversación →',\nrt_eyebrow:'Los componentes', rt_head:'Quién hace el trabajo.', rt_sub:'Rush escucha, Connect conecta, Domain decide — los mismos bloques, contigo o con el agente.'\n}\n};}\nfunction renderAgentNative(d2, esc, dd){\n  var lang=D2LANG(d2);\n  var TT=AN_T(); var t=function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; };\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang]||rec[base]||''; };\n  var hue='#E93355';\n  var agent='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('agent_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('agent_head'))+'</h2><div class=\"p-agent stag\"><div class=\"p-acard\"><div class=\"p-ac-k\">01</div><h4>'+esc(t('agent_c1_h'))+'</h4><p>'+esc(t('agent_c1_p'))+'</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">02</div><h4>'+esc(t('agent_c2_h'))+'</h4><p>'+esc(t('agent_c2_p'))+'</p></div><div class=\"p-acard\"><div class=\"p-ac-k\">03</div><h4>'+esc(t('agent_c3_h'))+'</h4><p>'+esc(t('agent_c3_p'))+'</p></div></div></section>';\n  return d2ConceptHero(esc,hue,t('hero_eyebrow'),t('hero_name'),t('hero_dor'),t)+agent+d2Statement(esc,t('faces_eyebrow'),t('faces_head'),t('faces_p'))+d2LeverSec(esc,t('lever_eyebrow'),t('lever_head'),[t('lever_1'),t('lever_2'),t('lever_3'),t('lever_4')])+d2RtCards(esc,dd,t,pick)+d2Close(esc,t('close_head'),t('close_sub'),t);\n}\n"}}}}}}}},{"_id":"6a7b19ece511c3482dd15305","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-data2lang","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n@media(max-width:900px){.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.p-map{position:relative;margin-top:44px;padding:44px 0 8px}\n.p-rail{position:absolute;top:66px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.6}\n.p-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;position:relative;z-index:1}\n.p-stage{display:flex;flex-direction:column;align-items:flex-start}\n.p-node{width:18px;height:18px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);margin:0 0 20px}\n.p-node.n2,.p-node.n4{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.p-node.n3{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.p-st-n{font-size:16px;color:var(--ink-hi);letter-spacing:-.01em;margin-bottom:6px}\n.p-st-d{font-size:12.5px;color:var(--ink-mid);line-height:1.5}\n.p-triad{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}\n.p-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.p-rt b{color:var(--ink-hi)}\n.p-substrate{display:flex;align-items:center;gap:14px;margin-top:20px;border:1px solid var(--hairline);border-radius:14px;padding:18px 20px;background:linear-gradient(180deg,rgba(58,123,255,.06),transparent)}\n.p-sub-k{width:10px;height:36px;border-radius:4px;background:linear-gradient(180deg,var(--action),var(--action-hi));flex:none;box-shadow:0 0 16px rgba(58,123,255,.4)}\n.p-sub-t{font-size:15px;color:var(--ink-hi)}\n.p-sub-d{font-size:13px;color:var(--ink-mid);margin-top:3px;line-height:1.5}\n.p-rtcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-rtcard{border:1px solid var(--hairline);border-left:3px solid var(--accent);border-radius:14px;padding:22px;background:var(--surface-1);cursor:pointer;transition:.18s}\n.p-rtcard:hover{transform:translateY(-3px);border-color:var(--accent)}\n.p-rtc-h{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;color:var(--ink-hi)}\n.p-rtc-dot{width:10px;height:10px;border-radius:3px}\n.p-rtc-p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:10px}\n.p-rtc-d{color:var(--ink-mid);font-size:13px;line-height:1.55;margin-top:10px}\n.p-agent{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:32px}\n.p-acard{border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1)}\n.p-acard .p-ac-k{font-family:var(--font-mono);font-size:12px;color:var(--verme);letter-spacing:.14em}\n.p-acard h4{margin:12px 0 8px;font-size:18px;color:var(--ink-hi)}\n.p-acard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n@media(max-width:900px){.p-flow{grid-template-columns:1fr;gap:14px}.p-rail{display:none}.p-rtcards,.p-agent{grid-template-columns:1fr}}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}}`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    return `<main class=\"pageframe\">${renderData2Lang(d2, esc, dd)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\n\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction d2RtCards(esc, dd, t, pick){\n  var rtHref={'Rush':'/plataforma/runtimes/rush','Connect':'/plataforma/runtimes/connect','Domain':'/plataforma/runtimes/domain'};\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('rt_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('rt_head'))+'</h2><div class=\"d-sub stag\">'+esc(t('rt_sub'))+'</div><div class=\"p-rtcards stag\">'+rts.map(function(r){var ac=esc(r.accent||'#3A7BFF');return '<div class=\"p-rtcard\" data-nav data-href=\"'+esc(rtHref[r.name]||'/plataforma')+'\" style=\"--accent:'+ac+'\"><div class=\"p-rtc-h\"><span class=\"p-rtc-dot\" style=\"background:'+ac+'\"></span>'+esc(r.name)+'</div><div class=\"p-rtc-p\">'+esc(pick(r,'papel'))+'</div><div class=\"p-rtc-d\">'+esc(pick(r,'description'))+'</div></div>';}).join('')+'</div></section>';\n}\nfunction d2ConceptHero(esc, hue, eyebrow, name, dor, t){\n  return '<span class=\"back\" data-nav data-href=\"/plataforma\">'+esc(t('back_plataforma'))+'</span><section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h1 class=\"i-name stag\">'+esc(name)+'</h1><div class=\"i-dor stag\"><b>'+esc(dor)+'</b></div></div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n}\nfunction d2Close(esc, head, sub, t){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(t('cta_talk'))+'</button></div></section>';\n}\nfunction d2Statement(esc, eyebrow, head, proof){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-faces stag\"><div class=\"d-face plat\" style=\"grid-column:1/-1\"><p style=\"max-width:62ch;font-size:16px\">'+esc(proof)+'</p></div></div></section>';\n}\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction d2IFlow(esc, hue, nodes){\n  return '<div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+nodes.length+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes.map(function(n){return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+esc(n.c||hue)+'\"></div><div class=\"i-pn\">'+esc(n.n)+'</div><div class=\"i-pr\">'+esc(n.d||'')+'</div></div>';}).join('')+'</div>';\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction D2L_T(){ return {\npt:{\nback_plataforma:'← A plataforma',\nhero_eyebrow:'Plataforma · data2-lang', hero_name:'Data Runtime No Code.', hero_dor:'No-code sem aspas. Escrito — não embrulhado. Uma linguagem, primitivos nativos, runtime de verdade — não wrapper, não codegen.',\nflow_eyebrow:'Uma língua, quatro domínios', flow_head:'Tudo na mesma linguagem.', flow_sub:'UI, dados, fluxos e regras descritos de um jeito só — toda a runtime a fala.',\nflow_n1_n:'UI', flow_n1_d:'as telas', flow_n2_n:'Dados', flow_n2_d:'o modelo', flow_n3_n:'Fluxos', flow_n3_d:'a automação', flow_n4_n:'Regras', flow_n4_d:'as policies',\nfaces_eyebrow:'A tese', faces_head:'Um sistema que você não consegue ler é um risco que você assinou.',\nfaces_p:'No Data², a regra que aprova o desconto é uma linha que seu time lê, muda e audita — não um if perdido num repositório que ninguém abre desde 2021. Quando o sistema inteiro fala uma língua só, ler o sistema deixa de ser arqueologia.',\nlever_eyebrow:'A conta', lever_head:'O que uma língua só corta.', lever_1:'Um sistema inteiro, uma língua', lever_2:'Cada costura a menos, um erro a menos', lever_3:'Onboarding é ler, não decifrar', lever_4:'O negócio lê o que a runtime executa',\nclose_head:'Uma linguagem. Todo o sistema.', close_sub:'Se está escrito, roda. Se roda, o seu time lê. Nenhuma tradução entre o negócio e a máquina.', cta_talk:'Marcar uma conversa →',\nrt_eyebrow:'Os componentes', rt_head:'Três trabalhos, uma língua.', rt_sub:'A regra que você lê é a que roda — quando algo chega, quando o sistema fala com fora, quando a decisão é tomada.'\n},\nen:{\nback_plataforma:'← The platform',\nhero_eyebrow:'Platform · data2-lang', hero_name:'Data Runtime No Code.', hero_dor:'No-code, no quotes. Written — not wrapped. One language, native primitives, a real runtime — not a wrapper, not codegen.',\nflow_eyebrow:'One language, four domains', flow_head:'Everything in the same language.', flow_sub:'UI, data, flows and rules described in a single way — the whole runtime speaks it.',\nflow_n1_n:'UI', flow_n1_d:'the screens', flow_n2_n:'Data', flow_n2_d:'the model', flow_n3_n:'Flows', flow_n3_d:'the automation', flow_n4_n:'Rules', flow_n4_d:'the policies',\nfaces_eyebrow:'The thesis', faces_head:'A system you can’t read is a risk you signed off on.',\nfaces_p:'On Data², the rule that approves the discount is a line your team reads, changes and audits — not an if lost in a repository nobody has opened since 2021. When the whole system speaks one language, reading it stops being archaeology.',\nlever_eyebrow:'The math', lever_head:'What one language cuts.', lever_1:'One whole system, one language', lever_2:'One seam fewer, one failure fewer', lever_3:'Onboarding is reading, not deciphering', lever_4:'The business reads what the runtime executes',\nclose_head:'One language. The whole system.', close_sub:'If it’s written, it runs. If it runs, your team can read it. No translation between the business and the machine.', cta_talk:'Book a conversation →',\nrt_eyebrow:'The components', rt_head:'Three jobs, one language.', rt_sub:'The rule you read is the rule that runs — when something arrives, when the system talks to the outside, when the decision is made.'\n},\nes:{\nback_plataforma:'← La plataforma',\nhero_eyebrow:'Plataforma · data2-lang', hero_name:'Data Runtime No Code.', hero_dor:'No-code sin comillas. Escrito — no envuelto. Un lenguaje, primitivos nativos, un runtime de verdad — no wrapper, no codegen.',\nflow_eyebrow:'Un lenguaje, cuatro dominios', flow_head:'Todo en el mismo lenguaje.', flow_sub:'UI, datos, flujos y reglas descritos de una sola forma — todo el runtime lo habla.',\nflow_n1_n:'UI', flow_n1_d:'las pantallas', flow_n2_n:'Datos', flow_n2_d:'el modelo', flow_n3_n:'Flujos', flow_n3_d:'la automatización', flow_n4_n:'Reglas', flow_n4_d:'las policies',\nfaces_eyebrow:'La tesis', faces_head:'Un sistema que no puedes leer es un riesgo que firmaste.',\nfaces_p:'En Data², la regla que aprueba el descuento es una línea que tu equipo lee, cambia y audita — no un if perdido en un repositorio que nadie abre desde 2021. Cuando todo el sistema habla un solo lenguaje, leerlo deja de ser arqueología.',\nlever_eyebrow:'La cuenta', lever_head:'Lo que corta un solo lenguaje.', lever_1:'Un sistema entero, un lenguaje', lever_2:'Una costura menos, un error menos', lever_3:'El onboarding es leer, no descifrar', lever_4:'El negocio lee lo que el runtime ejecuta',\nclose_head:'Un lenguaje. Todo el sistema.', close_sub:'Si está escrito, corre. Si corre, tu equipo lo lee. Ninguna traducción entre el negocio y la máquina.', cta_talk:'Agendar una conversación →',\nrt_eyebrow:'Los componentes', rt_head:'Tres trabajos, una lengua.', rt_sub:'La regla que lees es la que corre — cuando algo llega, cuando el sistema habla con afuera, cuando se toma la decisión.'\n}\n};}\nfunction renderData2Lang(d2, esc, dd){\n  var lang=D2LANG(d2);\n  var TT=D2L_T(); var t=function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; };\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang]||rec[base]||''; };\n  var hue='#EBC43F';\n  var flow='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('flow_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('flow_head'))+'</h2><div class=\"d-sub stag\">'+esc(t('flow_sub'))+'</div>'+d2IFlow(esc,hue,[{n:t('flow_n1_n'),d:t('flow_n1_d'),c:hue},{n:t('flow_n2_n'),d:t('flow_n2_d'),c:hue},{n:t('flow_n3_n'),d:t('flow_n3_d'),c:hue},{n:t('flow_n4_n'),d:t('flow_n4_d'),c:hue}])+'</section>';\n  return d2ConceptHero(esc,hue,t('hero_eyebrow'),t('hero_name'),t('hero_dor'),t)+flow+d2Statement(esc,t('faces_eyebrow'),t('faces_head'),t('faces_p'))+d2LeverSec(esc,t('lever_eyebrow'),t('lever_head'),[t('lever_1'),t('lever_2'),t('lever_3'),t('lever_4')])+d2RtCards(esc,dd,t,pick)+d2Close(esc,t('close_head'),t('close_sub'),t);\n}\n"}}}}}}}},{"_id":"6a7b1e82265b0d195dafac39","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-consultoria","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = CONSULTORIA_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return `<main class=\"pageframe\">${renderConsultoria(d2, esc, dd, t, lang)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CONSULTORIA_T(){ return {\n  pt:{\n    back:'← Início',\n    hero_eyebrow:'Como trabalhamos',\n    hero_h:'Construímos com você. Não pra você.',\n    hero_sub:'Semanas, não trimestres. Produção, não slides. Um time embarca no seu problema e entrega rodando em 2 a 4 semanas.',\n    hero_btn1:'Trazer um problema →',\n    hero_btn2:'Ver a plataforma →',\n    flow_eyebrow:'O modelo',\n    flow_h:'Quatro tempos. Nenhum comitê.',\n    flow_sub:'Você começa com uma dor e termina com um sistema em produção.',\n    s1h:'Imersão', s1p:'Entramos no seu contexto em dias, não meses. Mapeamos a dor, o dado e a régua de sucesso — começando pelo resultado de negócio, não pela ferramenta.',\n    s2h:'Construção embarcada', s2p:'Um squad sênior constrói dentro do seu time, no seu domínio, sobre o runtime Data². Você acompanha cada decisão — nada é caixa-preta.',\n    s3h:'Produção', s3p:'Em 2 a 4 semanas o sistema está rodando de verdade, sob as suas regras, com o dado no seu domínio. Não é protótipo, não é slide.',\n    s4h:'Evolução', s4p:'O sistema fica rodando e evolui com o seu time — no seu domínio, sob as suas regras. Nada de caixa-preta, nada de código escondido.',\n    proof_eyebrow:'Prova', proof_h:'Produção tem número.',\n    faces_eyebrow:'O acordo', faces_h:'Você não compra horas. Sai com o sistema no ar.',\n    faces_p:'Primeira semana: o time está dentro da sua operação, vendo onde dói. Quarta semana: o que era reunião virou tela — quem atende usa, quem decide vê, e a regra que muda amanhã seu time muda sem abrir chamado.',\n    cta_h:'Vamos mapear onde dói.', cta_sub:'30 minutos com a gente — sem compromisso, sem qualificação de vendas.', cta_btn:'Marcar uma conversa →'\n  },\n  en:{\n    back:'← Home',\n    hero_eyebrow:'How we work',\n    hero_h:'We build it with you. Not for you.',\n    hero_sub:'Weeks, not quarters. Production, not slides. A team embeds in your problem and ships it running in 2 to 4 weeks.',\n    hero_btn1:'Bring us a problem →',\n    hero_btn2:'See the platform →',\n    flow_eyebrow:'The model',\n    flow_h:'Four movements. No committees.',\n    flow_sub:'You start with a pain and end with a system in production.',\n    s1h:'Immersion', s1p:'We get into your context in days, not months. We map the pain, the data and the measure of success — starting from the business outcome, not the tool.',\n    s2h:'Embedded build', s2p:'A senior squad builds inside your team, in your domain, on the Data² runtime. You follow every decision — nothing is a black box.',\n    s3h:'Production', s3p:'In 2 to 4 weeks the system is really running, under your rules, with the data in your domain. Not a prototype, not a slide.',\n    s4h:'Evolution', s4p:'The system keeps running and evolves with your team — in your domain, under your rules. No black box, no hidden code.',\n    proof_eyebrow:'Proof', proof_h:'Production comes with numbers.',\n    faces_eyebrow:'The deal', faces_h:'You are not buying hours. You leave with the system live.',\n    faces_p:'Week one: the team is inside your operation, seeing where it hurts. Week four: what used to be a meeting is a screen — your people use it, your leaders see it, and the rule that changes tomorrow, your team changes without filing a ticket.',\n    cta_h:'Let\\'s map where it hurts.', cta_sub:'30 minutes with us — no commitment, no sales qualification.', cta_btn:'Book a call →'\n  },\n  es:{\n    back:'← Inicio',\n    hero_eyebrow:'Cómo trabajamos',\n    hero_h:'Lo construimos contigo. No para ti.',\n    hero_sub:'Semanas, no trimestres. Producción, no diapositivas. Un equipo se integra en tu problema y lo entrega funcionando en 2 a 4 semanas.',\n    hero_btn1:'Traer un problema →',\n    hero_btn2:'Ver la plataforma →',\n    flow_eyebrow:'El modelo',\n    flow_h:'Cuatro tiempos. Ningún comité.',\n    flow_sub:'Empiezas con un dolor y terminas con un sistema en producción.',\n    s1h:'Inmersión', s1p:'Entramos en tu contexto en días, no meses. Mapeamos el dolor, el dato y la medida de éxito — empezando por el resultado de negocio, no por la herramienta.',\n    s2h:'Construcción integrada', s2p:'Un squad sénior construye dentro de tu equipo, en tu dominio, sobre el runtime Data². Sigues cada decisión — nada es una caja negra.',\n    s3h:'Producción', s3p:'En 2 a 4 semanas el sistema está funcionando de verdad, bajo tus reglas, con el dato en tu dominio. No es un prototipo, no es una diapositiva.',\n    s4h:'Evolución', s4p:'El sistema sigue funcionando y evoluciona con tu equipo — en tu dominio, bajo tus reglas. Sin caja negra, sin código escondido.',\n    proof_eyebrow:'Prueba', proof_h:'La producción tiene números.',\n    faces_eyebrow:'El acuerdo', faces_h:'No compras horas. Sales con el sistema en el aire.',\n    faces_p:'Primera semana: el equipo está dentro de tu operación, viendo dónde duele. Cuarta semana: lo que era reunión ahora es pantalla — tu gente la usa, tus líderes la ven, y la regla que cambia mañana tu equipo la cambia sin abrir un ticket.',\n    cta_h:'Mapeemos dónde duele.', cta_sub:'30 minutos con nosotros — sin compromiso, sin calificación de ventas.', cta_btn:'Agendar una charla →'\n  }\n}; }\nfunction renderConsultoria(d2, esc, dd, t, lang){\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n  var steps = [\n    {n:'01',h:t('s1h'),p:t('s1p')},\n    {n:'02',h:t('s2h'),p:t('s2p')},\n    {n:'03',h:t('s3h'),p:t('s3p')},\n    {n:'04',h:t('s4h'),p:t('s4p')}\n  ];\n  var flow = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('flow_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('flow_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('flow_sub'))+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat(4,1fr);--ihue:#3A7BFF\"><div class=\"i-rail\"></div>'\n    + steps.map(function(s){ return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:#3A7BFF\"></div><div class=\"i-pn\">'+esc(s.n)+' · '+esc(s.h)+'</div><div class=\"i-pr\" style=\"text-transform:none;letter-spacing:0;font-family:inherit;font-size:13px;color:var(--ink-mid);line-height:1.5\">'+esc(s.p)+'</div></div>'; }).join('')\n    + '</div></section>';\n\n  var lv = (dd('cms-leversDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);}).slice(0,4);\n  var proof = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('proof_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('proof_h'))+'</h2><div class=\"d-levers stag\">'\n    + lv.map(function(m){ return '<div class=\"d-lever\"><div class=\"v\">'+esc(m.valor)+(pick(m,'unidade')?'<em>'+esc(pick(m,'unidade'))+'</em>':'')+'</div><div class=\"l\">'+esc(pick(m,'label'))+'</div></div>'; }).join('')\n    + '</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('faces_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('faces_h'))+'</h2><div class=\"d-sub stag\" style=\"max-width:62ch\">'+esc(t('faces_p'))+'</div></section>';\n\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('hero_eyebrow'))+'</div><h1 class=\"d-head big stag\">'+esc(t('hero_h'))+'</h1><div class=\"d-sub stag\">'+esc(t('hero_sub'))+'</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('hero_btn1'))+'</button><button class=\"d-btn\" data-nav data-href=\"/plataforma\">'+esc(t('hero_btn2'))+'</button></div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(t('cta_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('cta_sub'))+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta_btn'))+'</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/\">'+esc(t('back'))+'</span>'+hero+flow+proof+faces+cta;\n}\n"}}}}}}}},{"_id":"6a7b1e82a0a162269e8082f6","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-precos","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n.p-anchor{margin-top:26px;padding:14px 20px;border-left:2px solid var(--action);background:rgba(58,123,255,.06);border-radius:0 12px 12px 0;font-size:15px;color:var(--ink-mid);line-height:1.65;max-width:62ch}\n.p-anchor b{color:var(--ink-hi);font-weight:600}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = PRECOS_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return `<main class=\"pageframe\">${renderPrecos(d2, esc, dd, t)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction PRECOS_T(){ return {\n  pt:{\n    back:'← Início',\n    hero_eyebrow:'Quanto custa',\n    hero_h:'Sem tabela de prateleira. Proposta sob medida.',\n    hero_sub:'O preço acompanha o tamanho do problema — não o contrário. E o primeiro passo é entender onde dói, não assinar um plano.',\n    anchor_k1:'O que dimensiona a proposta:', anchor_v1:'o escopo da primeira entrega e o ritmo que ela pede depois de entrar no ar.', anchor_k2:'O compromisso:', anchor_v2:'você sai dos 30 minutos com o desenho; a proposta chega dias depois — não meses.',\n    models_eyebrow:'Modelos de contratação',\n    models_h:'Três formatos, um método.',\n    c1lab:'2 a 4 semanas', c1h:'Sprint', c1p:'Um squad embarca, resolve um problema fechado e entrega rodando. Ideal para tirar a primeira dor do papel — rápido.',\n    c2lab:'Escopo fechado', c2h:'Projeto', c2p:'Um sistema inteiro, da necessidade à produção, com marcos claros e data para entrar no ar.',\n    c3lab:'Time dedicado', c3h:'Embarque contínuo', c3p:'Um time embarcado de forma recorrente, evoluindo a plataforma lado a lado com o seu time.',\n    step_eyebrow:'O primeiro passo', step_h:'30 minutos. Mapeamos onde dói.', step_sub:'Sem formulário de qualificação, sem tabela. Uma conversa com quem constrói com você — você sai com um caminho, e nós com o formato certo para propor.',\n    cta_h:'Traga o problema. A proposta é por nossa conta.', cta_sub:'Em 30 minutos a gente entende o tamanho da dor e volta com o formato — sprint, projeto ou time contínuo.', cta_btn1:'Marcar os 30 minutos →', cta_btn2:'Ver como trabalhamos →'\n  },\n  en:{\n    back:'← Home',\n    hero_eyebrow:'What it costs',\n    hero_h:'No off-the-shelf pricing. A tailored proposal.',\n    hero_sub:'The price follows the size of the problem — not the other way around. And the first step is understanding where it hurts, not signing a plan.',\n    anchor_k1:'What sizes the proposal:', anchor_v1:'the scope of the first delivery and the pace it needs once live.', anchor_k2:'The commitment:', anchor_v2:'you leave the 30 minutes with the design; the proposal arrives days later — not months.',\n    models_eyebrow:'How you hire us',\n    models_h:'Three formats, one method.',\n    c1lab:'2 to 4 weeks', c1h:'Sprint', c1p:'A squad embeds, solves a well-defined problem and ships it running. Ideal for getting the first pain off paper — fast.',\n    c2lab:'Fixed scope', c2h:'Project', c2p:'A whole system, from necessity to production, with clear milestones and a date to go live.',\n    c3lab:'Dedicated team', c3h:'Continuous embed', c3p:'A team embedded on an ongoing basis, evolving the platform side by side with your team.',\n    step_eyebrow:'The first step', step_h:'30 minutes. We map where it hurts.', step_sub:'No qualification form, no price list. A conversation with the people who build it with you — you leave with a path, and we leave with the right format to propose.',\n    cta_h:'Bring the problem. The proposal is on us.', cta_sub:'In 30 minutes we understand the size of the pain and come back with the format — sprint, project or a continuous team.', cta_btn1:'Book the 30 minutes →', cta_btn2:'See how we work →'\n  },\n  es:{\n    back:'← Inicio',\n    hero_eyebrow:'Cuánto cuesta',\n    hero_h:'Sin tarifa de estante. Una propuesta a medida.',\n    hero_sub:'El precio acompaña el tamaño del problema — no al revés. Y el primer paso es entender dónde duele, no firmar un plan.',\n    anchor_k1:'Qué dimensiona la propuesta:', anchor_v1:'el alcance de la primera entrega y el ritmo que pide después de entrar en marcha.', anchor_k2:'El compromiso:', anchor_v2:'sales de los 30 minutos con el diseño; la propuesta llega días después — no meses.',\n    models_eyebrow:'Modelos de contratación',\n    models_h:'Tres formatos, un método.',\n    c1lab:'2 a 4 semanas', c1h:'Sprint', c1p:'Un squad se integra, resuelve un problema acotado y lo entrega funcionando. Ideal para sacar el primer dolor del papel — rápido.',\n    c2lab:'Alcance cerrado', c2h:'Proyecto', c2p:'Un sistema entero, de la necesidad a la producción, con hitos claros y fecha de puesta en marcha.',\n    c3lab:'Equipo dedicado', c3h:'Integración continua', c3p:'Un equipo integrado de forma recurrente, evolucionando la plataforma lado a lado con tu equipo.',\n    step_eyebrow:'El primer paso', step_h:'30 minutos. Mapeamos dónde duele.', step_sub:'Sin formulario de calificación, sin tarifa. Una conversación con quien lo construye contigo — sales con un camino, y nosotros con el formato correcto para proponer.',\n    cta_h:'Trae el problema. La propuesta corre por nuestra cuenta.', cta_sub:'En 30 minutos entendemos el tamaño del dolor y volvemos con el formato — sprint, proyecto o equipo continuo.', cta_btn1:'Reservar los 30 minutos →', cta_btn2:'Ver cómo trabajamos →'\n  }\n}; }\nfunction renderPrecos(d2, esc, dd, t){\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('hero_eyebrow'))+'</div><h1 class=\"d-head big stag\">'+esc(t('hero_h'))+'</h1><div class=\"d-sub stag\">'+esc(t('hero_sub'))+'</div><div class=\"p-anchor stag\"><b>'+esc(t('anchor_k1'))+'</b> '+esc(t('anchor_v1'))+' <b>'+esc(t('anchor_k2'))+'</b> '+esc(t('anchor_v2'))+'</div></section>';\n\n  var models = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('models_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('models_h'))+'</h2><div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">'+esc(t('c1lab'))+'</div><h4>'+esc(t('c1h'))+'</h4><p>'+esc(t('c1p'))+'</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">'+esc(t('c2lab'))+'</div><h4>'+esc(t('c2h'))+'</h4><p>'+esc(t('c2p'))+'</p></div><div class=\"d-dfcard\"><div class=\"lab\">'+esc(t('c3lab'))+'</div><h4>'+esc(t('c3h'))+'</h4><p>'+esc(t('c3p'))+'</p></div></div></section>';\n\n  var step = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('step_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('step_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('step_sub'))+'</div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(t('cta_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('cta_sub'))+'</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta_btn1'))+'</button><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(t('cta_btn2'))+'</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/\">'+esc(t('back'))+'</span>'+hero+models+step+cta;\n}\n"}}}}}}}},{"_id":"6a7b1e830f9bd82171daec7d","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-empresa","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = EMPRESA_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return `<main class=\"pageframe\">${renderEmpresa(d2, esc, dd, t)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction EMPRESA_T(){ return {\n  pt:{\n    back:'← Início',\n    hero_eyebrow:'Empresa',\n    hero_h:'Um time e uma runtime. Nada entre a ideia e a produção.',\n    hero_sub:'A Data² existe para fechar a distância entre o que um negócio imagina e o que entra em produção. Entramos como time, construímos sobre uma runtime proprietária e entregamos rodando — com o dado sempre no seu domínio.',\n    tese_eyebrow:'A tese',\n    tese_h:'Software deveria nascer da intenção — e chegar à produção.',\n    tese_sub:'A maioria dos projetos morre entre o slide e o sistema no ar. Nós invertemos isso: um time embarca e entrega rodando em semanas. A runtime sustenta; o dado nunca sai do seu domínio.',\n    faces_eyebrow:'Explore',\n    faces_h:'Duas portas: o modelo e as provas.',\n    f1tag:'O modelo', f1h:'Como trabalhamos →', f1p:'Imersão, construção embarcada e produção — em semanas. Um time no seu problema, do seu lado.',\n    f2tag:'As provas', f2h:'Casos reais →', f2p:'Alavancas medidas em seguros, CX, varejo, vendas, BI e supply — anonimizadas por setor, com o resultado que ficou.',\n    cta_h:'Conte onde dói.', cta_sub:'Trinta minutos, sem roteiro de vendas. Você sai com um caminho.', cta_btn:'Marcar uma conversa →'\n  },\n  en:{\n    back:'← Home',\n    hero_eyebrow:'Company',\n    hero_h:'A team and a runtime. Nothing between the idea and production.',\n    hero_sub:'Data² exists to close the distance between what a business imagines and what reaches production. We come in as a team, build on a proprietary runtime and deliver it running — with the data always in your domain.',\n    tese_eyebrow:'The thesis',\n    tese_h:'Software should be born from intent — and reach production.',\n    tese_sub:'Most projects die between the slide and going live. We flip that: a team embeds and delivers it running in weeks. The runtime sustains it; the data never leaves your domain.',\n    faces_eyebrow:'Explore',\n    faces_h:'Two doors: the model and the proof.',\n    f1tag:'The model', f1h:'How we work →', f1p:'Immersion, embedded build and production — in weeks. A team on your problem, on your side.',\n    f2tag:'The proof', f2h:'Real cases →', f2p:'Levers measured in insurance, CX, retail, sales, BI and supply — anonymized by sector, with the result that stuck.',\n    cta_h:'Tell us where it hurts.', cta_sub:'Thirty minutes, no sales script. You leave with a path.', cta_btn:'Book a call →'\n  },\n  es:{\n    back:'← Inicio',\n    hero_eyebrow:'Empresa',\n    hero_h:'Un equipo y un runtime. Nada entre la idea y la producción.',\n    hero_sub:'Data² existe para cerrar la distancia entre lo que un negocio imagina y lo que llega a producción. Entramos como equipo, construimos sobre un runtime propietario y entregamos funcionando — con el dato siempre en tu dominio.',\n    tese_eyebrow:'La tesis',\n    tese_h:'El software debería nacer de la intención — y llegar a producción.',\n    tese_sub:'La mayoría de los proyectos muere entre la diapositiva y la puesta en marcha. Nosotros lo invertimos: un equipo se integra y lo entrega funcionando en semanas. El runtime lo sostiene; el dato nunca sale de tu dominio.',\n    faces_eyebrow:'Explora',\n    faces_h:'Dos puertas: el modelo y las pruebas.',\n    f1tag:'El modelo', f1h:'Cómo trabajamos →', f1p:'Inmersión, construcción integrada y producción — en semanas. Un equipo en tu problema, de tu lado.',\n    f2tag:'Las pruebas', f2h:'Casos reales →', f2p:'Palancas medidas en seguros, CX, retail, ventas, BI y supply — anonimizadas por sector, con el resultado que quedó.',\n    cta_h:'Cuéntanos dónde duele.', cta_sub:'Treinta minutos, sin guion de ventas. Sales con un camino.', cta_btn:'Agendar una charla →'\n  }\n}; }\nfunction renderEmpresa(d2, esc, dd, t){\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('hero_eyebrow'))+'</div><h1 class=\"d-head big stag\">'+esc(t('hero_h'))+'</h1><div class=\"d-sub stag\">'+esc(t('hero_sub'))+'</div></section>';\n\n  var tese = '<section class=\"d-sec d-tese\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('tese_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('tese_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('tese_sub'))+'</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('faces_eyebrow'))+'</div><h2 class=\"d-head stag\">'+esc(t('faces_h'))+'</h2><div class=\"d-faces stag\"><div class=\"d-face\" data-nav data-href=\"/consultoria\" style=\"cursor:pointer\"><div class=\"tag\">'+esc(t('f1tag'))+'</div><h3>'+esc(t('f1h'))+'</h3><p>'+esc(t('f1p'))+'</p></div><div class=\"d-face plat\" data-nav data-href=\"/casos\" style=\"cursor:pointer\"><div class=\"tag\">'+esc(t('f2tag'))+'</div><h3>'+esc(t('f2h'))+'</h3><p>'+esc(t('f2p'))+'</p></div></div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(t('cta_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('cta_sub'))+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta_btn'))+'</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/\">'+esc(t('back'))+'</span>'+hero+tese+faces+cta;\n}\n"}}}}}}}},{"_id":"6a7b1ffd72fae23f3ca54cd4","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-carreiras","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = CARREIRAS_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return `<main class=\"pageframe\">${renderCarreiras(d2, esc, dd, t)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CARREIRAS_T(){ return {\n  pt:{ back:'← Empresa', hero_eye:'Carreiras', hero_h:'Engenharia que chega à produção.', hero_sub:'A Data² é um time que embarca no problema de um cliente e entrega sistema rodando — em semanas, sobre uma runtime proprietária. Procuramos gente que resolve o negócio, não só escreve código.', como_eye:'Como trabalhamos', como_h:'O time e a runtime, na mesma mesa.', c1_lab:'Embarcado no cliente', c1_h:'Dentro do time da dor', c1_p:'Você constrói junto de quem tem o problema, começando pelo resultado de negócio. Não é fábrica de horas do outro lado do mundo.', c2_lab:'Uma runtime só', c2_h:'data2-lang de ponta a ponta', c2_p:'Uma linguagem descreve UI, dados, fluxos e regras sobre uma runtime proprietária. Menos superfície para errar, mais sistema legível.', c3_lab:'Em produção', c3_h:'Seu trabalho entra no ar', c3_p:'No fim, o sistema roda no domínio do cliente, sob as regras dele. O que você constrói entra em produção de verdade — não morre em POC.', flow_eye:'O que você toca', flow_h:'O sistema inteiro, não um fragmento.', flow_sub:'Do primeiro diagnóstico ao sistema no ar — você acompanha cada etapa, sem caixa-preta.', flow_s1_h:'Intenção', flow_s1_p:'Entender a dor e a régua de sucesso antes de escrever a primeira linha.', flow_s2_h:'Runtime', flow_s2_p:'Construir sobre Rush, Connect e Domain — o motor que sustenta o sistema.', flow_s3_h:'Produção', flow_s3_p:'Colocar no ar de verdade, sob as regras do cliente, em semanas.', flow_s4_h:'Evolução', flow_s4_p:'Rodando no domínio do cliente, evoluindo com o time dele.', faces_eye:'Quem procuramos', faces_h:'A régua: entender a dor antes da solução.', faces_p:'Decisão embasada, sistema legível — e em semanas o que você construiu está rodando numa operação real. Sem caixa-preta para trás, sem trimestre esperando aprovação.', cta_h:'Quer construir assim?', cta_sub:'Mande uma linha sobre você e o tipo de problema que te tira o sono. Engenharia responde — sem funil de recrutamento.', cta_btn:'Mandar minha linha →' },\n  en:{ back:'← Company', hero_eye:'Careers', hero_h:'Engineering that reaches production.', hero_sub:'Data² is a team that embeds in a client\\'s problem and ships a running system — in weeks, on a proprietary runtime. We look for people who solve the business, not just write code.', como_eye:'How we work', como_h:'The team and the runtime, at the same table.', c1_lab:'Embedded with the client', c1_h:'Inside the team that feels the pain', c1_p:'You build alongside the people who have the problem, starting from the business outcome. Not an hours factory on the other side of the world.', c2_lab:'One runtime', c2_h:'data2-lang end to end', c2_p:'One language describes UI, data, flows and rules on a proprietary runtime. Less surface to get wrong, more legible systems.', c3_lab:'In production', c3_h:'Your work goes live', c3_p:'In the end, the system runs on the client\\'s domain, under their rules. What you build reaches real production — it doesn\\'t die in a POC.', flow_eye:'What you touch', flow_h:'The whole system, not a fragment.', flow_sub:'From the first diagnosis to the system live — you follow every step, no black box.', flow_s1_h:'Intent', flow_s1_p:'Understand the pain and the bar for success before writing the first line.', flow_s2_h:'Runtime', flow_s2_p:'Build on Rush, Connect and Domain — the engine that holds the system up.', flow_s3_h:'Production', flow_s3_p:'Go truly live, under the client\\'s rules, in weeks.', flow_s4_h:'Evolution', flow_s4_p:'Running on the client\\'s domain, evolving with their team.', faces_eye:'Who we look for', faces_h:'The bar: understand the pain before the solution.', faces_p:'Grounded decisions, legible systems — and in weeks, what you built is running in a real operation. No black box left behind, no quarter spent waiting for sign-off.', cta_h:'Want to build like this?', cta_sub:'Send us a line about you and the kind of problem that keeps you up at night. Engineering answers — no recruiting funnel.', cta_btn:'Send a few lines →' },\n  es:{ back:'← Empresa', hero_eye:'Carreras', hero_h:'Ingeniería que llega a producción.', hero_sub:'Data² es un equipo que se embarca en el problema de un cliente y entrega un sistema funcionando — en semanas, sobre un runtime propietario. Buscamos gente que resuelve el negocio, no solo escribe código.', como_eye:'Cómo trabajamos', como_h:'El equipo y el runtime, en la misma mesa.', c1_lab:'Integrados en el cliente', c1_h:'Dentro del equipo del dolor', c1_p:'Construyes junto a quien tiene el problema, empezando por el resultado de negocio. No es una fábrica de horas del otro lado del mundo.', c2_lab:'Un solo runtime', c2_h:'data2-lang de punta a punta', c2_p:'Un lenguaje describe UI, datos, flujos y reglas sobre un runtime propietario. Menos superficie para equivocarse, más sistema legible.', c3_lab:'En producción', c3_h:'Tu trabajo entra en el aire', c3_p:'Al final, el sistema corre en el dominio del cliente, bajo sus reglas. Lo que construyes entra en producción de verdad — no muere en una POC.', flow_eye:'Lo que tocas', flow_h:'El sistema entero, no un fragmento.', flow_sub:'Del primer diagnóstico al sistema en el aire — acompañas cada etapa, sin caja negra.', flow_s1_h:'Intención', flow_s1_p:'Entender el dolor y la vara de éxito antes de escribir la primera línea.', flow_s2_h:'Runtime', flow_s2_p:'Construir sobre Rush, Connect y Domain — el motor que sostiene el sistema.', flow_s3_h:'Producción', flow_s3_p:'Ponerlo en el aire de verdad, bajo las reglas del cliente, en semanas.', flow_s4_h:'Evolución', flow_s4_p:'Corriendo en el dominio del cliente, evolucionando con su equipo.', faces_eye:'A quién buscamos', faces_h:'La vara: entender el dolor antes que la solución.', faces_p:'Decisiones fundamentadas, sistemas legibles — y en semanas lo que construiste está corriendo en una operación real. Sin caja negra detrás, sin un trimestre esperando aprobación.', cta_h:'¿Quieres construir así?', cta_sub:'Mándanos una línea sobre ti y el tipo de problema que te quita el sueño. Ingeniería responde — sin embudo de reclutamiento.', cta_btn:'Enviar unas líneas →' }\n}; }\nfunction renderCarreiras(d2, esc, dd, t){\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('hero_eye')+'</div><h1 class=\"d-head big stag\">'+t('hero_h')+'</h1><div class=\"d-sub stag\">'+t('hero_sub')+'</div></section>';\n\n  var como = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('como_eye')+'</div><h2 class=\"d-head stag\">'+t('como_h')+'</h2><div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">'+t('c1_lab')+'</div><h4>'+t('c1_h')+'</h4><p>'+t('c1_p')+'</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">'+t('c2_lab')+'</div><h4>'+t('c2_h')+'</h4><p>'+t('c2_p')+'</p></div><div class=\"d-dfcard\"><div class=\"lab\">'+t('c3_lab')+'</div><h4>'+t('c3_h')+'</h4><p>'+t('c3_p')+'</p></div></div></section>';\n\n  var flow = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('flow_eye')+'</div><h2 class=\"d-head stag\">'+t('flow_h')+'</h2><div class=\"d-sub stag\">'+t('flow_sub')+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat(4,1fr);--ihue:#3A7BFF\"><div class=\"i-rail\"></div>'\n    + [{n:'01',h:t('flow_s1_h'),p:t('flow_s1_p')},{n:'02',h:t('flow_s2_h'),p:t('flow_s2_p')},{n:'03',h:t('flow_s3_h'),p:t('flow_s3_p')},{n:'04',h:t('flow_s4_h'),p:t('flow_s4_p')}].map(function(s){ return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:#3A7BFF\"></div><div class=\"i-pn\">'+esc(s.n)+' · '+esc(s.h)+'</div><div class=\"i-pr\" style=\"text-transform:none;letter-spacing:0;font-family:inherit;font-size:13px;color:var(--ink-mid);line-height:1.5\">'+esc(s.p)+'</div></div>'; }).join('')\n    + '</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('faces_eye')+'</div><h2 class=\"d-head stag\">'+t('faces_h')+'</h2><div class=\"d-sub stag\" style=\"max-width:62ch\">'+t('faces_p')+'</div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+t('cta_h')+'</h2><div class=\"d-sub stag\">'+t('cta_sub')+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+t('cta_btn')+'</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/empresa\">'+t('back')+'</span>'+hero+como+flow+faces+cta;\n}\n"}}}}}}}},{"_id":"6a7b1ffdf999f90a8603e64b","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-recursos","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = RECURSOS_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return `<main class=\"pageframe\">${renderRecursos(d2, esc, dd, t)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction RECURSOS_T(){ return {\n  pt:{ back:'← Início', hero_eye:'Recursos', hero_h:'Material para levar a decisão adiante.', hero_sub:'O deck de decisão: a tese, o método e os resultados, no formato que uma diretoria lê em cinco minutos.', deck_eye:'O deck de decisão', deck_h:'Cinco minutos. A conversa inteira.', deck_p:'A tese, como um time embarcado constrói com você sobre a runtime, e os resultados que já entregamos. Montado para ser encaminhado: quem recebe entende sem você na sala.', deck_cta:'Abrir o deck →', foot_note:'Documentação e casos em preparação.', cta_h:'Prefere ver rodando?', cta_sub:'Trinta minutos com a gente valem mais que qualquer PDF — e você sai com um caminho.', cta_btn1:'Marcar uma conversa →', cta_btn2:'Ver a plataforma →' },\n  en:{ back:'← Home', hero_eye:'Resources', hero_h:'Material to carry the decision forward.', hero_sub:'The decision deck: the thesis, the method and the results, in the format a boardroom reads in five minutes.', deck_eye:'The decision deck', deck_h:'Five minutes. The whole conversation.', deck_p:'The thesis, how an embedded team builds with you on the runtime, and the results we have already delivered. Built to be forwarded: whoever receives it gets it without you in the room.', deck_cta:'Open the deck →', foot_note:'Documentation and cases in preparation.', cta_h:'Rather see it running?', cta_sub:'Thirty minutes with us are worth more than any PDF — and you leave with a path.', cta_btn1:'Book a call →', cta_btn2:'See the platform →' },\n  es:{ back:'← Inicio', hero_eye:'Recursos', hero_h:'Material para llevar la decisión adelante.', hero_sub:'El deck de decisión: la tesis, el método y los resultados, en el formato que una dirección lee en cinco minutos.', deck_eye:'El deck de decisión', deck_h:'Cinco minutos. La conversación entera.', deck_p:'La tesis, cómo un equipo integrado construye contigo sobre el runtime, y los resultados ya entregados. Hecho para reenviar: quien lo recibe lo entiende sin ti en la sala.', deck_cta:'Abrir el deck →', foot_note:'Documentación y casos en preparación.', cta_h:'¿Prefieres verlo funcionando?', cta_sub:'Treinta minutos con nosotros valen más que cualquier PDF — y sales con un camino.', cta_btn1:'Agendar una charla →', cta_btn2:'Ver la plataforma →' }\n}; }\nfunction renderRecursos(d2, esc, dd, t){\n  var deckUrl = 'https://new-deck.next.data2.app';\n  var hero = '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('hero_eye')+'</div><h1 class=\"d-head big stag\">'+t('hero_h')+'</h1><div class=\"d-sub stag\">'+t('hero_sub')+'</div></section>';\n  var deck = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('deck_eye')+'</div><h2 class=\"d-head stag\">'+t('deck_h')+'</h2><div class=\"d-sub stag\">'+t('deck_p')+'</div><div class=\"d-cta stag\"><a class=\"d-btn\" href=\"'+deckUrl+'\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;text-decoration:none\">'+t('deck_cta')+'</a></div></section>';\n  var foot = '<div class=\"askhint\" style=\"margin-top:6px;padding-bottom:10px;text-align:center\">'+t('foot_note')+'</div>';\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+t('cta_h')+'</h2><div class=\"d-sub stag\">'+t('cta_sub')+'</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+t('cta_btn1')+'</button><button class=\"d-btn\" data-nav data-href=\"/plataforma\">'+t('cta_btn2')+'</button></div></section>';\n  return '<span class=\"back\" data-nav data-href=\"/\">'+t('back')+'</span>'+hero+deck+cta+foot;\n}\n"}}}}}}}},{"_id":"6a7b202b72fae23f3ca54d83","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-contato","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = CONTATO_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return `<main class=\"pageframe\">${renderContato(d2, esc, dd, t)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} try{ contatoSetup(d2); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CONTATO_T(){ return {\n  pt:{\n    back:'← Empresa',\n    hero_eyebrow:'Contato', hero_h:'Conte onde dói.', hero_sub:'Nome, empresa e uma linha sobre o problema. A gente responde em 1 dia útil — sem funil de vendas.',\n    l_nome:'Nome', ph_nome:'Seu nome',\n    l_empresa:'Empresa', ph_empresa:'Onde você trabalha',\n    l_email:'E-mail', ph_email:'voce@empresa.com',\n    l_msg:'Onde dói', ph_msg:'Uma linha sobre o problema que você quer resolver',\n    btn_send:'Enviar →',\n    askhint:'Prefere e-mail direto? ',\n    msg_required:'Preencha nome, e-mail e mensagem.', msg_email:'E-mail parece inválido.', msg_sending:'Enviando…', msg_ok:'Recebido. A gente responde em até 1 dia útil.', msg_opening:'Abrindo seu e-mail para enviar…',\n    mail_subject:'Contato pelo site — ', mail_b_nome:'Nome: ', mail_b_empresa:'Empresa: ', mail_b_email:'E-mail: ', mail_b_msg:'Onde dói:'\n  },\n  en:{\n    back:'← Company',\n    hero_eyebrow:'Contact', hero_h:'Tell us where it hurts.', hero_sub:'Name, company and one line about the problem. We reply within 1 business day — no sales funnel.',\n    l_nome:'Name', ph_nome:'Your name',\n    l_empresa:'Company', ph_empresa:'Where you work',\n    l_email:'Email', ph_email:'you@company.com',\n    l_msg:'Where it hurts', ph_msg:'One line about the problem you want to solve',\n    btn_send:'Send →',\n    askhint:'Prefer email directly? ',\n    msg_required:'Fill in name, email and message.', msg_email:'Email looks invalid.', msg_sending:'Sending…', msg_ok:'Received. We reply within 1 business day.', msg_opening:'Opening your email to send…',\n    mail_subject:'Website contact — ', mail_b_nome:'Name: ', mail_b_empresa:'Company: ', mail_b_email:'Email: ', mail_b_msg:'Where it hurts:'\n  },\n  es:{\n    back:'← Empresa',\n    hero_eyebrow:'Contacto', hero_h:'Cuéntanos dónde duele.', hero_sub:'Nombre, empresa y una línea sobre el problema. Respondemos en 1 día hábil — sin embudo de ventas.',\n    l_nome:'Nombre', ph_nome:'Tu nombre',\n    l_empresa:'Empresa', ph_empresa:'Dónde trabajas',\n    l_email:'Correo', ph_email:'tu@empresa.com',\n    l_msg:'Dónde duele', ph_msg:'Una línea sobre el problema que quieres resolver',\n    btn_send:'Enviar →',\n    askhint:'¿Prefieres correo directo? ',\n    msg_required:'Completa nombre, correo y mensaje.', msg_email:'El correo parece inválido.', msg_sending:'Enviando…', msg_ok:'Recibido. Respondemos en 1 día hábil.', msg_opening:'Abriendo tu correo para enviar…',\n    mail_subject:'Contacto desde el sitio — ', mail_b_nome:'Nombre: ', mail_b_empresa:'Empresa: ', mail_b_email:'Correo: ', mail_b_msg:'Dónde duele:'\n  }\n}; }\nfunction renderContato(d2, esc, dd, t){\n  var hero = '<section class=\"p-hero\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('hero_eyebrow'))+'</div><h1 class=\"d-head big stag\">'+esc(t('hero_h'))+'</h1><div class=\"d-sub stag\">'+esc(t('hero_sub'))+'</div></section>';\n  var form = '<section class=\"d-sec\" data-reveal><form class=\"cform stag\" data-cform novalidate>'\n    + '<div class=\"cf-row2\"><div class=\"cfield\"><label>'+esc(t('l_nome'))+'</label><input data-cf=\"nome\" placeholder=\"'+esc(t('ph_nome'))+'\"/></div><div class=\"cfield\"><label>'+esc(t('l_empresa'))+'</label><input data-cf=\"empresa\" placeholder=\"'+esc(t('ph_empresa'))+'\"/></div></div>'\n    + '<div class=\"cfield\"><label>'+esc(t('l_email'))+'</label><input data-cf=\"email\" type=\"email\" placeholder=\"'+esc(t('ph_email'))+'\"/></div>'\n    + '<div class=\"cfield\"><label>'+esc(t('l_msg'))+'</label><textarea data-cf=\"mensagem\" placeholder=\"'+esc(t('ph_msg'))+'\"></textarea></div>'\n    + '<input class=\"cf-hp\" data-cf=\"_hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\"/>'\n    + '<div style=\"display:flex;align-items:center;gap:16px;flex-wrap:wrap\"><button type=\"button\" class=\"d-btn\" data-cf-send>'+esc(t('btn_send'))+'</button><span class=\"cf-msg\" data-cf-msg></span></div>'\n    + '</form><div class=\"askhint\" style=\"margin-top:18px\">'+esc(t('askhint'))+'<b>contato@data2.app</b></div></section>';\n  return '<span class=\"back\" data-nav data-href=\"/empresa\">'+esc(t('back'))+'</span>'+hero+form;\n}\nfunction contatoSetup(d2){\n  const send = () => {\n    var lang = D2LANG(d2); var TT = CONTATO_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    const root = d2.root || (typeof document!=='undefined'?document:null); if(!root) return;\n    const get = k => { const el=root.querySelector('[data-cf=\"'+k+'\"]'); return el?String(el.value||'').trim():''; };\n    const msgEl = root.querySelector('[data-cf-msg]');\n    const set = (t,c) => { if(msgEl){ msgEl.textContent=t; msgEl.className='cf-msg '+(c||''); } };\n    if(get('_hp')){ return; }\n    const nome=get('nome'), empresa=get('empresa'), email=get('email'), mensagem=get('mensagem');\n    if(!nome||!email||!mensagem){ set(t('msg_required'),'err'); return; }\n    if(!/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(email)){ set(t('msg_email'),'err'); return; }\n    const fallbackMail = () => {\n      const subject=t('mail_subject')+nome+(empresa?(' · '+empresa):'');\n      const body=t('mail_b_nome')+nome+'\\n'+t('mail_b_empresa')+empresa+'\\n'+t('mail_b_email')+email+'\\n\\n'+t('mail_b_msg')+'\\n'+mensagem;\n      const href='mailto:contato@data2.app?subject='+encodeURIComponent(subject)+'&body='+encodeURIComponent(body);\n      set(t('msg_opening'),'ok');\n      try{ if(typeof window!=='undefined') window.location.href=href; }catch(_){ }\n    };\n    const btn = root.querySelector('[data-cf-send]');\n    const unlock = () => { try{ if(btn) btn.disabled=false; }catch(_){ } };\n    set(t('msg_sending'),'');\n    try{ if(btn) btn.disabled=true; }catch(_){ }\n    const rec = { nome:nome, empresa:empresa, email:email, mensagem:mensagem, lang:lang, _hp:get('_hp') };\n    const tryCreate = () => { try{ if(typeof fetch!=='function') return Promise.reject(new Error('no-fetch')); return fetch('https://www.data2apis.com/rush/site_lead_intake',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(rec)}).then(function(res){ if(!res.ok) throw new Error('http-'+res.status); return res.json(); }).then(function(j){ if(j&&j.data&&j.data.ok) return j; throw new Error((j&&j.data&&j.data.error)||'send-failed'); }); }catch(err){ return Promise.reject(err); } };\n    const onOk = () => {\n      unlock(); set(t('msg_ok'),'ok');\n      ['nome','empresa','email','mensagem'].forEach(function(k){ var el=root.querySelector('[data-cf=\"'+k+'\"]'); if(el) el.value=''; });\n    };\n    tryCreate().then(onOk, function(){ setTimeout(function(){ tryCreate().then(onOk, function(){ unlock(); fallbackMail(); }); }, 800); });\n  };\n  d2.on('[data-cf-send]','click', send);\n  d2.on('.cform','keydown',(e)=>{ if((e.key==='Enter'||e.keyCode===13) && e.target && e.target.tagName!=='TEXTAREA'){ e.preventDefault(); send(); } });\n}\n"}}}}}}}},{"_id":"6a7b2087dccefbb93b96ba49","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-casos","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.c-ind-eyebrow{font-family:var(--font-mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low);position:relative;z-index:1;margin-bottom:9px}\n.c-stkrow{margin-top:12px;position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:5px}\n.c-stk{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.08em;color:var(--ink-mid);border:1px solid var(--hairline);border-radius:5px;padding:3px 7px}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = CASOS_T();\n    var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var pick = function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n    return `<main class=\"pageframe\">${renderCasosIndex(d2, esc, dd, t, pick, lang)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CASOS_T(){ return {\n  pt:{ back:'← Início', caso:'Caso', vercaso:'Ver caso →', eyebrow:'Casos · alavancas reais', head:'Não são cases. Estão no ar.', sub:'Cada um tem endereço — abra qualquer um. Dor de operação que um time resolveu junto com o cliente, sobre a runtime, com o resultado que ficou.', cta_h:'O próximo caso pode ser o seu setor.', cta_sub:'Traga a dor. Em semanas, ela vira um sistema com endereço.', cta_btn:'Marcar uma conversa →' },\n  en:{ back:'← Home', caso:'Case', vercaso:'View case →', eyebrow:'Cases · real levers', head:\"Not case studies. They're live.\", sub:'Each one has an address — open any of them. Operational pain a team solved together with the client, on the runtime, and the result that stuck.', cta_h:'The next case could be your sector.', cta_sub:'Bring the pain. In weeks, it becomes a system with an address.', cta_btn:'Book a call →' },\n  es:{ back:'← Inicio', caso:'Caso', vercaso:'Ver caso →', eyebrow:'Casos · palancas reales', head:'No son casos. Están en producción.', sub:'Cada uno tiene dirección — abre cualquiera. Dolor de operación que un equipo resolvió junto con el cliente, sobre el runtime, con el resultado que quedó.', cta_h:'El próximo caso puede ser tu sector.', cta_sub:'Trae el dolor. En semanas, se convierte en un sistema con dirección.', cta_btn:'Agendar una charla →' }\n}; }\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction isoTile(hue){ return `<svg class=\"iso\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"${hue}\" opacity=\"0.34\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"${hue}\" opacity=\"0.16\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"${hue}\" opacity=\"0.24\"/></g></svg>`; }\nfunction hueForIndustria(dd, slug){ var i=(dd('cms-industriesDataSet')||[]).find(function(x){return x.slug===slug;}); return i?(i.hue||'#3A7BFF'):'#3A7BFF'; }\nfunction cleanPH(t){ return String(t==null?'':t).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim(); }\nfunction firstClause(t){ var s=String(t==null?'':t).trim(); var m=s.match(/^(.*?[\\.…])\\s/); return m?m[1]:s; }\nfunction renderCasosIndex(d2, esc, dd, t, pick, lang){\n  var cs = (dd('cms-casesDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var inds = (dd('cms-industriesDataSet')||[]); var indBySlug = {}; inds.forEach(function(i){ indBySlug[i.slug]=i; });\n  var prods = (dd('cms-productsDataSet')||[]); var pByKey = {}; prods.forEach(function(p){ pByKey[String(p.key).toLowerCase()]=p; });\n  var cards = cs.map(function(c){\n    var hue = esc(hueForIndustria(dd, c.industria));\n    var ind = indBySlug[c.industria] || {};\n    var lev = esc(cleanPH(String(pick(c,'alavanca')||'').split(/\\s*;\\s*/)[0]).replace(/[;,]\\s*$/,''));\n    var dz  = esc(firstClause(pick(c,'desafio')));\n    var stk = Array.isArray(c.stack) ? c.stack : [];\n    var tags = stk.slice(0,5).map(function(k){ var p=pByKey[String(k).toLowerCase()]; return '<span class=\"c-stk\">'+esc(p?p.name:k)+'</span>'; }).join('');\n    return '<div class=\"d-ind\" data-nav data-href=\"/casos/'+esc(c.slug)+'\" style=\"--accent:'+hue+'\">'\n      + isoTile(hue)\n      + '<div class=\"c-ind-eyebrow\">'+esc((lang==='pt'?ind.name_pt:(ind['name_'+lang]||ind.name_pt))||t('caso'))+'</div>'\n      + '<div class=\"name\"><span class=\"chip\" style=\"background:'+hue+'\"></span>'+esc(pick(c,'cliente_setor'))+'</div>'\n      + '<div class=\"dor\" style=\"display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden\">'+dz+'</div>'\n      + (tags?'<div class=\"c-stkrow\">'+tags+'</div>':'')\n      + '<div class=\"lev\">'+lev+'</div>'\n      + '<div style=\"margin-top:12px;font-size:12.5px;color:var(--action);position:relative;z-index:1\">'+esc(t('vercaso'))+'</div>'\n      + '</div>';\n  }).join('');\n  return '<span class=\"back\" data-nav data-href=\"/\">'+esc(t('back'))+'</span>'\n    + '<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('eyebrow'))+'</div><h1 class=\"d-head big stag\">'+esc(t('head'))+'</h1><div class=\"d-sub stag\">'+esc(t('sub'))+'</div></section>'\n    + '<section class=\"d-sec\" data-reveal><div class=\"d-inds i-indgrid stag\">'+cards+'</div></section>'\n    + '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(t('cta_h'))+'</h2><div class=\"d-sub stag\">'+esc(t('cta_sub'))+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta_btn'))+'</button></div></section>';\n}\n"}}}}}}}},{"_id":"6a7b20bdf4d379add17e15f6","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-caso","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.p-hero{position:relative;z-index:1;padding:clamp(18px,4vh,44px) 0 8px}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-ctx{font-size:clamp(14px,1.3vw,17px);color:var(--ink-low);line-height:1.6;max-width:44ch;margin:16px 0 0}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.cform{max-width:640px;margin:8px 0 0;display:flex;flex-direction:column;gap:16px}\n.cf-row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.cfield{display:flex;flex-direction:column;gap:7px}\n.cfield label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low)}\n.cfield input,.cfield textarea{background:rgba(255,255,255,.04);border:1px solid var(--hairline);border-radius:10px;padding:13px 15px;color:var(--ink-hi);font-family:inherit;font-size:15px;outline:none;transition:.16s;width:100%}\n.cfield textarea{min-height:130px;resize:vertical;line-height:1.5}\n.cfield input:focus,.cfield textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px rgba(58,123,255,.16)}\n.cfield input::placeholder,.cfield textarea::placeholder{color:var(--ink-low)}\n.cf-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}\n.cf-msg{font-size:14px;color:var(--ink-mid);min-height:20px}\n.cf-msg.ok{color:var(--action-hi)}\n.cf-msg.err{color:var(--verme)}\n.askhint{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-low)}\n.askhint b{color:var(--ink-mid)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-inds{grid-template-columns:1fr}}\n@media(max-width:640px){.cf-row2{grid-template-columns:1fr}.pageframe{padding:46px 18px 34px}.d-faces{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr 1fr}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2);\n    var TT = CASO_T();\n    var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var pick = function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n    const slug = (d2.params && d2.params.slug) || '';\n    const c = (dd('cms-casesDataSet')).find(function(x){ return x.slug===slug; });\n    if(!c){ return `<main class=\"pageframe\"><span class=\"back\" data-nav data-href=\"/casos\">${esc(t('backcasos'))}</span><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>${esc(t('nf_eyebrow'))}</div><h2 class=\"d-head stag\">${esc(t('nf_head'))}</h2><div class=\"d-sub stag\">${esc(t('nf_sub'))}</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/casos\">${esc(t('nf_btn'))}</button></div></section></main>`; }\n    return `<main class=\"pageframe\">${renderCasoDetail(d2, esc, dd, c, t, pick, lang)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction PROD_ROLE_T(){ return {\n  pt:{RUSH:'escuta · o que chega',DOMAIN:'decide · com o porquê',CONNECT:'conecta · o que você já usa',MEDIA:'guarda · seus arquivos',CASHIER:'cobra · com registro',ID:'quem entra · o que pode',REGISTRY:'cataloga · seus dados',UI:'monta · suas telas'},\n  en:{RUSH:'listens · to what comes in',DOMAIN:'decides · with the why',CONNECT:'connects · what you already use',MEDIA:'keeps · your files',CASHIER:'charges · on the record',ID:'who gets in · what they can do',REGISTRY:'catalogs · your data',UI:'builds · your screens'},\n  es:{RUSH:'escucha · lo que llega',DOMAIN:'decide · con el porqué',CONNECT:'conecta · lo que ya usas',MEDIA:'guarda · tus archivos',CASHIER:'cobra · con registro',ID:'quién entra · qué puede',REGISTRY:'cataloga · tus datos',UI:'monta · tus pantallas'}\n}; }\nfunction CASO_T(){ return {\n  pt:{ backcasos:'← Casos', nf_eyebrow:'Caso não encontrado', nf_head:'Esse caso não existe.', nf_sub:'O endereço pode ter mudado — veja todos os casos que estão no ar.', nf_btn:'Ver todos os casos →', caso:'Caso', comp:'componente', quadro_eye:'A virada', quadro_head:'O que entrou no lugar da dor.', res_eye:'Resultado', res_head:'O que ficou, em números.', rt_eye:'Na runtime', rt_head:'Os componentes que sustentam.', rt_sub:'Uma só runtime — os componentes abaixo dividem o mesmo dado e as mesmas regras. Sem cola entre sistemas.', cta_head:'Tem esse problema na sua operação?', cta_sub:'Construímos com você — semanas, não trimestres.', cta_btn:'Marcar uma conversa →' },\n  en:{ backcasos:'← Cases', nf_eyebrow:'Case not found', nf_head:\"That case doesn't exist.\", nf_sub:\"The address may have changed — see every case that's live.\", nf_btn:'View all cases →', caso:'Case', comp:'component', quadro_eye:'The turn', quadro_head:'What replaced the pain.', res_eye:'Result', res_head:'What stuck, in numbers.', rt_eye:'On the runtime', rt_head:'The components that hold it up.', rt_sub:'One runtime — the components below share the same data and the same rules. No glue between systems.', cta_head:'Got this problem in your operation?', cta_sub:'We build it with you — weeks, not quarters.', cta_btn:'Book a call →' },\n  es:{ backcasos:'← Casos', nf_eyebrow:'Caso no encontrado', nf_head:'Ese caso no existe.', nf_sub:'La dirección puede haber cambiado — mira todos los casos que están en producción.', nf_btn:'Ver todos los casos →', caso:'Caso', comp:'componente', quadro_eye:'El giro', quadro_head:'Lo que entró en el lugar del dolor.', res_eye:'Resultado', res_head:'Lo que quedó, en números.', rt_eye:'En el runtime', rt_head:'Los componentes que lo sostienen.', rt_sub:'Un solo runtime — los componentes de abajo comparten el mismo dato y las mismas reglas. Sin pegamento entre sistemas.', cta_head:'¿Tienes este problema en tu operación?', cta_sub:'Lo construimos contigo — semanas, no trimestres.', cta_btn:'Agendar una charla →' }\n}; }\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction hueForIndustria(dd, slug){ var i=(dd('cms-industriesDataSet')||[]).find(function(x){return x.slug===slug;}); return i?(i.hue||'#3A7BFF'):'#3A7BFF'; }\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction inferNodes(dd, txt){\n  var t = ' '+String(txt||'').toLowerCase()+' ';\n  var rules = [\n    {k:'domain', re:/json-?mode|hard-?gate|planner|linguagem natural|pergunta|indicador|conselho|inten[cç]|decide|julga|dossi[eê]|conversacional|l[eê] |cnh|laudo|vision|extract|recursiv|saldo|\\bbi\\b|next-best/},\n    {k:'rush', re:/\\bvoz\\b|fnol|roteia|automatiz|webhook|evento|cron|explos[aã]o|\\bbom\\b|torre de controle|\\bura\\b|tempo real|pico/},\n    {k:'registry', re:/cat[aá]logo|\\bsku\\b|base real|\\bdados?\\b|registro|busca/},\n    {k:'media', re:/try-on|imagem|gerado por ia|\\bfoto\\b|\\bpdf\\b/},\n    {k:'ui', re:/copiloto|lista|dashboard|gr[aá]fico|tabela|ui generativa|interface|handoff|descoberta|relat[oó]rio/},\n    {k:'connect', re:/integra|core em tempo real|\\berp\\b|\\bpsp\\b|api externa|v[aá]rios sistemas|sistemas/},\n    {k:'id', re:/policy|identidade|autentica[cç]|permiss/}\n  ];\n  var keys = {};\n  rules.forEach(function(r){ if(r.re.test(t)) keys[r.k]=true; });\n  var prods = (dd('cms-productsDataSet')||[]);\n  var picked = prods.filter(function(p){ return keys[p.key]; });\n  if(!picked.length){ picked = prods.filter(function(p){ return p.key==='rush'||p.key==='domain'||p.key==='ui'; }); }\n  picked = picked.slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);}).slice(0,5);\n  return picked;\n}\nfunction resolveStack(dd, c){\n  var prods = (dd('cms-productsDataSet')||[]);\n  var byKey = {}; prods.forEach(function(p){ byKey[String(p.key).toLowerCase()]=p; });\n  var keys = Array.isArray(c.stack) ? c.stack : (typeof c.stack==='string' && c.stack ? c.stack.split(/\\s*,\\s*/) : null);\n  if(keys && keys.length){\n    var picked = keys.map(function(k){ return byKey[String(k).toLowerCase()]; }).filter(Boolean);\n    if(picked.length) return picked.slice(0,6);\n  }\n  return inferNodes(dd, (c.desafio||'')+' '+(c.feito||''));\n}\nfunction renderCasoDetail(d2, esc, dd, c, t, pick, lang){\n  var hue = esc(hueForIndustria(dd, c.industria));\n  var ind = (dd('cms-industriesDataSet')||[]).find(function(x){return x.slug===c.industria;}) || {};\n  var RT = PROD_ROLE_T()[lang] || PROD_ROLE_T().en;\n  var roleOf = function(n){ return RT[String(n).toUpperCase()] || t('comp'); };\n  var indName = (lang==='pt'?ind.name_pt:(ind['name_'+lang]||ind.name_pt));\n\n  var hero = '<section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('caso'))+(indName?' · '+esc(indName):'')+'</div><h1 class=\"i-name stag\">'+esc(pick(c,'cliente_setor'))+'</h1><div class=\"i-dor stag\"><b>'+esc(pick(c,'desafio'))+'</b></div>'+(pick(c,'contexto')?'<div class=\"i-ctx stag\">'+esc(pick(c,'contexto'))+'</div>':'')+'</div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n\n  var faces = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('quadro_eye'))+'</div><h2 class=\"d-head stag\">'+esc(t('quadro_head'))+'</h2><div class=\"d-sub stag\" style=\"max-width:62ch\">'+esc(pick(c,'feito'))+'</div></section>';\n\n  var segs = String(pick(c,'alavanca')||'').split(/\\s*[;]\\s*|,\\s+/);\n  var hotDone=false;\n  var levers = segs.map(function(seg){ return parseLever(seg); })\n    .filter(function(p){ return p.qual ? !!(p.text && p.text.length) : !(p.ph && !p.l); })\n    .map(function(p){ var hot=(!p.ph && !p.qual && !hotDone); if(hot) hotDone=true; return leverCard(esc,p,hot); }).join('');\n  var resultado = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('res_eye'))+'</div><h2 class=\"d-head stag\">'+esc(t('res_head'))+'</h2>'+(pick(c,'resultado')?'<div class=\"d-sub stag\">'+esc(pick(c,'resultado'))+'</div>':'')+'<div class=\"d-levers stag\">'+levers+'</div></section>';\n\n  var nodes = resolveStack(dd, c);\n  var cols = Math.max(nodes.length,1);\n  var nodeHtml = nodes.map(function(p){ var ac=esc(p.accent||'#3A7BFF'); return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+ac+'\"></div><div class=\"i-pn\">'+esc(p.name)+'</div><div class=\"i-pr\">'+esc(roleOf(p.name))+'</div></div>'; }).join('');\n  var stack = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('rt_eye'))+'</div><h2 class=\"d-head stag\">'+esc(t('rt_head'))+'</h2><div class=\"d-sub stag\">'+esc(t('rt_sub'))+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+cols+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodeHtml+'</div></section>';\n\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(t('cta_head'))+'</h2><div class=\"d-sub stag\">'+esc(t('cta_sub'))+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta_btn'))+'</button></div></section>';\n\n  return '<span class=\"back\" data-nav data-href=\"/casos\">'+esc(t('backcasos'))+'</span>'+hero+faces+resultado+stack+cta;\n}\n"}},"slug":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slug"}}}}}}}}}},{"_id":"6a7b2580dccefbb93b96c755","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-produtos","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.i-herowrap{position:relative;z-index:1;padding:clamp(6px,2vh,20px) 0 6px}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-indgrid .d-ind:hover{border-color:var(--accent)}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.mp-soon{font-family:var(--font-mono);font-size:9px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 5px;margin-left:auto;letter-spacing:.04em}\n@media(max-width:900px){.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.d-prods{grid-template-columns:1fr 1fr}}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    const lang = D2LANG(d2);\n    return `<main class=\"pageframe\">${renderProdutoIndex(d2, esc, dd, lang)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COMP_T(){ return {\n  pt:{ back:'← Início', eyebrow1:'Os produtos · uma runtime', h1:'Oito produtos, uma runtime só.', sub1:'Cada produto resolve uma parte do sistema — interface, dado, mídia, identidade, integração, IA, eventos e pagamento. Não são kits soltos para costurar: são componentes da mesma runtime.', eyebrow2:'Por dentro', h2:'Oito componentes da mesma runtime.', sub2:'O que você compra como produto roda como componente — o mesmo dado, as mesmas regras, a mesma superfície.', soon:'em breve', runtime:'componente', role_rush:'escuta · o que chega', role_domain:'decide · com o porquê', role_connect:'conecta · o que você já usa', role_media:'guarda · seus arquivos', role_cashier:'cobra · com registro', role_id:'quem entra · o que pode', role_registry:'cataloga · seus dados', role_ui:'monta · suas telas' },\n  en:{ back:'← Home', eyebrow1:'The products · one runtime', h1:'Eight products, one runtime.', sub1:'Each product solves one part of the system — interface, data, media, identity, integration, AI, events and payment. Not loose kits to stitch together: components of the same runtime.', eyebrow2:'Under the hood', h2:'Eight components of the same runtime.', sub2:'What you buy as a product runs as a component — the same data, the same rules, the same surface.', soon:'coming soon', runtime:'component', role_rush:'listens · to what comes in', role_domain:'decides · with the why', role_connect:'connects · what you already use', role_media:'keeps · your files', role_cashier:'charges · on the record', role_id:'who gets in · what they can do', role_registry:'catalogs · your data', role_ui:'builds · your screens' },\n  es:{ back:'← Inicio', eyebrow1:'Los productos · un solo runtime', h1:'Ocho productos, un solo runtime.', sub1:'Cada producto resuelve una parte del sistema — interfaz, dato, media, identidad, integración, IA, eventos y pago. No son kits sueltos para coser: son componentes del mismo runtime.', eyebrow2:'Por dentro', h2:'Ocho componentes del mismo runtime.', sub2:'Lo que compras como producto corre como componente — el mismo dato, las mismas reglas, la misma superficie.', soon:'próximamente', runtime:'componente', role_rush:'escucha · lo que llega', role_domain:'decide · con el porqué', role_connect:'conecta · lo que ya usas', role_media:'guarda · tus archivos', role_cashier:'cobra · con registro', role_id:'quién entra · qué puede', role_registry:'cataloga · tus datos', role_ui:'monta · tus pantallas' }\n}; }\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction isoTile(hue){ return `<svg class=\"iso\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"${hue}\" opacity=\"0.34\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"${hue}\" opacity=\"0.16\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"${hue}\" opacity=\"0.24\"/></g></svg>`; }\nfunction renderProdutoIndex(d2, esc, dd, lang){\n  var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n  var ps = (dd('cms-productsDataSet')).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var firstLine = function(s){ return String(s==null?'':s).split(/[.·—]/)[0].trim(); };\n  var prodRole = {'RUSH':t('role_rush'),'DOMAIN':t('role_domain'),'CONNECT':t('role_connect'),'MEDIA':t('role_media'),'CASHIER':t('role_cashier'),'ID':t('role_id'),'REGISTRY':t('role_registry'),'UI':t('role_ui')};\n  var cards = ps.map(function(p){\n    var ac=esc(p.accent||'#3A7BFF'); var soon=p.status==='em-breve';\n    var val=esc(firstLine(pick(p,'description')||pick(p,'tagline')||''));\n    var head = soon\n      ? '<div class=\"d-ind soon\" style=\"--accent:'+ac+';opacity:.62;cursor:default\">'\n      : '<div class=\"d-ind\" data-nav data-href=\"/produtos/'+esc(p.key)+'\" style=\"--accent:'+ac+'\">';\n    return head+isoTile(ac)+'<div class=\"name\"><span class=\"chip\" style=\"background:'+ac+'\"></span>'+esc(p.name)+(soon?'<span class=\"mp-soon\">'+esc(t('soon'))+'</span>':'')+'</div><div class=\"dor\">'+esc(pick(p,'tagline'))+'</div><div class=\"lev\">'+val+'</div></div>';\n  }).join('');\n  var mapNodes = ps.map(function(p){\n    var ac=esc(p.accent||'#3A7BFF');\n    var role = prodRole[String(p.name).toUpperCase()] || (p.status==='em-breve'?t('soon'):t('runtime'));\n    return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+ac+'\"></div><div class=\"i-pn\">'+esc(p.name)+'</div><div class=\"i-pr\">'+esc(role)+'</div></div>';\n  }).join('');\n  return '<span class=\"back\" data-nav data-href=\"/\">'+esc(t('back'))+'</span>'\n    +'<section class=\"i-herowrap\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('eyebrow1'))+'</div><h1 class=\"d-head big stag\">'+esc(t('h1'))+'</h1><div class=\"d-sub stag\">'+esc(t('sub1'))+'</div></section>'\n    +'<section class=\"d-sec\" data-reveal><div class=\"d-prods i-indgrid stag\">'+cards+'</div></section>'\n    +'<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('eyebrow2'))+'</div><h2 class=\"d-head stag\">'+esc(t('h2'))+'</h2><div class=\"d-sub stag\">'+esc(t('sub2'))+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+ps.length+',1fr);--ihue:#3A7BFF\"><div class=\"i-rail\"></div>'+mapNodes+'</div></section>';\n}\n"}}}}}}}},{"_id":"6a7b25d6dccefbb93b96c80e","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-industria","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-caps{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:36px}\n.i-cap{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:22px 22px 22px 60px;background:var(--surface-1);transition:.18s}\n.i-cap:hover{border-color:rgba(255,255,255,.2);transform:translateY(-2px)}\n.i-cap .i-cnode{position:absolute;left:20px;top:22px;width:24px;height:24px}\n.i-cap .i-ct{font-size:14.5px;color:var(--ink-mid);line-height:1.55}\n.i-cap .i-ct b{color:var(--ink-hi);font-weight:600}\n.i-compose{margin:30px 0 0;padding-left:16px;border-left:2px solid var(--hairline);font-size:clamp(15px,1.4vw,18px);line-height:1.7;color:var(--ink-mid);max-width:64ch}\n.i-compose b{color:var(--ink-hi);font-weight:600}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.i-case{position:relative;border:1px solid var(--hairline);border-radius:18px;padding:clamp(26px,3vw,38px);background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));overflow:hidden;margin-top:34px}\n.i-case::after{content:'';position:absolute;right:-46px;top:-46px;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,var(--ihue,#3A7BFF),transparent 70%);opacity:.14;pointer-events:none}\n.i-case .i-csetor{position:relative;z-index:1;font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase}\n.i-case .i-cline{position:relative;z-index:1;margin-top:16px;color:var(--ink-mid);font-size:15px;line-height:1.6;max-width:64ch}\n.i-case .i-cline b{color:var(--ink-hi);font-weight:600}\n.i-case .i-clev{position:relative;z-index:1;display:inline-block;margin-top:18px;font-family:var(--font-mono);font-size:12.5px;color:var(--ink-hi);border:1px solid var(--hairline);border-left:2px solid var(--action);border-radius:8px;padding:8px 14px}\n.i-caseslot{border:1px dashed var(--hairline);border-radius:18px;padding:34px;background:rgba(255,255,255,.012);margin-top:34px}\n.i-caseslot .st{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--verme)}\n.i-caseslot h4{margin:12px 0 6px;font-size:18px;color:var(--ink-mid)}\n.i-caseslot p{color:var(--ink-low);font-size:13px;line-height:1.5}\n.i-manchete{font-size:clamp(28px,4vw,54px);line-height:1.05;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:16px 0 0;max-width:18ch;text-wrap:balance}\n.i-name.has-m{font-size:clamp(20px,2.2vw,30px);color:var(--ink-mid);font-weight:600;max-width:none;letter-spacing:-.015em}\n.i-dor.scene{color:var(--ink-mid);font-size:clamp(15px,1.5vw,19px)}\n.sol-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-top:42px}\n.sol{position:relative;border:1px solid var(--hairline);border-radius:18px;padding:26px 26px 22px;background:var(--surface-1);display:flex;flex-direction:column;transition:.18s}\n.sol:hover{border-color:rgba(255,255,255,.2);transform:translateY(-2px)}\n.sol .sol-ix{font-family:var(--font-mono);font-size:11px;letter-spacing:.18em}\n.sol h3{font-size:clamp(19px,1.9vw,24px);letter-spacing:-.015em;line-height:1.15;color:var(--ink-hi);margin:12px 0 0;font-weight:700}\n.sol .sol-g{margin:10px 0 0;font-size:15px;line-height:1.5;color:var(--ink-hi);font-weight:500;max-width:52ch}\n.sol .sol-c{margin:10px 0 0;font-size:13.5px;line-height:1.62;color:var(--ink-mid);max-width:56ch}\n.sol .sol-foot{margin-top:auto;padding-top:20px;display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap}\n.sol .sol-chips{display:flex;gap:6px;flex-wrap:wrap}\n.sol .chip{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;color:var(--ink-mid);border:1px solid var(--hairline);border-radius:999px;padding:4px 10px;background:var(--surface-2);white-space:nowrap}\n.sol .chip i{font-style:normal;display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--chue,#3A7BFF);margin-right:6px;vertical-align:1px}\n.sol .sol-prova{font-family:var(--font-mono);text-align:right;flex:none;margin-left:auto}\n.sol .sol-prova .pv{display:block;font-size:clamp(20px,2vw,26px);letter-spacing:-.02em;color:var(--ihue,#3A7BFF);font-variant-numeric:tabular-nums}\n.sol .sol-prova .pl{display:block;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-low);margin-top:4px;max-width:22ch}\n.sol .sol-prova .pq{display:block;font-size:12.5px;color:var(--ihue,#3A7BFF);max-width:26ch;line-height:1.45}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.i-caps{grid-template-columns:1fr}.sol-grid{grid-template-columns:1fr}}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    const lang = D2LANG(d2);\n    const TT = COMP_T(); const t = k => (TT[lang]&&TT[lang][k]) || TT.en[k] || k;\n    const slug = (d2.params && d2.params.slug) || '';\n    const i = (dd('cms-industriesDataSet')).find(function(x){ return x.slug===slug; });\n    if(!i){ return `<main class=\"pageframe\"><span class=\"back\" data-nav data-href=\"/industrias\">${t('back')}</span><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>${t('nf_eyebrow')}</div><h2 class=\"d-head stag\">${t('nf_head')}</h2><div class=\"d-sub stag\">${t('nf_sub')}</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/industrias\">${t('nf_btn')}</button></div></section></main>`; }\n    return `<main class=\"pageframe\">${renderIndustriaDetail(d2, esc, dd, i, lang, t)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COMP_T(){ return {\n  pt:{ back:'← Indústrias', nf_eyebrow:'Indústria não encontrada', nf_head:'Essa indústria não existe.', nf_sub:'O endereço pode ter mudado — veja todas as indústrias que estão no ar.', nf_btn:'Ver todas as indústrias →', hero_eyebrow:'Indústria', arch_eyebrow:'Arquitetura', arch_head:'O que construímos.', caps_eyebrow:'Capacidades', caps_head:'O que ele faz na prática.', port_eyebrow:'Portfólio', port_head:'Soluções com nome próprio.', port_sub:'Não é lista de features. É o que entra em produção.', lev_eyebrow:'Alavancas', lev_head_num:'Medido em produção.', lev_head:'O que muda quando entra no ar.', case_eyebrow:'Caso', case_head_done:'Já foi feito.', case_challenge:'Desafio.', case_did:'O que fizemos.', case_head_prep:'Em preparação.', case_soon:'Caso · em breve', case_prep_h4:'Estudo desta indústria em preparação', case_prep_p:'A implementação existe; o estudo público entra na próxima rodada.', cta_head:'Vamos resolver isso na sua operação.', cta_sub:'Construímos com você — semanas, não trimestres.', cta_btn_pre:'Falar com quem já fez isso em ', role_rush:'escuta · inbound', role_domain:'decide · IA', role_connect:'integra · outbound', role_media:'gera imagem', role_cashier:'transaciona', role_id:'identidade · policy', role_registry:'catálogo · registro', role_ui:'interface', role_dataframework:'own-your-data', runtime:'componente' },\n  en:{ back:'← Industries', nf_eyebrow:'Industry not found', nf_head:'This industry does not exist.', nf_sub:'The address may have changed — see all the industries that are live.', nf_btn:'See all industries →', hero_eyebrow:'Industry', arch_eyebrow:'Architecture', arch_head:'What we build.', caps_eyebrow:'Capabilities', caps_head:'What it does in practice.', port_eyebrow:'Portfolio', port_head:'Solutions with a name of their own.', port_sub:'Not a feature list. This is what ships to production.', lev_eyebrow:'Levers', lev_head_num:'Measured in production.', lev_head:'What changes once it goes live.', case_eyebrow:'Case', case_head_done:'Already done.', case_challenge:'Challenge.', case_did:'What we did.', case_head_prep:'In preparation.', case_soon:'Case · coming soon', case_prep_h4:'Study of this industry in preparation', case_prep_p:'The implementation exists; the public study lands in the next round.', cta_head:'Let’s solve this in your operation.', cta_sub:'We build it with you — weeks, not quarters.', cta_btn_pre:'Talk to someone who has done it in ', role_rush:'listens · inbound', role_domain:'decides · AI', role_connect:'integrates · outbound', role_media:'generates image', role_cashier:'transacts', role_id:'identity · policy', role_registry:'catalog · record', role_ui:'interface', role_dataframework:'own-your-data', runtime:'component' },\n  es:{ back:'← Industrias', nf_eyebrow:'Industria no encontrada', nf_head:'Esta industria no existe.', nf_sub:'La dirección puede haber cambiado — mira todas las industrias que están en el aire.', nf_btn:'Ver todas las industrias →', hero_eyebrow:'Industria', arch_eyebrow:'Arquitectura', arch_head:'Lo que construimos.', caps_eyebrow:'Capacidades', caps_head:'Lo que hace en la práctica.', port_eyebrow:'Portafolio', port_head:'Soluciones con nombre propio.', port_sub:'No es una lista de features. Es lo que entra en producción.', lev_eyebrow:'Palancas', lev_head_num:'Medido en producción.', lev_head:'Lo que cambia cuando entra al aire.', case_eyebrow:'Caso', case_head_done:'Ya se hizo.', case_challenge:'Desafío.', case_did:'Lo que hicimos.', case_head_prep:'En preparación.', case_soon:'Caso · próximamente', case_prep_h4:'Estudio de esta industria en preparación', case_prep_p:'La implementación existe; el estudio público entra en la próxima ronda.', cta_head:'Resolvamos esto en tu operación.', cta_sub:'Lo construimos contigo — semanas, no trimestres.', cta_btn_pre:'Habla con quien ya lo hizo en ', role_rush:'escucha · inbound', role_domain:'decide · IA', role_connect:'integra · outbound', role_media:'genera imagen', role_cashier:'transacciona', role_id:'identidad · policy', role_registry:'catálogo · registro', role_ui:'interfaz', role_dataframework:'own-your-data', runtime:'componente' }\n}; }\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\nfunction isoMini(hue){ return '<svg class=\"i-cnode\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M12 3 L20 8 L12 13 L4 8 Z\" fill=\"'+hue+'\" opacity=\"0.72\"/><path d=\"M4 8 L12 13 L12 21 L4 16 Z\" fill=\"'+hue+'\" opacity=\"0.28\"/><path d=\"M20 8 L12 13 L12 21 L20 16 Z\" fill=\"'+hue+'\" opacity=\"0.46\"/></svg>'; }\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction parseSols(raw){\n  var arr = Array.isArray(raw)?raw:[]; var out=[];\n  for(var k=0;k<arr.length;k++){ var x=arr[k], o=x;\n    if(typeof x==='string'){ try{ o=JSON.parse(x); }catch(e){ o=null; } }\n    if(o && typeof o==='object' && !Array.isArray(o) && (o.titulo||o.gancho)) out.push(o); }\n  return out;\n}\nfunction CTA_T(){ return {\n  cx:{ pt:{h:'Traga a sua fila. A gente traz o sistema.', s:'Em semanas, quem liga começa a desligar resolvido.', b:'Marcar uma conversa'},\n       en:{h:'Bring your queue. We bring the system.', s:'In weeks, callers start hanging up with it solved.', b:'Book a conversation'},\n       es:{h:'Trae tu fila. Nosotros traemos el sistema.', s:'En semanas, quien llama empieza a colgar con el problema resuelto.', b:'Agendar una conversación'} },\n  varejo:{ pt:{h:'Sua vitrine muda amanhã. Seu sistema acompanha?', s:'A gente constrói com você — no ritmo da loja, não do release.', b:'Marcar uma conversa'},\n       en:{h:'Your storefront changes tomorrow. Will your system keep up?', s:'We build it with you — at the pace of the store, not the release cycle.', b:'Book a conversation'},\n       es:{h:'Tu vitrina cambia mañana. ¿Tu sistema acompaña?', s:'Lo construimos contigo — al ritmo de la tienda, no del release.', b:'Agendar una conversación'} },\n  financeiro:{ pt:{h:'Traga o centavo que não fecha.', s:'A gente devolve ele com origem — em produção, em semanas.', b:'Marcar uma conversa'},\n       en:{h:'Bring the cent that never reconciles.', s:'We hand it back with its origin — in production, in weeks.', b:'Book a conversation'},\n       es:{h:'Trae el centavo que no cuadra.', s:'Te lo devolvemos con su origen — en producción, en semanas.', b:'Agendar una conversación'} },\n  seguros:{ pt:{h:'Traga o sinistro parado. A gente destrava o caminho.', s:'Do aviso à decisão, sem fila de backoffice.', b:'Marcar uma conversa'},\n       en:{h:'Bring the stalled claim. We unblock the path.', s:'From first notice to decision, without a backoffice queue.', b:'Book a conversation'},\n       es:{h:'Trae el siniestro parado. Nosotros destrabamos el camino.', s:'Del aviso a la decisión, sin fila de backoffice.', b:'Agendar una conversación'} },\n  vendas:{ pt:{h:'Traga o funil. A gente faz ele avisar antes.', s:'Sinal no dia, não no fechamento do trimestre.', b:'Marcar uma conversa'},\n       en:{h:'Bring the funnel. We make it speak up early.', s:'Signal on the day — not at quarter close.', b:'Book a conversation'},\n       es:{h:'Trae el funnel. Hacemos que avise antes.', s:'Señal en el día, no al cierre del trimestre.', b:'Agendar una conversación'} },\n  rh:{ pt:{h:'Sua gente cresceu. A planilha, não.', s:'Do onboarding ao ciclo, em produção — em semanas.', b:'Marcar uma conversa'},\n       en:{h:'Your people grew. The spreadsheet did not.', s:'From onboarding to review cycle, in production — in weeks.', b:'Book a conversation'},\n       es:{h:'Tu gente creció. La planilla, no.', s:'Del onboarding al ciclo, en producción — en semanas.', b:'Agendar una conversación'} },\n  supply:{ pt:{h:'Traga o estoque do lugar errado.', s:'A gente coloca o dado onde a decisão acontece.', b:'Marcar uma conversa'},\n       en:{h:'Bring the stock sitting in the wrong place.', s:'We put the data where the decision happens.', b:'Book a conversation'},\n       es:{h:'Trae el stock del lugar equivocado.', s:'Ponemos el dato donde ocurre la decisión.', b:'Agendar una conversación'} },\n  bi:{ pt:{h:'O dado você já tem. Traga a decisão que atrasa.', s:'Do dashboard que descreve ao sistema que age.', b:'Marcar uma conversa'},\n       en:{h:'You already have the data. Bring the decision that runs late.', s:'From dashboards that describe to systems that act.', b:'Book a conversation'},\n       es:{h:'El dato ya lo tienes. Trae la decisión que se atrasa.', s:'Del dashboard que describe al sistema que actúa.', b:'Agendar una conversación'} },\n  compras:{ pt:{h:'Traga a próxima grande compra. Antes da cotação.', s:'Decisão com dado na mesa, não leilão de planilha.', b:'Marcar uma conversa'},\n       en:{h:'Bring your next big purchase. Before the quotes go out.', s:'Decisions with data on the table, not a spreadsheet auction.', b:'Book a conversation'},\n       es:{h:'Trae tu próxima gran compra. Antes de la cotización.', s:'Decisión con datos sobre la mesa, no una subasta de planillas.', b:'Agendar una conversación'} },\n  _:{ pt:{h:'Traga a sua operação. A gente constrói com você.', s:'Em produção, em semanas — não trimestres.', b:'Marcar uma conversa'},\n       en:{h:'Bring your operation. We build it with you.', s:'In production, in weeks — not quarters.', b:'Book a conversation'},\n       es:{h:'Trae tu operación. Lo construimos contigo.', s:'En producción, en semanas — no trimestres.', b:'Agendar una conversación'} }\n}; }\nfunction boldComponents(s){\n  var names=['Rush','Domain','Connect','Registry','Media','Cashier','UI','ID'];\n  names.forEach(function(n){ s = s.split(n).join('<b>'+n+'</b>'); });\n  return s;\n}\nfunction renderIndustriaDetail(d2, esc, dd, i, lang, t){\n  var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n  var pickArr=function(rec,base){ var v = (lang==='pt') ? rec[base] : (rec[base+'_'+lang] || rec[base]); return Array.isArray(v)?v:[]; };\n  var pickName=function(rec){ return lang==='pt' ? (rec.name_pt||'') : (rec['name_'+lang] || rec.name_pt || ''); };\n  var hue = esc(i.hue||'#3A7BFF');\n  var caps = pickArr(i,'capacidades');\n  var pr = Array.isArray(i.produtos_runtimes)?i.produtos_runtimes:[];\n  var al = pickArr(i,'alavancas');\n  var prodColor = {'DATA FRAMEWORK':'#5B93FF'};\n  (dd('cms-productsDataSet')||[]).forEach(function(p){ if(p&&p.name) prodColor[String(p.name).toUpperCase()]=p.accent||'#3A7BFF'; });\n  (dd('cms-runtimesDataSet')||[]).forEach(function(r){ if(r&&r.name){ var k=String(r.name).toUpperCase(); if(!prodColor[k]) prodColor[k]=r.accent||'#3A7BFF'; } });\n  var prodRole = {'RUSH':t('role_rush'),'DOMAIN':t('role_domain'),'CONNECT':t('role_connect'),'MEDIA':t('role_media'),'CASHIER':t('role_cashier'),'ID':t('role_id'),'REGISTRY':t('role_registry'),'UI':t('role_ui'),'DATA FRAMEWORK':t('role_dataframework')};\n  var colOf = function(n){ return prodColor[String(n).toUpperCase()] || hue; };\n  var roleOf = function(n){ return prodRole[String(n).toUpperCase()] || t('runtime'); };\n  var manchete = pick(i,'manchete');\n  var heroCopy = manchete\n    ? '<div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('hero_eyebrow')+'</div><h1 class=\"i-name has-m stag\">'+esc(pickName(i))+'</h1><div class=\"i-manchete stag\">'+esc(manchete)+'</div><div class=\"i-dor scene stag\">'+esc(pick(i,'dor'))+'</div>'\n    : '<div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('hero_eyebrow')+'</div><h1 class=\"i-name stag\">'+esc(pickName(i))+'</h1><div class=\"i-dor stag\"><b>'+esc(pick(i,'dor'))+'</b></div>';\n  var hero = '<section class=\"i-hero\" data-reveal style=\"--ihue:'+hue+'\"><div class=\"i-herocopy\">'+heroCopy+'</div><div class=\"i-diorama stag\" style=\"--ihue:'+hue+'\"><div class=\"i-atmos\" style=\"--ihue:'+hue+'\"></div>'+isoDiorama(hue)+'</div></section>';\n  var nodes = pr.map(function(p){ var c=esc(colOf(p)); return '<div class=\"i-stage stag\"><div class=\"i-pnode\" style=\"--accent:'+c+'\"></div><div class=\"i-pn\">'+esc(p)+'</div><div class=\"i-pr\">'+esc(roleOf(p))+'</div></div>'; }).join('');\n  var capCards = caps.map(function(c,idx){ var c2=esc(colOf(pr.length?pr[idx%pr.length]:hue)); return '<div class=\"i-cap stag\">'+isoMini(c2)+'<div class=\"i-ct\">'+esc(c)+'</div></div>'; }).join('');\n  var cols = Math.max(pr.length,1);\n  var compose = boldComponents(esc(pick(i,'oferta')));\n  var blueprint = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('arch_eyebrow')+'</div><h2 class=\"d-head stag\">'+t('arch_head')+'</h2><div class=\"d-sub stag\">'+esc(pick(i,'construimos')||pick(i,'oferta'))+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+cols+',1fr);--ihue:'+hue+'\"><div class=\"i-rail\"></div>'+nodes+'</div>'+(i.oferta?'<p class=\"i-compose stag\" style=\"border-left-color:'+hue+'\">'+compose+'</p>':'')+'</section>';\n  var capsSec = caps.length ? '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('caps_eyebrow')+'</div><h2 class=\"d-head stag\">'+t('caps_head')+'</h2><div class=\"i-caps stag\">'+capCards+'</div></section>' : '';\n  var sols = parseSols(pickArr(i,'solucoes'));\n  var middle = blueprint + capsSec;\n  if(sols.length){\n    var solCards = sols.map(function(s,ix){\n      var prods = Array.isArray(s.produtos)?s.produtos:[];\n      var chips = prods.map(function(pn){ var c=esc(colOf(pn)); return '<span class=\"chip\"><i style=\"--chue:'+c+'\"></i>'+esc(String(pn).toUpperCase())+'</span>'; }).join('');\n      var prova = '';\n      if(s.prova){ var pv = parseLever(s.prova); prova = pv.qual ? '<div class=\"sol-prova\"><span class=\"pq\">'+esc(pv.text)+'</span></div>' : '<div class=\"sol-prova\"><span class=\"pv\">'+esc(pv.v)+'</span><span class=\"pl\">'+esc(pv.l)+'</span></div>'; }\n      var num = (ix<9?'0':'')+(ix+1);\n      return '<article class=\"sol stag\"><div class=\"sol-ix\" style=\"color:'+hue+'\">'+num+'</div><h3>'+esc(s.titulo||'')+'</h3><div class=\"sol-g\">'+esc(s.gancho||'')+'</div><div class=\"sol-c\">'+esc(s.como||'')+'</div><div class=\"sol-foot\"><div class=\"sol-chips\">'+chips+'</div>'+prova+'</div></article>';\n    }).join('');\n    middle = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('port_eyebrow')+'</div><h2 class=\"d-head stag\">'+t('port_head')+'</h2><div class=\"d-sub stag\">'+t('port_sub')+'</div><div class=\"sol-grid stag\" style=\"--ihue:'+hue+'\">'+solCards+'</div></section>';\n  }\n  var hotDone=false;\n  var levers = al.map(function(a){ var p=parseLever(a); var hot=(!p.ph && !p.qual && !hotDone); if(hot) hotDone=true; return leverCard(esc,p,hot); }).join('');\n  var hasNum = al.some(function(a){ return !parseLever(a).qual; });\n  var alav = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('lev_eyebrow')+'</div><h2 class=\"d-head stag\">'+(hasNum?t('lev_head_num'):t('lev_head'))+'</h2><div class=\"d-levers stag\">'+levers+'</div></section>';\n  var cs = (dd('cms-casesDataSet'))||[];\n  var kase = cs.find(function(c){return c.industria===i.slug;}) || cs.find(function(c){return c.slug===i.caso_lastro;}) || null;\n  var caso;\n  if(kase){\n    var lev = esc(String(pick(kase,'alavanca')).replace(/\\s*\\[PH[^\\]]*\\]/g,'').replace(/[;,]\\s*$/,''));\n    caso = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('case_eyebrow')+'</div><h2 class=\"d-head stag\">'+t('case_head_done')+'</h2><div class=\"i-case stag\" style=\"--ihue:'+hue+'\"><div class=\"i-csetor\" style=\"color:'+hue+'\">'+esc(pick(kase,'cliente_setor'))+'</div><div class=\"i-cline\"><b>'+t('case_challenge')+'</b> '+esc(pick(kase,'desafio'))+'</div>'+(kase.feito?'<div class=\"i-cline\"><b>'+t('case_did')+'</b> '+esc(pick(kase,'feito'))+'</div>':'')+'<div class=\"i-clev\" style=\"border-left-color:'+hue+'\">'+lev+'</div></div></section>';\n  } else {\n    caso = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('case_eyebrow')+'</div><h2 class=\"d-head stag\">'+t('case_head_prep')+'</h2><div class=\"i-caseslot stag\"><div class=\"st\">'+t('case_soon')+'</div><h4>'+t('case_prep_h4')+'</h4><p>'+t('case_prep_p')+'</p></div></section>';\n  }\n  var CD = CTA_T(); var cslot = CD[i.slug] || CD._; var cc = cslot[lang] || cslot.en;\n  var cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(cc.h)+'</h2><div class=\"d-sub stag\">'+esc(cc.s)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(cc.b)+' →</button></div></section>';\n  return '<span class=\"back\" data-nav data-href=\"/industrias\">'+t('back')+'</span>'+hero+middle+alav+caso+cta;\n}\n"}},"slug":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slug"}}}}}}}}}},{"_id":"6a7b287c56d66740be26a7e3","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"hero-magic","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:94vh; overflow:hidden;\n  background:radial-gradient(65% 75% at 50% 28%, #14101c 0%, #0a0912 48%, #060509 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; align-items:center; }\n.spectrum{ position:absolute; inset:0; z-index:1; overflow:hidden; pointer-events:none; }\n.blob{ position:absolute; border-radius:50%; mix-blend-mode:screen; filter:blur(90px); will-change:transform; animation:drift var(--dur,40s) cubic-bezier(.45,0,.55,1) infinite alternate; }\n@keyframes drift{ 0%{ transform:translate(-50%,-50%) translate3d(0,0,0) scale(1); } 100%{ transform:translate(-50%,-50%) translate3d(var(--dx),var(--dy),0) scale(var(--ds)); } }\n.b1{ width:1300px; height:1300px; top:6%; left:30%; background:radial-gradient(circle, #FA48DC 0%, rgba(250,72,220,0) 70%); opacity:.68; --dx:70px; --dy:-50px; --ds:1.08; --dur:42s; }\n.b2{ width:1150px; height:1150px; top:64%; left:76%; background:radial-gradient(circle, #8448FA 0%, rgba(132,72,250,0) 70%); opacity:.58; --dx:-60px; --dy:55px; --ds:.94; --dur:55s; }\n.b3{ width:1050px; height:1050px; top:80%; left:16%; background:radial-gradient(circle, #4866FA 0%, rgba(72,102,250,0) 70%); opacity:.56; --dx:50px; --dy:40px; --ds:1.06; --dur:48s; }\n.b4{ width:980px; height:980px; top:12%; left:80%; background:radial-gradient(circle, #48FAFA 0%, rgba(72,250,250,0) 70%); opacity:.52; --dx:-50px; --dy:-42px; --ds:.95; --dur:29s; }\n.b5{ width:930px; height:930px; top:90%; left:56%; background:radial-gradient(circle, #FA4848 0%, rgba(250,72,72,0) 70%); opacity:.5; --dx:42px; --dy:-52px; --ds:1.05; --dur:52s; }\n.b6{ width:900px; height:900px; top:0%; left:52%; background:radial-gradient(circle, #FADC48 0%, rgba(250,220,72,0) 70%); opacity:.5; --dx:-44px; --dy:48px; --ds:.97; --dur:36s; }\n.grain{ position:absolute; inset:0; z-index:2; opacity:.045; pointer-events:none; mix-blend-mode:overlay; background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.vign{ position:absolute; inset:0; z-index:2; pointer-events:none; background:radial-gradient(62% 62% at 50% 34%, rgba(6,5,9,.80) 0%, rgba(6,5,9,.42) 44%, rgba(6,5,9,0) 74%); }\n.wrap{ position:relative; z-index:3; width:100%; max-width:1000px; margin:0 auto; padding:0 32px; display:flex; flex-direction:column; align-items:center; text-align:center; }\n.left{ width:100%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:12px; letter-spacing:.26em; text-transform:uppercase; color:#8a8496; display:flex; align-items:center; gap:8px; }\n.eyebrow .d{ width:10px;height:10px;border-radius:50%;background:#FA48DC;box-shadow:0 0 12px 2px #FA48DC; }\n.h1{ font-size:clamp(52px,7vw,104px); font-weight:500; letter-spacing:-.025em; line-height:1.02; margin:22px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; display:block; }\n.prompt{ margin:30px auto 0; width:100%; max-width:640px; border:1px solid rgba(255,255,255,.14); border-radius:14px; background:rgba(255,255,255,.03); padding:0 16px; display:flex; align-items:center; gap:10px; height:58px; box-shadow:0 8px 40px rgba(0,0,0,.4); transition:border-color .25s, box-shadow .25s; }\n.prompt:focus-within{ border-color:rgba(250,72,220,.5); box-shadow:0 8px 44px rgba(250,72,220,.14); }\n.prompt .q{ color:#8448FA; font-family:ui-monospace,Menlo,monospace; font-size:15px; }\n.prompt .inp{ flex:1; background:transparent; border:0; outline:0; color:#EDECEF; font-size:15px; font-family:inherit; caret-color:#FA48DC; min-width:0; }\n.prompt .inp::placeholder{ color:#5a5566; }\n.prompt .go{ font-family:ui-monospace,Menlo,monospace; font-size:11px; letter-spacing:.08em; color:#0b0711; background:#FA48DC; border:0; border-radius:8px; padding:7px 12px; cursor:pointer; opacity:.9; transition:opacity .2s, transform .1s; }\n.prompt .go:hover{ opacity:1; } .prompt .go:active{ transform:scale(.97); }\n.hint{ margin-top:13px; font-size:12px; color:#6b6675; font-family:ui-monospace,Menlo,monospace; }\n.palette{ margin-top:26px; display:flex; gap:10px 12px; flex-wrap:wrap; justify-content:center; }\n.pd{ display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.04em; color:#615c6b; transition:color .3s; }\n.pd .dot{ width:9px; height:9px; border-radius:50%; background:currentColor; opacity:.26; transition:opacity .3s, box-shadow .3s; }\n.pd.lit{ color:#cfc9d6; } .pd.lit .dot{ opacity:1; box-shadow:0 0 12px 2px var(--c); background:var(--c); }\n.stage{ position:relative; width:100%; margin-top:52px; display:flex; align-items:center; justify-content:center; }\n.screen{ position:relative; width:640px; max-width:100%; border-radius:20px; background:rgba(255,255,255,.045); backdrop-filter:blur(22px); -webkit-backdrop-filter:blur(22px); border:1px solid rgba(255,255,255,.16); box-shadow:0 24px 70px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.07); overflow:hidden; }\n.sbar{ height:34px; display:flex; align-items:center; gap:6px; padding:0 12px; border-bottom:1px solid rgba(255,255,255,.07); }\n.sbar i{ width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.16); }\n.sbar .url{ margin-left:8px; font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#6b6675; opacity:0; transition:opacity .5s; }\n.sbody{ position:relative; padding:14px; min-height:256px; }\n.layer{ display:flex; flex-direction:column; gap:10px; }\n.blk{ position:relative; border-radius:10px; padding:11px 12px; border:1px solid; opacity:0; transform:translateY(14px) scale(.96); transition:opacity .45s, transform .45s cubic-bezier(.34,1.56,.64,1); }\n.blk.in{ opacity:1; transform:none; } .blk.gone{ opacity:0; transform:translateY(-10px) scale(.97); transition:opacity .38s, transform .38s ease; }\n.blk .tag{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.1em; text-transform:uppercase; }\n.blk .lbl{ margin-top:4px; font-size:13px; color:#EDECEF; }\n.blk .bar{ margin-top:9px; height:5px; border-radius:3px; background:rgba(255,255,255,.08); overflow:hidden; }\n.blk .bar > i{ display:block; height:100%; width:0; border-radius:3px; transition:width .7s ease .1s; }\n.badge{ position:absolute; top:12px; right:12px; z-index:5; display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.1em; color:#66FA48; background:rgba(102,250,72,.1); border:1px solid rgba(102,250,72,.4); border-radius:20px; padding:4px 10px; opacity:0; transform:translateY(-6px) scale(.9); transition:.4s cubic-bezier(.34,1.56,.64,1); }\n.badge.on{ opacity:1; transform:none; }\n.badge .p{ width:7px;height:7px;border-radius:50%;background:#66FA48;box-shadow:0 0 10px 2px #66FA48; animation:pp 1.4s ease-in-out infinite; }\n@keyframes pp{ 50%{ opacity:.4; transform:scale(.7) } }\n.app{ display:flex; flex-direction:column; gap:9px; opacity:0; transform:translateY(12px); transition:opacity .55s, transform .55s cubic-bezier(.22,1,.36,1); }\n.app.in{ opacity:1; transform:none; }\n.app .ah{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:#8a8496; display:flex; align-items:center; gap:7px; }\n.app .ah::before{ content:''; width:7px;height:7px;border-radius:50%; background:var(--acc); box-shadow:0 0 10px 1px var(--acc); flex:none; }\n.chat{ display:flex; flex-direction:column; gap:6px; }\n.bub{ max-width:84%; padding:8px 11px; border-radius:11px; font-size:12.5px; line-height:1.35; }\n.bub.q{ background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.1); color:#cfc9d2; }\n.bub.a{ margin-left:auto; color:#f2ecf1; }\n.agent{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#66FA48; display:flex; align-items:center; gap:6px; }\n.kpis{ display:flex; gap:8px; }\n.kpis span{ flex:1; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.08); border-radius:8px; padding:8px 9px; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#d7d2dc; }\n.chart{ display:flex; align-items:flex-end; gap:5px; height:62px; }\n.chart i{ flex:1; background:linear-gradient(180deg,var(--acc),rgba(255,255,255,.03)); border-radius:3px 3px 0 0; opacity:.85; }\n.alert{ font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#FADC48; }\n.row2{ display:flex; justify-content:space-between; align-items:center; font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#d7d2dc; padding:8px 10px; background:rgba(255,255,255,.03); border-radius:8px; }\n.row2 .ok{ color:#66FA48; }\n.foot{ font-family:ui-monospace,Menlo,monospace; font-size:10px; color:#6b6675; }\n.gal{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; }\n.gal i{ aspect-ratio:1; border-radius:8px; background:linear-gradient(135deg,var(--acc),rgba(255,255,255,.04)); opacity:.9; }\n@media (max-width:900px){ :host{ height:auto; } .st{ min-height:0; height:auto; padding:56px 0; } .wrap{ padding:0 32px; } .stage{ margin-top:40px; } .screen{ width:100%; } .blob{ filter:blur(64px); } .b1{ width:820px; height:820px; } .b2{ width:760px; height:760px; } .b3{ width:700px; height:700px; } .b4{ width:640px; height:640px; } .b5{ width:600px; height:600px; } .b6{ width:560px; height:560px; } .vign{ background:radial-gradient(70% 60% at 50% 30%, rgba(6,5,9,.78) 0%, rgba(6,5,9,.4) 48%, rgba(6,5,9,0) 78%); } }\n@media (max-width:560px){ .st{ padding:40px 0; } .wrap{ padding:0 20px; } .h1{ font-size:clamp(30px,9vw,40px); margin-top:16px; } .prompt{ height:52px; margin-top:22px; } .hint{ margin-top:11px; } .palette{ gap:8px 10px; margin-top:20px; } .stage{ margin-top:30px; } .screen{ max-width:100%; border-radius:16px; } .blob{ filter:blur(46px); } .b1{ width:560px; height:560px; } .b2{ width:520px; height:520px; } .b3{ width:480px; height:480px; } .b4{ width:440px; height:440px; } .b5{ width:400px; height:400px; } .b6{ width:380px; height:380px; } }\n@media (prefers-reduced-motion:reduce){ .blk,.app{ transition:none } .badge .p{ animation:none } .blob{ animation:none } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=HERO_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var COMPS=[['UI','#4866FA'],['Registry','#FA4848'],['Media','#FADC48'],['ID','#48FAA1'],['Connect','#48FAFA'],['Domain','#FA48DC'],['Rush','#8448FA'],['Cashier','#BFFA48']];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"spectrum\" aria-hidden=\"true\"><div class=\"blob b1\"></div><div class=\"blob b2\"></div><div class=\"blob b3\"></div><div class=\"blob b4\"></div><div class=\"blob b5\"></div><div class=\"blob b6\"></div></div>'+\n        '<div class=\"grain\"></div>'+\n        '<div class=\"vign\"></div>'+\n        '<div class=\"wrap\">'+\n          '<div class=\"left\">'+\n            '<div class=\"eyebrow\"><span class=\"d\"></span> '+t('eyebrow')+'</div>'+\n            '<h1 class=\"h1\">'+t('h1a')+'<span class=\"g\">'+t('h1b')+'</span></h1>'+\n            '<div class=\"prompt\"><span class=\"q\">›</span><input class=\"inp\" data-inp placeholder=\"'+t('ph')+'\" aria-label=\"'+t('aria')+'\" /><button class=\"go\" data-go>'+t('go')+'</button></div>'+\n            '<div class=\"hint\">'+t('hint')+'</div>'+\n            '<div class=\"palette\" data-palette>'+ COMPS.map(function(c){ return '<span class=\"pd\" data-c=\"'+c[0]+'\" style=\"--c:'+c[1]+';color:'+c[1]+'\"><span class=\"dot\"></span>'+c[0]+'</span>'; }).join('') +'</div>'+\n          '</div>'+\n          '<div class=\"stage\">'+\n            '<div class=\"screen\">'+\n              '<div class=\"sbar\"><i></i><i></i><i></i><span class=\"url\" data-url></span></div>'+\n              '<div class=\"badge\" data-badge><span class=\"p\"></span> '+t('live')+'</div>'+\n              '<div class=\"sbody\" data-body></div>'+\n            '</div>'+\n          '</div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){ heroSetup(d2, root); },\n  updated(d2, root){ heroSetup(d2, root); }\n}\n\nfunction heroSetup(d2, root){\n    var st=root.querySelector('[data-st]'); if(!st || st.__heroInit) return; st.__heroInit=true;\n    var lang=D2LANG(d2); var TT=HERO_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var inp=root.querySelector('[data-inp]'), go=root.querySelector('[data-go]'), body=root.querySelector('[data-body]'), badge=root.querySelector('[data-badge]'), url=root.querySelector('[data-url]');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    function esc(s){ return String(s).replace(/[&<>\"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c];}); }\n    var SOL=HERO_SOL(lang);\n\n    function hexRgb(h){ return parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16); }\n    function hexA(h,a){ return 'rgba('+hexRgb(h)+','+a+')'; }\n\n    var timers=[];\n    function clr(){ timers.forEach(clearTimeout); timers=[]; }\n    function litPalette(name, on){ var el=root.querySelector('.pd[data-c=\"'+name+'\"]'); if(el)el.classList.toggle('lit', on); }\n    function resetPalette(){ Array.prototype.slice.call(root.querySelectorAll('.pd')).forEach(function(e){e.classList.remove('lit');}); }\n\n    var userMode=false, si=0;\n    function typeNeed(str, done){ var i=0; (function step(){ if(!inp.isConnected||userMode)return; if(i>str.length){ done&&done(); return; } inp.value=str.slice(0,i); i++; timers.push(setTimeout(step, 22+Math.random()*30)); })(); }\n\n    function assemble(sol, done){\n      body.innerHTML=''; badge.classList.remove('on'); url.style.opacity='0'; url.textContent=sol.url; resetPalette();\n      var layer=document.createElement('div'); layer.className='layer'; body.appendChild(layer);\n      var made=[];\n      sol.blocks.forEach(function(b){ var el=document.createElement('div'); el.className='blk';\n        el.style.background='linear-gradient(180deg,'+hexA(b.col,0.13)+','+hexA(b.col,0.05)+')'; el.style.borderColor=hexA(b.col,0.4);\n        el.innerHTML='<div class=\"tag\" style=\"color:'+b.col+'\">'+b.c+'</div><div class=\"lbl\">'+esc(b.t)+'</div><div class=\"bar\"><i style=\"background:'+b.col+'\"></i></div>';\n        layer.appendChild(el); made.push(el); });\n      var k=0;\n      (function next(){ if(!body.isConnected)return; if(k>=sol.blocks.length){ timers.push(setTimeout(function(){ revealApp(sol, layer, done); }, 620)); return; }\n        var b=sol.blocks[k], el=made[k]; el.classList.add('in'); litPalette(b.c, true);\n        var bar=el.querySelector('.bar > i'); if(bar) timers.push(setTimeout(function(){ if(bar.isConnected)bar.style.width=(58+Math.random()*38)+'%'; }, 110));\n        k++; timers.push(setTimeout(next, 500)); })();\n    }\n    function revealApp(sol, layer, done){\n      if(!body.isConnected)return;\n      Array.prototype.slice.call(layer.querySelectorAll('.blk')).forEach(function(e){ e.classList.add('gone'); });\n      timers.push(setTimeout(function(){ if(!body.isConnected)return;\n        var app=document.createElement('div'); app.className='app'; app.style.setProperty('--acc', sol.acc); app.innerHTML=sol.app;\n        body.innerHTML=''; body.appendChild(app); void app.offsetWidth; app.classList.add('in');\n        badge.classList.add('on'); url.style.opacity='1';\n        done&&timers.push(setTimeout(done, 2400));\n      }, 420));\n    }\n\n    function cycle(){ if(!st.isConnected||userMode)return; var sol=SOL[si%SOL.length]; si++; clr();\n      typeNeed(sol.need, function(){ timers.push(setTimeout(function(){ if(userMode)return; assemble(sol, function(){ timers.push(setTimeout(cycle, 700)); }); }, 340)); }); }\n\n    function slug(t){ return (t.toLowerCase().normalize('NFD').replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'').slice(0,22)||'app')+'.data2.app'; }\n    function runCustom(text){ userMode=true; clr();\n      var sol={ need:text, url:slug(text), acc:'#8448FA', blocks:[\n        {c:'Domain', col:'#FA48DC', t:t('cu1')},{c:'Registry', col:'#FA4848', t:t('cu2')},\n        {c:'Connect', col:'#48FAFA', t:t('cu3')},{c:'UI', col:'#4866FA', t:t('cu4')} ],\n        app:'<div class=\"ah\" style=\"--acc:#8448FA\">'+esc(text.slice(0,42))+' · '+t('live')+'</div><div class=\"row2\"><span>'+t('cu_flow')+'</span><span class=\"ok\">✓</span></div><div class=\"row2\"><span>'+t('cu_data')+'</span><span class=\"ok\">✓</span></div><div class=\"agent\">◈ '+t('cu_done')+'</div>' };\n      assemble(sol, null);\n    }\n\n    d2.on(inp,'focus',function(){ userMode=true; clr(); inp.value=''; });\n    d2.on(inp,'keydown',function(e){ if(e.key==='Enter'){ e.preventDefault(); var t=inp.value.trim(); if(t) runCustom(t); } });\n    d2.on(go,'click',function(){ var t=inp.value.trim(); if(t){ runCustom(t); } });\n    d2.on(inp,'blur',function(){ if(!inp.value.trim()){ userMode=false; timers.push(setTimeout(function(){ if(!userMode) cycle(); }, 800)); } });\n\n    if(reduce){ var sol=SOL[0]; inp.value=sol.need; sol.blocks.forEach(function(b){litPalette(b.c,true);});\n      var app=document.createElement('div'); app.className='app in'; app.style.setProperty('--acc', sol.acc); app.innerHTML=sol.app; body.appendChild(app);\n      badge.classList.add('on'); url.textContent=sol.url; url.style.opacity='1'; }\n    else { timers.push(setTimeout(cycle, 500)); }\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\n\nfunction HERO_T(){ return {\n  pt:{ eyebrow:'Necessidade elevada à produção', h1a:'Da necessidade à produção.', h1b:'O resto é demo.',\n    ph:'Descreva a necessidade…', aria:'Descreva a necessidade', go:'montar', hint:'Descreva. Os componentes se montam. No ar.', live:'no ar',\n    cu1:'Entende o pedido', cu2:'Traz os dados', cu3:'Conecta o que já existe', cu4:'Vira tela',\n    cu_flow:'fluxo publicado', cu_data:'dados conectados', cu_done:'pronto, em produção' },\n  en:{ eyebrow:'Necessity, raised to production', h1a:'From necessity to production.', h1b:'The rest is a demo.',\n    ph:'Describe the need…', aria:'Describe the need', go:'build', hint:'Describe it. The components assemble. Live.', live:'live',\n    cu1:'Understands the request', cu2:'Brings the data', cu3:'Connects what already exists', cu4:'Becomes a screen',\n    cu_flow:'flow published', cu_data:'data connected', cu_done:'done, in production' },\n  es:{ eyebrow:'La necesidad, elevada a producción', h1a:'De la necesidad a la producción.', h1b:'El resto es demo.',\n    ph:'Describe la necesidad…', aria:'Describe la necesidad', go:'montar', hint:'Descríbela. Los componentes se montan. En vivo.', live:'en vivo',\n    cu1:'Entiende el pedido', cu2:'Trae los datos', cu3:'Conecta lo que ya existe', cu4:'Se vuelve pantalla',\n    cu_flow:'flujo publicado', cu_data:'datos conectados', cu_done:'listo, en producción' }\n}; }\n\nfunction HERO_SOL(lang){\n  var S={\n    pt:[\n      { need:'Cortar 40% do custo de atendimento', url:'atendimento.data2.app', acc:'#FA48DC', blocks:[\n          {c:'Rush', col:'#8448FA', t:'Escuta a chamada'},{c:'Domain', col:'#FA48DC', t:'IA resolve na hora'},\n          {c:'Connect', col:'#48FAFA', t:'Integra o CRM'},{c:'UI', col:'#4866FA', t:'Painel do time'} ],\n        app:'<div class=\"ah\">Atendimento · ao vivo</div><div class=\"chat\"><div class=\"bub q\">Cadê meu pedido 8421?</div><div class=\"bub a\" style=\"background:rgba(250,72,220,.15);border:1px solid rgba(250,72,220,.42)\">Sai amanhã, 14h — rastreio no seu e-mail.</div></div><div class=\"agent\">◈ agente resolveu · 0 na fila</div>' },\n      { need:'Conciliar estoque em tempo real', url:'estoque.data2.app', acc:'#4866FA', blocks:[\n          {c:'Registry', col:'#FA4848', t:'Os dados, vivos'},{c:'Rush', col:'#8448FA', t:'Cada movimento, um evento'},\n          {c:'Domain', col:'#FA48DC', t:'Alerta antes de faltar'},{c:'UI', col:'#4866FA', t:'Tela de controle'} ],\n        app:'<div class=\"ah\">Estoque · tempo real</div><div class=\"kpis\"><span>1.204 SKUs</span><span>giro 3.2×</span><span>ruptura 0,4%</span></div><div class=\"chart\"><i style=\"height:38%\"></i><i style=\"height:62%\"></i><i style=\"height:50%\"></i><i style=\"height:78%\"></i><i style=\"height:66%\"></i><i style=\"height:92%\"></i><i style=\"height:71%\"></i></div><div class=\"alert\">⚠ repor SKU-88 em 2 dias</div>' },\n      { need:'Cobrar e conciliar pagamentos', url:'pagamentos.data2.app', acc:'#BFFA48', blocks:[\n          {c:'Cashier', col:'#BFFA48', t:'Cobrança nativa'},{c:'Connect', col:'#48FAFA', t:'Fala com o gateway'},\n          {c:'Registry', col:'#FA4848', t:'Concilia sozinho'},{c:'ID', col:'#48FAA1', t:'Quem pode ver'} ],\n        app:'<div class=\"ah\">Pagamentos · conciliado</div><div class=\"row2\"><span>R$ 1.240,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>R$ 890,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>R$ 3.110,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"foot\">3.482 transações hoje · 0 divergências</div>' },\n      { need:'Estúdio de imagem do produto', url:'estudio.data2.app', acc:'#FADC48', blocks:[\n          {c:'Media', col:'#FADC48', t:'Gera a imagem'},{c:'Registry', col:'#FA4848', t:'Puxa o catálogo'},\n          {c:'UI', col:'#4866FA', t:'Galeria pronta'} ],\n        app:'<div class=\"ah\">Estúdio · imagens</div><div class=\"gal\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div><div class=\"foot\">8 imagens geradas · prontas pro catálogo</div>' }\n    ],\n    en:[\n      { need:'Cut support costs by 40%', url:'support.data2.app', acc:'#FA48DC', blocks:[\n          {c:'Rush', col:'#8448FA', t:'Listens to the call'},{c:'Domain', col:'#FA48DC', t:'AI solves it on the spot'},\n          {c:'Connect', col:'#48FAFA', t:'Plugs into the CRM'},{c:'UI', col:'#4866FA', t:'The team panel'} ],\n        app:'<div class=\"ah\">Support · live</div><div class=\"chat\"><div class=\"bub q\">Where is my order 8421?</div><div class=\"bub a\" style=\"background:rgba(250,72,220,.15);border:1px solid rgba(250,72,220,.42)\">Ships tomorrow, 2pm — tracking in your e-mail.</div></div><div class=\"agent\">◈ agent solved it · 0 in queue</div>' },\n      { need:'Reconcile inventory in real time', url:'inventory.data2.app', acc:'#4866FA', blocks:[\n          {c:'Registry', col:'#FA4848', t:'The data, alive'},{c:'Rush', col:'#8448FA', t:'Every movement, an event'},\n          {c:'Domain', col:'#FA48DC', t:'Warns before it runs out'},{c:'UI', col:'#4866FA', t:'The control screen'} ],\n        app:'<div class=\"ah\">Inventory · real time</div><div class=\"kpis\"><span>1,204 SKUs</span><span>turnover 3.2×</span><span>stockouts 0.4%</span></div><div class=\"chart\"><i style=\"height:38%\"></i><i style=\"height:62%\"></i><i style=\"height:50%\"></i><i style=\"height:78%\"></i><i style=\"height:66%\"></i><i style=\"height:92%\"></i><i style=\"height:71%\"></i></div><div class=\"alert\">⚠ restock SKU-88 in 2 days</div>' },\n      { need:'Charge and reconcile payments', url:'payments.data2.app', acc:'#BFFA48', blocks:[\n          {c:'Cashier', col:'#BFFA48', t:'Billing, built in'},{c:'Connect', col:'#48FAFA', t:'Talks to the gateway'},\n          {c:'Registry', col:'#FA4848', t:'Reconciles by itself'},{c:'ID', col:'#48FAA1', t:'Who sees what'} ],\n        app:'<div class=\"ah\">Payments · reconciled</div><div class=\"row2\"><span>$ 1,240.00</span><span class=\"ok\">✓ reconciled</span></div><div class=\"row2\"><span>$ 890.00</span><span class=\"ok\">✓ reconciled</span></div><div class=\"row2\"><span>$ 3,110.00</span><span class=\"ok\">✓ reconciled</span></div><div class=\"foot\">3,482 transactions today · 0 mismatches</div>' },\n      { need:'A product image studio', url:'studio.data2.app', acc:'#FADC48', blocks:[\n          {c:'Media', col:'#FADC48', t:'Generates the image'},{c:'Registry', col:'#FA4848', t:'Pulls the catalog'},\n          {c:'UI', col:'#4866FA', t:'Gallery, ready'} ],\n        app:'<div class=\"ah\">Studio · images</div><div class=\"gal\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div><div class=\"foot\">8 images generated · ready for the catalog</div>' }\n    ],\n    es:[\n      { need:'Cortar 40% del costo de atención', url:'atencion.data2.app', acc:'#FA48DC', blocks:[\n          {c:'Rush', col:'#8448FA', t:'Escucha la llamada'},{c:'Domain', col:'#FA48DC', t:'La IA resuelve al instante'},\n          {c:'Connect', col:'#48FAFA', t:'Integra el CRM'},{c:'UI', col:'#4866FA', t:'Panel del equipo'} ],\n        app:'<div class=\"ah\">Atención · en vivo</div><div class=\"chat\"><div class=\"bub q\">¿Dónde está mi pedido 8421?</div><div class=\"bub a\" style=\"background:rgba(250,72,220,.15);border:1px solid rgba(250,72,220,.42)\">Sale mañana, 14h — rastreo en tu e-mail.</div></div><div class=\"agent\">◈ agente resolvió · 0 en fila</div>' },\n      { need:'Conciliar inventario en tiempo real', url:'inventario.data2.app', acc:'#4866FA', blocks:[\n          {c:'Registry', col:'#FA4848', t:'Los datos, vivos'},{c:'Rush', col:'#8448FA', t:'Cada movimiento, un evento'},\n          {c:'Domain', col:'#FA48DC', t:'Alerta antes de que falte'},{c:'UI', col:'#4866FA', t:'Pantalla de control'} ],\n        app:'<div class=\"ah\">Inventario · tiempo real</div><div class=\"kpis\"><span>1.204 SKUs</span><span>rotación 3.2×</span><span>quiebre 0,4%</span></div><div class=\"chart\"><i style=\"height:38%\"></i><i style=\"height:62%\"></i><i style=\"height:50%\"></i><i style=\"height:78%\"></i><i style=\"height:66%\"></i><i style=\"height:92%\"></i><i style=\"height:71%\"></i></div><div class=\"alert\">⚠ reponer SKU-88 en 2 días</div>' },\n      { need:'Cobrar y conciliar pagos', url:'pagos.data2.app', acc:'#BFFA48', blocks:[\n          {c:'Cashier', col:'#BFFA48', t:'Cobro nativo'},{c:'Connect', col:'#48FAFA', t:'Habla con la pasarela'},\n          {c:'Registry', col:'#FA4848', t:'Concilia solo'},{c:'ID', col:'#48FAA1', t:'Quién puede ver'} ],\n        app:'<div class=\"ah\">Pagos · conciliado</div><div class=\"row2\"><span>$ 1.240,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>$ 890,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"row2\"><span>$ 3.110,00</span><span class=\"ok\">✓ conciliado</span></div><div class=\"foot\">3.482 transacciones hoy · 0 divergencias</div>' },\n      { need:'Estudio de imagen del producto', url:'estudio.data2.app', acc:'#FADC48', blocks:[\n          {c:'Media', col:'#FADC48', t:'Genera la imagen'},{c:'Registry', col:'#FA4848', t:'Trae el catálogo'},\n          {c:'UI', col:'#4866FA', t:'Galería lista'} ],\n        app:'<div class=\"ah\">Estudio · imágenes</div><div class=\"gal\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div><div class=\"foot\">8 imágenes generadas · listas para el catálogo</div>' }\n    ]\n  };\n  return S[lang]||S.pt;\n}"}}}}}}}},{"_id":"6a7b2b04c2bdaafdb939b1f8","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-produto","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-caps{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:36px}\n.i-cap{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:22px 22px 22px 60px;background:var(--surface-1);transition:.18s}\n.i-cap:hover{border-color:rgba(255,255,255,.2);transform:translateY(-2px)}\n.i-cap .i-cnode{position:absolute;left:20px;top:22px;width:24px;height:24px}\n.i-cap .i-ct{font-size:14.5px;color:var(--ink-mid);line-height:1.55}\n.i-cap .i-ct b{color:var(--ink-hi);font-weight:600}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n.i-caseslot{border:1px dashed var(--hairline);border-radius:18px;padding:34px;background:rgba(255,255,255,.012);margin-top:34px}\n.i-caseslot .st{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--verme)}\n.i-caseslot h4{margin:12px 0 6px;font-size:18px;color:var(--ink-mid)}\n.i-caseslot p{color:var(--ink-low);font-size:13px;line-height:1.5}\n.mp-soon{font-family:var(--font-mono);font-size:9px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:2px 6px;letter-spacing:.04em;vertical-align:middle}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.i-caps{grid-template-columns:1fr}}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2); var TT = PROD_T(); var t = function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; };\n    const slug = (d2.params && d2.params.slug) || '';\n    const p = (dd('cms-productsDataSet')).find(function(x){ return x.key===slug; });\n    if(!p){ return `<main class=\"pageframe\"><span class=\"back\" data-nav data-href=\"/produtos\">${esc(t('back'))}</span><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>${esc(t('nf_eyebrow'))}</div><h2 class=\"d-head stag\">${esc(t('nf_head'))}</h2><div class=\"d-sub stag\">${esc(t('nf_sub'))}</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/produtos\">${esc(t('nf_btn'))}</button></div></section></main>`; }\n    const expHero = (p.key==='domain') ? d2.render('www@0MfwBc5HuDLpCuTOU8c_p', {}, { style:'display:block;width:100%' }) : (p.key==='registry') ? d2.render('www@exp-registry', {}, { style:'display:block;width:100%' }) : (p.key==='ui') ? d2.render('www@exp-ui', {}, { style:'display:block;width:100%' }) : (p.key==='id') ? d2.render('www@exp-id', {}, { style:'display:block;width:100%' }) : (p.key==='media') ? d2.render('www@exp-media', {}, { style:'display:block;width:100%' }) : (p.key==='cashier') ? d2.render('www@exp-cashier', {}, { style:'display:block;width:100%' }) : (p.key==='rush') ? d2.render('www@U4g7zTUC7RI956nMfKG1y', {}, { style:'display:block;width:100%' }) : (p.key==='connect') ? d2.render('www@U4g7zTUC7RI956nMfKG1y', {}, { style:'display:block;width:100%' }) : '';\n    return `${expHero}<main class=\"pageframe\">${renderProdutoDetail(d2, esc, dd, p)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction PROD_T(){ return {\n  pt:{back:'← Produtos',produto_eyebrow:'Produto',nf_eyebrow:'Produto não encontrado',nf_head:'Esse produto não existe.',nf_sub:'O endereço pode ter mudado — veja os produtos que estão no ar.',nf_btn:'Ver todos os produtos →',avail_eyebrow:'Disponibilidade',soon_head:'Em breve.',soon_badge:'em breve',soon_building:'Em construção',soon_note:' A engenharia existe; o produto público entra na próxima rodada.',resolve_eyebrow:'O que resolve',role_fallback:'componente',worksWith_eyebrow:'Trabalha com',worksWith_head:'Um componente da mesma runtime.',worksWith_sub:' não roda sozinho — divide o mesmo motor, o mesmo dado e as mesmas regras com os outros sete produtos. Um sistema, não um kit.',here:'você está aqui',cta_head:'Uma runtime só, da necessidade à produção.',cta_sub:' faz parte da plataforma — um time embarca e entrega rodando, em semanas.',cta_platform:'Ver a plataforma →',cta_talk:'Falar com a gente →'},\n  en:{back:'← Products',produto_eyebrow:'Product',nf_eyebrow:'Product not found',nf_head:\"That product doesn't exist.\",nf_sub:'The address may have changed — see the products that are live.',nf_btn:'View all products →',avail_eyebrow:'Availability',soon_head:'Coming soon.',soon_badge:'coming soon',soon_building:'In progress',soon_note:' The engineering exists; the public product ships in the next round.',resolve_eyebrow:'What it solves',role_fallback:'component',worksWith_eyebrow:'Works with',worksWith_head:'One component of the same runtime.',worksWith_sub:' does not run alone — it shares the same engine, the same data and the same rules with the other seven products. One system, not a kit.',here:'you are here',cta_head:'One runtime, from necessity to production.',cta_sub:' is part of the platform — a team embeds and ships it running, in weeks.',cta_platform:'See the platform →',cta_talk:'Talk to us →'},\n  es:{back:'← Productos',produto_eyebrow:'Producto',nf_eyebrow:'Producto no encontrado',nf_head:'Ese producto no existe.',nf_sub:'La dirección puede haber cambiado — mira los productos que están en producción.',nf_btn:'Ver todos los productos →',avail_eyebrow:'Disponibilidad',soon_head:'Próximamente.',soon_badge:'próximamente',soon_building:'En construcción',soon_note:' La ingeniería existe; el producto público entra en la próxima ronda.',resolve_eyebrow:'Qué resuelve',role_fallback:'componente',worksWith_eyebrow:'Funciona con',worksWith_head:'Un componente del mismo runtime.',worksWith_sub:' no funciona solo — comparte el mismo motor, los mismos datos y las mismas reglas con los otros siete productos. Un sistema, no un kit.',here:'estás aquí',cta_head:'Un solo runtime, de la necesidad a producción.',cta_sub:' es parte de la plataforma — un equipo se embarca y lo entrega funcionando, en semanas.',cta_platform:'Ver la plataforma →',cta_talk:'Hablar con nosotros →'}\n}; }\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\nfunction isoMini(hue){ return '<svg class=\"i-cnode\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M12 3 L20 8 L12 13 L4 8 Z\" fill=\"'+hue+'\" opacity=\"0.72\"/><path d=\"M4 8 L12 13 L12 21 L4 16 Z\" fill=\"'+hue+'\" opacity=\"0.28\"/><path d=\"M20 8 L12 13 L12 21 L20 16 Z\" fill=\"'+hue+'\" opacity=\"0.46\"/></svg>'; }\nfunction renderProdutoDetail(d2, esc, dd, p){\n  var ac = esc(p.accent||'#3A7BFF'); var soon = p.status==='em-breve';\n  var lang = D2LANG(d2); var TT = PROD_T(); var t = function(k){ return (TT[lang]&&TT[lang][k])||TT.en[k]||k; }; var pick = function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang]||rec[base]||''; };\n  var ps = (dd('cms-productsDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var ROLE = {\n    pt:{RUSH:'escuta · o que chega',DOMAIN:'decide · com o porquê',CONNECT:'conecta · o que você já usa',MEDIA:'guarda · seus arquivos',CASHIER:'cobra · com registro',ID:'quem entra · o que pode',REGISTRY:'cataloga · seus dados',UI:'monta · suas telas'},\n    en:{RUSH:'listens · to what comes in',DOMAIN:'decides · with the why',CONNECT:'connects · what you already use',MEDIA:'keeps · your files',CASHIER:'charges · on the record',ID:'who gets in · what they can do',REGISTRY:'catalogs · your data',UI:'builds · your screens'},\n    es:{RUSH:'escucha · lo que llega',DOMAIN:'decide · con el porqué',CONNECT:'conecta · lo que ya usas',MEDIA:'guarda · tus archivos',CASHIER:'cobra · con registro',ID:'quién entra · qué puede',REGISTRY:'cataloga · tus datos',UI:'monta · tus pantallas'}\n  };\n  var rMap = ROLE[lang]||ROLE.en;\n  var roleOf = function(n){ return rMap[String(n).toUpperCase()] || t('role_fallback'); };\n  var soonBadge = soon?'<span class=\"mp-soon\" style=\"margin-left:12px\">'+esc(t('soon_badge'))+'</span>':'';\n  var desc = String(pick(p,'description'));\n  var hero = '<section class=\"i-hero\" data-reveal style=\"--ihue:'+ac+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('produto_eyebrow'))+'</div><h1 class=\"i-name stag\">'+esc(p.name)+soonBadge+'</h1><div class=\"i-dor stag\"><b>'+esc(pick(p,'tagline'))+'</b></div>'+(desc?'<div class=\"d-sub stag\" style=\"margin-top:18px\">'+esc(desc)+'</div>':'')+'</div><div class=\"i-diorama stag\" style=\"--ihue:'+ac+'\"><div class=\"i-atmos\" style=\"--ihue:'+ac+'\"></div>'+isoDiorama(ac)+'</div></section>';\n  if(p.key==='domain'||p.key==='registry'||p.key==='ui'||p.key==='id'||p.key==='media'||p.key==='cashier'||p.key==='rush'||p.key==='connect'){ hero = ''; }\n  var caps;\n  var capsA=(lang!=='pt'&&Array.isArray(p['capacidades_'+lang])&&p['capacidades_'+lang].length)?p['capacidades_'+lang]:p.capacidades;\n  if(Array.isArray(capsA)&&capsA.length){ caps=capsA.slice(0,4); }\n  else { var splitAt = desc.indexOf(': '); if(splitAt<0) splitAt = desc.indexOf('. '); var rest = splitAt>0 ? desc.slice(splitAt+2) : desc; caps = rest.split(/[,;·—]|\\.\\s|\\se\\s/).map(function(s){return s.trim().replace(/\\.$/,'');}).filter(function(s){return s.length>3;}); }\n  var capCards = caps.slice(0,4).map(function(c){ return '<div class=\"i-cap stag\">'+isoMini(ac)+'<div class=\"i-ct\">'+esc(c.charAt(0).toUpperCase()+c.slice(1))+'</div></div>'; }).join('');\n  var resolve = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('resolve_eyebrow')+'</div><h2 class=\"d-head stag\">'+esc(pick(p,'tagline')||p.name)+'</h2>'+(capCards?'<div class=\"i-caps stag\">'+capCards+'</div>':'<div class=\"d-sub stag\">'+esc(desc)+'</div>')+'</section>';\n  var flowNodes = ps.map(function(q){\n    var qc=esc(q.accent||'#3A7BFF'); var here=(q.key===p.key);\n    var open = here ? '<div class=\"i-stage stag\">' : '<div class=\"i-stage stag\" data-nav data-href=\"/produtos/'+esc(q.key)+'\" style=\"cursor:pointer\">';\n    var dot = here ? '<div class=\"i-pnode\" style=\"--accent:'+qc+';width:24px;height:24px\"></div>' : '<div class=\"i-pnode\" style=\"--accent:'+qc+';opacity:.72\"></div>';\n    var role = here ? t('here') : roleOf(q.name);\n    return open+dot+'<div class=\"i-pn\">'+esc(q.name)+'</div><div class=\"i-pr\"'+(here?' style=\"color:'+qc+'\"':'')+'>'+esc(role)+'</div></div>';\n  }).join('');\n  var trabalha = '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('worksWith_eyebrow')+'</div><h2 class=\"d-head stag\">'+t('worksWith_head')+'</h2><div class=\"d-sub stag\">'+esc(p.name)+t('worksWith_sub')+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat('+ps.length+',1fr);--ihue:'+ac+'\"><div class=\"i-rail\"></div>'+flowNodes+'</div></section>';\n  var cta;\n  if(soon){\n    cta = '<section class=\"d-sec d-close\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(t('avail_eyebrow'))+'</div><h2 class=\"d-head big stag\">'+esc(t('soon_head'))+'</h2><div class=\"i-caseslot stag\" style=\"max-width:640px;margin:28px auto 0;text-align:left\"><div class=\"st\">'+esc(p.name)+' · '+esc(t('soon_badge'))+'</div><h4>'+esc(pick(p,'tagline')||t('soon_building'))+'</h4><p>'+esc(desc||'')+esc(t('soon_note'))+'</p></div><div class=\"d-cta stag\" style=\"margin-top:28px\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+t('cta_talk')+'</button></div></section>';\n  } else {\n    cta = '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+t('cta_head')+'</h2><div class=\"d-sub stag\">'+esc(p.name)+t('cta_sub')+'</div><div class=\"d-cta stag\" style=\"display:flex;gap:14px;justify-content:center;flex-wrap:wrap\"><button class=\"d-btn\" data-nav data-href=\"/plataforma\">'+t('cta_platform')+'</button><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+t('cta_talk')+'</button></div></section>';\n  }\n  return '<span class=\"back\" data-nav data-href=\"/produtos\">'+t('back')+'</span>'+hero+resolve+trabalha+cta;\n}\n"}},"slug":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slug"}}}}}}}}}},{"_id":"6a7b2b85dccefbb93b96d5af","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-runtime","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{display:block;width:100%;--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--hairline:rgba(255,255,255,.08);--verme:#E93355;--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;color:var(--ink-hi);font-family:var(--font-display)}\n*{box-sizing:border-box}\n.pageframe{max-width:1160px;margin:0 auto;padding:64px 32px 40px}\n.back{color:var(--action);font-size:13px;cursor:pointer;display:inline-block;margin-bottom:14px}\n@keyframes ask-flow{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.i-hero{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,4vw,64px);align-items:center;padding:clamp(24px,5vh,56px) 0 clamp(20px,4vh,44px);overflow:visible}\n.i-hero::before{content:'';position:absolute;inset:-30% -18% -30% 30%;background:radial-gradient(52% 60% at 74% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.10;filter:blur(34px);pointer-events:none;z-index:0}\n.i-herocopy,.i-diorama{position:relative;z-index:1}\n.i-hero .i-name{font-size:clamp(38px,6vw,78px);line-height:1.0;letter-spacing:-.025em;color:var(--ink-hi);font-weight:700;margin:18px 0 0;max-width:13ch}\n.i-hero .i-dor{font-size:clamp(17px,1.7vw,23px);color:var(--ink-mid);line-height:1.5;max-width:42ch;margin:22px 0 0;text-wrap:balance}\n.i-hero .i-dor b{color:var(--ink-hi);font-weight:600}\n.i-diorama{border:1px solid var(--hairline);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));min-height:clamp(240px,34vh,360px);display:flex;align-items:center;justify-content:center;overflow:hidden}\n.i-diorama .i-atmos{position:absolute;inset:0;z-index:0;pointer-events:none}\n.i-diorama .i-atmos::before{content:'';position:absolute;inset:-30%;background:radial-gradient(46% 44% at 42% 34%,var(--ihue,#3A7BFF),transparent 62%);opacity:.22;filter:blur(26px)}\n.i-diorama .dio{width:min(82%,340px);height:auto;position:relative;z-index:1;filter:drop-shadow(0 26px 60px rgba(0,0,0,.5))}\n.i-flow{position:relative;display:grid;gap:20px;margin-top:38px}\n.i-flow .i-rail{position:absolute;top:9px;left:6%;right:6%;height:1px;background:linear-gradient(90deg,var(--ihue,#3A7BFF),var(--verme),var(--action-hi));background-size:200% 100%;animation:ask-flow 3.4s linear infinite;opacity:.5}\n.i-stage{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}\n.i-pnode{width:18px;height:18px;border-radius:50%;background:var(--accent,#3A7BFF);box-shadow:0 0 0 6px rgba(255,255,255,.04),0 0 22px var(--accent,#3A7BFF);margin:0 0 18px}\n.i-stage .i-pn{font-family:var(--font-mono);font-size:14px;letter-spacing:.06em;color:var(--ink-hi)}\n.i-stage .i-pr{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-low);margin-top:8px;line-height:1.4}\n.i-caps{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:36px}\n.i-cap{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:22px 22px 22px 60px;background:var(--surface-1);transition:.18s}\n.i-cap:hover{border-color:rgba(255,255,255,.2);transform:translateY(-2px)}\n.i-cap .i-cnode{position:absolute;left:20px;top:22px;width:24px;height:24px}\n.i-cap .i-ct{font-size:14.5px;color:var(--ink-mid);line-height:1.55}\n.i-cap .i-ct b{color:var(--ink-hi);font-weight:600}\n.i-lever .v.ph{color:var(--ink-faint);font-size:clamp(24px,2.6vw,38px);letter-spacing:0}\n.d-lever.qual{padding-top:20px}\n.d-lever .ql{font-size:clamp(17px,1.9vw,23px);line-height:1.32;color:var(--ink-hi);font-weight:600;letter-spacing:-.01em;max-width:26ch}\n.i-lever.hot .v{color:var(--action)}\n@media(max-width:900px){.i-hero{grid-template-columns:1fr}.i-hero::before{display:none}.i-flow{grid-template-columns:1fr!important;gap:14px}.i-flow .i-rail{display:none}.i-caps{grid-template-columns:1fr}.d-faces{grid-template-columns:1fr}}\n@media(max-width:640px){.pageframe{padding:46px 18px 34px}}\n`,\n  render(d2){\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    var lang = D2LANG(d2); var __T = RUNTIME_T(); var t = function(k){ var L=__T[lang]||__T.en; return (L[k]!=null?L[k]:__T.en[k]) || k; };\n    let key = (d2.params && (d2.params.key || d2.params.rkey)) || '';\n    if(!key){ try{ var __R = d2.router ? d2.router('site_router') : null; var __seg = ((__R && typeof __R.path==='string') ? __R.path : '').split('/').filter(Boolean); if(__seg[0]==='plataforma' && __seg[1]==='runtimes' && __seg[2]) key = __seg[2]; }catch(e){} }\n    const rt = (dd('cms-runtimesDataSet')).find(function(x){ return x.key===key; });\n    if(!rt){ return `<main class=\"pageframe\"><span class=\"back\" data-nav data-href=\"/plataforma\">${t('back')}</span><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>${t('nf_eye')}</div><h2 class=\"d-head stag\">${t('nf_h')}</h2><div class=\"d-sub stag\">${t('nf_sub')}</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/plataforma\">${t('nf_btn')}</button></div></section></main>`; }\n    let expHero = '';\n    if(key==='domain') expHero = d2.render('www@0MfwBc5HuDLpCuTOU8c_p', {}, { style:'display:block;width:100%' });\n    else if(key==='rush'||key==='connect') expHero = d2.render('www@U4g7zTUC7RI956nMfKG1y', {}, { style:'display:block;width:100%' });\n    return `${expHero}<main class=\"pageframe\">${renderRuntimeDetail(d2, esc, dd, key, lang)}</main>`;\n  },\n  mounted(d2, root){ try{ d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a) return; var h=a.getAttribute('data-href'); if(h){ e.preventDefault(); try{d2.state.path=h;}catch(_){} try{ d2.router('site_router').goTo(h); }catch(_){} } }); }catch(e){} try{ wireReveal(root); }catch(e){} },\n  updated(d2, root){ try{ wireReveal(root); }catch(e){} }\n};\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction RUNTIME_T(){ return {\n  pt:{ back:'← A plataforma', comp_eye:'Componente', nf_eye:'Componente não encontrado', nf_h:'Esse componente não existe.', nf_sub:'O endereço pode ter mudado — volte para a plataforma.', nf_btn:'Ver a plataforma →', oque_eye:'O que faz', oque_h:'As capacidades.', quando_eye:'Quando usar', quando_h:'O papel no sistema.', q_a_tag:'O papel', q_b_tag:'A hora certa', q_b_h:'Quando acionar', mapa_eye:'O mapa', mapa_h:'O lugar dele na runtime.', mapa_sub:'Rush escuta, Connect integra, Domain decide — este é o seu lugar.', prova_eye:'A prova', prova_h:'Em números.', prova_fallback:'operação em produção', close_h:'Um componente. A runtime inteira.', close_sub_a:'Fale com a gente e veja o ', close_sub_b:' rodando no seu domínio.', cta_btn:'Falar com a gente →', heroLine:{ rush:'Seu sistema escuta o mundo e reage sozinho.', connect:'Seu sistema alcança o mundo — e o mundo responde.', domain:'A camada que entende, decide e prova a decisão.' }, whenLine:{ rush:'Quando algo acontece e o sistema precisa reagir sozinho — um pedido chega, um horário dispara, um e-mail entra, uma ligação toca.', connect:'Quando o seu sistema precisa alcançar o mundo — cobrar um pagamento, escrever no ERP, notificar em tempo real.', domain:'Quando a decisão exige entender linguagem, contexto ou imagem — e precisa ser auditável, não um chute de modelo.' }, proof:{ rush:['eventos por minuto sob carga','reação em tempo real','canais de entrada','cada evento com registro'], connect:['integrações vivas','entregas confirmadas','canais em tempo real','tempo até integrar'], domain:['decisões por dia','zero resposta fora do padrão','cada decisão com registro','o porquê de cada resposta'] } },\n  en:{ back:'← The platform', comp_eye:'Component', nf_eye:'Component not found', nf_h:'This component doesn\\'t exist.', nf_sub:'The address may have changed — go back to the platform.', nf_btn:'See the platform →', oque_eye:'What it does', oque_h:'The capabilities.', quando_eye:'When to use it', quando_h:'Its role in the system.', q_a_tag:'The role', q_b_tag:'The right moment', q_b_h:'When to reach for it', mapa_eye:'The map', mapa_h:'Its place in the runtime.', mapa_sub:'Rush listens, Connect integrates, Domain decides — this is your place.', prova_eye:'The proof', prova_h:'In numbers.', prova_fallback:'in production', close_h:'One component. The whole runtime.', close_sub_a:'Talk to us and see ', close_sub_b:' running on your domain.', cta_btn:'Talk to us →', heroLine:{ rush:'Your system listens to the world and reacts on its own.', connect:'Your system reaches the world — and the world answers.', domain:'The layer that understands, decides and proves the decision.' }, whenLine:{ rush:'When something happens and the system has to react on its own — an order arrives, a schedule fires, an email comes in, a call rings.', connect:'When your system needs to reach the world — take a payment, write to the ERP, notify in real time.', domain:'When the decision requires understanding language, context or image — and it has to be auditable, not a model\\'s guess.' }, proof:{ rush:['events per minute under load','real-time reaction','inbound channels','every event on the record'], connect:['live integrations','confirmed deliveries','real-time channels','time to integrate'], domain:['decisions per day','zero off-pattern answers','every decision on the record','the why behind each answer'] } },\n  es:{ back:'← La plataforma', comp_eye:'Componente', nf_eye:'Componente no encontrado', nf_h:'Este componente no existe.', nf_sub:'La dirección puede haber cambiado — vuelve a la plataforma.', nf_btn:'Ver la plataforma →', oque_eye:'Qué hace', oque_h:'Las capacidades.', quando_eye:'Cuándo usarlo', quando_h:'Su papel en el sistema.', q_a_tag:'El papel', q_b_tag:'El momento justo', q_b_h:'Cuándo activarlo', mapa_eye:'El mapa', mapa_h:'Su lugar en el runtime.', mapa_sub:'Rush escucha, Connect integra, Domain decide — este es tu lugar.', prova_eye:'La prueba', prova_h:'En números.', prova_fallback:'operación en producción', close_h:'Un componente. El runtime entero.', close_sub_a:'Habla con nosotros y ve ', close_sub_b:' corriendo en tu dominio.', cta_btn:'Hablar con nosotros →', heroLine:{ rush:'Tu sistema escucha el mundo y reacciona solo.', connect:'Tu sistema alcanza el mundo — y el mundo responde.', domain:'La capa que entiende, decide y prueba la decisión.' }, whenLine:{ rush:'Cuando algo sucede y el sistema tiene que reaccionar solo — llega un pedido, dispara un horario, entra un correo, suena una llamada.', connect:'Cuando tu sistema necesita alcanzar el mundo — cobrar un pago, escribir en el ERP, notificar en tiempo real.', domain:'Cuando la decisión exige entender lenguaje, contexto o imagen — y tiene que ser auditable, no una corazonada del modelo.' }, proof:{ rush:['eventos por minuto bajo carga','reacción en tiempo real','canales de entrada','cada evento con registro'], connect:['integraciones vivas','entregas confirmadas','canales en tiempo real','tiempo hasta integrar'], domain:['decisiones por día','cero respuestas fuera del patrón','cada decisión con registro','el porqué de cada respuesta'] } }\n}; }\nfunction wireReveal(root){\n  try{\n    var els=Array.prototype.slice.call(root.querySelectorAll('[data-reveal]'));\n    if(!els.length) return;\n    var reduce=(typeof window!=='undefined'&&window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    if(reduce||typeof IntersectionObserver==='undefined'){ els.forEach(function(el){el.classList.add('in');}); return; }\n    var io=new IntersectionObserver(function(ents){ ents.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); },{threshold:0.06});\n    els.forEach(function(el){ if(!el.classList.contains('in')) io.observe(el); });\n  }catch(e){ try{ Array.prototype.slice.call(root.querySelectorAll('[data-reveal]')).forEach(function(el){el.classList.add('in');}); }catch(_){} }\n}\nfunction isoDiorama(hue){\n  var cube=function(tx,ty,sc,o){return '<g transform=\"translate('+tx+' '+ty+') scale('+sc+')\" opacity=\"'+o+'\"><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"'+hue+'\" opacity=\"0.42\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"'+hue+'\" opacity=\"0.14\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"'+hue+'\" opacity=\"0.26\"/><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"none\" stroke=\"'+hue+'\" stroke-width=\"1.1\" opacity=\"0.5\"/></g>';};\n  return '<svg class=\"dio\" viewBox=\"0 0 260 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><ellipse cx=\"130\" cy=\"188\" rx=\"118\" ry=\"34\" fill=\"'+hue+'\" opacity=\"0.06\"/>'+cube(90,26,1.55,1)+cube(28,84,1.05,0.85)+cube(150,98,0.82,0.7)+'</svg>';\n}\nfunction isoMini(hue){ return '<svg class=\"i-cnode\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M12 3 L20 8 L12 13 L4 8 Z\" fill=\"'+hue+'\" opacity=\"0.72\"/><path d=\"M4 8 L12 13 L12 21 L4 16 Z\" fill=\"'+hue+'\" opacity=\"0.28\"/><path d=\"M20 8 L12 13 L12 21 L20 16 Z\" fill=\"'+hue+'\" opacity=\"0.46\"/></svg>'; }\nfunction parseLever(raw){\n  var s = String(raw==null?'':raw).replace(/\\s*\\[PH[^\\]]*\\]/g,'').trim();\n  var m = s.match(/^([+\\-−–]?\\s*(?:R\\$\\s*)?\\d[\\d.,]*\\s*(?:%|pp|k|K|M|mil|mi|mn)?)\\s*(.*)$/);\n  if(m && /\\d/.test(m[1])){ return { v: m[1].replace(/\\s+/g,''), l: m[2].trim(), ph:false }; }\n  return { v:'', l:'', ph:false, qual:true, text:s };\n}\nfunction leverCard(esc,p,hot){ if(p&&p.qual){ return '<div class=\"d-lever i-lever qual\"><div class=\"ql\">'+esc(p.text)+'</div></div>'; } return '<div class=\"d-lever i-lever'+(hot?' hot':'')+'\"><div class=\"v'+(p.ph?' ph':'')+'\">'+esc(p.v)+'</div><div class=\"l\">'+esc(p.l)+'</div></div>'; }\nfunction d2Close(esc, head, sub, btn){\n  return '<section class=\"d-sec d-close\" data-reveal><h2 class=\"d-head big stag\">'+esc(head)+'</h2><div class=\"d-sub stag\">'+esc(sub)+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/consultoria\">'+esc(btn||'')+'</button></div></section>';\n}\nfunction d2Faces(esc, eyebrow, head, a, b){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">'+esc(a.tag)+'</div><h3>'+esc(a.h)+'</h3><p>'+esc(a.p)+'</p></div><div class=\"d-face plat\"><div class=\"tag\">'+esc(b.tag)+'</div><h3>'+esc(b.h)+'</h3><p>'+esc(b.p)+'</p></div></div></section>';\n}\nfunction d2LeverSec(esc, eyebrow, head, items){\n  return '<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+esc(eyebrow)+'</div><h2 class=\"d-head stag\">'+esc(head)+'</h2><div class=\"d-levers stag\">'+items.map(function(a){return leverCard(esc,parseLever(a),false);}).join('')+'</div></section>';\n}\nfunction renderRuntimeDetail(d2, esc, dd, slug, lang){\n  var __T=RUNTIME_T(); var L=__T[lang]||__T.en; var t=function(k){ return (L[k]!=null?L[k]:__T.en[k])||k; }; var pick=function(rec,base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang]||rec[base]||''; };\n  var rts=(dd('cms-runtimesDataSet')||[]).slice().sort(function(a,b){return (a.ordem||0)-(b.ordem||0);});\n  var rt=rts.find(function(x){return x.key===slug;})||{};\n  if(!rt.key){ return '<span class=\"back\" data-nav data-href=\"/plataforma\">'+t('back')+'</span><section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('nf_eye')+'</div><h2 class=\"d-head stag\">'+t('nf_h')+'</h2><div class=\"d-sub stag\">'+t('nf_sub')+'</div><div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"/plataforma\">'+t('nf_btn')+'</button></div></section>'; }\n  var ac=esc(rt.accent||'#3A7BFF');\n  var rtHref={'rush':'/plataforma/runtimes/rush','connect':'/plataforma/runtimes/connect','domain':'/plataforma/runtimes/domain'};\n  var heroLine=L.heroLine||__T.en.heroLine;\n  var whenLine=L.whenLine||__T.en.whenLine;\n  var proof=L.proof||__T.en.proof;\n  var desc=String(pick(rt,'description')||'');\n  var caps;\n  var capsSrc=(lang!=='pt'&&Array.isArray(rt['capacidades_'+lang])&&rt['capacidades_'+lang].length)?rt['capacidades_'+lang]:rt.capacidades;\n  if(Array.isArray(capsSrc)&&capsSrc.length){ caps=capsSrc.slice(0,4); }\n  else { var splitAt=desc.indexOf(': '); if(splitAt<0) splitAt=desc.indexOf('. '); var rest=splitAt>0?desc.slice(splitAt+2):desc; if(rest.indexOf('—')>=0){ rest=rest.slice(rest.indexOf('—')+1); } caps=rest.split(/[,;·—]|\\.\\s|\\se\\s/).map(function(s){return s.trim().replace(/\\.$/,'');}).filter(function(s){return s.length>3;}).slice(0,4); }\n  var back='<span class=\"back\" data-nav data-href=\"/plataforma\">'+t('back')+'</span>';\n  var hero='<section class=\"i-hero\" data-reveal style=\"--ihue:'+ac+'\"><div class=\"i-herocopy\"><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('comp_eye')+' · '+esc(pick(rt,'papel')||'')+'</div><h1 class=\"i-name stag\">'+esc(rt.name)+'</h1><div class=\"i-dor stag\"><b>'+esc(heroLine[slug]||pick(rt,'papel')||'')+'</b></div>'+(desc?'<div class=\"d-sub stag\" style=\"margin-top:18px\">'+esc(desc)+'</div>':'')+'</div><div class=\"i-diorama stag\" style=\"--ihue:'+ac+'\"><div class=\"i-atmos\" style=\"--ihue:'+ac+'\"></div>'+isoDiorama(ac)+'</div></section>';\n  var hasExp = (slug==='domain'||slug==='rush'||slug==='connect');\n  var heroPart = hasExp ? '' : hero;\n  var capCards=caps.map(function(c){return '<div class=\"i-cap stag\">'+isoMini(ac)+'<div class=\"i-ct\">'+esc(c.charAt(0).toUpperCase()+c.slice(1))+'</div></div>';}).join('');\n  var oque='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('oque_eye')+'</div><h2 class=\"d-head stag\">'+t('oque_h')+'</h2>'+(capCards?'<div class=\"i-caps stag\">'+capCards+'</div>':'<div class=\"d-sub stag\">'+esc(desc)+'</div>')+'</section>';\n  var quando=d2Faces(esc,t('quando_eye'),t('quando_h'),{tag:t('q_a_tag'),h:(pick(rt,'papel')||rt.name),p:desc},{tag:t('q_b_tag'),h:t('q_b_h'),p:(whenLine[slug]||'')});\n  var mapNodes=rts.map(function(r){var rc=esc(r.accent||'#3A7BFF');var here=(r.key===slug);var open=here?'<div class=\"i-stage stag\">':'<div class=\"i-stage stag\" data-nav data-href=\"'+esc(rtHref[r.key]||'/plataforma')+'\" style=\"cursor:pointer\">';var dot=here?'<div class=\"i-pnode\" style=\"--accent:'+rc+';width:24px;height:24px\"></div>':'<div class=\"i-pnode\" style=\"--accent:'+rc+';opacity:.6\"></div>';return open+dot+'<div class=\"i-pn\">'+esc(r.name)+'</div><div class=\"i-pr\">'+esc(pick(r,'papel'))+'</div></div>';}).join('');\n  var mapa='<section class=\"d-sec\" data-reveal><div class=\"d-eyebrow stag\"><span class=\"k\"></span>'+t('mapa_eye')+'</div><h2 class=\"d-head stag\">'+t('mapa_h')+'</h2><div class=\"d-sub stag\">'+t('mapa_sub')+'</div><div class=\"i-flow stag\" style=\"grid-template-columns:repeat(3,1fr);--ihue:'+ac+'\"><div class=\"i-rail\"></div>'+mapNodes+'</div></section>';\n  var prova=d2LeverSec(esc,t('prova_eye'),t('prova_h'),(proof[slug]||[t('prova_fallback')]));\n  return back+heroPart+oque+quando+mapa+prova+d2Close(esc,t('close_h'),t('close_sub_a')+esc(rt.name)+t('close_sub_b'),t('cta_btn'));\n}\n"}},"key":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"key"}}}},"rkey":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"rkey"}}}}}}}}}},{"_id":"6a7b3459366af6efea29a0bd","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"page-home","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"let REVEAL_IO = null;\nexport default {\n  css: `\n:host{display:block;width:100%}\n.home{--surface-0:#060708;--surface-1:#0C0E11;--surface-2:#14171B;--surface-3:#1C2026;--ink-hi:#F4F6F8;--ink-mid:#A7ADB5;--ink-low:#6B7178;--ink-faint:#3A3F45;--action:#3A7BFF;--action-hi:#5B93FF;--verme:#E93355;--hairline:rgba(255,255,255,.08);--font-display:'Helvetica Neue',Helvetica,Arial,sans-serif;--font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;background:var(--surface-0);color:var(--ink-hi);font-family:var(--font-display);display:block;width:100%}\n.home *{box-sizing:border-box}\n.homemain{position:relative;width:100%;z-index:1}\n.d-atmos{position:sticky;top:0;height:100vh;margin-bottom:-100vh;z-index:0;pointer-events:none;overflow:hidden}\n.d-atmos::before{content:'';position:absolute;inset:-25%;background:radial-gradient(48% 38% at 18% 12%,rgba(58,123,255,.16),transparent 60%),radial-gradient(42% 34% at 84% 26%,rgba(233,51,85,.11),transparent 62%),radial-gradient(60% 50% at 62% 92%,rgba(58,123,255,.09),transparent 60%);filter:blur(24px)}\n.d-atmos::after{content:'';position:absolute;inset:0;background:radial-gradient(120% 90% at 50% -10%,transparent 52%,rgba(0,0,0,.55))}\n.d-sec{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:clamp(72px,11vh,150px) 32px;border-top:1px solid var(--hairline)}\n.d-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-low);display:flex;align-items:center;gap:10px}\n.d-eyebrow .k{width:6px;height:6px;border-radius:50%;background:var(--verme);box-shadow:0 0 12px var(--verme)}\n.d-head{font-size:clamp(30px,4.6vw,60px);line-height:1.04;letter-spacing:-.025em;margin:20px 0 0;max-width:22ch;text-wrap:balance;color:var(--ink-hi);font-weight:700}\n.d-head.big{font-size:clamp(40px,6.6vw,86px);max-width:15ch;line-height:1.0}\n.d-sub{font-size:clamp(15px,1.4vw,19px);color:var(--ink-mid);max-width:58ch;line-height:1.6;margin:20px 0 0}\n.d-cta{margin-top:34px}\n.d-btn{background:var(--action);color:#fff;border:none;border-radius:10px;padding:14px 22px;font-size:15px;cursor:pointer;font-family:inherit;font-weight:600;transition:.16s}\n.d-btn:hover{background:var(--action-hi);transform:translateY(-1px)}\n[data-reveal]{opacity:0;transform:translateY(28px);filter:blur(7px);transition:opacity .85s cubic-bezier(.22,1,.36,1),transform .85s cubic-bezier(.22,1,.36,1),filter .85s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in{opacity:1;transform:none;filter:none}\n[data-reveal] .stag{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}\n[data-reveal].in .stag{opacity:1;transform:none}\n[data-reveal].in .stag:nth-child(1){transition-delay:.04s}\n[data-reveal].in .stag:nth-child(2){transition-delay:.12s}\n[data-reveal].in .stag:nth-child(3){transition-delay:.2s}\n[data-reveal].in .stag:nth-child(4){transition-delay:.28s}\n[data-reveal].in .stag:nth-child(5){transition-delay:.36s}\n[data-reveal].in .stag:nth-child(6){transition-delay:.44s}\n@media(prefers-reduced-motion:reduce){[data-reveal],[data-reveal] .stag{transition:none!important;opacity:1;transform:none;filter:none}}\n.d-levers{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin-top:52px}\n.d-lever{border-top:1px solid var(--hairline);padding-top:20px}\n.d-lever .v{font-family:var(--font-mono);font-size:clamp(38px,4.8vw,68px);letter-spacing:-.03em;line-height:.95;font-variant-numeric:tabular-nums;color:var(--ink-hi)}\n.d-lever .v em{font-style:normal;font-size:.42em;color:var(--ink-low);margin-left:3px;letter-spacing:0}\n.d-lever .l{margin-top:12px;font-size:13px;color:var(--ink-mid);max-width:22ch;line-height:1.5}\n.d-lever:nth-child(1) .v{color:var(--action)}\n.d-lever:nth-child(6) .v{color:var(--action)}\n.d-tese .d-head{font-size:clamp(32px,5.2vw,70px);max-width:26ch}\n.d-faces{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:52px}\n.d-face{border:1px solid var(--hairline);border-radius:18px;padding:34px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.004));position:relative;overflow:hidden}\n.d-face .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--action)}\n.d-face h3{font-size:23px;margin:14px 0 10px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-face p{color:var(--ink-mid);font-size:15px;line-height:1.6}\n.d-face.plat .tag{color:var(--verme)}\n.d-face::after{content:'';position:absolute;right:-46px;top:-46px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(58,123,255,.18),transparent 70%)}\n.d-face.plat::after{background:radial-gradient(circle,rgba(233,51,85,.16),transparent 70%)}\n.d-flow{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:56px;position:relative}\n.d-flow::before{content:'';position:absolute;top:8px;left:8px;right:calc(33.3333% - 24px);height:1px;background:linear-gradient(90deg,var(--action),var(--verme),var(--action-hi));opacity:.55}\n.d-node{width:16px;height:16px;border-radius:50%;background:var(--action);box-shadow:0 0 0 6px rgba(58,123,255,.13),0 0 22px var(--action);position:relative;z-index:1;margin:0 0 22px}\n.d-step:nth-child(2) .d-node{background:var(--verme);box-shadow:0 0 0 6px rgba(233,51,85,.13),0 0 22px var(--verme)}\n.d-step:nth-child(3) .d-node{background:var(--action-hi);box-shadow:0 0 0 6px rgba(91,147,255,.13),0 0 22px var(--action-hi)}\n.d-step .n{font-family:var(--font-mono);font-size:11px;color:var(--ink-low);letter-spacing:.14em}\n.d-step h4{font-size:20px;margin:8px 0 8px;letter-spacing:-.01em;color:var(--ink-hi)}\n.d-step p{color:var(--ink-mid);font-size:14px;line-height:1.55}\n.d-rts{display:flex;flex-wrap:wrap;gap:10px;margin-top:36px}\n.d-rt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mid);border:1px solid var(--hairline);border-left:2px solid var(--accent,#3A7BFF);border-radius:8px;padding:8px 14px}\n.d-rt b{color:var(--ink-hi)}\n.d-inds{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:52px}\n.d-ind{position:relative;border:1px solid var(--hairline);border-radius:16px;padding:24px;background:var(--surface-1);overflow:hidden;cursor:pointer;transition:.2s;min-height:238px;display:flex;flex-direction:column}\n.d-ind:hover{border-color:rgba(255,255,255,.22);transform:translateY(-3px)}\n.d-ind .iso{position:absolute;right:-8px;bottom:-8px;width:104px;height:104px;opacity:.55;pointer-events:none}\n.d-ind .name{display:flex;align-items:center;gap:9px;font-size:18px;letter-spacing:-.01em;color:var(--ink-hi);position:relative;z-index:1}\n.d-ind .name .chip{width:10px;height:10px;border-radius:3px}\n.d-ind .dor{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5;position:relative;z-index:1}\n.d-ind .build{margin-top:12px;padding-top:12px;border-top:1px solid var(--hairline);color:var(--ink-hi);font-size:12.5px;line-height:1.5;position:relative;z-index:1}\n.d-ind .lev{margin-top:auto;padding-top:14px;font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--ink-hi);display:flex;align-items:center;gap:8px;position:relative;z-index:1}\n.d-ind .lev::before{content:'▸';color:var(--accent,#3A7BFF)}\n.d-carslot{margin-top:44px;border:1px solid var(--hairline);border-radius:20px;overflow:hidden;min-height:600px;background:#04050a}\n.d-prods{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:48px}\n.d-prod{border:1px solid var(--hairline);border-radius:14px;padding:22px;background:var(--surface-1);min-height:130px}\n.d-prod .pn{font-family:var(--font-mono);font-size:13px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--ink-hi)}\n.d-prod .pn .chip{width:9px;height:9px;border-radius:3px}\n.d-prod .pt{margin-top:12px;color:var(--ink-mid);font-size:13px;line-height:1.5}\n.d-prod .soon{font-family:var(--font-mono);font-size:9.5px;color:var(--verme);border:1px solid rgba(233,51,85,.4);border-radius:5px;padding:1px 6px;margin-left:6px;letter-spacing:.04em}\n.d-df{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-top:52px}\n.d-dfcard{border:1px solid var(--hairline);border-radius:16px;padding:26px;background:var(--surface-1)}\n.d-dfcard .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-low)}\n.d-dfcard h4{margin:12px 0 8px;font-size:19px;color:var(--ink-hi)}\n.d-dfcard p{color:var(--ink-mid);font-size:13px;line-height:1.55}\n.d-dfcard.mid{border-color:rgba(58,123,255,.4);background:linear-gradient(180deg,rgba(58,123,255,.08),transparent)}\n.d-slots{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:48px}\n.d-slot{border:1px dashed var(--hairline);border-radius:16px;padding:30px;background:rgba(255,255,255,.012);min-height:150px;display:flex;flex-direction:column;justify-content:center}\n.d-slot .st{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--verme)}\n.d-slot h4{margin:12px 0 6px;font-size:18px;color:var(--ink-mid)}\n.d-slot p{color:var(--ink-low);font-size:13px;line-height:1.5}\n.d-close{text-align:center;padding:clamp(96px,17vh,210px) 32px}\n.d-close .d-head{margin:20px auto 0}\n.d-close .d-sub{margin:20px auto 0}\n.d-close .d-cta{display:flex;justify-content:center}\n.d-logowall{margin-top:40px;position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}\n.d-mq{display:flex;width:max-content;align-items:center;gap:clamp(40px,5vw,72px);animation:d-marquee 46s linear infinite}\n.d-logowall:hover .d-mq{animation-play-state:paused}\n.d-mq img{height:30px;width:auto;max-width:158px;object-fit:contain;filter:grayscale(1) brightness(1.7);opacity:.5;transition:opacity .28s ease,filter .28s ease}\n.d-mq img:hover{opacity:1;filter:grayscale(0) brightness(1)}\n@keyframes d-marquee{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}\n@media(prefers-reduced-motion:reduce){.d-mq{animation:none;flex-wrap:wrap;width:auto;justify-content:center}}\n@media(max-width:900px){.d-levers{grid-template-columns:repeat(2,1fr)}.d-faces{grid-template-columns:1fr}.d-flow{grid-template-columns:1fr;gap:14px}.d-flow::before{display:none}.d-inds{grid-template-columns:1fr}.d-prods{grid-template-columns:1fr 1fr}.d-df{grid-template-columns:1fr}.d-slots{grid-template-columns:1fr}}\n@media(max-width:560px){.d-prods{grid-template-columns:1fr}.d-levers{grid-template-columns:1fr}}\n`,\n  render(d2){\n    const lang = D2LANG(d2);\n    const TT = HOME_T();\n    const t = k => (TT[lang]&&TT[lang][k]) || TT.en[k] || k;\n    const pick = (rec,base) => { if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n    const esc = s => (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n    const dd = r => { const h = d2.data(r); return h ? (h.records()||[]) : []; };\n    const hs = (dd('cms-home-sectionsDataSet')).filter(s=>s.ativo!==false).sort((a,b)=>(a.ordem||0)-(b.ordem||0));\n    const D = {\n      lv: (dd('cms-leversDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n      inds: (dd('cms-industriesDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n      logos: (dd('cms-logosDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n      prods: (dd('cms-productsDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0)),\n      rts: (dd('cms-runtimesDataSet')).sort((a,b)=>(a.ordem||0)-(b.ordem||0))\n    };\n    const parts = ['<div class=\"d-atmos\"></div>'];\n    let __condIns=false;\n    hs.forEach(s=>{ if(s.tipo==='closing cta' && !__condIns){ parts.push(d2.render('www@condutor', {}, {key:'condutor', style:'display:block;width:100%'})); __condIns=true; } parts.push(dobra(s, D, esc, d2, lang, pick, t)); });\n    if(!__condIns){ parts.push(d2.render('www@condutor', {}, {key:'condutor', style:'display:block;width:100%'})); }\n    return `<div class=\"home\"><div class=\"homemain\">${parts.join('')}</div></div>`;\n  },\n  mounted(d2, root){\n    d2.on('[data-nav]','click',(e)=>{\n      const el = e.target.closest('[data-nav]');\n      if(!el) return;\n      const h = el.getAttribute('data-href');\n      if(h){ e.preventDefault(); try{ d2.router('site_router').goTo(h); }catch(_){} }\n    });\n    setupReveal(d2, root);\n  },\n  updated(d2, root){ setupReveal(d2, root); }\n}\n\nfunction setupReveal(d2, root){\n  const host = root || (typeof document!=='undefined' ? document : null);\n  if(!host || !host.querySelectorAll) return;\n  const els = Array.prototype.slice.call(host.querySelectorAll('[data-reveal]'));\n  if(!els.length) return;\n  const reduce = typeof window!=='undefined' && window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  if(reduce || typeof IntersectionObserver==='undefined'){ els.forEach(el=>el.classList.add('in')); return; }\n  if(REVEAL_IO){ try{ REVEAL_IO.disconnect(); }catch(e){} }\n  REVEAL_IO = new IntersectionObserver((entries)=>{\n    entries.forEach(en=>{ if(en.isIntersecting){ en.target.classList.add('in'); try{ REVEAL_IO.unobserve(en.target); }catch(e){} } });\n  }, { root:null, rootMargin:'0px 0px -10% 0px', threshold:0.01 });\n  els.forEach(el=>{ if(!el.classList.contains('in')) REVEAL_IO.observe(el); });\n}\n\nfunction isoTile(hue){ return `<svg class=\"iso\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M50 20 L80 37 L50 54 L20 37 Z\" fill=\"${hue}\" opacity=\"0.34\"/><path d=\"M20 37 L50 54 L50 88 L20 71 Z\" fill=\"${hue}\" opacity=\"0.16\"/><path d=\"M80 37 L50 54 L50 88 L80 71 Z\" fill=\"${hue}\" opacity=\"0.24\"/></g></svg>`; }\n\nfunction dobra(s, D, esc, d2, lang, pick, t){\n  const clean = x => esc(String(x==null?'':x).replace(/\\s*\\[PH[^\\]]*\\]/g,''));\n  const ebv = pick(s,'eyebrow'), hlv = pick(s,'headline'), shv = pick(s,'subhead'), clv = pick(s,'cta_label');\n  const eb = `<div class=\"d-eyebrow stag\"><span class=\"k\"></span>${esc(ebv)}</div>`;\n  const cta = clv?`<div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"${esc(s.cta_href||'#')}\">${esc(clv)} →</button></div>`:'';\n  const sub = shv?`<div class=\"d-sub stag\">${esc(shv)}</div>`:'';\n  switch(s.tipo){\n    case 'hero + iso-shader': return d2.render('www@hero-magic', {}, {key:'heroMagic', style:'display:block;width:100%'});\n    case 'metric band': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-levers stag\">${D.lv.map(m=>{ const un=pick(m,'unidade'); let lb=String(pick(m,'label')||''); const uw=String(un||'').replace(/[^A-Za-zÀ-ÿ]/g,'').toLowerCase(); if(uw){ const mm=lb.match(/\\s+(?:por|per)\\s+([A-Za-zÀ-ÿ]+)\\s*$/i); if(mm && mm[1].toLowerCase()===uw){ lb=lb.slice(0,mm.index); } } return `<div class=\"d-lever\"><div class=\"v\">${esc(m.valor)}${un?`<em>${esc(un)}</em>`:''}</div><div class=\"l\">${esc(lb)}</div></div>`; }).join('')}</div></section>`;\n    case 'logo-wall': { const L=D.logos.filter(l=>l&&l.fileUrl&&l.publico!==false); const row=L.map(l=>`<img src=\"${esc(l.fileUrl)}\" alt=\"${esc(l.label||l.name||'')}\" loading=\"lazy\"/>`).join(''); return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-logowall stag\"><div class=\"d-mq\">${row}${row}</div></div></section>`; }\n    case 'split statement': return `<section class=\"d-sec d-tese\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}</section>`;\n    case 'two-column': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-faces stag\"><div class=\"d-face\"><div class=\"tag\">${t('twocol_tag1')}</div><h3>${t('twocol_h1')}</h3><p>${t('twocol_p1')}</p></div><div class=\"d-face plat\"><div class=\"tag\">${t('twocol_tag2')}</div><h3>${t('twocol_h2')}</h3><p>${t('twocol_p2')}</p></div></div></section>`;\n    case 'runtime triad': { const steps=[{n:'01',h:t('st1h'),p:t('st1p')},{n:'02',h:t('st2h'),p:t('st2p')},{n:'03',h:t('st3h'),p:t('st3p')}]; return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-flow stag\">${steps.map(x=>`<div class=\"d-step\"><div class=\"d-node\"></div><div class=\"n\">${x.n}</div><h4>${x.h}</h4><p>${x.p}</p></div>`).join('')}</div><div class=\"d-rts stag\">${D.rts.map(r=>`<span class=\"d-rt\" style=\"--accent:${esc(r.accent||'#3A7BFF')}\"><b>${esc(r.name)}</b> · ${esc(pick(r,'papel'))}</span>`).join('')}</div></section>`; }\n    case 'industry grid 3x3': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-inds stag\">${D.inds.map(i=>{const nm=lang==='pt'?(i.name_pt||''):(i['name_'+lang]||i.name_pt||'');const alr=(lang==='pt'?i.alavancas:(i['alavancas_'+lang]||i.alavancas));const al=Array.isArray(alr)?(alr.find(x=>!/\\[PH\\]/.test(x))||alr[0]||''):'';const hue=esc(i.hue||'#3A7BFF');return `<div class=\"d-ind\" data-nav data-href=\"/industrias/${esc(i.slug)}\" style=\"--accent:${hue}\">${isoTile(hue)}<div class=\"name\"><span class=\"chip\" style=\"background:${hue}\"></span>${esc(nm)}</div><div class=\"dor\">${esc(pick(i,'dor'))}</div>${pick(i,'construimos')?`<div class=\"build\">${esc(pick(i,'construimos'))}</div>`:''}<div class=\"lev\">${clean(al)}</div></div>`;}).join('')}</div></section>`;\n    case 'case carousel': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-carslot stag\">${d2.render('www@nUYyYfWeNHEK6YeaD5kcd',{},{key:'homeCasos',style:'display:block;width:100%;height:640px'})}</div></section>`;\n    case 'product grid 4x2': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-prods stag\">${D.prods.map(p=>`<div class=\"d-prod\"><div class=\"pn\"><span class=\"chip\" style=\"background:${esc(p.accent||'#3A7BFF')}\"></span>${esc(p.name)}${p.status==='em-breve'?`<span class=\"soon\">${t('soon')}</span>`:''}</div><div class=\"pt\">${esc(pick(p,'tagline'))}</div></div>`).join('')}</div>${cta}</section>`;\n    case 'data-framework diagram': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-df stag\"><div class=\"d-dfcard\"><div class=\"lab\">${t('df1lab')}</div><h4>${t('df1h')}</h4><p>${t('df1p')}</p></div><div class=\"d-dfcard mid\"><div class=\"lab\">${t('df2lab')}</div><h4>${t('df2h')}</h4><p>${t('df2p')}</p></div><div class=\"d-dfcard\"><div class=\"lab\">${t('df3lab')}</div><h4>${t('df3h')}</h4><p>${t('df3p')}</p></div></div></section>`;\n    case 'code / mcp': return `<section class=\"d-sec\" data-reveal>${eb}<h2 class=\"d-head stag\">${esc(hlv)}</h2>${sub}<div class=\"d-slots stag\"><div class=\"d-slot\"><div class=\"st\">${t('mcp1st')}</div><h4>${t('mcp1h')}</h4><p>${t('mcp1p')}</p></div><div class=\"d-slot\"><div class=\"st\">${t('mcp2st')}</div><h4>${t('mcp2h')}</h4><p>${t('mcp2p')}</p></div></div></section>`;\n    case 'closing cta': return `<section class=\"d-sec d-close\" data-reveal>${ebv?`<div class=\"d-eyebrow stag\" style=\"justify-content:center\"><span class=\"k\"></span>${esc(ebv)}</div>`:''}<h2 class=\"d-head big stag\">${esc(hlv)}</h2>${sub}<div class=\"d-cta stag\"><button class=\"d-btn\" data-nav data-href=\"${esc(s.cta_href||'/consultoria')}\">${esc(clv)||t('btn_live')} →</button> <button class=\"d-btn\" data-nav data-href=\"/plataforma\" style=\"background:transparent;color:var(--ink-hi);border:1px solid var(--hairline);margin-left:10px\">${t('btn_plat')} →</button></div></section>`;\n    default: return '';\n  }\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\n\nfunction HOME_T(){ return {\n  pt:{\n    twocol_tag1:'Com você', twocol_h1:'Do seu lado, no seu problema.', twocol_p1:'Um time entra no seu contexto e escreve. O que se escreve já nasce rodando.',\n    twocol_tag2:'A runtime', twocol_h2:'Uma runtime, não um stack.', twocol_p2:'Data² é a runtime. UI, Rush, Connect, Domain e o resto são componentes dela — o que segura o sistema em produção.',\n    st1h:'Embarcamos no seu time', st1p:'Um squad sênior entra no seu problema em dias, não meses — começando pelo resultado de negócio.',\n    st2h:'Entregamos em produção', st2p:'Em 2 a 4 semanas o sistema está rodando de verdade. Não é protótipo, não é slide.',\n    st3h:'No ar, de verdade.', st3p:'Endereço próprio, tráfego real. Não para quando a demo acaba — fica rodando em produção.',\n    df1lab:'Origem · DataSource', df1h:'Tabela, API ou IA', df1p:'De onde o dado vem é detalhe de implementação — tabela própria, API externa ou resposta de IA.',\n    df2lab:'Acesso · DataSet', df2h:'Uma só interface', df2p:'Busca semântica, filtro e agregação sobre qualquer origem. A UI fala com o DataSet, nunca com a origem.',\n    df3lab:'Governança', df3h:'Governado por construção', df3p:'Nada sai do seu domínio. Acesso por papel, trilha de auditoria e regra explícita — por construção.',\n    mcp1st:'Do seu lado', mcp1h:'Do seu lado, não no seu lugar.', mcp1p:'O mesmo builder de sempre. Gente e agentes na mesma superfície — você no comando.',\n    mcp2st:'Prova viva', mcp2h:'Você está dentro da prova.', mcp2p:'Este site roda na própria Data². Sem ensaio, sem mock.',\n    btn_plat:'Ver a plataforma', soon:'em breve', btn_live:'Botar no ar'\n  },\n  en:{\n    twocol_tag1:'With you', twocol_h1:'At your side, on your problem.', twocol_p1:'A team steps into your context and writes. What gets written is born running.',\n    twocol_tag2:'The runtime', twocol_h2:'One runtime, not a stack.', twocol_p2:'Data² is the runtime. UI, Rush, Connect, Domain and the rest are its components — what holds the system in production.',\n    st1h:'We join your team', st1p:'A senior squad lands on your problem in days, not months — starting from the business result.',\n    st2h:'We deliver to production', st2p:'In 2 to 4 weeks the system is genuinely running. Not a prototype, not a slide.',\n    st3h:'Live, for real.', st3p:'Its own address, real traffic. It does not stop when the demo ends — it keeps running in production.',\n    df1lab:'Source · DataSource', df1h:'Table, API or AI', df1p:'Where the data comes from is an implementation detail — your own table, an external API or an AI answer.',\n    df2lab:'Access · DataSet', df2h:'One single interface', df2p:'Semantic search, filtering and aggregation over any source. The UI talks to the DataSet, never to the source.',\n    df3lab:'Governance', df3h:'Governed by construction', df3p:'Nothing leaves your domain. Role-based access, an audit trail and explicit rules — by construction.',\n    mcp1st:'At your side', mcp1h:'At your side, not in your place.', mcp1p:'The same builder as always. People and agents on the same surface — you in command.',\n    mcp2st:'Living proof', mcp2h:'You are inside the proof.', mcp2p:'This site runs on Data² itself. No rehearsal, no mock.',\n    btn_plat:'See the platform', soon:'coming soon', btn_live:'Take it live'\n  },\n  es:{\n    twocol_tag1:'Contigo', twocol_h1:'A tu lado, en tu problema.', twocol_p1:'Un equipo entra en tu contexto y escribe. Lo que se escribe ya nace funcionando.',\n    twocol_tag2:'El runtime', twocol_h2:'Un runtime, no un stack.', twocol_p2:'Data² es el runtime. UI, Rush, Connect, Domain y el resto son componentes de él — lo que sostiene el sistema en producción.',\n    st1h:'Nos sumamos a tu equipo', st1p:'Un squad senior entra en tu problema en días, no meses — empezando por el resultado de negocio.',\n    st2h:'Entregamos en producción', st2p:'En 2 a 4 semanas el sistema está funcionando de verdad. No es un prototipo, no es una diapositiva.',\n    st3h:'Al aire, de verdad.', st3p:'Dirección propia, tráfico real. No se detiene cuando termina la demo — sigue funcionando en producción.',\n    df1lab:'Origen · DataSource', df1h:'Tabla, API o IA', df1p:'De dónde viene el dato es un detalle de implementación — tabla propia, API externa o respuesta de IA.',\n    df2lab:'Acceso · DataSet', df2h:'Una sola interfaz', df2p:'Búsqueda semántica, filtro y agregación sobre cualquier origen. La UI habla con el DataSet, nunca con el origen.',\n    df3lab:'Gobernanza', df3h:'Gobernado por construcción', df3p:'Nada sale de tu dominio. Acceso por rol, traza de auditoría y regla explícita — por construcción.',\n    mcp1st:'A tu lado', mcp1h:'A tu lado, no en tu lugar.', mcp1p:'El mismo builder de siempre. Personas y agentes en la misma superficie — tú al mando.',\n    mcp2st:'Prueba viva', mcp2h:'Estás dentro de la prueba.', mcp2p:'Este sitio corre sobre la propia Data². Sin ensayo, sin mock.',\n    btn_plat:'Ver la plataforma', soon:'muy pronto', btn_live:'Ponerlo al aire'\n  }\n}; }\n"}}}}}}}},{"_id":"6a7b41f0a0a162269e80e2a3","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-builder","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(72% 78% at 50% 40%, #0d1017 0%, #090b10 46%, #06070a 100%);\n  color:#ECEFEC; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:44px 48px; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.28em; text-transform:uppercase; color:#7f8aa0; display:flex; align-items:center; gap:8px; }\n.eyebrow .d{ width:8px;height:8px;border-radius:50%;background:#48FAA1;box-shadow:0 0 12px 2px #48FAA1; }\n.h{ font-size:clamp(24px,3vw,40px); font-weight:500; letter-spacing:-.02em; margin:12px 0 0; color:#F4F6F8; text-align:center; }\n.h .g{ color:#7f8590; }\n.stagewrap{ position:relative; width:100%; max-width:820px; margin-top:26px; }\n.canvasui{ position:relative; width:100%; aspect-ratio:16/8.6; border-radius:16px; border:1px solid rgba(255,255,255,.1); background:\n  linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px) 0 0/26px 26px,\n  linear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px) 0 0/26px 26px,\n  linear-gradient(180deg,#0f1319,#0b0e13); overflow:hidden; box-shadow:0 30px 80px rgba(0,0,0,.5); }\n.blk{ position:absolute; border-radius:8px; border:1px solid; opacity:0; transform:scale(.9); transition:opacity .4s, transform .45s cubic-bezier(.34,1.6,.6,1); display:flex; align-items:center; padding:0 10px; }\n.blk.in{ opacity:1; transform:none; }\n.blk .bl{ font-family:ui-monospace,Menlo,monospace; font-size:9.5px; letter-spacing:.08em; text-transform:uppercase; opacity:.9; }\n.blk .rows{ position:absolute; left:10px; right:10px; top:26px; display:flex; flex-direction:column; gap:5px; }\n.blk .rows i{ height:5px; border-radius:3px; background:rgba(255,255,255,.14); display:block; }\n.blk .bars{ position:absolute; left:12px; right:12px; bottom:12px; display:flex; align-items:flex-end; gap:5px; height:44%; }\n.blk .bars i{ flex:1; border-radius:2px 2px 0 0; }\n.cursor{ position:absolute; z-index:6; left:0; top:0; pointer-events:none; transition:transform 1s cubic-bezier(.4,0,.2,1); will-change:transform; }\n.cursor svg{ display:block; filter:drop-shadow(0 2px 4px rgba(0,0,0,.5)); }\n.cursor .tag{ position:absolute; left:14px; top:12px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.06em; padding:2px 7px; border-radius:5px; white-space:nowrap; color:#06070a; font-weight:600; }\n.drop{ position:absolute; border-radius:50%; border:1.5px solid; opacity:0; z-index:5; pointer-events:none; }\n.drop.go{ animation:drp .5s ease-out; } @keyframes drp{ from{opacity:.7;transform:scale(.2)} to{opacity:0;transform:scale(1.6)} }\n.badge{ position:absolute; top:12px; right:12px; z-index:7; display:flex; align-items:center; gap:6px; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.1em; color:#66FA48; background:rgba(102,250,72,.1); border:1px solid rgba(102,250,72,.4); border-radius:20px; padding:4px 10px; opacity:0; transform:translateY(-6px); transition:.4s cubic-bezier(.34,1.6,.6,1); }\n.badge.on{ opacity:1; transform:none; } .badge .p{ width:7px;height:7px;border-radius:50%;background:#66FA48;box-shadow:0 0 10px 2px #66FA48;animation:pp 1.4s ease-in-out infinite } @keyframes pp{50%{opacity:.4;transform:scale(.7)}}\n.legend{ margin-top:20px; display:flex; gap:22px; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#8a94a4; }\n.legend .lg{ display:flex; align-items:center; gap:7px; } .legend .lg i{ width:9px;height:9px;border-radius:50%; }\n.cap{ margin-top:14px; font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#7f8590; text-align:center; } .cap b{ color:#ECEFEC; font-weight:400; }\n@media (max-width:900px){ :host{ height:auto } .st{ min-height:0; height:auto } }\n@media (max-width:640px){ .st{ padding:34px 20px } .legend{ gap:14px; flex-wrap:wrap; justify-content:center } }\n@media (prefers-reduced-motion:reduce){ .cursor{ transition:none } .badge .p{ animation:none } }\n`,\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = XB_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<div class=\"eyebrow\"><span class=\"d\"></span> Agent-native</div>'+\n        '<div class=\"h\">'+t('h1')+' <span class=\"g\">'+t('h2')+'</span></div>'+\n        '<div class=\"stagewrap\">'+\n          '<div class=\"canvasui\" data-ui>'+\n            '<div class=\"badge\" data-badge><span class=\"p\"></span> '+t('badge')+'</div>'+\n          '</div>'+\n        '</div>'+\n        '<div class=\"legend\">'+\n          '<span class=\"lg\"><i style=\"background:#4866FA\"></i> '+t('lg_you')+'</span>'+\n          '<span class=\"lg\"><i style=\"background:#48FAFA\"></i> '+t('lg_team')+'</span>'+\n          '<span class=\"lg\"><i style=\"background:#FA48DC\"></i> '+t('lg_agent')+'</span>'+\n        '</div>'+\n        '<div class=\"cap\"><b>'+t('cap_b')+'</b> '+t('cap_r')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){ xbInit(d2, root); },\n  updated(d2, root){ xbInit(d2, root); }\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction XB_T(){ return {\n pt:{ h1:'Feito para gente.', h2:'Aberto a agentes.', badge:'no ar', lg_you:'você', lg_team:'seu time', lg_agent:'agente',\n  cap_b:'Vocês constroem — juntos.', cap_r:'O agente é reforço, não substituto.',\n  blk_top:'Topo', blk_menu:'Menu', blk_chart:'Gráfico', blk_list:'Lista', blk_action:'Ação',\n  cur_you:'você', cur_team:'time', cur_agent:'agente' },\n en:{ h1:'Made for people.', h2:'Open to agents.', badge:'live', lg_you:'you', lg_team:'your team', lg_agent:'agent',\n  cap_b:'You build — together.', cap_r:'The agent is reinforcement, not replacement.',\n  blk_top:'Header', blk_menu:'Menu', blk_chart:'Chart', blk_list:'List', blk_action:'Action',\n  cur_you:'you', cur_team:'team', cur_agent:'agent' },\n es:{ h1:'Hecho para personas.', h2:'Abierto a agentes.', badge:'en el aire', lg_you:'tú', lg_team:'tu equipo', lg_agent:'agente',\n  cap_b:'Construyen — juntos.', cap_r:'El agente es refuerzo, no sustituto.',\n  blk_top:'Encabezado', blk_menu:'Menú', blk_chart:'Gráfico', blk_list:'Lista', blk_action:'Acción',\n  cur_you:'tú', cur_team:'equipo', cur_agent:'agente' }\n}; }\nfunction xbInit(d2, root){\n    var st=root.querySelector('[data-st]'), ui=root.querySelector('[data-ui]'), badge=root.querySelector('[data-badge]');\n    if(!st||!ui||!badge) return;\n    if(ui.getAttribute('data-built')) return; ui.setAttribute('data-built','1');\n    var lang = D2LANG(d2);\n    var TT = XB_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    // blocks forming a mini-app UI (positions in %)\n    var BLK=[\n      {x:4,y:6,w:92,h:15,col:'#4866FA',label:t('blk_top'),kind:'bar'},\n      {x:4,y:26,w:26,h:66,col:'#48FAA1',label:t('blk_menu'),kind:'rows'},\n      {x:33,y:26,w:39,h:40,col:'#FA48DC',label:t('blk_chart'),kind:'bars'},\n      {x:74,y:26,w:22,h:66,col:'#FADC48',label:t('blk_list'),kind:'rows'},\n      {x:33,y:70,w:39,h:22,col:'#48FAFA',label:t('blk_action'),kind:'bar'}\n    ];\n    // cursors: 2 human + 1 agent\n    var CUR=[\n      {col:'#4866FA',tag:t('cur_you'),tc:'#cfe0ff'},\n      {col:'#48FAFA',tag:t('cur_team'),tc:'#bff6f6'},\n      {col:'#FA48DC',tag:t('cur_agent'),tc:'#ffd8f4'}\n    ];\n    var curEls=[], timers=[];\n    function clr(){ timers.forEach(clearTimeout); timers=[]; }\n    function rect(){ return ui.getBoundingClientRect(); }\n    function px(pct, dim){ var r=rect(); return (pct/100)*(dim==='w'?r.width:r.height); }\n\n    // build block elements\n    var blkEls=[];\n    function buildBlocks(){ BLK.forEach(function(b){ var el=document.createElement('div'); el.className='blk'; el.style.left=b.x+'%'; el.style.top=b.y+'%'; el.style.width=b.w+'%'; el.style.height=b.h+'%';\n      el.style.background='linear-gradient(180deg,'+hexA(b.col,.16)+','+hexA(b.col,.05)+')'; el.style.borderColor=hexA(b.col,.5);\n      var inner='<span class=\"bl\" style=\"color:'+b.col+'\">'+b.label+'</span>';\n      if(b.kind==='rows') inner+='<div class=\"rows\"><i style=\"width:80%\"></i><i style=\"width:60%\"></i><i style=\"width:72%\"></i><i style=\"width:50%\"></i></div>';\n      if(b.kind==='bars'){ var bars=''; [40,70,55,85,62,92].forEach(function(h){ bars+='<i style=\"height:'+h+'%;background:'+b.col+';opacity:.8\"></i>'; }); inner+='<div class=\"bars\">'+bars+'</div>'; }\n      el.innerHTML=inner; ui.appendChild(el); blkEls.push(el); }); }\n    function hexA(h,a){ return 'rgba('+parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16)+','+a+')'; }\n\n    function buildCursors(){ CUR.forEach(function(c){ var el=document.createElement('div'); el.className='cursor';\n      el.innerHTML='<svg width=\"20\" height=\"22\" viewBox=\"0 0 20 22\" fill=\"none\"><path d=\"M2 2 L2 17 L6.5 13 L9.5 20 L12 19 L9 12 L15 12 Z\" fill=\"'+c.col+'\" stroke=\"#06070a\" stroke-width=\"1\"/></svg><span class=\"tag\" style=\"background:'+c.col+';color:'+c.tc+'\">'+c.tag+'</span>';\n      ui.appendChild(el); curEls.push(el); }); }\n    function moveCur(i, xPct, yPct){ var r=rect(); curEls[i].style.transform='translate('+((xPct/100)*r.width)+'px,'+((yPct/100)*r.height)+'px)'; }\n\n    function reset(){ blkEls.forEach(function(e){ e.classList.remove('in'); }); badge.classList.remove('on'); }\n\n    function cycle(){ if(!st.isConnected)return; clr(); reset();\n      // park cursors at edges\n      moveCur(0, 8, 90); moveCur(1, 90, 88); moveCur(2, 50, 4);\n      // assignment: which cursor places which block, staggered\n      var plan=[ {b:0,c:0,t:500}, {b:2,c:2,t:900}, {b:1,c:1,t:1500}, {b:3,c:0,t:2100}, {b:4,c:2,t:2700} ];\n      plan.forEach(function(p){ var b=BLK[p.b];\n        timers.push(setTimeout(function(){ if(!st.isConnected)return; moveCur(p.c, b.x+b.w/2, b.y+b.h/2); },p.t)); // move to block center\n        timers.push(setTimeout(function(){ if(!st.isConnected)return; blkEls[p.b].classList.add('in'); dropAt(b.x+b.w/2, b.y+b.h/2, b.col); },p.t+1000)); // place after arrival\n      });\n      timers.push(setTimeout(function(){ if(!st.isConnected)return; badge.classList.add('on'); moveCur(0,8,90); moveCur(1,90,88); moveCur(2,50,4); },4000));\n      timers.push(setTimeout(cycle, 6800));\n    }\n    function dropAt(xPct,yPct,col){ var r=rect(); var d=document.createElement('div'); d.className='drop'; d.style.borderColor=col; var sz=54; d.style.width=sz+'px'; d.style.height=sz+'px'; d.style.left=((xPct/100)*r.width-sz/2)+'px'; d.style.top=((yPct/100)*r.height-sz/2)+'px'; ui.appendChild(d); void d.offsetWidth; d.classList.add('go'); timers.push(setTimeout(function(){ if(d.parentNode)d.remove(); },520)); }\n\n    buildBlocks(); buildCursors();\n    if(reduce){ blkEls.forEach(function(e){e.classList.add('in');}); badge.classList.add('on'); }\n    else {\n      var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ clr(); cycle(); } else { clr(); } }); },{threshold:.15});\n      io.observe(st);\n    }\n    d2.on(window,'resize',function(){ /* percentages handle layout; reposition parked cursors */ if(!st.isConnected)return; });\n}\n"}}}}}}}},{"_id":"6a7b42510c3e9170c50cdab4","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"condutor","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; }\n.sec{ position:relative; width:100%; background:#060708; color:#ECEFEC; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; padding:clamp(64px,10vh,120px) clamp(20px,5vw,80px); overflow:hidden; }\n.inner{ position:relative; max-width:1000px; margin:0 auto; z-index:2; }\n.glow{ position:absolute; top:-10%; left:50%; transform:translateX(-50%); width:640px; height:420px; border-radius:50%; background:radial-gradient(circle,var(--gl,rgba(72,250,161,.14)),transparent 68%); filter:blur(14px); pointer-events:none; z-index:1; transition:background .5s; }\n.eb{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.26em; text-transform:uppercase; color:#6b7178; display:flex; align-items:center; gap:9px; }\n.eb::before{ content:''; width:8px;height:8px;border-radius:50%;background:var(--ac,#48FAA1);box-shadow:0 0 12px 2px var(--ac,#48FAA1); transition:background .4s, box-shadow .4s; }\nh2.h{ font-size:clamp(28px,3.6vw,52px); font-weight:500; letter-spacing:-.025em; margin:14px 0 0; color:#F4F6F8; }\n.tabs{ margin-top:28px; display:inline-flex; gap:4px; border:1px solid rgba(255,255,255,.12); border-radius:12px; padding:4px; }\n.tab{ font-family:ui-monospace,Menlo,monospace; font-size:13px; letter-spacing:.04em; padding:10px 18px; border:0; background:transparent; color:#8a9199; border-radius:9px; cursor:pointer; transition:.22s; }\n.tab:hover{ color:#ECEFEC; }\n.tab.on{ color:#06070a; background:var(--ac,#48FAA1); font-weight:600; }\n.panel{ margin-top:30px; min-height:150px; }\n.pt{ font-size:clamp(22px,2.6vw,34px); font-weight:500; letter-spacing:-.02em; color:#F4F6F8; }\n.pd{ margin-top:14px; font-size:clamp(15px,1.6vw,19px); line-height:1.5; color:#a7adb5; max-width:52ch; }\n.pcta{ margin-top:22px; display:inline-flex; align-items:center; gap:9px; font-family:ui-monospace,Menlo,monospace; font-size:14px; color:var(--ac,#48FAA1); cursor:pointer; border:1px solid var(--acb,rgba(72,250,161,.4)); border-radius:11px; padding:12px 18px; transition:.22s; text-decoration:none; }\n.pcta:hover{ background:var(--acs,rgba(72,250,161,.08)); }\n.fade-enter{ opacity:0; transform:translateY(8px); } .fade-in{ opacity:1; transform:none; transition:opacity .32s, transform .32s cubic-bezier(.22,1,.36,1); }\n@media(max-width:560px){ .tabs{ display:flex; width:100%; } .tab{ flex:1; padding:10px 8px; } }\n`,\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = CO_T(); var t = function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    return ''+\n      '<div class=\"sec\" data-sec>'+\n        '<div class=\"glow\" data-glow></div>'+\n        '<div class=\"inner\">'+\n          '<div class=\"eb\" data-eb>'+t('eb')+'</div>'+\n          '<h2 class=\"h\">'+t('h')+'</h2>'+\n          '<div class=\"tabs\" data-tabs>'+\n            '<button class=\"tab on\" data-l=\"neg\">'+t('tab_neg')+'</button>'+\n            '<button class=\"tab\" data-l=\"dev\">'+t('tab_dev')+'</button>'+\n            '<button class=\"tab\" data-l=\"voce\">'+t('tab_voce')+'</button>'+\n          '</div>'+\n          '<div class=\"panel\" data-panel>'+coPanelHTML(coLens(t,'neg'))+'</div>'+\n        '</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    d2.on('[data-l]','click',function(e){ var b=e.target.closest('[data-l]'); if(!b) return; coShow(d2, root, b.getAttribute('data-l')); });\n    // re-bind nav inside this shadow root (shell's delegated handler can't cross the boundary)\n    d2.on('[data-nav]','click',function(e){ var a=e.target.closest('[data-nav]'); if(!a)return; e.preventDefault(); var h=a.getAttribute('data-href'); if(!h)return; try{ d2.state.path=h; }catch(_){ } try{ d2.router('site_router').goTo(h); }catch(_){ } });\n  }\n}\n\nfunction D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CO_T(){ return {\n pt:{ eb:'Escolha a sua lente', h:'A mesma runtime, pela sua lente.', tab_neg:'Para negócios', tab_dev:'Para devs', tab_voce:'Para fundadores',\n  neg_t:'O resultado.', neg_d:'Contato resolvido sem fila, centavo conciliado, decisão com registro — em produção em semanas.', neg_cta:'Ver os resultados',\n  dev_t:'A runtime.', dev_d:'Data Runtime No Code: dados, telas, lógica, eventos, integrações e IA numa linguagem só. Escrito — não embrulhado.', dev_cta:'Ver a plataforma',\n  voce_t:'O que estava na sua cabeça — no ar.', voce_d:'Você descreve a necessidade; ela vira software rodando. Sem o meio do caminho.', voce_cta:'Começar' },\n en:{ eb:'Pick your lens', h:'The same runtime, through your lens.', tab_neg:'For business', tab_dev:'For devs', tab_voce:'For founders',\n  neg_t:'The outcome.', neg_d:'Contacts resolved without a queue, every cent reconciled, decisions on the record — in production in weeks.', neg_cta:'See the results',\n  dev_t:'The runtime.', dev_d:'Data Runtime No Code: data, screens, logic, events, integrations and AI in one language. Written — not wrapped.', dev_cta:'See the platform',\n  voce_t:'What was in your head — live.', voce_d:'You describe the necessity; it becomes running software. Without the long middle.', voce_cta:'Start' },\n es:{ eb:'Elige tu lente', h:'El mismo runtime, por tu lente.', tab_neg:'Para negocios', tab_dev:'Para devs', tab_voce:'Para fundadores',\n  neg_t:'El resultado.', neg_d:'Contacto resuelto sin fila, centavo conciliado, decisión con registro — en producción en semanas.', neg_cta:'Ver los resultados',\n  dev_t:'El runtime.', dev_d:'Data Runtime No Code: datos, pantallas, lógica, eventos, integraciones e IA en un solo lenguaje. Escrito — no envuelto.', dev_cta:'Ver la plataforma',\n  voce_t:'Lo que estaba en tu cabeza — en el aire.', voce_d:'Describes la necesidad; se vuelve software funcionando. Sin el largo camino del medio.', voce_cta:'Empezar' }\n}; }\nfunction coLens(t, l){\n  var skins={\n    neg:{ ac:'#48FAA1', gl:'rgba(72,250,161,.14)', acb:'rgba(72,250,161,.4)', acs:'rgba(72,250,161,.08)', href:'/casos' },\n    dev:{ ac:'#4866FA', gl:'rgba(72,102,250,.16)', acb:'rgba(72,102,250,.45)', acs:'rgba(72,102,250,.1)', href:'/plataforma/data2-lang' },\n    voce:{ ac:'#FA48DC', gl:'rgba(250,72,220,.14)', acb:'rgba(250,72,220,.42)', acs:'rgba(250,72,220,.09)', href:'/consultoria' }\n  };\n  var key=(l==='dev'||l==='voce')?l:'neg'; var s=skins[key];\n  return { ac:s.ac, gl:s.gl, acb:s.acb, acs:s.acs, href:s.href, t:t(key+'_t'), d:t(key+'_d'), cta:t(key+'_cta') };\n}\nfunction coPanelHTML(x){\n  return '<div class=\"pt\">'+x.t+'</div><div class=\"pd\">'+x.d+'</div><a class=\"pcta\" data-nav data-href=\"'+x.href+'\">'+x.cta+' <span>→</span></a>';\n}\nfunction coShow(d2, root, l){\n  var lang=D2LANG(d2);\n  var TT=CO_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n  var sec=root.querySelector('[data-sec]'), panel=root.querySelector('[data-panel]'), glow=root.querySelector('[data-glow]');\n  if(!sec||!panel) return;\n  var x=coLens(t, l);\n  sec.style.setProperty('--ac',x.ac); sec.style.setProperty('--acb',x.acb); sec.style.setProperty('--acs',x.acs);\n  if(glow) glow.style.setProperty('--gl', x.gl);\n  Array.prototype.slice.call(root.querySelectorAll('.tab')).forEach(function(b){ b.classList.toggle('on', b.getAttribute('data-l')===l); });\n  panel.innerHTML=coPanelHTML(x);\n  var pt=panel.querySelector('.pt'), pd=panel.querySelector('.pd'), c=panel.querySelector('.pcta');\n  [pt,pd,c].forEach(function(e,i){ if(!e)return; e.classList.add('fade-enter'); setTimeout(function(){ if(e.isConnected){ e.classList.remove('fade-enter'); e.classList.add('fade-in'); } }, 20+i*50); });\n}"}}}}}}}},{"_id":"6a7b45150c3e9170c50ce0cd","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-registry","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COMP_T(){ return {\npt:{hl1:'Seus dados. Vivos e organizados.',hl2:'Em escala.',sub:'Cadastro, informação e transação — organizados sozinhos, buscáveis por significado. Escolha uma capacidade: ela acontece ao vivo.',seed:'registry · dados<br>registros · <b>milhões</b><br>busca · <b>por significado</b>',pay:'Milhões de registros · <b>em ordem</b> · achados pelo significado',c_vivo_t:'Dados vivos',c_vivo_d:'sempre atualizados',c_vivo_s:'realtime',c_tipado_t:'Em ordem',c_tipado_d:'data é data, dinheiro é dinheiro — errado não entra',c_tipado_s:'schema nativo',c_busca_t:'Busca por significado',c_busca_d:'encontra pelo sentido',c_busca_s:'sem palavra exata',c_escala_t:'Escala',c_escala_d:'milhões, sem suar',c_escala_s:'particionado',c_audit_t:'Auditável',c_audit_d:'quem mudou o quê',c_audit_s:'trilha',ty_cad:'cadastro',ty_tx:'transação',ty_ev:'evento',ty_doc:'doc',dv_label:'pedidos',dv_tag:'+realtime',es_small:'registros · particionado',demo_tipado:'<div class=\"rec\"><div><span class=\"k\">nome</span> <span class=\"v\">Ana Duarte</span> <span class=\"t\">string ✓</span></div><div><span class=\"k\">total</span> <span class=\"v\">R$ 1.240,00</span> <span class=\"t\">money ✓</span></div><div><span class=\"k\">criado</span> <span class=\"v\">2026-08-11</span> <span class=\"t\">date ✓</span></div><div><span class=\"k\">ativo</span> <span class=\"v\">true</span> <span class=\"t\">bool ✓</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ 4 campos validados no schema</div></div>',demo_busca:'<div class=\"q\">buscar: \"cliente que reclamou de entrega\"<span class=\"cur\"></span></div><div class=\"hit\" data-h1>▸ ticket #8421 · atraso no envio</div><div class=\"hit\" data-h2>▸ ticket #7756 · \"cadê meu pedido\"</div><div class=\"hit\" data-h3>▸ ticket #9012 · reembolso por demora</div>',demo_audit:'<div class=\"rec\"><div><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> criou <span class=\"t\">pedido 8421</span></div><div><span class=\"k\">14:07</span> <span class=\"v\">sistema</span> mudou status <span class=\"t\">→ pago</span></div><div><span class=\"k\">14:31</span> <span class=\"v\">Rui</span> editou <span class=\"t\">endereço</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ trilha completa · quem, quando, o quê</div></div>'},\nen:{hl1:'Your data. Live and in order.',hl2:'At scale.',sub:'Records, information and transactions — organized on their own, searchable by meaning. Pick a capability: it happens live.',seed:'registry · data<br>records · <b>millions</b><br>search · <b>by meaning</b>',pay:'Millions of records · <b>in order</b> · found by meaning',c_vivo_t:'Live data',c_vivo_d:'always up to date',c_vivo_s:'realtime',c_tipado_t:'In order',c_tipado_d:'a date is a date, money is money — wrong data never gets in',c_tipado_s:'native schema',c_busca_t:'Search by meaning',c_busca_d:'finds by meaning',c_busca_s:'no exact keywords',c_escala_t:'Scale',c_escala_d:'millions, effortlessly',c_escala_s:'partitioned',c_audit_t:'Auditable',c_audit_d:'who changed what',c_audit_s:'trail',ty_cad:'record',ty_tx:'transaction',ty_ev:'event',ty_doc:'doc',dv_label:'orders',dv_tag:'+realtime',es_small:'records · partitioned',demo_tipado:'<div class=\"rec\"><div><span class=\"k\">name</span> <span class=\"v\">Ana Duarte</span> <span class=\"t\">string ✓</span></div><div><span class=\"k\">total</span> <span class=\"v\">R$ 1.240,00</span> <span class=\"t\">money ✓</span></div><div><span class=\"k\">created</span> <span class=\"v\">2026-08-11</span> <span class=\"t\">date ✓</span></div><div><span class=\"k\">active</span> <span class=\"v\">true</span> <span class=\"t\">bool ✓</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ 4 fields validated against the schema</div></div>',demo_busca:'<div class=\"q\">search: \"customer who complained about delivery\"<span class=\"cur\"></span></div><div class=\"hit\" data-h1>▸ ticket #8421 · shipping delay</div><div class=\"hit\" data-h2>▸ ticket #7756 · \"where\\'s my order\"</div><div class=\"hit\" data-h3>▸ ticket #9012 · refund for the delay</div>',demo_audit:'<div class=\"rec\"><div><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> created <span class=\"t\">order 8421</span></div><div><span class=\"k\">14:07</span> <span class=\"v\">system</span> changed status <span class=\"t\">→ paid</span></div><div><span class=\"k\">14:31</span> <span class=\"v\">Rui</span> edited <span class=\"t\">address</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ full trail · who, when, what</div></div>'},\nes:{hl1:'Tus datos. Vivos y organizados.',hl2:'A escala.',sub:'Registro, información y transacción — organizados solos, buscables por significado. Elige una capacidad: sucede en vivo.',seed:'registry · datos<br>registros · <b>millones</b><br>búsqueda · <b>por significado</b>',pay:'Millones de registros · <b>en orden</b> · encontrados por significado',c_vivo_t:'Datos vivos',c_vivo_d:'siempre actualizados',c_vivo_s:'realtime',c_tipado_t:'En orden',c_tipado_d:'fecha es fecha, dinero es dinero — lo errado no entra',c_tipado_s:'esquema nativo',c_busca_t:'Búsqueda por significado',c_busca_d:'encuentra por sentido',c_busca_s:'sin palabra exacta',c_escala_t:'Escala',c_escala_d:'millones, sin sudar',c_escala_s:'particionado',c_audit_t:'Auditable',c_audit_d:'quién cambió qué',c_audit_s:'traza',ty_cad:'registro',ty_tx:'transacción',ty_ev:'evento',ty_doc:'doc',dv_label:'pedidos',dv_tag:'+realtime',es_small:'registros · particionado',demo_tipado:'<div class=\"rec\"><div><span class=\"k\">nombre</span> <span class=\"v\">Ana Duarte</span> <span class=\"t\">string ✓</span></div><div><span class=\"k\">total</span> <span class=\"v\">R$ 1.240,00</span> <span class=\"t\">money ✓</span></div><div><span class=\"k\">creado</span> <span class=\"v\">2026-08-11</span> <span class=\"t\">date ✓</span></div><div><span class=\"k\">activo</span> <span class=\"v\">true</span> <span class=\"t\">bool ✓</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ 4 campos validados en el esquema</div></div>',demo_busca:'<div class=\"q\">buscar: \"cliente que se quejó de la entrega\"<span class=\"cur\"></span></div><div class=\"hit\" data-h1>▸ ticket #8421 · atraso en el envío</div><div class=\"hit\" data-h2>▸ ticket #7756 · \"¿dónde está mi pedido?\"</div><div class=\"hit\" data-h3>▸ ticket #9012 · reembolso por la demora</div>',demo_audit:'<div class=\"rec\"><div><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> creó <span class=\"t\">pedido 8421</span></div><div><span class=\"k\">14:07</span> <span class=\"v\">sistema</span> cambió estado <span class=\"t\">→ pagado</span></div><div><span class=\"k\">14:31</span> <span class=\"v\">Rui</span> editó <span class=\"t\">dirección</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ traza completa · quién, cuándo, qué</div></div>'}\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #1a0c0e 0%, #0d0709 46%, #070405 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:46%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#a8848a; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FA4848; box-shadow:0 0 12px 2px #FA4848; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8490; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a949c; max-width:40ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#564f52; line-height:1.7; }\n.seed b{ color:#e08a97; font-weight:400; font-variant-numeric:tabular-nums; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#d0788a; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n.dov{ position:absolute; inset:0; padding:18px; font-family:ui-monospace,Menlo,monospace; }\n.rec{ font-size:12.5px; line-height:1.7; }\n.rec .k{ color:#8a848c; } .rec .v{ color:#EDECEF; } .rec .t{ color:#F748A0; font-size:10px; }\n.chk{ opacity:0; transition:.3s; color:#66FA48; } .chk.on{ opacity:1; }\n.q{ font-size:13px; color:#EDECEF; } .q .cur{ display:inline-block; width:8px;height:15px;background:#FA4848;vertical-align:-2px;margin-left:1px;animation:bl 1s steps(2) infinite } @keyframes bl{50%{opacity:0}}\n.hit{ margin-top:10px; font-size:12px; color:#e8dce6; opacity:0; transform:translateY(6px); transition:.34s; } .hit.on{ opacity:1; transform:none; }\n.big{ position:absolute; left:0; right:0; top:50%; transform:translateY(-50%); text-align:center; font-size:clamp(30px,4vw,52px); color:#F4F2F6; font-variant-numeric:tabular-nums; letter-spacing:-.02em; } .big small{ display:block; font-size:11px; letter-spacing:.14em; color:#8a848c; text-transform:uppercase; margin-top:8px; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(250,72,72,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FA4848; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; } .fc.on .fs{ color:#d0788a; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#e08a97; }\n@media (max-width:1080px){ .st{ display:flex; flex-direction:column; min-height:0; height:auto; } .head{ position:relative; top:auto; left:auto; max-width:none; padding:34px 24px 0; } .seed{ display:none } canvas.core{ position:relative; }\n  .stage{ position:relative; width:auto; padding:0 24px; } .cards{ position:relative; bottom:auto; flex-wrap:wrap; margin-top:20px; } .fc{ max-width:none; flex:1 1 40%; border-bottom:1px solid rgba(255,255,255,.05); } .payoff{ position:relative; bottom:auto; margin:16px 0 30px; } }\n@media (prefers-reduced-motion:reduce){ .q .cur{ animation:none } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['vivo',t('c_vivo_t'),t('c_vivo_d'),t('c_vivo_s'),'M3 8a5 3 0 1010 0 5 3 0 10-10 0M3 8v4a5 3 0 0010 0V8'],\n      ['tipado',t('c_tipado_t'),t('c_tipado_d'),t('c_tipado_s'),'M3 4h10M3 8h7M3 12h9'],\n      ['busca',t('c_busca_t'),t('c_busca_d'),t('c_busca_s'),'M7 7a4 4 0 105 5M11 11l3 3'],\n      ['escala',t('c_escala_t'),t('c_escala_d'),t('c_escala_s'),'M2 13l3-4 3 2 4-7 2 4'],\n      ['auditavel',t('c_audit_t'),t('c_audit_d'),t('c_audit_s'),'M8 3v5l3 2M8 3a5 5 0 105 5']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Registry</div>'+\n          '<h1 class=\"h1\">'+t('hl1')+' <span class=\"g\">'+t('hl2')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('sub')+'</div></div>'+\n        '<div class=\"seed\">'+t('seed')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('c_vivo_t')+'</div>'+\n          '<div class=\"st-box\"><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#e08a97\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">'+t('pay')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), dov=root.querySelector('[data-dov]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1,R=1, mobile=false;\n    var TYPES=[['#FA4848',t('ty_cad')],['#F748A0',t('ty_tx')],['#FADC48',t('ty_ev')],['#48FAA1',t('ty_doc')]];\n    var N=224, pts=[];\n    function build(){ pts=[]; var perType=[0,0,0,0];\n      for(var i=0;i<N;i++){ var ty=i%TYPES.length; var k=perType[ty]++; pts.push({ ty:ty, k:k, ph:Math.random()*6.28, x:0,y:0, b:0.5 }); }\n      computeLayouts(); pts.forEach(function(p){ p.x=p.hx; p.y=p.hy; }); }\n    function computeLayouts(){ var perTypeCount=[0,0,0,0]; pts.forEach(function(p){ perTypeCount[p.ty]++; });\n      pts.forEach(function(p,i){\n        // home (loose organic spread)\n        var ha=(i*2.399), hr=R*0.07*Math.sqrt(i); p.hx=Math.cos(ha)*hr*1.3; p.hy=Math.sin(ha)*hr*1.3;\n        // tipado: 4 columns by type, packed grid within each\n        var colX=(p.ty-1.5)*R*0.46; var cols=4, cx=p.k%cols, cy=Math.floor(p.k/cols);\n        p.tipx=colX+(cx-1.5)*R*0.055; p.tipy=-R*0.66+cy*R*0.088;\n        // escala: dense phyllotaxis spiral\n        var ea=i*2.399, er=R*0.052*Math.sqrt(i); p.escx=Math.cos(ea)*er; p.escy=Math.sin(ea)*er;\n        // auditavel: chronological horizontal trail (3 lanes)\n        var lane=p.ty%3; p.audx=-R*0.86+(i/(N-1))*R*1.72; p.audy=(lane-1)*R*0.16+Math.sin(i*0.6)*R*0.02;\n      });\n    }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; mobile=W<=1080;\n      CBW=CBH=mobile?Math.min(W-48,420):560; CX=mobile?W/2:W*0.30; CY=mobile?CBH/2:Math.min(H*0.46,520);\n      if(mobile){ core.style.position='relative'; core.style.margin='18px auto 0'; core.style.left='auto'; core.style.top='auto'; if(head)head.style.left=''; if(seed)seed.style.right=''; }\n      else { core.style.position='absolute'; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); R=CBW/2;\n      if(!pts.length)build(); else computeLayouts(); }\n    layout(); d2.on(window,'resize',layout);\n\n    var mode='vivo', mx=9999,my=0,hasM=false,energy=0,t0=performance.now(),run=true,raf=null;\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); mx=(e.clientX-r.left)-CBW/2; my=(e.clientY-r.top)-CBH/2; hasM=true; });\n    d2.on(st,'pointerleave',function(){ hasM=false; });\n\n    function target(p,i,tt){\n      if(mode==='vivo'){ return [p.hx+Math.cos(tt*0.5+p.ph)*R*0.05, p.hy+Math.sin(tt*0.5+p.ph)*R*0.05]; }\n      if(mode==='tipado'){ return [p.tipx, p.tipy]; }\n      if(mode==='escala'){ return [p.escx, p.escy]; }\n      if(mode==='auditavel'){ return [p.audx, p.audy]; }\n      if(mode==='busca'){ return [p.hx+Math.cos(tt*0.5+p.ph)*R*0.04, p.hy+Math.sin(tt*0.5+p.ph)*R*0.04]; }\n      return [p.hx,p.hy];\n    }\n    function frame(t){ if(!core.isConnected)return; if(!run)return; var tt=(t-t0)/1000;\n      if(energy>0)energy-=0.01;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      // busca query point\n      var qx=0,qy=0; if(mode==='busca'){ qx=Math.cos(tt*0.6)*R*0.34; qy=Math.sin(tt*0.75)*R*0.30; }\n      // auditavel axis\n      if(mode==='auditavel'){ fx.strokeStyle='rgba(224,138,151,.16)'; fx.lineWidth=1; for(var l=-1;l<=1;l++){ fx.beginPath(); fx.moveTo(-R*0.9,l*R*0.16); fx.lineTo(R*0.9,l*R*0.16); fx.stroke(); } }\n      fx.globalCompositeOperation='lighter';\n      // busca connective lines to nearest\n      if(mode==='busca'){ var near=[]; for(var j=0;j<pts.length;j++){ var pp=pts[j]; var dd=Math.hypot(pp.x-qx,pp.y-qy); if(dd<R*0.34)near.push([dd,pp]); } near.sort(function(a,b){return a[0]-b[0];}); near=near.slice(0,7);\n        near.forEach(function(np){ var col=TYPES[np[1].ty][0]; fx.strokeStyle=col.replace(')',',0.5)').replace('#','rgba(').length?hexA(col,.4):col; fx.strokeStyle=hexA(col,.35); fx.lineWidth=1; fx.beginPath(); fx.moveTo(qx,qy); fx.lineTo(np[1].x,np[1].y); fx.stroke(); np[1]._hi=1; }); }\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; var tg=target(p,i,tt);\n        p.x+=(tg[0]-p.x)*0.07; p.y+=(tg[1]-p.y)*0.07;\n        var col=TYPES[p.ty][0]; var inten=(mode==='vivo')?(0.45+Math.sin(tt*2+p.ph)*0.18):0.55;\n        if(hasM){ var d=Math.hypot(mx-p.x,my-p.y); inten=Math.max(inten, 1-d/(R*0.55)); }\n        if(mode==='busca'){ var dq=Math.hypot(p.x-qx,p.y-qy); inten=Math.max(inten*0.5, 1-dq/(R*0.3)); if(p._hi){inten=1;p._hi=0;} }\n        var rr=parseInt(col.slice(1,3),16),gg=parseInt(col.slice(3,5),16),bb=parseInt(col.slice(5,7),16);\n        var a=(0.24+inten*0.66+energy*0.25); if(a>1)a=1;\n        var sz=1.5+inten*1.9+(mode==='escala'?0.2:0);\n        fx.fillStyle='rgba('+rr+','+gg+','+bb+','+a.toFixed(3)+')'; fx.beginPath(); fx.arc(p.x,p.y,sz,0,6.28); fx.fill();\n      }\n      // busca query marker\n      if(mode==='busca'){ fx.fillStyle='rgba(255,235,240,.9)'; fx.beginPath(); fx.arc(qx,qy,3.5,0,6.28); fx.fill(); var g=fx.createRadialGradient(qx,qy,0,qx,qy,28); g.addColorStop(0,'rgba(250,72,72,.5)'); g.addColorStop(1,'rgba(250,72,72,0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(qx,qy,28,0,6.28); fx.fill(); }\n      fx.restore(); fx.globalCompositeOperation='source-over';\n      // tipado column labels\n      if(mode==='tipado'){ fx.save(); fx.translate(CBW/2,0); fx.font='9px ui-monospace,monospace'; fx.textAlign='center'; TYPES.forEach(function(tp,ti){ fx.fillStyle=hexA(tp[0],.8); fx.fillText(tp[1].toUpperCase(), (ti-1.5)*R*0.46, CBH/2+CY*0+ (CBH*0.5+ R*0.82) ); }); fx.restore(); }\n      raf=requestAnimationFrame(frame);\n    }\n    function hexA(h,a){ return 'rgba('+parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16)+','+a+')'; }\n    if(!reduce){ raf=requestAnimationFrame(function(t){t0=t;frame(t);}); }\n    else { fx.save(); fx.translate(CBW/2,CBH/2); pts.forEach(function(p){ fx.fillStyle=TYPES[p.ty][0]; fx.beginPath(); fx.arc(p.tipx,p.tipy,2,0,6.28); fx.fill(); }); fx.restore(); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;t0=performance.now();raf=requestAnimationFrame(frame);} } else { run=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.02}); io.observe(st);\n\n    var active='vivo', timers=[], intervals=[];\n    function clearD(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; dov.innerHTML=''; }\n    var NAMES={vivo:t('c_vivo_t'),tipado:t('c_tipado_t'),busca:t('c_busca_t'),escala:t('c_escala_t'),auditavel:t('c_audit_t')};\n    function run2(k){ active=k; mode=k; energy=1; clearD(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='vivo'){ dov.innerHTML='<div class=\"rec\"><span class=\"k\">'+t('dv_label')+'</span> · <span class=\"v\" data-n>128.402</span> <span class=\"t\">'+t('dv_tag')+'</span></div>'; var n=128402; var iv=setInterval(function(){ var el=dov.querySelector('[data-n]'); if(!el||!el.isConnected){clearInterval(iv);return;} n+=Math.round(1+Math.random()*9); el.textContent=n.toLocaleString('pt-BR'); },120); intervals.push(iv); }\n      else if(k==='tipado'){ dov.innerHTML=t('demo_tipado'); timers.push(setTimeout(function(){ var c=dov.querySelector('[data-chk]'); if(c)c.classList.add('on'); },700)); }\n      else if(k==='busca'){ dov.innerHTML=t('demo_busca'); ['data-h1','data-h2','data-h3'].forEach(function(h,i){ timers.push(setTimeout(function(){ var e=dov.querySelector('['+h+']'); if(e)e.classList.add('on'); }, 900+i*400)); }); }\n      else if(k==='escala'){ dov.innerHTML='<div class=\"big\"><span data-b>0</span><small>'+t('es_small')+'</small></div>'; var n=0,target=4200000; var iv=setInterval(function(){ var el=dov.querySelector('[data-b]'); if(!el||!el.isConnected){clearInterval(iv);return;} n+=Math.round(target/40); if(n>=target){n=target;clearInterval(iv);} el.textContent=n.toLocaleString('pt-BR'); },40); intervals.push(iv); }\n      else if(k==='auditavel'){ dov.innerHTML=t('demo_audit'); timers.push(setTimeout(function(){ var c=dov.querySelector('[data-chk]'); if(c)c.classList.add('on'); },700)); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('vivo');\n    if(!reduce){ timers.push(setTimeout(function(){ if(active==='vivo') run2('tipado'); },4600)); }\n  }\n}\n"}}}}}}}},{"_id":"6a7b572e0c3e9170c50d0c8d","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-id","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COMP_T(){ return {\npt:{hl1:'Quem entra. O que pode.',hl2:'Conferido toda vez.',sub:'Quem é, o que pode fazer e o registro de tudo — conferido em cada acesso, sem ninguém programar uma regra à mão. Escolha uma capacidade: ela acontece ao vivo.',seed:'id · auth·policy<br>papéis · <b>escopos</b><br>acesso · <b>em toda requisição</b>',pay:'<b>Quem é</b> · o que pode · <b>registrado</b>',c_auth_t:'Autenticação',c_auth_d:'prova quem é',c_auth_s:'token · exp',c_policy_t:'Regras',c_policy_d:'o que pode passar',c_policy_s:'allow · deny',c_papeis_t:'Papéis',c_papeis_d:'cada um vê o seu',c_papeis_s:'roles · scopes',c_sso_t:'SSO',c_sso_d:'entra uma vez, entra em tudo',c_sso_s:'oauth · mapa',c_audit_t:'Auditável',c_audit_d:'registrado no ato',c_audit_s:'trilha',demo_auth:'<div class=\"rec\"><div><span class=\"k\">POST</span> <span class=\"v\">/auth/login</span></div><div><span class=\"k\">user</span> <span class=\"v\">ana@empresa.com</span></div><div class=\"chk\" data-c1 style=\"margin-top:8px\">◆ senha verificada</div><div class=\"chk\" data-c2 style=\"margin-top:4px\">◆ token emitido · exp 1h</div><div class=\"chk\" data-c3 style=\"margin-top:4px;color:#48FAA1\">✓ acesso concedido</div></div>',demo_policy:'<div class=\"rec\"><div class=\"chk\" data-c1><span class=\"v\">GET /pedidos</span> · <span class=\"t\" style=\"color:#48FAA1\">allow · dono</span></div><div class=\"chk\" data-c2 style=\"margin-top:3px\"><span class=\"v\">DELETE /users/8</span> · <span class=\"t\" style=\"color:#FA4848\">deny · sem admin</span></div><div class=\"chk\" data-c3 style=\"margin-top:3px\"><span class=\"v\">GET /relatorios</span> · <span class=\"t\" style=\"color:#48FAA1\">allow · leitura</span></div><div class=\"chk\" data-c4 style=\"margin-top:3px\"><span class=\"v\">PUT /config</span> · <span class=\"t\" style=\"color:#FA4848\">deny · fora do horário</span></div></div>',demo_papeis:'<div class=\"rec\"><div class=\"chk\" data-c1><span class=\"v\" style=\"color:#48FAA1\">admin</span> <span class=\"k\">→</span> <span class=\"t\">tudo</span></div><div class=\"chk\" data-c2 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#48B4FA\">editor</span> <span class=\"k\">→</span> <span class=\"t\">ler · escrever</span></div><div class=\"chk\" data-c3 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#FADC48\">viewer</span> <span class=\"k\">→</span> <span class=\"t\">ler</span></div><div class=\"chk\" data-c4 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#F748A0\">api</span> <span class=\"k\">→</span> <span class=\"t\">escopo: pedidos</span></div></div>',demo_sso:'<div class=\"rec\"><div><span class=\"k\">google</span> <span class=\"v\">ana@empresa.com</span></div><div class=\"chk\" data-c1 style=\"margin-top:8px\">◆ identidade externa verificada</div><div class=\"chk\" data-c2 style=\"margin-top:4px\">→ mapeada · usuário #204</div><div class=\"chk\" data-c3 style=\"margin-top:4px\">→ papéis: editor, api</div></div>',demo_audit:'<div class=\"rec auditlog\"><div class=\"chk\" data-c1><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> acessou <span class=\"t\">/pedidos</span></div><div class=\"chk\" data-c2 style=\"margin-top:4px\"><span class=\"k\">14:05</span> <span class=\"v\">Rui</span> negado <span class=\"t\" style=\"color:#FA4848\">/config</span></div><div class=\"chk\" data-c3 style=\"margin-top:4px\"><span class=\"k\">14:09</span> <span class=\"v\">api</span> leu <span class=\"t\">/relatorios</span></div><div class=\"chk\" data-c4 style=\"margin-top:10px\">◆ toda requisição registrada</div></div>'},\nen:{hl1:'Who gets in. What they can do.',hl2:'Checked every time.',sub:'Who they are, what they can do and a record of everything — checked on every access, with nobody hand-coding a rule. Pick a capability: it happens live.',seed:'id · auth·policy<br>roles · <b>scopes</b><br>access · <b>on every request</b>',pay:'<b>Who</b> · what they can · <b>logged</b>',c_auth_t:'Authentication',c_auth_d:'proves who you are',c_auth_s:'token · exp',c_policy_t:'Rules',c_policy_d:'what gets through',c_policy_s:'allow · deny',c_papeis_t:'Roles',c_papeis_d:'each sees their own',c_papeis_s:'roles · scopes',c_sso_t:'SSO',c_sso_d:'sign in once, get everything',c_sso_s:'oauth · map',c_audit_t:'Auditable',c_audit_d:'logged as it happens',c_audit_s:'trail',demo_auth:'<div class=\"rec\"><div><span class=\"k\">POST</span> <span class=\"v\">/auth/login</span></div><div><span class=\"k\">user</span> <span class=\"v\">ana@empresa.com</span></div><div class=\"chk\" data-c1 style=\"margin-top:8px\">◆ password verified</div><div class=\"chk\" data-c2 style=\"margin-top:4px\">◆ token issued · exp 1h</div><div class=\"chk\" data-c3 style=\"margin-top:4px;color:#48FAA1\">✓ access granted</div></div>',demo_policy:'<div class=\"rec\"><div class=\"chk\" data-c1><span class=\"v\">GET /pedidos</span> · <span class=\"t\" style=\"color:#48FAA1\">allow · owner</span></div><div class=\"chk\" data-c2 style=\"margin-top:3px\"><span class=\"v\">DELETE /users/8</span> · <span class=\"t\" style=\"color:#FA4848\">deny · not admin</span></div><div class=\"chk\" data-c3 style=\"margin-top:3px\"><span class=\"v\">GET /relatorios</span> · <span class=\"t\" style=\"color:#48FAA1\">allow · read</span></div><div class=\"chk\" data-c4 style=\"margin-top:3px\"><span class=\"v\">PUT /config</span> · <span class=\"t\" style=\"color:#FA4848\">deny · outside hours</span></div></div>',demo_papeis:'<div class=\"rec\"><div class=\"chk\" data-c1><span class=\"v\" style=\"color:#48FAA1\">admin</span> <span class=\"k\">→</span> <span class=\"t\">everything</span></div><div class=\"chk\" data-c2 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#48B4FA\">editor</span> <span class=\"k\">→</span> <span class=\"t\">read · write</span></div><div class=\"chk\" data-c3 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#FADC48\">viewer</span> <span class=\"k\">→</span> <span class=\"t\">read</span></div><div class=\"chk\" data-c4 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#F748A0\">api</span> <span class=\"k\">→</span> <span class=\"t\">scope: orders</span></div></div>',demo_sso:'<div class=\"rec\"><div><span class=\"k\">google</span> <span class=\"v\">ana@empresa.com</span></div><div class=\"chk\" data-c1 style=\"margin-top:8px\">◆ external identity verified</div><div class=\"chk\" data-c2 style=\"margin-top:4px\">→ mapped · user #204</div><div class=\"chk\" data-c3 style=\"margin-top:4px\">→ roles: editor, api</div></div>',demo_audit:'<div class=\"rec auditlog\"><div class=\"chk\" data-c1><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> accessed <span class=\"t\">/pedidos</span></div><div class=\"chk\" data-c2 style=\"margin-top:4px\"><span class=\"k\">14:05</span> <span class=\"v\">Rui</span> denied <span class=\"t\" style=\"color:#FA4848\">/config</span></div><div class=\"chk\" data-c3 style=\"margin-top:4px\"><span class=\"k\">14:09</span> <span class=\"v\">api</span> read <span class=\"t\">/relatorios</span></div><div class=\"chk\" data-c4 style=\"margin-top:10px\">◆ every request logged</div></div>'},\nes:{hl1:'Quién entra. Qué puede.',hl2:'Verificado cada vez.',sub:'Quién es, qué puede hacer y el registro de todo — verificado en cada acceso, sin que nadie programe una regla a mano. Elige una capacidad: sucede en vivo.',seed:'id · auth·policy<br>roles · <b>ámbitos</b><br>acceso · <b>en cada petición</b>',pay:'<b>Quién es</b> · qué puede · <b>registrado</b>',c_auth_t:'Autenticación',c_auth_d:'prueba quién eres',c_auth_s:'token · exp',c_policy_t:'Reglas',c_policy_d:'qué puede pasar',c_policy_s:'allow · deny',c_papeis_t:'Roles',c_papeis_d:'cada uno ve lo suyo',c_papeis_s:'roles · scopes',c_sso_t:'SSO',c_sso_d:'entra una vez, entra a todo',c_sso_s:'oauth · mapa',c_audit_t:'Auditable',c_audit_d:'registrado al instante',c_audit_s:'traza',demo_auth:'<div class=\"rec\"><div><span class=\"k\">POST</span> <span class=\"v\">/auth/login</span></div><div><span class=\"k\">usuario</span> <span class=\"v\">ana@empresa.com</span></div><div class=\"chk\" data-c1 style=\"margin-top:8px\">◆ contraseña verificada</div><div class=\"chk\" data-c2 style=\"margin-top:4px\">◆ token emitido · exp 1h</div><div class=\"chk\" data-c3 style=\"margin-top:4px;color:#48FAA1\">✓ acceso concedido</div></div>',demo_policy:'<div class=\"rec\"><div class=\"chk\" data-c1><span class=\"v\">GET /pedidos</span> · <span class=\"t\" style=\"color:#48FAA1\">allow · dueño</span></div><div class=\"chk\" data-c2 style=\"margin-top:3px\"><span class=\"v\">DELETE /users/8</span> · <span class=\"t\" style=\"color:#FA4848\">deny · sin admin</span></div><div class=\"chk\" data-c3 style=\"margin-top:3px\"><span class=\"v\">GET /relatorios</span> · <span class=\"t\" style=\"color:#48FAA1\">allow · lectura</span></div><div class=\"chk\" data-c4 style=\"margin-top:3px\"><span class=\"v\">PUT /config</span> · <span class=\"t\" style=\"color:#FA4848\">deny · fuera de horario</span></div></div>',demo_papeis:'<div class=\"rec\"><div class=\"chk\" data-c1><span class=\"v\" style=\"color:#48FAA1\">admin</span> <span class=\"k\">→</span> <span class=\"t\">todo</span></div><div class=\"chk\" data-c2 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#48B4FA\">editor</span> <span class=\"k\">→</span> <span class=\"t\">leer · escribir</span></div><div class=\"chk\" data-c3 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#FADC48\">viewer</span> <span class=\"k\">→</span> <span class=\"t\">leer</span></div><div class=\"chk\" data-c4 style=\"margin-top:4px\"><span class=\"v\" style=\"color:#F748A0\">api</span> <span class=\"k\">→</span> <span class=\"t\">ámbito: pedidos</span></div></div>',demo_sso:'<div class=\"rec\"><div><span class=\"k\">google</span> <span class=\"v\">ana@empresa.com</span></div><div class=\"chk\" data-c1 style=\"margin-top:8px\">◆ identidad externa verificada</div><div class=\"chk\" data-c2 style=\"margin-top:4px\">→ mapeada · usuario #204</div><div class=\"chk\" data-c3 style=\"margin-top:4px\">→ roles: editor, api</div></div>',demo_audit:'<div class=\"rec auditlog\"><div class=\"chk\" data-c1><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> accedió <span class=\"t\">/pedidos</span></div><div class=\"chk\" data-c2 style=\"margin-top:4px\"><span class=\"k\">14:05</span> <span class=\"v\">Rui</span> denegado <span class=\"t\" style=\"color:#FA4848\">/config</span></div><div class=\"chk\" data-c3 style=\"margin-top:4px\"><span class=\"k\">14:09</span> <span class=\"v\">api</span> leyó <span class=\"t\">/relatorios</span></div><div class=\"chk\" data-c4 style=\"margin-top:10px\">◆ cada petición registrada</div></div>'}\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #0a1a13 0%, #06100b 46%, #040706 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:46%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#7fa893; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#48FAA1; box-shadow:0 0 12px 2px #48FAA1; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F2F6F4; }\n.h1 .g{ color:#849089; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#94a099; max-width:42ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#4f5651; line-height:1.7; }\n.seed b{ color:#8ad6b0; font-weight:400; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#6fd6a5; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n.dov{ position:absolute; inset:0; padding:18px; font-family:ui-monospace,Menlo,monospace; }\n.rec{ font-size:12.5px; line-height:1.7; }\n.rec .k{ color:#84908a; } .rec .v{ color:#EDECEF; } .rec .t{ color:#8ad6b0; font-size:10.5px; }\n.auditlog{ font-size:11px; line-height:1.66; letter-spacing:.002em; }\n.auditlog .chk{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.auditlog .k{ color:#6f7a74; } .auditlog .t{ font-size:10px; }\n.chk{ opacity:0; transform:translateY(5px); transition:.32s; color:#66FA48; } .chk.on{ opacity:1; transform:none; }\n.hit{ margin-top:10px; font-size:12px; color:#dce8e2; opacity:0; transform:translateY(6px); transition:.34s; } .hit.on{ opacity:1; transform:none; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(72,250,161,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#48FAA1; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#84908a; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5a615c; text-transform:uppercase; } .fc.on .fs{ color:#6fd6a5; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5a615c; } .payoff b{ color:#8ad6b0; }\n@media (max-width:1080px){ .st{ display:flex; flex-direction:column; min-height:0; height:auto; } .head{ position:relative; top:auto; left:auto; max-width:none; padding:34px 24px 0; } .seed{ display:none } canvas.core{ position:relative; }\n  .stage{ position:relative; width:auto; padding:0 24px; } .cards{ position:relative; bottom:auto; flex-wrap:wrap; margin-top:20px; } .fc{ max-width:none; flex:1 1 40%; border-bottom:1px solid rgba(255,255,255,.05); } .payoff{ position:relative; bottom:auto; margin:16px 0 30px; } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['auth',t('c_auth_t'),t('c_auth_d'),t('c_auth_s'),'M8 2l5 2v4c0 3-2 5-5 6-3-1-5-3-5-6V4z'],\n      ['policy',t('c_policy_t'),t('c_policy_d'),t('c_policy_s'),'M2 4h12M4 8h8M6 12h4'],\n      ['papeis',t('c_papeis_t'),t('c_papeis_d'),t('c_papeis_s'),'M6 6a2 2 0 100-4 2 2 0 000 4M2 13a4 4 0 018 0M11 6a2 2 0 10.01-4M12 11a3 3 0 012 2'],\n      ['sso',t('c_sso_t'),t('c_sso_d'),t('c_sso_s'),'M6 10l4-4M7 5l1-1a2.5 2.5 0 013.5 3.5l-1 1M9 11l-1 1a2.5 2.5 0 01-3.5-3.5l1-1'],\n      ['auditavel',t('c_audit_t'),t('c_audit_d'),t('c_audit_s'),'M8 3v5l3 2M8 3a5 5 0 105 5']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · ID</div>'+\n          '<h1 class=\"h1\">'+t('hl1')+' <span class=\"g\">'+t('hl2')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('sub')+'</div></div>'+\n        '<div class=\"seed\">'+t('seed')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('c_auth_t')+'</div>'+\n          '<div class=\"st-box\"><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#8ad6b0\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">'+t('pay')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), dov=root.querySelector('[data-dov]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1,R=1,ring=1,mobile=false;\n    var ROLES=[['#48FAA1','admin'],['#48B4FA','editor'],['#FADC48','viewer'],['#F748A0','api']];\n    var ALLOW='#48FAA1', DENY='#FA4848', EXT='#E7E0FF';\n\n    function hexA(h,a){ return 'rgba('+parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16)+','+a+')'; }\n\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; mobile=W<=1080;\n      CBW=CBH=mobile?Math.min(W-48,420):560; CX=mobile?W/2:W*0.30; CY=mobile?CBH/2:Math.min(H*0.46,520);\n      if(mobile){ core.style.position='relative'; core.style.margin='18px auto 0'; core.style.left='auto'; core.style.top='auto'; if(head)head.style.left=''; if(seed)seed.style.right=''; }\n      else { core.style.position='absolute'; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); R=CBW/2; ring=R*0.31; }\n    layout(); d2.on(window,'resize',layout);\n\n    var mode='auth', mx=9999,my=0,hasM=false, t0=performance.now(), last=t0, run=true, raf=null;\n    var parts=[], links=[], auditLog=[], spawnAcc=0, gatePulse=0, spin=0, logAcc=0;\n\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); mx=(e.clientX-r.left)-CBW/2; my=(e.clientY-r.top)-CBH/2; hasM=true; });\n    d2.on(st,'pointerleave',function(){ hasM=false; });\n\n    function spawn(o){ if(parts.length>150)return; var p={a:0,r:R*1.03,v:-R*0.010,role:0,verdict:'allow',state:'in',ext:false,logged:false}; for(var k in o)p[k]=o[k]; parts.push(p); }\n\n    function reset(){ parts=[]; links=[]; auditLog=[]; spawnAcc=0; gatePulse=0; logAcc=0; }\n    function laneOf(r){ return [0,1,2,1][r]||0; }\n    function pushLog(){ var role=(Math.random()*4)|0; auditLog.push({role:role, lane:laneOf(role), born:performance.now()}); if(auditLog.length>8)auditLog.shift(); }\n\n    function spawner(dt){ spawnAcc+=dt;\n      if(mode==='auth'){ if(parts.length===0 && spawnAcc>0.65){ spawnAcc=0; spawn({a:-0.35, v:-R*0.0055, role:0, verdict:'allow'}); } }\n      else if(mode==='policy'){ if(spawnAcc>0.15){ spawnAcc=0; spawn({a:Math.random()*6.2832, v:-R*(0.010+Math.random()*0.006), role:(Math.random()*4)|0, verdict:Math.random()<0.62?'allow':'deny'}); } }\n      else if(mode==='papeis'){ if(spawnAcc>0.17){ spawnAcc=0; var role=(Math.random()*4)|0; var base=(role/4)*6.2832 - 0.7854; spawn({a:base+(Math.random()*0.5-0.25), v:-R*0.010, role:role, verdict:'allow', exit:base+3.1416}); } }\n      else if(mode==='sso'){ var hasExt=false; for(var i=0;i<parts.length;i++)if(parts[i].ext)hasExt=true; if(!hasExt && spawnAcc>1.0){ spawnAcc=0; spawn({a:Math.PI, v:-R*0.0065, ext:true, role:0, verdict:'allow'}); } }\n      else if(mode==='auditavel'){ if(spawnAcc>0.22){ spawnAcc=0; spawn({a:Math.random()*6.2832, v:-R*0.011, role:(Math.random()*4)|0, verdict:'allow'}); } }\n    }\n\n    function frame(t){ if(!core.isConnected)return; if(!run)return;\n      var dt=Math.min(0.05,(t-last)/1000); last=t; spin+=dt*0.25;\n      if(gatePulse>0)gatePulse-=dt*1.8; if(gatePulse<0)gatePulse=0;\n      spawner(dt);\n      if(mode==='auditavel'){ logAcc+=dt; if(logAcc>0.5){ logAcc=0; pushLog(); } }\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      var now=t;\n\n      if(mode==='auditavel'){\n        var axX=R*0.62, tTop=-R*0.46, tBot=R*0.46, SLOTS=8, gap=(tBot-tTop)/(SLOTS-1);\n        fx.strokeStyle='rgba(72,250,161,.13)'; fx.lineWidth=1; fx.beginPath(); fx.moveTo(axX,tTop-8); fx.lineTo(axX,tBot+8); fx.stroke();\n        for(var si=0;si<SLOTS;si++){ var ny=tTop+si*gap; fx.fillStyle='rgba(72,250,161,.10)'; fx.beginPath(); fx.arc(axX,ny,1.3,0,6.2832); fx.fill(); }\n        var laneLen=[R*0.05,R*0.10,R*0.15], nA=auditLog.length;\n        for(var ai=0;ai<nA;ai++){ var eL=auditLog[ai]; var slot=SLOTS-nA+ai; if(slot<0)continue;\n          var yy=tTop+slot*gap; var em=1-((nA-1-ai)/SLOTS); if(em<0.28)em=0.28;\n          var rc=ROLES[eL.role][0], ll=laneLen[eL.lane];\n          fx.strokeStyle=hexA(rc,0.5*em); fx.lineWidth=1.5; fx.beginPath(); fx.moveTo(axX-4,yy); fx.lineTo(axX-4-ll,yy); fx.stroke();\n          fx.fillStyle=hexA(rc,0.92*em); fx.beginPath(); fx.arc(axX,yy,2.5,0,6.2832); fx.fill();\n          fx.fillStyle=hexA('#EDECEF',0.20*em); fx.fillRect(axX+7,yy-0.5,R*0.05,1); }\n      }\n\n      fx.globalCompositeOperation='lighter';\n      if(mode==='papeis'){ for(var s=0;s<4;s++){ var a0=(s/4)*6.2832-0.7854; fx.strokeStyle=hexA(ROLES[s][0], 0.55); fx.lineWidth=2.5; fx.beginPath(); fx.arc(0,0,ring, a0+spin*0.2+0.12, a0+1.5708+spin*0.2-0.12); fx.stroke(); } }\n      else { var gcol=(mode==='sso')?EXT:ALLOW;\n        var g=fx.createRadialGradient(0,0,ring*0.35,0,0,ring*1.35); g.addColorStop(0,'rgba(72,250,161,0)'); g.addColorStop(0.82,hexA(gcol,0.05+gatePulse*0.16)); g.addColorStop(1,'rgba(72,250,161,0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(0,0,ring*1.35,0,6.2832); fx.fill();\n        fx.strokeStyle=hexA(gcol,0.30+gatePulse*0.55); fx.lineWidth=2; fx.beginPath(); fx.arc(0,0,ring,0,6.2832); fx.stroke(); }\n\n      links=links.filter(function(l){ return (now-l.born)<1000; });\n      links.forEach(function(l){ var al=1-(now-l.born)/1000; fx.strokeStyle=hexA(ROLES[l.role][0],0.45*al); fx.lineWidth=1; fx.beginPath(); fx.moveTo(0,0); fx.lineTo(Math.cos(l.a)*ring*2.4, Math.sin(l.a)*ring*2.4); fx.stroke(); });\n\n      var L=parts.length;\n      for(var i=0;i<L;i++){ var p=parts[i];\n        if(p.state==='in'){ p.r+=p.v;\n          if(p.r<=ring){\n            if(p.verdict==='deny'){ p.state='bounce'; p.v=-p.v*0.95; }\n            else if(p.ext){ p.state='dead'; gatePulse=1;\n              for(var c=0;c<4;c++){ var na=-0.9+c*0.6; links.push({a:na,role:c,born:now}); spawn({a:na, r:ring, v:R*0.011, role:c, verdict:'allow', state:'through'}); } }\n            else { p.state='through'; if(mode==='auth')gatePulse=1; }\n          }\n        } else if(p.state==='through'){ p.r+=p.v;\n        } else if(p.state==='bounce'){ p.r+=p.v; }\n        if(p.r>R*1.08 || p.r<-R*1.08) p.state='dead';\n\n        var x=Math.cos(p.a)*p.r, y=Math.sin(p.a)*p.r;\n        var col = (p.state==='bounce')?DENY : p.ext?EXT : (mode==='papeis'||mode==='sso')?ROLES[p.role][0] : ALLOW;\n        var inten=0.5; var dr=Math.abs(Math.abs(p.r)-ring); inten=Math.max(inten, 1-dr/(R*0.55));\n        if(hasM){ var dm=Math.hypot(mx-x,my-y); inten=Math.max(inten, 1-dm/(R*0.5)); }\n        var rr=parseInt(col.slice(1,3),16),gg=parseInt(col.slice(3,5),16),bb=parseInt(col.slice(5,7),16);\n        var a=0.28+inten*0.62; if(a>1)a=1; var sz=(p.ext?3.4:1.8)+inten*2.0;\n        fx.fillStyle='rgba('+rr+','+gg+','+bb+','+a.toFixed(3)+')'; fx.beginPath(); fx.arc(x,y,sz,0,6.2832); fx.fill();\n        if(p.ext){ var eg=fx.createRadialGradient(x,y,0,x,y,22); eg.addColorStop(0,hexA(EXT,0.5)); eg.addColorStop(1,hexA(EXT,0)); fx.fillStyle=eg; fx.beginPath(); fx.arc(x,y,22,0,6.2832); fx.fill(); }\n      }\n      parts=parts.filter(function(p){ return p.state!=='dead'; });\n\n      fx.restore(); fx.globalCompositeOperation='source-over';\n      raf=requestAnimationFrame(frame);\n    }\n\n    function drawStatic(){ fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      fx.strokeStyle=hexA(ALLOW,0.4); fx.lineWidth=2; fx.beginPath(); fx.arc(0,0,ring,0,6.2832); fx.stroke();\n      for(var i=0;i<32;i++){ var a=i*0.5; var rr=ring*(1.4+ (i%3)*0.35); fx.fillStyle=hexA(ROLES[i%4][0],0.7); fx.beginPath(); fx.arc(Math.cos(a)*rr,Math.sin(a)*rr,2,0,6.2832); fx.fill(); } fx.restore(); }\n\n    if(!reduce){ raf=requestAnimationFrame(function(t){ t0=t; last=t; frame(t); }); }\n    else { drawStatic(); }\n\n    var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){ run=true; last=performance.now(); raf=requestAnimationFrame(frame); } } else { run=false; if(raf)cancelAnimationFrame(raf); } }); },{threshold:.02}); io.observe(st);\n\n    var active='auth', timers=[];\n    function clearD(){ timers.forEach(clearTimeout); timers=[]; dov.innerHTML=''; }\n    function revealSeq(sels, gap, start){ sels.forEach(function(sl,i){ timers.push(setTimeout(function(){ var e=dov.querySelector(sl); if(e)e.classList.add('on'); }, (start||500)+i*(gap||420))); }); }\n    var NAMES={auth:t('c_auth_t'),policy:t('c_policy_t'),papeis:t('c_papeis_t'),sso:t('c_sso_t'),auditavel:t('c_audit_t')};\n\n    function run2(k){ active=k; mode=k; reset(); clearD(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='auth'){ dov.innerHTML=t('demo_auth');\n        revealSeq(['[data-c1]','[data-c2]','[data-c3]'],460,600); }\n      else if(k==='policy'){ dov.innerHTML=t('demo_policy');\n        revealSeq(['[data-c1]','[data-c2]','[data-c3]','[data-c4]'],340,450); }\n      else if(k==='papeis'){ dov.innerHTML=t('demo_papeis');\n        revealSeq(['[data-c1]','[data-c2]','[data-c3]','[data-c4]'],340,450); }\n      else if(k==='sso'){ dov.innerHTML=t('demo_sso');\n        revealSeq(['[data-c1]','[data-c2]','[data-c3]'],460,600); }\n      else if(k==='auditavel'){ dov.innerHTML=t('demo_audit');\n        auditLog=[]; for(var pz=0; pz<7; pz++)pushLog();\n        revealSeq(['[data-c1]','[data-c2]','[data-c3]','[data-c4]'],340,450); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('auth');\n    if(!reduce){ timers.push(setTimeout(function(){ if(active==='auth') run2('policy'); },4800)); }\n  }\n}\n"}}}}}}}},{"_id":"6a7b572f68641501c2dd11de","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-media","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COMP_T(){ return {\npt:{hl1:'Guarde uma vez.',hl2:'Sirva o mundo.',sub:'Sobe, organiza, versiona e serve da região mais próxima de quem pede. Escolha uma capacidade: ela acontece ao vivo.',seed:'media · arquivos<br>upload · organiza · <b>entrega</b><br>versionado · <b>servido</b>',pay:'Seus arquivos · <b>num lugar</b> · servidos rápido',c_upload_t:'Upload',c_upload_d:'entram e ficam',c_upload_s:'stream · store',c_org_t:'Organiza',c_org_d:'em pastas, por tipo',c_org_s:'pastas · tipos',c_ent_t:'Entrega',c_ent_d:'da região mais perto de quem pede',c_ent_s:'CDN · edge',c_ver_t:'Versões',c_ver_d:'v1 · v2 · v3',c_ver_s:'versionado · rollback',c_bus_t:'Busca',c_bus_d:'acha pelo nome',c_bus_s:'nome · metadados',ty_pdf:'pdf',ty_img:'img',ty_docs:'docs',ty_outros:'outros',u_send:'enviando arquivos',org_lbl:'organizado por pasta',org_f1:'/documentos',org_f2:'/imagens',org_f3:'/planilhas',ent_lbl:'servido da região mais próxima',ent_lat:'latência',ent_reg:'regiões',pop1:'São Paulo',pop2:'Virgínia',pop3:'Frankfurt',pop4:'Singapura',demo_versoes:'<div class=\"q\" style=\"font-size:12px\">logo-marca.svg</div><div style=\"margin-top:9px\"><div class=\"vrow cur\" data-vv0><span class=\"bul\">●</span><span class=\"lb\">v3 · agora</span><span class=\"ag\">atual</span></div><div class=\"vrow\" data-vv1><span class=\"bul\">○</span><span class=\"lb\">v2 · ontem</span><span class=\"ag\">15:20</span></div><div class=\"vrow\" data-vv2><span class=\"bul\">○</span><span class=\"lb\">v1 · 3 dias</span><span class=\"ag\">09:02</span></div></div><div class=\"roll\" data-roll>◆ voltar para v2</div>',demo_busca:'<div class=\"q\">buscar: \"contrato assinado 2026\"<span class=\"cur\"></span></div><div class=\"hit\" data-h1>· contrato-final.pdf <b>/documentos</b> ✓</div><div class=\"hit\" data-h2>· contrato-v2.pdf <b>/documentos</b></div><div class=\"hit\" data-h3>· aditivo-2026.pdf <b>/juridico</b></div>'},\nen:{hl1:'Store once.',hl2:'Serve the world.',sub:'Upload, organize, version and serve from the region closest to whoever asks. Pick a capability: it happens live.',seed:'media · files<br>upload · organize · <b>deliver</b><br>versioned · <b>served</b>',pay:'Your files · <b>in one place</b> · served fast',c_upload_t:'Upload',c_upload_d:'come in and stay',c_upload_s:'stream · store',c_org_t:'Organize',c_org_d:'in folders, by type',c_org_s:'folders · types',c_ent_t:'Deliver',c_ent_d:'from the region closest to the request',c_ent_s:'CDN · edge',c_ver_t:'Versions',c_ver_d:'v1 · v2 · v3',c_ver_s:'versioned · rollback',c_bus_t:'Search',c_bus_d:'finds by name',c_bus_s:'name · metadata',ty_pdf:'pdf',ty_img:'img',ty_docs:'docs',ty_outros:'others',u_send:'uploading files',org_lbl:'organized by folder',org_f1:'/documents',org_f2:'/images',org_f3:'/spreadsheets',ent_lbl:'served from the nearest region',ent_lat:'latency',ent_reg:'regions',pop1:'São Paulo',pop2:'Virginia',pop3:'Frankfurt',pop4:'Singapore',demo_versoes:'<div class=\"q\" style=\"font-size:12px\">logo-marca.svg</div><div style=\"margin-top:9px\"><div class=\"vrow cur\" data-vv0><span class=\"bul\">●</span><span class=\"lb\">v3 · now</span><span class=\"ag\">current</span></div><div class=\"vrow\" data-vv1><span class=\"bul\">○</span><span class=\"lb\">v2 · yesterday</span><span class=\"ag\">15:20</span></div><div class=\"vrow\" data-vv2><span class=\"bul\">○</span><span class=\"lb\">v1 · 3 days</span><span class=\"ag\">09:02</span></div></div><div class=\"roll\" data-roll>◆ revert to v2</div>',demo_busca:'<div class=\"q\">search: \"signed contract 2026\"<span class=\"cur\"></span></div><div class=\"hit\" data-h1>· contrato-final.pdf <b>/documents</b> ✓</div><div class=\"hit\" data-h2>· contrato-v2.pdf <b>/documents</b></div><div class=\"hit\" data-h3>· aditivo-2026.pdf <b>/legal</b></div>'},\nes:{hl1:'Guarda una vez.',hl2:'Sirve al mundo.',sub:'Sube, organiza, versiona y sirve desde la región más cercana a quien lo pide. Elige una capacidad: sucede en vivo.',seed:'media · archivos<br>upload · organiza · <b>entrega</b><br>versionado · <b>servido</b>',pay:'Tus archivos · <b>en un lugar</b> · servidos rápido',c_upload_t:'Upload',c_upload_d:'entran y quedan',c_upload_s:'stream · store',c_org_t:'Organiza',c_org_d:'en carpetas, por tipo',c_org_s:'carpetas · tipos',c_ent_t:'Entrega',c_ent_d:'desde la región más cercana a quien pide',c_ent_s:'CDN · edge',c_ver_t:'Versiones',c_ver_d:'v1 · v2 · v3',c_ver_s:'versionado · rollback',c_bus_t:'Búsqueda',c_bus_d:'encuentra por nombre',c_bus_s:'nombre · metadatos',ty_pdf:'pdf',ty_img:'img',ty_docs:'docs',ty_outros:'otros',u_send:'subiendo archivos',org_lbl:'organizado por carpeta',org_f1:'/documentos',org_f2:'/imágenes',org_f3:'/planillas',ent_lbl:'servido desde la región más cercana',ent_lat:'latencia',ent_reg:'regiones',pop1:'São Paulo',pop2:'Virginia',pop3:'Frankfurt',pop4:'Singapur',demo_versoes:'<div class=\"q\" style=\"font-size:12px\">logo-marca.svg</div><div style=\"margin-top:9px\"><div class=\"vrow cur\" data-vv0><span class=\"bul\">●</span><span class=\"lb\">v3 · ahora</span><span class=\"ag\">actual</span></div><div class=\"vrow\" data-vv1><span class=\"bul\">○</span><span class=\"lb\">v2 · ayer</span><span class=\"ag\">15:20</span></div><div class=\"vrow\" data-vv2><span class=\"bul\">○</span><span class=\"lb\">v1 · 3 días</span><span class=\"ag\">09:02</span></div></div><div class=\"roll\" data-roll>◆ volver a v2</div>',demo_busca:'<div class=\"q\">buscar: \"contrato firmado 2026\"<span class=\"cur\"></span></div><div class=\"hit\" data-h1>· contrato-final.pdf <b>/documentos</b> ✓</div><div class=\"hit\" data-h2>· contrato-v2.pdf <b>/documentos</b></div><div class=\"hit\" data-h3>· aditivo-2026.pdf <b>/jurídico</b></div>'}\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #1a1408 0%, #0d0a05 46%, #060402 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:46%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#a89a80; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#FADC48; box-shadow:0 0 12px 2px #FADC48; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8f8878; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a948a; max-width:40ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#565044; line-height:1.7; }\n.seed b{ color:#e0c878; font-weight:400; font-variant-numeric:tabular-nums; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#d8c078; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n.dov{ position:absolute; inset:0; padding:18px; font-family:ui-monospace,Menlo,monospace; }\n.rec{ font-size:12.5px; line-height:1.7; }\n.rec .k{ color:#8a847a; } .rec .v{ color:#EDECEF; } .rec .t{ color:#FADC48; font-size:10px; }\n.chk{ opacity:0; transition:.3s; color:#FADC48; } .chk.on{ opacity:1; }\n.q{ font-size:13px; color:#EDECEF; } .q .cur{ display:inline-block; width:8px;height:15px;background:#FADC48;vertical-align:-2px;margin-left:1px;animation:bl 1s steps(2) infinite } @keyframes bl{50%{opacity:0}}\n.hit{ margin-top:10px; font-size:12px; color:#e8e0d0; opacity:0; transform:translateY(6px); transition:.34s; } .hit.on{ opacity:1; transform:none; } .hit b{ color:#FADC48; font-weight:400; }\n.prog{ margin-top:12px; height:4px; border-radius:2px; background:rgba(255,255,255,.08); overflow:hidden; } .prog i{ display:block; height:100%; width:0; background:#FADC48; transition:width .12s linear; }\n.frow{ display:flex; align-items:center; gap:8px; font-size:12px; line-height:1.95; opacity:0; transform:translateX(-6px); transition:.3s; } .frow.on{ opacity:1; transform:none; }\n.frow .nm{ color:#EDECEF; } .frow .sz{ color:#8a847a; margin-left:auto; font-size:10.5px; font-variant-numeric:tabular-nums; } .frow .ok{ color:#FADC48; opacity:0; transition:.3s; width:12px; text-align:center; } .frow.done .ok{ opacity:1; }\n.tree{ font-size:12px; line-height:1.9; }\n.tree .row{ opacity:0; transform:translateY(4px); transition:.32s; } .tree .row.on{ opacity:1; transform:none; }\n.tree .fold{ color:#e0c878; } .tree .file{ color:#c8c2b8; } .tree .file .pth{ color:#8a847a; }\n.pop{ display:flex; justify-content:space-between; font-size:11.5px; line-height:2; color:#c8c2b8; opacity:0; transform:translateY(3px); transition:.32s; } .pop.on{ opacity:1; transform:none; } .pop b{ color:#FADC48; font-weight:400; font-variant-numeric:tabular-nums; }\n.vrow{ display:flex; align-items:center; gap:9px; font-size:12px; line-height:2.05; opacity:0; transform:translateX(-6px); transition:.3s; } .vrow.on{ opacity:1; transform:none; }\n.vrow .bul{ font-size:9px; color:#5f5a4d; } .vrow .lb{ color:#c8c2b8; } .vrow .ag{ color:#8a847a; margin-left:auto; font-size:10.5px; }\n.vrow.cur .bul{ color:#FADC48; } .vrow.cur .lb{ color:#FADC48; } .vrow.cur .ag{ color:#e0c878; }\n.roll{ margin-top:11px; font-size:11px; color:#e0c878; border:1px solid rgba(250,220,72,.35); border-radius:7px; padding:6px 10px; display:inline-block; opacity:0; transform:translateY(4px); transition:.32s; } .roll.on{ opacity:1; transform:none; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(250,220,72,.07); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#FADC48; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a847a; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a4d; text-transform:uppercase; } .fc.on .fs{ color:#d8c078; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a4d; } .payoff b{ color:#e0c878; }\n@media (max-width:1080px){ .st{ display:flex; flex-direction:column; min-height:0; height:auto; } .head{ position:relative; top:auto; left:auto; max-width:none; padding:34px 24px 0; } .seed{ display:none } canvas.core{ position:relative; }\n  .stage{ position:relative; width:auto; padding:0 24px; } .cards{ position:relative; bottom:auto; flex-wrap:wrap; margin-top:20px; } .fc{ max-width:none; flex:1 1 40%; border-bottom:1px solid rgba(255,255,255,.05); } .payoff{ position:relative; bottom:auto; margin:16px 0 30px; } }\n@media (prefers-reduced-motion:reduce){ .q .cur{ animation:none } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['upload',t('c_upload_t'),t('c_upload_d'),t('c_upload_s'),'M8 10.2V3M5.4 5.6 8 3l2.6 2.6M3.4 11v1.6h9.2V11'],\n      ['organiza',t('c_org_t'),t('c_org_d'),t('c_org_s'),'M2 4.4h4l1 1h7v6.6H2z'],\n      ['entrega',t('c_ent_t'),t('c_ent_d'),t('c_ent_s'),'M8 6.4a1.6 1.6 0 100 3.2 1.6 1.6 0 100-3.2M8 2.6v1.5M8 11.9v1.5M2.6 8h1.5M11.9 8h1.5M4.4 4.4 5.5 5.5M11.6 4.4 10.5 5.5M4.4 11.6 5.5 10.5M11.6 11.6 10.5 10.5'],\n      ['versoes',t('c_ver_t'),t('c_ver_d'),t('c_ver_s'),'M8 2l6 3-6 3-6-3zM2 8l6 3 6-3M2 11l6 3 6-3'],\n      ['busca',t('c_bus_t'),t('c_bus_d'),t('c_bus_s'),'M7 4a3.3 3.3 0 100 6.6A3.3 3.3 0 007 4M11.2 11.2 14 14']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Media</div>'+\n          '<h1 class=\"h1\">'+t('hl1')+' <span class=\"g\">'+t('hl2')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('sub')+'</div></div>'+\n        '<div class=\"seed\">'+t('seed')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('c_upload_t')+'</div>'+\n          '<div class=\"st-box\"><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#e0c878\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">'+t('pay')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), dov=root.querySelector('[data-dov]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1,R=1, mobile=false;\n    var AMBER=[250,220,72], NOISE=[104,116,128], DIM=[150,142,112];\n    var TYPES=[[250,220,72,t('ty_pdf')],[245,165,72,t('ty_img')],[236,208,130,t('ty_docs')],[206,188,150,t('ty_outros')]];\n    var N=150, pts=[], ENDPTS=[];\n\n    function clamp01(v){ return v<0?0:(v>1?1:v); }\n    function easeIO(t){ t=clamp01(t); return t<0.5?2*t*t:1-Math.pow(-2*t+2,2)/2; }\n    function mix(a,b,f){ f=clamp01(f); return [a[0]+(b[0]-a[0])*f,a[1]+(b[1]-a[1])*f,a[2]+(b[2]-a[2])*f]; }\n    function rr(x,y,w,h,r){ fx.beginPath(); fx.moveTo(x+r,y); fx.arcTo(x+w,y,x+w,y+h,r); fx.arcTo(x+w,y+h,x,y+h,r); fx.arcTo(x,y+h,x,y,r); fx.arcTo(x,y,x+w,y,r); fx.closePath(); }\n\n    function build(){ pts=[];\n      for(var i=0;i<N;i++){\n        pts.push({ ty:i%4, ph:Math.random()*6.2832, delay:Math.random()*0.9, emit:Math.random(),\n          side:Math.floor(Math.random()*4), seed:Math.random(), vl:i%5, x:0,y:0 });\n      }\n      computeLayouts(); pts.forEach(function(p){ p.x=p.gx; p.y=p.gy; });\n    }\n    function computeLayouts(){\n      var SW=R*0.30, SH=R*0.34;\n      var cols=Math.max(1,Math.round(Math.sqrt(N*SW/SH))), rows=Math.ceil(N/cols);\n      var scols=Math.max(1,Math.round(Math.sqrt(N*1.5))), srows=Math.ceil(N/scols);\n      var cnt=[0,0,0,0], per=6, matchStart=Math.floor(N*0.44);\n      pts.forEach(function(p,i){\n        var cx=i%cols, cy=Math.floor(i/cols);\n        p.gx=-SW+(cx+0.5)*(2*SW/cols); p.gy=-SH+(cy+0.5)*(2*SH/rows);\n        var m=1.28;\n        if(p.side===0){ p.ex=-R*m; p.ey=(p.seed*2-1)*R*0.82; }\n        else if(p.side===1){ p.ex=R*m; p.ey=(p.seed*2-1)*R*0.82; }\n        else if(p.side===2){ p.ex=(p.seed*2-1)*R*0.82; p.ey=-R*m; }\n        else { p.ex=(p.seed*2-1)*R*0.82; p.ey=R*m; }\n        var slot=cnt[p.ty]++;\n        var colX=(p.ty-1.5)*R*0.42, bx=slot%per, by=Math.floor(slot/per);\n        p.bx=colX+(bx-(per-1)/2)*R*0.045; p.by=-R*0.28+by*R*0.072;\n        var lw=R*0.20, lh=R*0.075;\n        p.vlx=(p.seed*2-1)*lw + (p.vl-2)*R*0.05;\n        p.vly=((p.ph/6.2832)*2-1)*lh - (p.vl-2)*R*0.09;\n        var sx=i%scols, sy=Math.floor(i/scols);\n        p.sgx=(-0.92+(sx+0.5)*(1.84/scols))*R; p.sgy=(-0.72+(sy+0.5)*(1.44/srows))*R;\n        p.match=(i>=matchStart && i<matchStart+9);\n      });\n      ENDPTS=[]; var EN=9;\n      for(var e=0;e<EN;e++){ var a=(e/EN)*6.2832-1.1; ENDPTS.push([Math.cos(a)*R*0.82, Math.sin(a)*R*0.80]); }\n    }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; mobile=W<=1080;\n      CBW=CBH=mobile?Math.min(W-48,420):560; CX=mobile?W/2:W*0.30; CY=mobile?CBH/2:Math.min(H*0.46,520);\n      if(mobile){ core.style.position='relative'; core.style.margin='18px auto 0'; core.style.left='auto'; core.style.top='auto'; if(head)head.style.left=''; if(seed)seed.style.right=''; }\n      else { core.style.position='absolute'; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); R=CBW/2;\n      if(!pts.length)build(); else computeLayouts(); }\n    layout(); d2.on(window,'resize',layout);\n\n    var mode='upload', mx=9999,my=0,hasM=false,energy=0,t0=performance.now(),run=true,raf=null,modeStart=performance.now();\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); mx=(e.clientX-r.left)-CBW/2; my=(e.clientY-r.top)-CBH/2; hasM=true; });\n    d2.on(st,'pointerleave',function(){ hasM=false; });\n\n    function target(p,i,mt){\n      if(mode==='upload'){ var pr=easeIO((mt-p.delay*1.1)/1.2); return [p.ex+(p.gx-p.ex)*pr, p.ey+(p.gy-p.ey)*pr, mix(NOISE,AMBER,pr), 0.35+pr*0.65]; }\n      if(mode==='organiza'){ var bf=easeIO((mt-0.1)/1.25); return [p.gx+(p.bx-p.gx)*bf, p.gy+(p.by-p.gy)*bf, TYPES[p.ty], 1]; }\n      if(mode==='entrega'){ var period=1.15, f=((mt+p.emit*period)%period)/period; var ep=ENDPTS[i%ENDPTS.length]||[0,0]; var k=easeIO(f); var vis=1-Math.abs(f-0.5)*2; return [ep[0]*k, ep[1]*k, AMBER, 0.30+0.70*vis]; }\n      if(mode==='versoes'){ var appear=clamp01((mt-p.vl*0.42)/0.6); return [p.vlx, p.vly+(1-appear)*R*0.12, AMBER, 0.22+0.78*appear]; }\n      if(mode==='busca'){ return [p.sgx, p.sgy, p.match?AMBER:DIM, p.match?1:0.5]; }\n      return [p.gx,p.gy,AMBER,1];\n    }\n    function drawChrome(mt){\n      if(mode==='upload'){ var SW=R*0.31, SH=R*0.35; fx.strokeStyle='rgba(250,220,72,.18)'; fx.lineWidth=1; rr(-SW,-SH,SW*2,SH*2,11); fx.stroke(); }\n      if(mode==='organiza'){ var GBW=R*0.30, GBY=-R*0.32, GBH=R*0.54; fx.strokeStyle='rgba(250,220,72,.18)'; fx.lineWidth=1; for(var gi=0;gi<4;gi++){ var gcx=(gi-1.5)*R*0.42; rr(gcx-GBW/2, GBY, GBW, GBH, 10); fx.stroke(); } }\n      if(mode==='entrega'){\n        for(var e=0;e<ENDPTS.length;e++){ var ep=ENDPTS[e]; fx.strokeStyle='rgba(250,220,72,.11)'; fx.lineWidth=1; fx.beginPath(); fx.moveTo(0,0); fx.lineTo(ep[0],ep[1]); fx.stroke(); fx.fillStyle='rgba(250,220,72,.55)'; fx.beginPath(); fx.arc(ep[0],ep[1],3,0,6.2832); fx.fill(); }\n        fx.fillStyle='rgba(250,220,72,.95)'; rr(-R*0.055,-R*0.07,R*0.11,R*0.14,3); fx.fill();\n      }\n      if(mode==='versoes'){ for(var l=0;l<5;l++){ var appear=clamp01((mt-l*0.42)/0.6); if(appear<=0.02)continue; var cx=(l-2)*R*0.05, cy=-(l-2)*R*0.09, lw=R*0.22, lh=R*0.10; fx.strokeStyle='rgba(250,220,72,'+(0.09+appear*0.24).toFixed(3)+')'; fx.lineWidth=1; rr(cx-lw,cy-lh,lw*2,lh*2,7); fx.stroke(); } }\n      if(mode==='busca'){ var qx=Math.cos(mt*0.9)*R*0.62, qy=Math.sin(mt*1.12)*R*0.44; var g=fx.createRadialGradient(qx,qy,0,qx,qy,26); g.addColorStop(0,'rgba(250,220,72,.5)'); g.addColorStop(1,'rgba(250,220,72,0)'); fx.fillStyle=g; fx.beginPath(); fx.arc(qx,qy,26,0,6.2832); fx.fill(); fx.fillStyle='rgba(255,245,210,.95)'; fx.beginPath(); fx.arc(qx,qy,3,0,6.2832); fx.fill(); }\n    }\n    function frame(t){ if(!core.isConnected)return; if(!run)return; var mt=(t-modeStart)/1000;\n      if(energy>0)energy-=0.01;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      drawChrome(mt);\n      fx.globalCompositeOperation='lighter';\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; var tg=target(p,i,mt);\n        p.x+=(tg[0]-p.x)*0.11; p.y+=(tg[1]-p.y)*0.11;\n        var col=tg[2]||AMBER, base=(tg[3]==null?1:tg[3]);\n        var inten=base*0.72;\n        if(hasM){ var d=Math.hypot(mx-p.x,my-p.y); inten=Math.max(inten, 1-d/(R*0.55)); }\n        var a=(0.20+inten*0.62+energy*0.20); if(a>1)a=1; if(a<0)a=0;\n        var w=2.6, h=3.4;\n        fx.fillStyle='rgba('+(col[0]|0)+','+(col[1]|0)+','+(col[2]|0)+','+a.toFixed(3)+')';\n        fx.fillRect(p.x-w/2, p.y-h/2, w, h);\n      }\n      fx.globalCompositeOperation='source-over';\n      if(mode==='organiza'){ fx.font='9px ui-monospace,monospace'; fx.textAlign='center'; TYPES.forEach(function(tp,ti){ fx.fillStyle='rgba('+tp[0]+','+tp[1]+','+tp[2]+',.82)'; fx.fillText('/'+tp[3], (ti-1.5)*R*0.42, R*0.42); }); }\n      fx.restore();\n      raf=requestAnimationFrame(frame);\n    }\n    function drawStatic(){ fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2); pts.forEach(function(p){ fx.fillStyle='rgba(250,220,72,.7)'; fx.fillRect(p.gx-1.3,p.gy-1.7,2.6,3.4); }); fx.restore(); }\n    if(!reduce){ raf=requestAnimationFrame(function(t){t0=t;modeStart=t;frame(t);}); }\n    else { drawStatic(); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;modeStart=performance.now();raf=requestAnimationFrame(frame);} } else { run=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.02}); io.observe(st);\n\n    var active='upload', timers=[], intervals=[];\n    function clearD(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; dov.innerHTML=''; }\n    var NAMES={upload:t('c_upload_t'),organiza:t('c_org_t'),entrega:t('c_ent_t'),versoes:t('c_ver_t'),busca:t('c_bus_t')};\n    function run2(k){ active=k; mode=k; energy=1; modeStart=performance.now(); clearD();\n      sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n\n      if(k==='upload'){\n        var files=[['contrato.pdf','2.4 MB'],['banner.png','860 KB'],['vendas.xlsx','1.1 MB'],['review.mp4','18 MB']];\n        dov.innerHTML='<div class=\"q\" style=\"font-size:12px\">'+t('u_send')+'<span class=\"cur\"></span></div>'+\n          '<div style=\"margin-top:8px\">'+files.map(function(f,n){ return '<div class=\"frow\" data-u'+n+'><span class=\"nm\">'+f[0]+'</span><span class=\"sz\">'+f[1]+'</span><span class=\"ok\">✓</span></div>'; }).join('')+'</div>'+\n          '<div class=\"prog\"><i data-bar></i></div>';\n        files.forEach(function(f,n){ timers.push(setTimeout(function(){ var e=dov.querySelector('[data-u'+n+']'); if(e)e.classList.add('on'); },300+n*230)); timers.push(setTimeout(function(){ var e=dov.querySelector('[data-u'+n+']'); if(e)e.classList.add('done'); },300+n*230+520)); });\n        var pc=0; var iv=setInterval(function(){ var bar=dov.querySelector('[data-bar]'); if(!bar||!bar.isConnected){clearInterval(iv);return;} pc+=Math.round(3+Math.random()*6); if(pc>=100){pc=100;clearInterval(iv);} bar.style.width=pc+'%'; },110); intervals.push(iv);\n      }\n      else if(k==='organiza'){\n        var tree=[['fold',t('org_f1'),0],['file','contrato.pdf',1],['file','nota-fiscal.pdf',1],['fold',t('org_f2'),0],['file','banner.png',1],['fold',t('org_f3'),0],['file','vendas.xlsx',1]];\n        dov.innerHTML='<div class=\"q\" style=\"font-size:12px\">'+t('org_lbl')+'</div><div class=\"tree\" style=\"margin-top:8px\">'+\n          tree.map(function(r,n){ var pad=r[2]?'padding-left:16px':''; if(r[0]==='fold') return '<div class=\"row\" data-t'+n+' style=\"'+pad+'\"><span class=\"fold\">▸ '+r[1]+'</span></div>'; return '<div class=\"row\" data-t'+n+' style=\"'+pad+'\"><span class=\"file\">· '+r[1]+'</span></div>'; }).join('')+'</div>';\n        tree.forEach(function(r,n){ timers.push(setTimeout(function(){ var e=dov.querySelector('[data-t'+n+']'); if(e)e.classList.add('on'); },250+n*200)); });\n      }\n      else if(k==='entrega'){\n        var pops=[[t('pop1'),'12 ms'],[t('pop2'),'21 ms'],[t('pop3'),'28 ms'],[t('pop4'),'34 ms']];\n        dov.innerHTML='<div class=\"q\" style=\"font-size:12px\">'+t('ent_lbl')+'</div>'+\n          '<div class=\"rec\" style=\"margin-top:8px\"><span class=\"k\">'+t('ent_lat')+'</span> <span class=\"v\" data-ms>—</span> <span class=\"t\">p50 · edge</span></div>'+\n          '<div class=\"rec\"><span class=\"k\">'+t('ent_reg')+'</span> <span class=\"v\" data-rg>0</span> <span class=\"t\">CDN</span></div>'+\n          '<div style=\"margin-top:9px\">'+pops.map(function(p,n){ return '<div class=\"pop\" data-pp'+n+'>'+p[0]+'<b>'+p[1]+'</b></div>'; }).join('')+'</div>';\n        var ms=180; var iv=setInterval(function(){ var el=dov.querySelector('[data-ms]'); if(!el||!el.isConnected){clearInterval(iv);return;} ms-=Math.round(8+Math.random()*14); if(ms<=14){ms=14;clearInterval(iv);} el.textContent=ms+' ms'; },90); intervals.push(iv);\n        var rg=0; var iv2=setInterval(function(){ var el=dov.querySelector('[data-rg]'); if(!el||!el.isConnected){clearInterval(iv2);return;} if(rg>=pops.length){clearInterval(iv2);return;} rg++; el.textContent=rg; var e=dov.querySelector('[data-pp'+(rg-1)+']'); if(e)e.classList.add('on'); },300); intervals.push(iv2);\n      }\n      else if(k==='versoes'){\n        dov.innerHTML=t('demo_versoes');\n        [0,1,2].forEach(function(n){ timers.push(setTimeout(function(){ var e=dov.querySelector('[data-vv'+n+']'); if(e)e.classList.add('on'); },300+n*280)); });\n        timers.push(setTimeout(function(){ var e=dov.querySelector('[data-roll]'); if(e)e.classList.add('on'); },1400));\n      }\n      else if(k==='busca'){\n        dov.innerHTML=t('demo_busca');\n        ['data-h1','data-h2','data-h3'].forEach(function(h,i){ timers.push(setTimeout(function(){ var e=dov.querySelector('['+h+']'); if(e)e.classList.add('on'); },900+i*400)); });\n      }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('upload');\n    if(!reduce){ timers.push(setTimeout(function(){ if(active==='upload') run2('organiza'); },4600)); }\n  }\n}\n"}}}}}}}},{"_id":"6a7b57a261323f17b3885e43","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-ui","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COMP_T(){ return {\npt:{hl1:'A interface que se monta.',hl2:'Sozinha, com seus dados.',sub:'Telas, componentes e estado — descritos em linguagem natural, montados sozinhos com os seus dados. Escolha uma capacidade: ela se monta ao vivo.',seed:'interface · ui<br>monta · <b>telas·dados·estado</b><br>constrói · <b>sem código</b>',pay:'<b>Descreveu</b> · montou · <b>no ar</b>',c_telas_t:'Telas',c_telas_d:'viram grid de dashboard',c_telas_s:'layout automático',c_comp_t:'Componentes',c_comp_d:'biblioteca que compõe',c_comp_s:'arrasta e monta',c_estado_t:'Estado',c_estado_d:'muda um dado, tudo reage',c_estado_s:'reativo',c_resp_t:'Responsivo',c_resp_d:'desktop e mobile sozinho',c_resp_s:'reflow',c_semc_t:'Sem código',c_semc_d:'descreveu, montou',c_semc_s:'linguagem natural',demo_telas:'<div class=\"rec\"><div class=\"k\">montando tela…</div><div class=\"chk\" data-s1 style=\"margin-top:8px\">◆ topbar + navegação</div><div class=\"chk\" data-s2>◆ sidebar · 5 itens</div><div class=\"chk\" data-s3>◆ grid · 12 cards</div><div class=\"chk\" data-s4 style=\"color:#66FA48;margin-top:6px\">✓ tela pronta</div></div>',demo_comp:'<div class=\"rec\"><div class=\"k\">biblioteca</div><div style=\"display:flex;gap:26px;margin-top:6px\"><div><div class=\"hit\" data-c1>▸ Botão</div><div class=\"hit\" data-c2>▸ Campo</div><div class=\"hit\" data-c3>▸ Card</div></div><div><div class=\"hit\" data-c4>▸ Tabela</div><div class=\"hit\" data-c5>▸ Gráfico</div><div class=\"hit\" data-c6>▸ Modal</div></div></div><div class=\"chk\" data-cc style=\"margin-top:10px;color:#66FA48\">◆ arraste · a tela compõe</div></div>',demo_estado:'<div class=\"rec\"><div><span class=\"k\">estoque</span> = <span class=\"v\" data-val>128</span> <span class=\"t\">muda ao vivo</span></div><div style=\"height:1px;background:rgba(255,255,255,.08);margin:8px 0\"></div><div class=\"hit\" data-d1>card \"disponível\" · <span style=\"color:#66FA48\">atualizou</span></div><div class=\"hit\" data-d2>gráfico de vendas · <span style=\"color:#66FA48\">atualizou</span></div><div class=\"hit\" data-d3>badge \"baixo\" · <span style=\"color:#66FA48\">acendeu</span></div></div>',demo_resp:'<div class=\"rec\"><div data-rd style=\"transition:.3s\"><span class=\"k\">1440px</span> · <span class=\"v\"><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i></span> <span class=\"t\">3 colunas</span></div><div style=\"text-align:center;margin:10px 0;color:#7e8ffa\">↕ reflow automático</div><div data-rm style=\"transition:.3s\"><span class=\"k\">&nbsp;390px</span> · <span class=\"v\"><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i></span> <span class=\"t\">1 coluna</span></div></div>',demo_semc:'<div class=\"q\">\"tela de pedidos com busca e uma tabela\"<span class=\"cur\"></span></div><div style=\"height:1px;background:rgba(255,255,255,.08);margin:10px 0\"></div><div class=\"hit\" data-q1>▸ busca no topo</div><div class=\"hit\" data-q2>▸ tabela de pedidos</div><div class=\"hit\" data-q3 style=\"color:#66FA48\">✓ montado · no ar</div>'},\nen:{hl1:'The interface that builds itself.',hl2:'On its own, with your data.',sub:'Screens, components and state — described in natural language, assembled on their own with your data. Pick a capability: it builds itself live.',seed:'interface · ui<br>builds · <b>screens·data·state</b><br>ships · <b>no code</b>',pay:'<b>Described</b> · assembled · <b>live</b>',c_telas_t:'Screens',c_telas_d:'become a dashboard grid',c_telas_s:'automatic layout',c_comp_t:'Components',c_comp_d:'a library that composes',c_comp_s:'drag and assemble',c_estado_t:'State',c_estado_d:'change one value, everything reacts',c_estado_s:'reactive',c_resp_t:'Responsive',c_resp_d:'desktop and mobile on its own',c_resp_s:'reflow',c_semc_t:'No code',c_semc_d:'described, assembled',c_semc_s:'natural language',demo_telas:'<div class=\"rec\"><div class=\"k\">building screen…</div><div class=\"chk\" data-s1 style=\"margin-top:8px\">◆ topbar + navigation</div><div class=\"chk\" data-s2>◆ sidebar · 5 items</div><div class=\"chk\" data-s3>◆ grid · 12 cards</div><div class=\"chk\" data-s4 style=\"color:#66FA48;margin-top:6px\">✓ screen ready</div></div>',demo_comp:'<div class=\"rec\"><div class=\"k\">library</div><div style=\"display:flex;gap:26px;margin-top:6px\"><div><div class=\"hit\" data-c1>▸ Button</div><div class=\"hit\" data-c2>▸ Field</div><div class=\"hit\" data-c3>▸ Card</div></div><div><div class=\"hit\" data-c4>▸ Table</div><div class=\"hit\" data-c5>▸ Chart</div><div class=\"hit\" data-c6>▸ Modal</div></div></div><div class=\"chk\" data-cc style=\"margin-top:10px;color:#66FA48\">◆ drag · the screen composes</div></div>',demo_estado:'<div class=\"rec\"><div><span class=\"k\">stock</span> = <span class=\"v\" data-val>128</span> <span class=\"t\">updates live</span></div><div style=\"height:1px;background:rgba(255,255,255,.08);margin:8px 0\"></div><div class=\"hit\" data-d1>card \"available\" · <span style=\"color:#66FA48\">updated</span></div><div class=\"hit\" data-d2>sales chart · <span style=\"color:#66FA48\">updated</span></div><div class=\"hit\" data-d3>badge \"low\" · <span style=\"color:#66FA48\">lit up</span></div></div>',demo_resp:'<div class=\"rec\"><div data-rd style=\"transition:.3s\"><span class=\"k\">1440px</span> · <span class=\"v\"><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i></span> <span class=\"t\">3 columns</span></div><div style=\"text-align:center;margin:10px 0;color:#7e8ffa\">↕ automatic reflow</div><div data-rm style=\"transition:.3s\"><span class=\"k\">&nbsp;390px</span> · <span class=\"v\"><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i></span> <span class=\"t\">1 column</span></div></div>',demo_semc:'<div class=\"q\">\"an orders screen with search and a table\"<span class=\"cur\"></span></div><div style=\"height:1px;background:rgba(255,255,255,.08);margin:10px 0\"></div><div class=\"hit\" data-q1>▸ search at the top</div><div class=\"hit\" data-q2>▸ orders table</div><div class=\"hit\" data-q3 style=\"color:#66FA48\">✓ assembled · live</div>'},\nes:{hl1:'La interfaz que se monta.',hl2:'Sola, con tus datos.',sub:'Pantallas, componentes y estado — descritos en lenguaje natural, montados solos con tus datos. Elige una capacidad: se monta en vivo.',seed:'interfaz · ui<br>monta · <b>pantallas·datos·estado</b><br>construye · <b>sin código</b>',pay:'<b>Lo describiste</b> · se montó · <b>en vivo</b>',c_telas_t:'Pantallas',c_telas_d:'se vuelven grid de dashboard',c_telas_s:'layout automático',c_comp_t:'Componentes',c_comp_d:'biblioteca que compone',c_comp_s:'arrastra y monta',c_estado_t:'Estado',c_estado_d:'cambia un dato, todo reacciona',c_estado_s:'reactivo',c_resp_t:'Responsivo',c_resp_d:'desktop y mobile solo',c_resp_s:'reflow',c_semc_t:'Sin código',c_semc_d:'lo describiste, se montó',c_semc_s:'lenguaje natural',demo_telas:'<div class=\"rec\"><div class=\"k\">montando pantalla…</div><div class=\"chk\" data-s1 style=\"margin-top:8px\">◆ topbar + navegación</div><div class=\"chk\" data-s2>◆ sidebar · 5 ítems</div><div class=\"chk\" data-s3>◆ grid · 12 cards</div><div class=\"chk\" data-s4 style=\"color:#66FA48;margin-top:6px\">✓ pantalla lista</div></div>',demo_comp:'<div class=\"rec\"><div class=\"k\">biblioteca</div><div style=\"display:flex;gap:26px;margin-top:6px\"><div><div class=\"hit\" data-c1>▸ Botón</div><div class=\"hit\" data-c2>▸ Campo</div><div class=\"hit\" data-c3>▸ Card</div></div><div><div class=\"hit\" data-c4>▸ Tabla</div><div class=\"hit\" data-c5>▸ Gráfico</div><div class=\"hit\" data-c6>▸ Modal</div></div></div><div class=\"chk\" data-cc style=\"margin-top:10px;color:#66FA48\">◆ arrastra · la pantalla se compone</div></div>',demo_estado:'<div class=\"rec\"><div><span class=\"k\">stock</span> = <span class=\"v\" data-val>128</span> <span class=\"t\">cambia en vivo</span></div><div style=\"height:1px;background:rgba(255,255,255,.08);margin:8px 0\"></div><div class=\"hit\" data-d1>card \"disponible\" · <span style=\"color:#66FA48\">actualizó</span></div><div class=\"hit\" data-d2>gráfico de ventas · <span style=\"color:#66FA48\">actualizó</span></div><div class=\"hit\" data-d3>badge \"bajo\" · <span style=\"color:#66FA48\">se encendió</span></div></div>',demo_resp:'<div class=\"rec\"><div data-rd style=\"transition:.3s\"><span class=\"k\">1440px</span> · <span class=\"v\"><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i></span> <span class=\"t\">3 columnas</span></div><div style=\"text-align:center;margin:10px 0;color:#7e8ffa\">↕ reflow automático</div><div data-rm style=\"transition:.3s\"><span class=\"k\">&nbsp;390px</span> · <span class=\"v\"><i style=\"display:inline-block;width:5px;height:12px;background:#6E86FF;border-radius:1px;margin:0 1.5px;vertical-align:-1px\"></i></span> <span class=\"t\">1 columna</span></div></div>',demo_semc:'<div class=\"q\">\"pantalla de pedidos con búsqueda y una tabla\"<span class=\"cur\"></span></div><div style=\"height:1px;background:rgba(255,255,255,.08);margin:10px 0\"></div><div class=\"hit\" data-q1>▸ búsqueda arriba</div><div class=\"hit\" data-q2>▸ tabla de pedidos</div><div class=\"hit\" data-q3 style=\"color:#66FA48\">✓ montado · en vivo</div>'}\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #0e1330 0%, #080b1c 46%, #05070f 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:46%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#8a90c0; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#4866FA; box-shadow:0 0 12px 2px #4866FA; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F2F3F8; }\n.h1 .g{ color:#8086ac; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9498b8; max-width:40ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#4f5470; line-height:1.7; }\n.seed b{ color:#8ea0ff; font-weight:400; font-variant-numeric:tabular-nums; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#7e8ffa; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n.dov{ position:absolute; inset:0; padding:18px; font-family:ui-monospace,Menlo,monospace; }\n.rec{ font-size:12.5px; line-height:1.7; }\n.rec .k{ color:#8489a8; } .rec .v{ color:#EDECEF; } .rec .t{ color:#6E86FF; font-size:10px; }\n.chk{ opacity:0; transition:.3s; color:#c7cbe6; } .chk.on{ opacity:1; }\n.q{ font-size:13px; color:#EDECEF; } .q .cur{ display:inline-block; width:8px;height:15px;background:#4866FA;vertical-align:-2px;margin-left:1px;animation:bl 1s steps(2) infinite } @keyframes bl{50%{opacity:0}}\n.hit{ margin-top:6px; font-size:12px; color:#d7dcf0; opacity:0; transform:translateY(6px); transition:.34s; } .hit.on{ opacity:1; transform:none; }\n.big{ position:absolute; left:0; right:0; top:50%; transform:translateY(-50%); text-align:center; font-size:clamp(30px,4vw,52px); color:#F2F3F8; font-variant-numeric:tabular-nums; letter-spacing:-.02em; } .big small{ display:block; font-size:11px; letter-spacing:.14em; color:#8489a8; text-transform:uppercase; margin-top:8px; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(72,102,250,.08); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#4866FA; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8489a8; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5a5f7a; text-transform:uppercase; } .fc.on .fs{ color:#7e8ffa; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5a5f7a; } .payoff b{ color:#8ea0ff; }\n@media (max-width:1080px){ .st{ display:flex; flex-direction:column; min-height:0; height:auto; } .head{ position:relative; top:auto; left:auto; max-width:none; padding:34px 24px 0; } .seed{ display:none } canvas.core{ position:relative; }\n  .stage{ position:relative; width:auto; padding:0 24px; } .cards{ position:relative; bottom:auto; flex-wrap:wrap; margin-top:20px; } .fc{ max-width:none; flex:1 1 40%; border-bottom:1px solid rgba(255,255,255,.05); } .payoff{ position:relative; bottom:auto; margin:16px 0 30px; } }\n@media (prefers-reduced-motion:reduce){ .q .cur{ animation:none } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['telas',t('c_telas_t'),t('c_telas_d'),t('c_telas_s'),'M2.5 3h4v4h-4zM9.5 3h4v4h-4zM2.5 9h4v4h-4zM9.5 9h4v4h-4z'],\n      ['componentes',t('c_comp_t'),t('c_comp_d'),t('c_comp_s'),'M2.5 3h4v4h-4zM2.5 9h4v4h-4zM9 4h4.5M9 7h4.5M9 11h3'],\n      ['estado',t('c_estado_t'),t('c_estado_d'),t('c_estado_s'),'M2 8h3l2-4 2 8 1.5-4H14'],\n      ['responsivo',t('c_resp_t'),t('c_resp_d'),t('c_resp_s'),'M2.5 3.5h6.5v7h-6.5zM10.5 5.5h3v5.5h-3M2.5 12.5h6.5'],\n      ['semcodigo',t('c_semc_t'),t('c_semc_d'),t('c_semc_s'),'M3 4l3.5 3.5L3 11M8.5 11.5H13']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · UI</div>'+\n          '<h1 class=\"h1\">'+t('hl1')+' <span class=\"g\">'+t('hl2')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('sub')+'</div></div>'+\n        '<div class=\"seed\">'+t('seed')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('c_telas_t')+'</div>'+\n          '<div class=\"st-box\"><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#8ea0ff\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\">'+t('pay')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=COMP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), dov=root.querySelector('[data-dov]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1,R=1, mobile=false;\n    var TYPES=['#4866FA','#6E86FF','#8A93B8','#B7C2FF'];\n    var N=20, pts=[];\n    function L4(a,b,t){ return a+(b-a)*t; }\n    function rr(x,y,w,h,r){ if(w<0){x+=w;w=-w;} if(h<0){h=Math.abs(h);} r=Math.max(0,Math.min(r,w/2,h/2)); fx.beginPath(); fx.moveTo(x+r,y); fx.arcTo(x+w,y,x+w,y+h,r); fx.arcTo(x+w,y+h,x,y+h,r); fx.arcTo(x,y+h,x,y,r); fx.arcTo(x,y,x+w,y,r); fx.closePath(); }\n    function build(){ pts=[]; for(var i=0;i<N;i++){ pts.push({ ty:i%TYPES.length, k:i, ph:Math.random()*6.28, x:0,y:0,w:16,h:11 }); }\n      computeLayouts(); pts.forEach(function(p){ p.x=p.home[0]; p.y=p.home[1]; p.w=p.home[2]; p.h=p.home[3]; }); }\n    function computeLayouts(){\n      var LW=R*1.62, LH=R*1.5, Lx=-LW/2, Ty=-LH/2, g=Math.max(6,R*0.028);\n      var tbH=LH*0.09, bodyY=Ty+tbH+g, bodyH=LH-tbH-g, sbW=LW*0.19;\n      var cX=Lx+sbW+g, cW=LW-sbW-g, kh=bodyH*0.20;\n      var gy=bodyY+kh+g, gh=bodyH-kh-g, rest=N-6, gcols=3, grows=Math.ceil(rest/gcols);\n      var gcw=(cW-(gcols-1)*g)/gcols, gch=(gh-(grows-1)*g)/grows;\n      var pcols=5, prows=Math.ceil(N/pcols), pw=LW*0.66, ph=LH*0.62, px0=-pw/2, py0=-ph/2;\n      var tw=(pw-(pcols-1)*g)/pcols, thh=(ph-(prows-1)*g)/prows;\n      var dcols=3, drest=N-1, drows=Math.ceil(drest/dcols), dy=Ty+tbH+g, dh=LH-tbH-g;\n      var dcw=(LW-(dcols-1)*g)/dcols, dch=(dh-(drows-1)*g)/drows;\n      var mw=LW*0.34, mx=-mw/2, mrest=N-1, mg=g*0.55, mrh=(LH-tbH-g-(mrest-1)*mg)/mrest;\n      var fw=LW*0.52, fx0=-fw/2, fhH=tbH*1.1, frest=N-1, frg=g*0.9, frh=(LH-fhH-g-(frest-1)*frg)/frest;\n      pts.forEach(function(p,i){\n        var ha=i*2.399, hr=R*0.5*Math.sqrt(i/N); p.home=[Math.cos(ha)*hr, Math.sin(ha)*hr, 16, 11];\n        if(i===0) p.scr=[Lx,Ty,LW,tbH];\n        else if(i===1) p.scr=[Lx,bodyY,sbW,bodyH];\n        else if(i<6) p.scr=[cX+(i-2)*(cW/4), bodyY, cW/4-g, kh];\n        else { var j=i-6, cc=j%gcols, rw=Math.floor(j/gcols); p.scr=[cX+cc*(gcw+g), gy+rw*(gch+g), gcw, gch]; }\n        p.pal=[px0+(i%pcols)*(tw+g), py0+Math.floor(i/pcols)*(thh+g), tw, thh];\n        if(i===0) p.rspD=[Lx,Ty,LW,tbH];\n        else { var jd=i-1, dc=jd%dcols, dr=Math.floor(jd/dcols); p.rspD=[Lx+dc*(dcw+g), dy+dr*(dch+g), dcw, dch]; }\n        if(i===0) p.rspM=[mx,Ty,mw,tbH];\n        else { var jm=i-1; p.rspM=[mx, Ty+tbH+g+jm*(mrh+mg), mw, mrh]; }\n        if(i===0) p.cod=[fx0,Ty,fw,fhH];\n        else { var jf=i-1; var ww=(jf%2===0)? fw*0.52 : fw; if(i===N-1) ww=fw*0.42; p.cod=[fx0, Ty+fhH+g+jf*(frh+frg), ww, frh]; }\n      });\n    }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; mobile=W<=1080;\n      CBW=CBH=mobile?Math.min(W-48,420):560; CX=mobile?W/2:W*0.30; CY=mobile?CBH/2:Math.min(H*0.46,520);\n      if(mobile){ core.style.position='relative'; core.style.margin='18px auto 0'; core.style.left='auto'; core.style.top='auto'; if(head)head.style.left=''; if(seed)seed.style.right=''; }\n      else { core.style.position='absolute'; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; stage.style.left=(CX+228)+'px'; stage.style.top=(CY-125)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); R=CBW/2;\n      if(!pts.length)build(); else computeLayouts(); }\n    layout(); d2.on(window,'resize',layout);\n\n    var mode='telas', mx=9999,my=0,hasM=false,energy=0,t0=performance.now(),run=true,raf=null;\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); mx=(e.clientX-r.left)-CBW/2; my=(e.clientY-r.top)-CBH/2; hasM=true; });\n    d2.on(st,'pointerleave',function(){ hasM=false; });\n\n    var SRC=2, DEP={6:0.16, 9:0.26, 12:0.36, 7:0.46};\n    function target(p,i,tt){\n      if(mode==='telas'||mode==='estado') return p.scr;\n      if(mode==='componentes') return p.pal;\n      if(mode==='semcodigo') return p.cod;\n      if(mode==='responsivo'){ var b=(Math.sin(tt*1.05)*0.5+0.5); b=b*b*(3-2*b);\n        return [L4(p.rspD[0],p.rspM[0],b), L4(p.rspD[1],p.rspM[1],b), L4(p.rspD[2],p.rspM[2],b), L4(p.rspD[3],p.rspM[3],b)]; }\n      return p.home;\n    }\n    function pulseWave(ph,d){ var x=ph-d; if(x<0)x+=1; return x<0.13? (1-x/0.13) : 0; }\n    function frame(t){ if(!core.isConnected)return; if(!run)return; var tt=(t-t0)/1000;\n      if(energy>0)energy-=0.01;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      var eph=(tt%2.2)/2.2;\n      if(mode==='estado'){ var s=pts[SRC]; var scx=s.x+s.w/2, scy=s.y+s.h/2;\n        Object.keys(DEP).forEach(function(kk){ var dp=pts[+kk]; if(!dp)return; var w=pulseWave(eph,DEP[kk]); if(w<=0)return;\n          fx.strokeStyle='rgba(110,134,255,'+(w*0.5).toFixed(3)+')'; fx.lineWidth=1; fx.beginPath(); fx.moveTo(scx,scy); fx.lineTo(dp.x+dp.w/2, dp.y+dp.h/2); fx.stroke(); }); }\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; var tg=target(p,i,tt);\n        p.x+=(tg[0]-p.x)*0.08; p.y+=(tg[1]-p.y)*0.08; p.w+=(tg[2]-p.w)*0.08; p.h+=(tg[3]-p.h)*0.08;\n        var col=TYPES[p.ty]; var inten=0.42+Math.sin(tt*1.6+p.ph)*0.06;\n        var bcx=p.x+p.w/2, bcy=p.y+p.h/2;\n        if(hasM){ var dd=Math.hypot(mx-bcx,my-bcy); inten=Math.max(inten, 1-dd/(R*0.55)); }\n        if(mode==='estado'){ if(i===SRC) inten=Math.max(inten, pulseWave(eph,0)); if(DEP[i]!=null) inten=Math.max(inten, pulseWave(eph,DEP[i])); }\n        var rrv=parseInt(col.slice(1,3),16),gg=parseInt(col.slice(3,5),16),bb=parseInt(col.slice(5,7),16);\n        var a=(0.16+inten*0.62+energy*0.22); if(a>1)a=1;\n        var rad=Math.max(1.5, Math.min(4, p.h*0.28, p.w*0.28));\n        fx.fillStyle='rgba('+rrv+','+gg+','+bb+','+a.toFixed(3)+')'; rr(p.x,p.y,p.w,p.h,rad); fx.fill();\n        fx.strokeStyle='rgba('+rrv+','+gg+','+bb+','+(a*0.4).toFixed(3)+')'; fx.lineWidth=1; rr(p.x,p.y,p.w,p.h,rad); fx.stroke();\n      }\n      fx.restore();\n      raf=requestAnimationFrame(frame);\n    }\n    if(!reduce){ raf=requestAnimationFrame(function(t){t0=t;frame(t);}); }\n    else { fx.save(); fx.translate(CBW/2,CBH/2); pts.forEach(function(p){ var col=TYPES[p.ty]; fx.fillStyle=col; rr(p.scr[0],p.scr[1],p.scr[2],p.scr[3],2); fx.fill(); }); fx.restore(); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;t0=performance.now();raf=requestAnimationFrame(frame);} } else { run=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.02}); io.observe(st);\n\n    var active='telas', timers=[], intervals=[];\n    function q(sel){ return dov.querySelector(sel); }\n    function clearD(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; dov.innerHTML=''; }\n    var NAMES={telas:t('c_telas_t'),componentes:t('c_comp_t'),estado:t('c_estado_t'),responsivo:t('c_resp_t'),semcodigo:t('c_semc_t')};\n    function reveal(ids, base, step){ ids.forEach(function(h,i){ timers.push(setTimeout(function(){ var e=q('['+h+']'); if(e)e.classList.add('on'); }, base+i*step)); }); }\n    function run2(k){ active=k; mode=k; energy=1; clearD(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='telas'){ dov.innerHTML=t('demo_telas');\n        reveal(['data-s1','data-s2','data-s3','data-s4'],450,420); }\n      else if(k==='componentes'){ dov.innerHTML=t('demo_comp');\n        reveal(['data-c1','data-c4','data-c2','data-c5','data-c3','data-c6'],400,180);\n        timers.push(setTimeout(function(){ var e=q('[data-cc]'); if(e)e.classList.add('on'); },1500)); }\n      else if(k==='estado'){ dov.innerHTML=t('demo_estado');\n        reveal(['data-d1','data-d2','data-d3'],300,160);\n        var v=128; var iv=setInterval(function(){ var el=q('[data-val]'); if(!el||!el.isConnected){clearInterval(iv);return;} v+=(Math.random()<0.5?-1:1)*Math.round(1+Math.random()*6); if(v<0)v=0; el.textContent=v;\n          ['data-d1','data-d2','data-d3'].forEach(function(h,i){ var e=q('['+h+']'); if(!e)return; e.classList.remove('on'); setTimeout(function(){ if(e.isConnected)e.classList.add('on'); },100+i*150); }); },1700); intervals.push(iv); }\n      else if(k==='responsivo'){ dov.innerHTML=t('demo_resp');\n        var flip=true; var iv=setInterval(function(){ var rd=q('[data-rd]'), rm=q('[data-rm]'); if(!rd||!rd.isConnected){clearInterval(iv);return;} rd.style.opacity=flip?'1':'.35'; rm.style.opacity=flip?'.35':'1'; flip=!flip; },1500); intervals.push(iv); }\n      else if(k==='semcodigo'){ dov.innerHTML=t('demo_semc');\n        reveal(['data-q1','data-q2','data-q3'],950,420); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('telas');\n    if(!reduce){ timers.push(setTimeout(function(){ if(active==='telas') run2('componentes'); },4600)); }\n  }\n}\n"}}}}}}}},{"_id":"6a7b5a6061323f17b38865e5","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-cashier","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction CASH_T(){ return {\n  pt:{ badge:'em breve', h1a:'Transação nativa.', h1b:'Num livro que ninguém apaga.', h1s:'Cobra, divide e concilia sozinho — cada centavo com origem, registrado para sempre. Escolha uma capacidade: ela acontece ao vivo.', seedA:'cashier · valor', seedB:'cobra · divide · <b>concilia</b>', seedC:'registro · <b>auditável</b>', n_cobra:'Cobra', d_cobra:'emite a cobrança', s_cobra:'POST · 201', n_divide:'Divide', d_divide:'split automático', s_divide:'vendedor·taxa·imposto', n_concilia:'Concilia', d_concilia:'bate cada centavo', s_concilia:'✓ conciliado', n_auditavel:'Auditável', d_auditavel:'trilha de lançamentos', s_auditavel:'ledger', n_tempo:'Tempo real', d_tempo:'transações ao vivo', s_tempo:'R$ / s', ty_vendedor:'vendedor', ty_taxa:'taxa', ty_imposto:'imposto', payoffA:'Cada centavo', payoffB:'com origem · conciliado', k_cliente:'cliente', div_check:'3 destinos · soma confere', conc_word:'conciliado', conc_check:'0 divergências', aud_charged:'cobrou', aud_concilia:'concilia', aud_paid:'pago', aud_check:'trilha imutável · cada lançamento', tempo_small:'R$ / segundo', tempo_caps:'POR SEGUNDO' },\n  en:{ badge:'soon', h1a:'Native transactions.', h1b:'In a book nobody can erase.', h1s:'It charges, splits and reconciles on its own — every cent with an origin, on record forever. Pick a capability: it happens live.', seedA:'cashier · value', seedB:'charge · split · <b>reconcile</b>', seedC:'record · <b>auditable</b>', n_cobra:'Charge', d_cobra:'issues the charge', s_cobra:'POST · 201', n_divide:'Split', d_divide:'automatic split', s_divide:'seller·fee·tax', n_concilia:'Reconcile', d_concilia:'matches every cent', s_concilia:'✓ reconciled', n_auditavel:'Auditable', d_auditavel:'trail of entries', s_auditavel:'ledger', n_tempo:'Real-time', d_tempo:'live transactions', s_tempo:'R$ / s', ty_vendedor:'seller', ty_taxa:'fee', ty_imposto:'tax', payoffA:'Every cent', payoffB:'with an origin · reconciled', k_cliente:'customer', div_check:'3 destinations · sum checks out', conc_word:'reconciled', conc_check:'0 discrepancies', aud_charged:'charged', aud_concilia:'reconcile', aud_paid:'paid', aud_check:'immutable trail · every entry', tempo_small:'R$ / second', tempo_caps:'PER SECOND' },\n  es:{ badge:'pronto', h1a:'Transacción nativa.', h1b:'En un libro que nadie borra.', h1s:'Cobra, divide y concilia solo — cada centavo con origen, registrado para siempre. Elige una capacidad: sucede en vivo.', seedA:'cashier · valor', seedB:'cobra · divide · <b>concilia</b>', seedC:'registro · <b>auditable</b>', n_cobra:'Cobra', d_cobra:'emite el cobro', s_cobra:'POST · 201', n_divide:'Divide', d_divide:'split automático', s_divide:'vendedor·tarifa·impuesto', n_concilia:'Concilia', d_concilia:'cuadra cada centavo', s_concilia:'✓ conciliado', n_auditavel:'Auditable', d_auditavel:'rastro de asientos', s_auditavel:'ledger', n_tempo:'Tiempo real', d_tempo:'transacciones en vivo', s_tempo:'R$ / s', ty_vendedor:'vendedor', ty_taxa:'tarifa', ty_imposto:'impuesto', payoffA:'Cada centavo', payoffB:'con origen · conciliado', k_cliente:'cliente', div_check:'3 destinos · la suma cuadra', conc_word:'conciliado', conc_check:'0 discrepancias', aud_charged:'cobró', aud_concilia:'concilia', aud_paid:'pagado', aud_check:'rastro inmutable · cada asiento', tempo_small:'R$ / segundo', tempo_caps:'POR SEGUNDO' }\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #0e1408 0%, #08090b 46%, #050705 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:46%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#96a883; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#BFFA48; box-shadow:0 0 12px 2px #BFFA48; }\n.badge{ font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.12em; text-transform:uppercase; color:#0d1206; background:#BFFA48; padding:2px 7px; border-radius:5px; font-weight:700; box-shadow:0 0 10px rgba(191,250,72,.35); }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#8a8f84; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#969c92; max-width:42ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#565a4f; line-height:1.7; }\n.seed b{ color:#b8d88a; font-weight:400; font-variant-numeric:tabular-nums; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#a8d078; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:250px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n.dov{ position:absolute; inset:0; padding:18px; font-family:ui-monospace,Menlo,monospace; }\n.rec{ font-size:12.5px; line-height:1.7; }\n.rec .k{ color:#8a8c84; } .rec .v{ color:#EDECEF; } .rec .t{ color:#BFFA48; font-size:10px; }\n.chk{ opacity:0; transition:.3s; color:#BFFA48; } .chk.on{ opacity:1; }\n.q{ font-size:13px; color:#EDECEF; } .q .cur{ display:inline-block; width:8px;height:15px;background:#BFFA48;vertical-align:-2px;margin-left:1px;animation:bl 1s steps(2) infinite } @keyframes bl{50%{opacity:0}}\n.hit{ margin-top:10px; font-size:12px; color:#e2ecd6; opacity:0; transform:translateY(6px); transition:.34s; } .hit.on{ opacity:1; transform:none; }\n.big{ position:absolute; left:0; right:0; top:50%; transform:translateY(-50%); text-align:center; font-size:clamp(30px,4vw,52px); color:#F4F2F6; font-variant-numeric:tabular-nums; letter-spacing:-.02em; } .big small{ display:block; font-size:11px; letter-spacing:.14em; color:#8a8c84; text-transform:uppercase; margin-top:8px; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(191,250,72,.06); } .fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:#BFFA48; }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a8c84; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5a5f54; text-transform:uppercase; } .fc.on .fs{ color:#a8d078; }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5a5f54; } .payoff b{ color:#b8d88a; }\n@media (max-width:1080px){ .st{ display:flex; flex-direction:column; min-height:0; height:auto; } .head{ position:relative; top:auto; left:auto; max-width:none; padding:34px 24px 0; } .seed{ display:none } canvas.core{ position:relative; }\n  .stage{ position:relative; width:auto; padding:0 24px; } .cards{ position:relative; bottom:auto; flex-wrap:wrap; margin-top:20px; } .fc{ max-width:none; flex:1 1 40%; border-bottom:1px solid rgba(255,255,255,.05); } .payoff{ position:relative; bottom:auto; margin:16px 0 30px; } }\n@media (prefers-reduced-motion:reduce){ .q .cur{ animation:none } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=CASH_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['cobra',t('n_cobra'),t('d_cobra'),t('s_cobra'),'M8 3a5 5 0 100 10 5 5 0 000-10M8 5.5v5M5.5 8h5'],\n      ['divide',t('n_divide'),t('d_divide'),t('s_divide'),'M2 8h4M6 8l4-4M6 8l4 4'],\n      ['concilia',t('n_concilia'),t('d_concilia'),t('s_concilia'),'M2 4h6M2 8h6M2 12h4M10 9l2 2 3-4'],\n      ['auditavel',t('n_auditavel'),t('d_auditavel'),t('s_auditavel'),'M8 3v5l3 2M8 3a5 5 0 105 5'],\n      ['tempo',t('n_tempo'),t('d_tempo'),t('s_tempo'),'M2 9h3l2-4 3 8 2-4h2']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · Cashier <span class=\"badge\">'+t('badge')+'</span></div>'+\n          '<h1 class=\"h1\">'+t('h1a')+' <span class=\"g\">'+t('h1b')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('h1s')+'</div></div>'+\n        '<div class=\"seed\">'+t('seedA')+'<br>'+t('seedB')+'<br>'+t('seedC')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('n_cobra')+'</div>'+\n          '<div class=\"st-box\"><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#a8d078\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\"><b>'+t('payoffA')+'</b> · '+t('payoffB')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=CASH_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), dov=root.querySelector('[data-dov]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1,R=1, mobile=false;\n    var TYPES=[['#BFFA48',t('ty_vendedor')],['#F7C948',t('ty_taxa')],['#7AA8FF',t('ty_imposto')]];\n    var N=224, pts=[];\n    function build(){ pts=[];\n      for(var i=0;i<N;i++){ var ty=i%TYPES.length; pts.push({ ty:ty, k:i, ph:(i*2.399)%6.28, x:0,y:0, b:0.5 }); }\n      computeLayouts(); pts.forEach(function(p){ p.x=p.cobx; p.y=p.coby; }); }\n    function computeLayouts(){\n      pts.forEach(function(p,i){\n        var ca=i*2.399, cr=R*0.11*Math.sqrt((i%56)/56); p.cobx=Math.cos(ca)*cr; p.coby=Math.sin(ca)*cr;\n        var t=p.ty, nodeX=R*0.52, nodeY=(t-1)*R*0.42; var da=i*2.399, dr=R*0.09*Math.sqrt((i%40)/40);\n        p.divx=nodeX+Math.cos(da)*dr; p.divy=nodeY+Math.sin(da)*dr;\n        var col=i%14, row=Math.floor(i/14); p.concx=(col-6.5)*R*0.115; p.concy=-R*0.64+row*R*0.084; p.concrow=row;\n        var lane=p.ty%3; p.audx=-R*0.84+(i/(N-1))*R*1.68; p.audy=(lane-1)*R*0.15+Math.sin(i*0.6)*R*0.02;\n        var tlane=i%5; p.tempx0=(i/N)*R*1.8; p.tempy0=(tlane-2)*R*0.145;\n      });\n    }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; mobile=W<=1080;\n      CBW=CBH=mobile?Math.min(W-48,420):560; CX=mobile?W/2:W*0.30; CY=mobile?CBH/2:Math.min(H*0.46,520);\n      if(mobile){ core.style.position='relative'; core.style.margin='18px auto 0'; core.style.left='auto'; core.style.top='auto'; if(head)head.style.left=''; if(seed)seed.style.right=''; }\n      else { core.style.position='absolute'; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; stage.style.left=(CX+230)+'px'; stage.style.top=(CY-125)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); R=CBW/2;\n      if(!pts.length)build(); else computeLayouts(); }\n    layout(); d2.on(window,'resize',layout);\n\n    var mode='cobra', mx=9999,my=0,hasM=false,energy=0,t0=performance.now(),run=true,raf=null,modeT0=performance.now();\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); mx=(e.clientX-r.left)-CBW/2; my=(e.clientY-r.top)-CBH/2; hasM=true; });\n    d2.on(st,'pointerleave',function(){ hasM=false; });\n\n    function target(p,i,tt){\n      if(mode==='cobra'){ return [p.cobx+Math.cos(tt*0.6+p.ph)*R*0.03, p.coby+Math.sin(tt*0.6+p.ph)*R*0.03]; }\n      if(mode==='divide'){ return [p.divx, p.divy]; }\n      if(mode==='concilia'){ return [p.concx, p.concy]; }\n      if(mode==='auditavel'){ return [p.audx, p.audy]; }\n      if(mode==='tempo'){ var span=R*1.8, speed=R*0.32; var x=((p.tempx0+tt*speed)%span); if(x<0)x+=span; return [x-R*0.9, p.tempy0+Math.sin(tt*1.4+p.ph)*R*0.03]; }\n      return [p.cobx,p.coby];\n    }\n    function hexA(h,a){ return 'rgba('+parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16)+','+a+')'; }\n\n    function frame(t){ if(!core.isConnected)return; if(!run)return; var tt=(t-t0)/1000; var mt=(t-modeT0)/1000;\n      if(energy>0)energy-=0.01;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n      if(mode==='divide'){\n        var srcX=-R*0.55;\n        for(var s=0;s<TYPES.length;s++){ var ny=(s-1)*R*0.42; fx.strokeStyle=hexA(TYPES[s][0],.22); fx.lineWidth=1; fx.beginPath(); fx.moveTo(srcX,0); fx.bezierCurveTo(0,0,0,ny,R*0.52,ny); fx.stroke(); }\n      }\n      if(mode==='concilia'){\n        fx.strokeStyle='rgba(191,250,72,.08)'; fx.lineWidth=1;\n        for(var rr2=0;rr2<16;rr2++){ var ly=-R*0.64+rr2*R*0.084; fx.beginPath(); fx.moveTo(-R*0.86,ly); fx.lineTo(R*0.86,ly); fx.stroke(); }\n      }\n      if(mode==='auditavel'){ fx.strokeStyle='rgba(168,208,120,.16)'; fx.lineWidth=1; for(var l=-1;l<=1;l++){ fx.beginPath(); fx.moveTo(-R*0.9,l*R*0.15); fx.lineTo(R*0.9,l*R*0.15); fx.stroke(); } }\n      fx.globalCompositeOperation='lighter';\n      for(var i=0;i<pts.length;i++){ var p=pts[i]; var tg=target(p,i,tt);\n        if(mode==='tempo'){ if(tg[0]<p.x-R*0.4){ p.x=tg[0]; } else { p.x+=(tg[0]-p.x)*0.5; } p.y+=(tg[1]-p.y)*0.12; }\n        else { p.x+=(tg[0]-p.x)*0.07; p.y+=(tg[1]-p.y)*0.07; }\n        var ct=TYPES[p.ty]; var col=ct?ct[0]:'#BFFA48';\n        var inten=(mode==='cobra')?(0.45+Math.sin(tt*2+p.ph)*0.18):0.55;\n        if(mode==='concilia'){ var reconciled=(p.concrow<=Math.floor(mt*3.2)); inten=reconciled?0.85:0.32; col=reconciled?'#BFFA48':(ct?ct[0]:'#BFFA48'); }\n        if(mode==='tempo'){ inten=0.5+Math.sin(tt*3+p.ph)*0.28; }\n        if(hasM){ var d=Math.hypot(mx-p.x,my-p.y); inten=Math.max(inten, 1-d/(R*0.55)); }\n        var rc=parseInt(col.slice(1,3),16),gc=parseInt(col.slice(3,5),16),bc=parseInt(col.slice(5,7),16);\n        var a=(0.24+inten*0.66+energy*0.25); if(a>1)a=1;\n        var sz=1.5+inten*1.9;\n        fx.fillStyle='rgba('+rc+','+gc+','+bc+','+a.toFixed(3)+')'; fx.beginPath(); fx.arc(p.x,p.y,sz,0,6.28); fx.fill();\n      }\n      if(mode==='cobra'){\n        var g0=fx.createRadialGradient(0,0,0,0,0,R*0.22); g0.addColorStop(0,hexA('#BFFA48',.32)); g0.addColorStop(1,hexA('#BFFA48',0)); fx.fillStyle=g0; fx.beginPath(); fx.arc(0,0,R*0.22,0,6.28); fx.fill();\n        var pulseT=(tt*0.7)%1; var px=-R*0.9+pulseT*R*0.9;\n        fx.strokeStyle=hexA('#BFFA48',.22); fx.lineWidth=1; fx.beginPath(); fx.moveTo(-R*0.9,0); fx.lineTo(px,0); fx.stroke();\n        fx.fillStyle=hexA('#BFFA48',(0.9-pulseT*0.5)); fx.beginPath(); fx.arc(px,0,3+(1-pulseT)*2,0,6.28); fx.fill();\n      }\n      if(mode==='divide'){\n        var gs=fx.createRadialGradient(-R*0.55,0,0,-R*0.55,0,R*0.14); gs.addColorStop(0,hexA('#BFFA48',.3)); gs.addColorStop(1,hexA('#BFFA48',0)); fx.fillStyle=gs; fx.beginPath(); fx.arc(-R*0.55,0,R*0.14,0,6.28); fx.fill();\n        for(var s2=0;s2<TYPES.length;s2++){ var ny2=(s2-1)*R*0.42; var gg=fx.createRadialGradient(R*0.52,ny2,0,R*0.52,ny2,R*0.15); gg.addColorStop(0,hexA(TYPES[s2][0],.28)); gg.addColorStop(1,hexA(TYPES[s2][0],0)); fx.fillStyle=gg; fx.beginPath(); fx.arc(R*0.52,ny2,R*0.15,0,6.28); fx.fill(); }\n      }\n      fx.restore(); fx.globalCompositeOperation='source-over';\n      fx.save(); fx.translate(CBW/2,CBH/2);\n      if(mode==='divide'){ fx.font='10px ui-monospace,monospace'; fx.textAlign='left';\n        for(var s3=0;s3<TYPES.length;s3++){ var ny3=(s3-1)*R*0.42; fx.fillStyle=hexA(TYPES[s3][0],.85); fx.fillText(TYPES[s3][1], R*0.52+R*0.16, ny3+3); }\n      }\n      if(mode==='concilia'){ var done=Math.min(16,Math.floor(mt*3.2)+1); fx.font='11px ui-monospace,monospace'; fx.textAlign='center'; fx.fillStyle=hexA('#BFFA48',.9);\n        for(var d3=0;d3<done;d3++){ var cy3=-R*0.64+d3*R*0.084; fx.fillText('✓', -R*0.95, cy3+3); }\n      }\n      if(mode==='tempo'){ var rate=42000+Math.round(Math.sin(tt*1.8)*7000+Math.sin(tt*5.3)*2500);\n        fx.textAlign='center'; fx.fillStyle='rgba(244,242,246,.95)'; fx.font='600 30px ui-monospace,monospace';\n        fx.fillText('R$ '+rate.toLocaleString('pt-BR'), 0, -R*0.66);\n        fx.fillStyle=hexA('#BFFA48',.8); fx.font='10px ui-monospace,monospace'; fx.fillText(t('tempo_caps'), 0, -R*0.66+18);\n      }\n      fx.restore();\n      raf=requestAnimationFrame(frame);\n    }\n    if(!reduce){ raf=requestAnimationFrame(function(t){t0=t;frame(t);}); }\n    else { fx.save(); fx.translate(CBW/2,CBH/2); pts.forEach(function(p){ var ct=TYPES[p.ty]; fx.fillStyle=ct?ct[0]:'#BFFA48'; fx.beginPath(); fx.arc(p.concx,p.concy,2,0,6.28); fx.fill(); }); fx.restore(); }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;t0=performance.now();raf=requestAnimationFrame(frame);} } else { run=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.02}); io.observe(st);\n\n    var active='cobra', timers=[], intervals=[];\n    function clearD(){ timers.forEach(clearTimeout); timers=[]; intervals.forEach(clearInterval); intervals=[]; dov.innerHTML=''; }\n    var NAMES={cobra:t('n_cobra'),divide:t('n_divide'),concilia:t('n_concilia'),auditavel:t('n_auditavel'),tempo:t('n_tempo')};\n    function run2(k){ active=k; mode=k; energy=1; modeT0=performance.now(); clearD(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      if(k==='cobra'){ dov.innerHTML='<div class=\"rec\"><div><span class=\"t\">POST</span> <span class=\"v\">/charges</span></div><div><span class=\"k\">amount</span> <span class=\"v\">R$ 1.240,00</span></div><div><span class=\"k\">'+t('k_cliente')+'</span> <span class=\"v\">Ana Duarte</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ 201 Created · ch_8421</div></div>'; timers.push(setTimeout(function(){ var c=dov.querySelector('[data-chk]'); if(c)c.classList.add('on'); },700)); }\n      else if(k==='divide'){ dov.innerHTML='<div class=\"rec\"><div><span class=\"v\">R$ 1.240,00</span> <span class=\"t\">split</span></div><div><span class=\"k\">'+t('ty_vendedor')+'</span> <span class=\"v\">R$ 992,00</span> <span class=\"t\">80%</span></div><div><span class=\"k\">'+t('ty_taxa')+'</span> <span class=\"v\">R$ 74,40</span> <span class=\"t\">6%</span></div><div><span class=\"k\">'+t('ty_imposto')+'</span> <span class=\"v\">R$ 173,60</span> <span class=\"t\">14%</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ '+t('div_check')+'</div></div>'; timers.push(setTimeout(function(){ var c=dov.querySelector('[data-chk]'); if(c)c.classList.add('on'); },700)); }\n      else if(k==='concilia'){ dov.innerHTML='<div class=\"rec\"><div class=\"hit\" data-h1><span style=\"color:#BFFA48\">✓</span> ch_8421 · R$ 1.240,00 · '+t('conc_word')+'</div><div class=\"hit\" data-h2><span style=\"color:#BFFA48\">✓</span> ch_8420 · R$ 88,00 · '+t('conc_word')+'</div><div class=\"hit\" data-h3><span style=\"color:#BFFA48\">✓</span> ch_8419 · R$ 512,00 · '+t('conc_word')+'</div><div class=\"chk\" data-chk style=\"margin-top:10px\">◆ '+t('conc_check')+'</div></div>'; ['data-h1','data-h2','data-h3'].forEach(function(h,i){ timers.push(setTimeout(function(){ var e=dov.querySelector('['+h+']'); if(e)e.classList.add('on'); }, 500+i*400)); }); timers.push(setTimeout(function(){ var c=dov.querySelector('[data-chk]'); if(c)c.classList.add('on'); },1900)); }\n      else if(k==='auditavel'){ dov.innerHTML='<div class=\"rec\"><div><span class=\"k\">14:02</span> <span class=\"v\">Ana</span> '+t('aud_charged')+' <span class=\"t\">ch_8421</span></div><div><span class=\"k\">14:03</span> <span class=\"v\">split</span> '+t('ty_vendedor')+' <span class=\"t\">R$ 992,00</span></div><div><span class=\"k\">14:31</span> <span class=\"v\">'+t('aud_concilia')+'</span> <span class=\"t\">✓ '+t('aud_paid')+'</span></div><div class=\"chk\" data-chk style=\"margin-top:8px\">◆ '+t('aud_check')+'</div></div>'; timers.push(setTimeout(function(){ var c=dov.querySelector('[data-chk]'); if(c)c.classList.add('on'); },700)); }\n      else if(k==='tempo'){ dov.innerHTML='<div class=\"big\"><span data-b>0</span><small>'+t('tempo_small')+'</small></div>'; var n=0,target2=48250; var iv=setInterval(function(){ var el=dov.querySelector('[data-b]'); if(!el||!el.isConnected){clearInterval(iv);return;} if(n<target2){ n+=Math.round(target2/36); if(n>target2)n=target2; } else { n=target2+Math.round(Math.sin(performance.now()/300)*1800); } el.textContent='R$ '+n.toLocaleString('pt-BR'); },50); intervals.push(iv); }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('cobra');\n    if(!reduce){ timers.push(setTimeout(function(){ if(active==='cobra') run2('divide'); },4600)); }\n  }\n}\n"}}}}}}}},{"_id":"6a7b5aa8ea4776d1d2936634","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"exp-copiloto","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function D2LANG(d2){ try{ var s=d2.store('siteLocale'); if(s){ var v=s.get('lang'); if(v==null) v=s.get('data.lang'); if(v==='en'||v==='es'||v==='pt') return v; } }catch(e){} return 'pt'; }\nfunction COP_T(){ return {\n  pt:{ n_entende:'Entende', n_busca:'Busca', n_permite:'Permite', n_mostra:'Mostra', n_tudo:'Tudo junto', d_entende:'lê a intenção do pedido', d_busca:'acha os dados certos', d_permite:'checa o que você pode ver', d_mostra:'desenha a resposta', d_tudo:'um pedido, uma resposta', h1a:'Um copiloto sobre o seu sistema.', h1b:'UI + Domain + Registry + ID, juntos.', h1s:'Um pedido em linguagem natural vira uma resposta pronta: o Domain entende, o Registry busca, o ID permite e a UI mostra. Escolha um passo — ou veja tudo junto.', seedA:'copiloto · orquestra', seedB:'componentes · <b>4</b>', seedC:'pedido → <b>resposta</b>', payoffB:'busca · permite · mostra', step_entende:'entende a intenção', step_busca:'busca · 3 resultados', step_permite:'permite · papel gestor ✓', step_mostra:'mostra o resultado', q_bubble:'quais clientes em risco?', rc_title:'Clientes em risco · 3', lbl_cop:'Copiloto', chip_cop:'copiloto' },\n  en:{ n_entende:'Understands', n_busca:'Finds', n_permite:'Allows', n_mostra:'Shows', n_tudo:'All together', d_entende:'reads the request intent', d_busca:'finds the right data', d_permite:'checks what you can see', d_mostra:'draws the answer', d_tudo:'one request, one answer', h1a:'A copilot over your system.', h1b:'UI + Domain + Registry + ID, together.', h1s:'A natural-language request becomes a ready answer: Domain understands, Registry finds, ID allows and UI shows. Pick a step — or see it all together.', seedA:'copilot · orchestrates', seedB:'components · <b>4</b>', seedC:'request → <b>answer</b>', payoffB:'finds · allows · shows', step_entende:'reads the intent', step_busca:'searches · 3 results', step_permite:'allows · manager role ✓', step_mostra:'shows the result', q_bubble:'which customers are at risk?', rc_title:'Customers at risk · 3', lbl_cop:'Copilot', chip_cop:'copilot' },\n  es:{ n_entende:'Entiende', n_busca:'Busca', n_permite:'Permite', n_mostra:'Muestra', n_tudo:'Todo junto', d_entende:'lee la intención del pedido', d_busca:'encuentra los datos correctos', d_permite:'comprueba lo que puedes ver', d_mostra:'dibuja la respuesta', d_tudo:'un pedido, una respuesta', h1a:'Un copiloto sobre tu sistema.', h1b:'UI + Domain + Registry + ID, juntos.', h1s:'Un pedido en lenguaje natural se vuelve una respuesta lista: Domain entiende, Registry busca, ID permite y UI muestra. Elige un paso — o velo todo junto.', seedA:'copiloto · orquesta', seedB:'componentes · <b>4</b>', seedC:'pedido → <b>respuesta</b>', payoffB:'busca · permite · muestra', step_entende:'entiende la intención', step_busca:'busca · 3 resultados', step_permite:'permite · rol gestor ✓', step_mostra:'muestra el resultado', q_bubble:'¿qué clientes en riesgo?', rc_title:'Clientes en riesgo · 3', lbl_cop:'Copiloto', chip_cop:'copiloto' }\n}; }\nexport default {\n  css: `\n:host{ display:block; width:100%; height:100%; }\n*{ box-sizing:border-box; }\n.st{ position:relative; width:100%; min-height:88vh; overflow:hidden;\n  background:radial-gradient(78% 70% at 30% 42%, #150c22 0%, #0a0712 46%, #060409 100%);\n  color:#EDECEF; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }\ncanvas.core{ position:absolute; z-index:2; display:block; }\n.grain{ position:absolute; inset:0; opacity:.045; pointer-events:none; mix-blend-mode:overlay; z-index:3;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\"); }\n.hairtop{ position:absolute; top:0; left:0; right:0; height:1px; background:rgba(255,255,255,.06); z-index:5; }\n.head{ position:absolute; top:44px; left:56px; z-index:8; max-width:46%; }\n.eyebrow{ font-family:ui-monospace,'SF Mono',Menlo,monospace; font-size:11px; letter-spacing:.3em; text-transform:uppercase; color:#9a86c0; display:flex; align-items:center; gap:8px; }\n.dot{ width:8px; height:8px; border-radius:50%; background:#8448FA; box-shadow:0 0 12px 2px #8448FA; }\n.h1{ font-size:clamp(26px,3.2vw,44px); font-weight:500; letter-spacing:-.025em; margin:11px 0 0; color:#F4F2F6; }\n.h1 .g{ color:#a98af5; }\n.h1s{ margin:11px 0 0; font-size:13.5px; line-height:1.5; color:#9a92a8; max-width:42ch; }\n.seed{ position:absolute; top:50px; right:56px; z-index:8; text-align:right; font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.14em; color:#544f60; line-height:1.7; }\n.seed b{ color:#a98af5; font-weight:400; font-variant-numeric:tabular-nums; }\n.stage{ position:absolute; z-index:7; width:min(38%,440px); }\n.st-h{ font-family:ui-monospace,Menlo,monospace; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:#a888e0; margin-bottom:12px; display:flex; align-items:center; gap:8px; }\n.st-box{ position:relative; height:262px; border:1px solid rgba(255,255,255,.1); border-radius:14px; overflow:hidden; background:rgba(255,255,255,.02); }\n.dov{ position:absolute; inset:0; padding:18px; font-family:ui-monospace,Menlo,monospace; }\n.chat{ font-size:12px; line-height:1.5; }\n.ubub{ display:inline-block; background:rgba(132,72,250,.14); border:1px solid rgba(132,72,250,.32); color:#e9e3f6; padding:6px 11px; border-radius:11px 11px 11px 3px; font-size:12px; margin-bottom:13px; }\n.step{ display:flex; align-items:center; gap:8px; padding:4px 0; color:#6a6472; opacity:.5; transition:.28s; }\n.step.on{ opacity:1; color:#EDECEF; }\n.step .sd{ width:8px; height:8px; border-radius:50%; flex:none; opacity:.4; transition:.28s; }\n.step.on .sd{ opacity:1; box-shadow:0 0 8px 1px currentColor; }\n.step .sx{ color:#8a848c; font-size:11px; }\n.step.on .sx{ color:#c8c2d0; }\n.rcard{ margin-top:12px; border:1px solid rgba(72,102,250,.32); border-radius:10px; padding:10px 12px; background:rgba(72,102,250,.06); opacity:0; transform:translateY(6px); transition:.34s; }\n.rcard.on{ opacity:1; transform:none; }\n.rct{ font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:#8fa0f5; margin-bottom:7px; }\n.rcr{ font-size:11.5px; color:#dcd8e4; padding:2px 0; display:flex; justify-content:space-between; }\n.rcr b{ color:#8fa0f5; font-weight:400; font-variant-numeric:tabular-nums; }\n.cards{ position:absolute; left:0; right:0; bottom:44px; z-index:8; display:flex; justify-content:center; padding:0 44px; border-top:1px solid rgba(255,255,255,.07); }\n.fc{ flex:1; max-width:200px; text-align:left; padding:16px 18px 15px; cursor:pointer; position:relative; transition:background .18s; border-right:1px solid rgba(255,255,255,.05); }\n.fc:first-child{ border-left:1px solid rgba(255,255,255,.05); }\n.fc:hover{ background:rgba(255,255,255,.02); }\n.fc.on{ background:rgba(132,72,250,.06); }\n.fc.on::before{ content:''; position:absolute; top:-1px; left:0; right:0; height:2px; background:var(--ac,#8448FA); }\n.fc .ic{ width:22px; height:22px; margin-bottom:10px; opacity:.9; color:var(--ac,#a98af5); }\n.fc .ft{ font-size:12.5px; font-weight:600; color:#EDECEF; } .fc .fd{ margin-top:5px; font-size:11px; line-height:1.4; color:#8a848c; }\n.fc .fs{ margin-top:8px; font-family:ui-monospace,Menlo,monospace; font-size:9px; letter-spacing:.06em; color:#5f5a61; text-transform:uppercase; } .fc.on .fs{ color:var(--ac,#a98af5); }\n.payoff{ position:absolute; left:0; right:0; bottom:12px; text-align:center; z-index:8; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#5f5a61; } .payoff b{ color:#a98af5; }\n@media (max-width:1080px){ .st{ display:flex; flex-direction:column; min-height:0; height:auto; } .head{ position:relative; top:auto; left:auto; max-width:none; padding:34px 24px 0; } .seed{ display:none } canvas.core{ position:relative; }\n  .stage{ position:relative; width:auto; padding:0 24px; } .cards{ position:relative; bottom:auto; flex-wrap:wrap; margin-top:20px; } .fc{ max-width:none; flex:1 1 40%; border-bottom:1px solid rgba(255,255,255,.05); } .payoff{ position:relative; bottom:auto; margin:16px 0 30px; } }\n`,\n  render(d2){\n    var lang=D2LANG(d2); var TT=COP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var F=[\n      ['entende',t('n_entende'),t('d_entende'),'domain','M7 7a4 4 0 105 5M11 11l3 3','#FA48DC'],\n      ['busca',t('n_busca'),t('d_busca'),'registry','M3 8a5 3 0 1010 0 5 3 0 10-10 0M3 8v4a5 3 0 0010 0V8','#FA4848'],\n      ['permite',t('n_permite'),t('d_permite'),'id','M4.5 7V5a3.5 3.5 0 017 0v2M3.5 7h9v6h-9z','#48FAA1'],\n      ['mostra',t('n_mostra'),t('d_mostra'),'ui','M2 3.5h12v8H2zM6 13.5h4','#4866FA'],\n      ['tudo',t('n_tudo'),t('d_tudo'),t('chip_cop'),'M8 2v4M8 10v4M2 8h4M10 8h4','#8448FA']\n    ];\n    return ''+\n      '<div class=\"st\" data-st>'+\n        '<canvas class=\"core\" data-core></canvas>'+\n        '<div class=\"grain\"></div><div class=\"hairtop\"></div>'+\n        '<div class=\"head\"><div class=\"eyebrow\"><span class=\"dot\"></span> Data² · '+t('lbl_cop')+'</div>'+\n          '<h1 class=\"h1\">'+t('h1a')+' <span class=\"g\">'+t('h1b')+'</span></h1>'+\n          '<div class=\"h1s\">'+t('h1s')+'</div></div>'+\n        '<div class=\"seed\">'+t('seedA')+'<br>'+t('seedB')+'<br>'+t('seedC')+'</div>'+\n        '<div class=\"stage\" data-stage><div class=\"st-h\" data-sth><span class=\"dot\" style=\"box-shadow:none\"></span> '+t('n_entende')+'</div>'+\n          '<div class=\"st-box\"><div class=\"dov\" data-dov></div></div></div>'+\n        '<div class=\"cards\" data-cards>'+ F.map(function(f){ return '<div class=\"fc\" data-f=\"'+f[0]+'\" style=\"--ac:'+f[5]+'\"><svg class=\"ic\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"'+f[4]+'\"/></svg><div class=\"ft\">'+f[1]+'</div><div class=\"fd\">'+f[2]+'</div><div class=\"fs\">'+f[3]+'</div></div>'; }).join('') +'</div>'+\n        '<div class=\"payoff\"><b>'+t('n_entende')+'</b> · '+t('payoffB')+'</div>'+\n      '</div>';\n  },\n  mounted(d2, root){\n    var lang=D2LANG(d2); var TT=COP_T(); var t=function(k){ return (TT[lang]&&TT[lang][k]) || TT.en[k] || k; };\n    var LBL_COP=t('lbl_cop').toUpperCase();\n    var st=root.querySelector('[data-st]'), core=root.querySelector('[data-core]');\n    var stage=root.querySelector('[data-stage]'), sth=root.querySelector('[data-sth]'), dov=root.querySelector('[data-dov]');\n    var head=root.querySelector('.head'), seed=root.querySelector('.seed');\n    var reduce=(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches);\n    var fx=core.getContext('2d');\n    var W=0,H=0,CX=0,CY=0,CBW=560,CBH=560,DP=1,R=1,mobile=false;\n    var CENTER={col:'#8448FA', act:0.5};\n    var NODES=[\n      {key:'entende', comp:'Domain', col:'#FA48DC', ang:-Math.PI/2, x:0,y:0, act:0.12},\n      {key:'busca',   comp:'Registry', col:'#FA4848', ang:0, x:0,y:0, act:0.12},\n      {key:'permite', comp:'ID', col:'#48FAA1', ang:Math.PI/2, x:0,y:0, act:0.12},\n      {key:'mostra',  comp:'UI', col:'#4866FA', ang:Math.PI, x:0,y:0, act:0.12}\n    ];\n    var IDX={entende:0,busca:1,permite:2,mostra:3};\n    function computeNodes(){ var sr=R*0.62; for(var i=0;i<NODES.length;i++){ var n=NODES[i]; n.x=Math.cos(n.ang)*sr; n.y=Math.sin(n.ang)*sr; } }\n    function layout(){ var r=st.getBoundingClientRect(); W=r.width; H=r.height; mobile=W<=1080;\n      CBW=CBH=mobile?Math.min(W-48,420):560; CX=mobile?W/2:W*0.30; CY=mobile?CBH/2:Math.min(H*0.46,520);\n      if(mobile){ core.style.position='relative'; core.style.margin='18px auto 0'; core.style.left='auto'; core.style.top='auto'; if(head)head.style.left=''; if(seed)seed.style.right=''; }\n      else { core.style.position='absolute'; var CW=Math.min(W,1500), offX=(W-CW)/2; CX=offX+CW*0.30; core.style.left=(CX-CBW/2)+'px'; core.style.top=(CY-CBH/2)+'px'; stage.style.left=(CX+230)+'px'; stage.style.top=(CY-135)+'px'; if(head)head.style.left=(offX+56)+'px'; if(seed)seed.style.right=(offX+56)+'px'; }\n      core.style.width=CBW+'px'; core.style.height=CBH+'px';\n      DP=Math.min(2,(window.devicePixelRatio||1)); core.width=Math.round(CBW*DP); core.height=Math.round(CBH*DP); fx.setTransform(DP,0,0,DP,0,0); R=CBW/2;\n      computeNodes(); }\n    layout(); d2.on(window,'resize',layout);\n\n    var mode='entende', mx=9999,my=0,hasM=false,energy=0,t0=performance.now(),run=true,raf=null;\n    d2.on(st,'pointermove',function(e){ var r=core.getBoundingClientRect(); mx=(e.clientX-r.left)-CBW/2; my=(e.clientY-r.top)-CBH/2; hasM=true; });\n    d2.on(st,'pointerleave',function(){ hasM=false; });\n\n    function hexA(h,a){ return 'rgba('+parseInt(h.slice(1,3),16)+','+parseInt(h.slice(3,5),16)+','+parseInt(h.slice(5,7),16)+','+a+')'; }\n    function lerp(a,b,f){ return a+(b-a)*f; }\n\n    function frame(t){ if(!core.isConnected)return; if(!run)return; var tt=(t-t0)/1000;\n      if(energy>0)energy-=0.012;\n      fx.clearRect(0,0,CBW,CBH); fx.save(); fx.translate(CBW/2,CBH/2);\n\n      var seq=-1;\n      if(mode==='tudo'){ var pp=(tt*0.42)%1; seq=Math.floor(pp*4); if(seq>3)seq=3; }\n      var ai=(mode!=='tudo'&&IDX.hasOwnProperty(mode))?IDX[mode]:-1;\n\n      for(var i=0;i<NODES.length;i++){ var n=NODES[i]; var tgt=0.12;\n        if(mode==='tudo'){ if(i<seq)tgt=0.55; else if(i===seq)tgt=1; else tgt=0.12; }\n        else if(i===ai)tgt=1;\n        if(hasM){ var dm=Math.hypot(mx-n.x,my-n.y); tgt=Math.max(tgt, 1-dm/(R*0.5)); }\n        n.act+=(tgt-n.act)*0.12;\n      }\n      var cmax=0.42; for(var im=0;im<NODES.length;im++){ if(NODES[im].act>cmax)cmax=NODES[im].act; }\n      if(hasM){ var dc=Math.hypot(mx,my); cmax=Math.max(cmax, 1-dc/(R*0.4)); }\n      CENTER.act+=(cmax-CENTER.act)*0.15;\n\n      fx.globalCompositeOperation='lighter';\n      for(var il=0;il<NODES.length;il++){ var nl=NODES[il]; var la=0.06+nl.act*0.5;\n        fx.strokeStyle=hexA(nl.col,la); fx.lineWidth=0.8+nl.act*2.2; fx.beginPath(); fx.moveTo(0,0); fx.lineTo(nl.x,nl.y); fx.stroke();\n      }\n      for(var ip=0;ip<NODES.length;ip++){ var np=NODES[ip]; if(np.act<0.45)continue;\n        var count=(mode==='busca'&&ip===ai)?3:1;\n        for(var c=0;c<count;c++){ var f=((tt*0.85)+c/count)%1; var px,py;\n          if(mode==='busca'&&ip===ai){ px=lerp(np.x,0,f); py=lerp(np.y,0,f); }\n          else { if(f<0.5){ var ff=f*2; px=lerp(0,np.x,ff); py=lerp(0,np.y,ff); } else { var fb=(f-0.5)*2; px=lerp(np.x,0,fb); py=lerp(np.y,0,fb); } }\n          fx.fillStyle=hexA(np.col,0.85*np.act); fx.beginPath(); fx.arc(px,py,2.6+np.act*1.4,0,6.28); fx.fill();\n          var g=fx.createRadialGradient(px,py,0,px,py,14); g.addColorStop(0,hexA(np.col,0.5*np.act)); g.addColorStop(1,hexA(np.col,0)); fx.fillStyle=g; fx.beginPath(); fx.arc(px,py,14,0,6.28); fx.fill();\n        }\n      }\n      for(var is=0;is<NODES.length;is++){ var ns=NODES[is]; var rr=R*0.05+ns.act*R*0.055;\n        var g2=fx.createRadialGradient(ns.x,ns.y,0,ns.x,ns.y,rr*2.6); g2.addColorStop(0,hexA(ns.col,0.35+ns.act*0.5)); g2.addColorStop(1,hexA(ns.col,0)); fx.fillStyle=g2; fx.beginPath(); fx.arc(ns.x,ns.y,rr*2.6,0,6.28); fx.fill();\n        fx.fillStyle=hexA(ns.col,0.5+ns.act*0.5); fx.beginPath(); fx.arc(ns.x,ns.y,rr,0,6.28); fx.fill();\n        fx.fillStyle=hexA('#ffffff',0.15+ns.act*0.4); fx.beginPath(); fx.arc(ns.x,ns.y,rr*0.4,0,6.28); fx.fill();\n      }\n      var gn=NODES[2];\n      if(gn && (mode==='permite'||(mode==='tudo'&&seq>=2)) && gn.act>0.6){ fx.strokeStyle=hexA('#48FAA1',gn.act); fx.lineWidth=1.6; var gx=gn.x, gy=gn.y, s=R*0.03; fx.beginPath(); fx.moveTo(gx-s,gy); fx.lineTo(gx-s*0.2,gy+s*0.8); fx.lineTo(gx+s*1.1,gy-s*0.9); fx.stroke(); }\n      fx.globalCompositeOperation='source-over';\n\n      var cr=R*0.075+CENTER.act*R*0.03;\n      fx.globalCompositeOperation='lighter';\n      var gc=fx.createRadialGradient(0,0,0,0,0,cr*3); gc.addColorStop(0,hexA(CENTER.col,0.5+CENTER.act*0.4)); gc.addColorStop(1,hexA(CENTER.col,0)); fx.fillStyle=gc; fx.beginPath(); fx.arc(0,0,cr*3,0,6.28); fx.fill();\n      fx.globalCompositeOperation='source-over';\n      fx.fillStyle=hexA(CENTER.col,0.9); fx.beginPath(); fx.arc(0,0,cr,0,6.28); fx.fill();\n      fx.fillStyle='rgba(255,255,255,.85)'; fx.beginPath(); fx.arc(0,0,cr*0.42,0,6.28); fx.fill();\n\n      if(energy>0){ var ex=lerp(-R*0.95,0,1-energy); fx.globalCompositeOperation='lighter'; fx.fillStyle=hexA(CENTER.col,energy); fx.beginPath(); fx.arc(ex,0,3.2,0,6.28); fx.fill(); fx.globalCompositeOperation='source-over'; }\n\n      fx.font='9px ui-monospace,monospace'; fx.textAlign='center';\n      for(var it=0;it<NODES.length;it++){ var nt=NODES[it];\n        var lx=nt.x + (nt.ang===0? R*0.15 : (nt.ang===Math.PI? -R*0.15 : 0));\n        var ly=nt.y + (nt.ang===Math.PI/2? R*0.13 : (nt.ang===-Math.PI/2? R*0.14 : 0));\n        fx.fillStyle=hexA(nt.col,0.4+nt.act*0.55); fx.fillText(nt.comp.toUpperCase(), lx, ly+3);\n      }\n      fx.fillStyle=hexA(CENTER.col,0.5+CENTER.act*0.4); fx.font='10px ui-monospace,monospace'; fx.fillText(LBL_COP, 0, cr+17);\n\n      fx.restore();\n      raf=requestAnimationFrame(frame);\n    }\n\n    if(!reduce){ raf=requestAnimationFrame(function(t){t0=t;frame(t);}); }\n    else { fx.save(); fx.translate(CBW/2,CBH/2);\n      for(var i=0;i<NODES.length;i++){ var n=NODES[i]; fx.strokeStyle=hexA(n.col,.3); fx.lineWidth=1.4; fx.beginPath(); fx.moveTo(0,0); fx.lineTo(n.x,n.y); fx.stroke(); fx.fillStyle=hexA(n.col,.8); fx.beginPath(); fx.arc(n.x,n.y,R*0.06,0,6.28); fx.fill(); }\n      fx.fillStyle=hexA(CENTER.col,.9); fx.beginPath(); fx.arc(0,0,R*0.08,0,6.28); fx.fill(); fx.restore();\n    }\n    var io=new IntersectionObserver(function(es){es.forEach(function(e){ if(e.isIntersecting){ if(!run&&!reduce){run=true;t0=performance.now();raf=requestAnimationFrame(frame);} } else { run=false; if(raf)cancelAnimationFrame(raf); } });},{threshold:.02}); io.observe(st);\n\n    var active='entende', timers=[];\n    function clearD(){ timers.forEach(clearTimeout); timers=[]; }\n    var NAMES={entende:t('n_entende'),busca:t('n_busca'),permite:t('n_permite'),mostra:t('n_mostra'),tudo:t('n_tudo')};\n    var STEPS=[\n      ['entende','#FA48DC','Domain',t('step_entende')],\n      ['busca','#FA4848','Registry',t('step_busca')],\n      ['permite','#48FAA1','ID',t('step_permite')],\n      ['mostra','#4866FA','UI',t('step_mostra')]\n    ];\n    function chatHTML(){\n      var s=STEPS.map(function(x){ return '<div class=\"step\" data-s=\"'+x[0]+'\"><span class=\"sd\" style=\"background:'+x[1]+';color:'+x[1]+'\"></span> '+x[2]+' <span class=\"sx\">'+x[3]+'</span></div>'; }).join('');\n      return '<div class=\"chat\"><div class=\"ubub\">'+t('q_bubble')+'</div>'+s+\n        '<div class=\"rcard\" data-rc><div class=\"rct\">'+t('rc_title')+'</div>'+\n        '<div class=\"rcr\"><span>Ana Duarte</span> <b>82</b></div><div class=\"rcr\"><span>Marco Reis</span> <b>77</b></div><div class=\"rcr\"><span>Lia Nunes</span> <b>71</b></div></div></div>';\n    }\n    function setStep(k,on){ var el=dov.querySelector('.step[data-s=\"'+k+'\"]'); if(el)el.classList.toggle('on',on); }\n    function run2(k){ active=k; mode=k; energy=1; clearD(); sth.innerHTML='<span class=\"dot\" style=\"box-shadow:none\"></span> '+NAMES[k];\n      Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ c.classList.toggle('on', c.getAttribute('data-f')===k); });\n      dov.innerHTML=chatHTML();\n      var rc=dov.querySelector('[data-rc]');\n      if(k==='tudo'){\n        ['entende','busca','permite','mostra'].forEach(function(sk,i){ timers.push(setTimeout(function(){ setStep(sk,true); },350+i*520)); });\n        timers.push(setTimeout(function(){ if(rc&&rc.isConnected)rc.classList.add('on'); },350+4*520));\n      } else {\n        setStep(k,true);\n        if(k==='mostra'){ timers.push(setTimeout(function(){ if(rc&&rc.isConnected)rc.classList.add('on'); },500)); }\n      }\n    }\n    Array.prototype.slice.call(root.querySelectorAll('.fc')).forEach(function(c){ d2.on(c,'click',function(){ run2(c.getAttribute('data-f')); }); });\n    run2('entende');\n    if(!reduce){ timers.push(setTimeout(function(){ if(active==='entende') run2('tudo'); },5200)); }\n  }\n}\n"}}}}}}}},{"_id":"6a83452f5ff0d2208d9ea8af","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"home-v4","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n\n.hv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --w1:#9b5cff; --w2:#5b86ff; --w3:#4ddfe6; --w4:#4de0a1;\n  --w5:#84e05a; --w6:#e8e84d; --w7:#ff6a4d; --w8:#ff4d9e;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; background:var(--dark); color:var(--dtext);\n  overflow-x:clip;\n}\n\n/* worm seam — the signature that stitches both worlds */\n.seam{ position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--worm); z-index:40; }\n\n/* film grain */\n.hv4::after{\n  content:\"\"; position:absolute; inset:0; pointer-events:none; z-index:38; opacity:.05;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E\");\n}\n\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n\n/* ---- type system: thin display + bold strike ---- */\n.kicker{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; }\n.display{ font-weight:200; letter-spacing:-.018em; font-size:clamp(40px,6.6vw,96px); line-height:1.02; text-wrap:balance; }\n.display b{ font-weight:700; display:block; }\nh2{ font-weight:200; font-size:clamp(30px,4.2vw,56px); letter-spacing:-.014em; line-height:1.08; text-wrap:balance; max-width:010ch; }\nh2{ max-width:20ch; }\nh2 b{ font-weight:700; }\n.lede{ margin-top:20px; font-size:clamp(15px,1.3vw,17px); line-height:1.66; max-width:56ch; }\n\n.shead{ display:flex; justify-content:space-between; align-items:baseline; gap:20px; margin-bottom:clamp(30px,4.6vh,52px); }\n\n/* ---- worlds ---- */\n.dark{ background:var(--dark); color:var(--dtext); }\n.dark .kicker{ color:var(--dfaint); } .dark .idx{ color:var(--dfaint); } .dark .lede{ color:var(--dfaint); }\n.paper{ background:var(--paper); color:var(--ink); }\n.paper .kicker{ color:var(--faint); } .paper .idx{ color:var(--faint); } .paper .lede{ color:var(--faint); }\n\n/* ---- 01 hero ---- */\n.hero{ position:relative; min-height:min(94vh,940px); display:flex; align-items:center; overflow:hidden; }\n.hero .frame{ width:100%; }\n.wormsvg{ position:absolute; inset:0; width:100%; height:100%; z-index:1; pointer-events:none; opacity:.5; }\n.wormsvg path{ fill:none; stroke-linecap:round; stroke-width:30; }\n.hero .frame{ z-index:5; }\n.h-kick{ display:flex; align-items:center; gap:10px; margin-bottom:26px; }\n.h-kick i{ width:22px; height:9px; border-radius:99px; background:var(--worm); flex:none; }\n.hero .display{ max-width:15ch; }\n.h-sub{ margin-top:30px; font-size:clamp(16px,1.5vw,20px); line-height:1.55; color:var(--dtext); max-width:44ch; font-weight:300; }\n.h-sub b{ font-weight:600; }\n.h-cta{ margin-top:38px; display:flex; align-items:center; gap:16px; flex-wrap:wrap; }\n.btn{\n  appearance:none; border:0; cursor:pointer; font-family:var(--grot); font-size:14.5px; font-weight:600;\n  padding:15px 26px; border-radius:999px; background:var(--dtext); color:var(--dark); transition:transform .2s, opacity .2s;\n}\n.btn:hover{ transform:translateY(-2px); } .btn:active{ transform:none; }\n.btn.ghost{ background:transparent; color:var(--dtext); border:1px solid var(--dhair); font-weight:500; }\n.btn.ghost:hover{ border-color:var(--dtext); }\n.paper .btn{ background:var(--ink); color:var(--paper); }\n.paper .btn.ghost{ background:transparent; color:var(--ink); border-color:var(--hair); }\n.hmeta{ position:absolute; left:clamp(24px,4.6vw,58px); right:clamp(24px,4.6vw,58px); bottom:34px; display:flex; justify-content:space-between; align-items:flex-end; z-index:5; }\n.sigmark{ width:96px; color:var(--dtext); display:block; }\n.paper .sigmark{ color:var(--ink); }\n\n/* ---- splash ---- */\n.splash{ position:relative; min-height:min(86vh,720px); display:flex; align-items:center; overflow:hidden; }\n.splash-img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center; z-index:1; }\n.splash .scrim{ position:absolute; inset:0; z-index:2; background:linear-gradient(90deg,rgba(10,11,13,.94) 0%,rgba(10,11,13,.6) 40%,rgba(10,11,13,0) 70%); }\n.splash .frame{ position:relative; z-index:3; width:100%; }\n.splash .display{ max-width:13ch; }\n\n/* ---- 02 stack ---- */\n.stackwrap{ display:grid; grid-template-columns:1.05fr .95fr; gap:clamp(24px,3.4vw,54px); align-items:center; }\n.stage{ perspective:1700px; height:clamp(400px,52vw,560px); display:flex; align-items:center; justify-content:center; }\n.float{ animation:bob 9s ease-in-out infinite; }\n@keyframes bob{ 0%,100%{transform:translateY(0)} 50%{transform:translateY(-10px)} }\n.stack3d{\n  position:relative; width:min(330px,58vw); aspect-ratio:1; transform-style:preserve-3d;\n  transform:rotateX(55deg) rotateZ(-45deg); --gap:38px;\n}\n.layer{\n  position:absolute; inset:0; border-radius:34px; transform-style:preserve-3d;\n  transform:translateZ(calc(var(--i) * var(--gap)));\n  transition:transform .6s cubic-bezier(.3,.7,.2,1), opacity .4s, filter .4s;\n  background:linear-gradient(155deg, color-mix(in oklab,var(--c),white 42%) 0%, var(--c) 48%, color-mix(in oklab,var(--c),black 22%) 100%);\n  box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--c),white 30%);\n  cursor:pointer;\n}\n.layer::after{\n  content:\"\"; position:absolute; inset:0; border-radius:inherit;\n  background:color-mix(in oklab,var(--c),black 45%); transform:translateZ(-13px);\n}\n.layer .ltag{ display:none; }\n.layer .ltag small{ display:block; font-size:10.5px; font-weight:500; letter-spacing:.11em; text-transform:uppercase; opacity:.72; margin-top:3px; }\n.layer.raised{ transform:translateZ(calc(var(--i) * var(--gap) + 34px)); }\n.shadow{ position:absolute; inset:-8%; border-radius:50%; background:radial-gradient(closest-side,rgba(0,0,0,.55),transparent 72%); transform:translateZ(-46px) scale(1.25); }\n\n.legend{ list-style:none; }\n.legend li{ display:flex; align-items:center; gap:14px; padding:12px 10px; border-bottom:1px solid var(--dhair); border-radius:6px; transition:background .2s; cursor:pointer; }\n.legend li:first-child{ border-top:1px solid var(--dhair); }\n.legend li:hover{ background:rgba(236,237,234,.05); }\n.legend .dot{ width:11px; height:11px; border-radius:4px; background:var(--c); flex:none; }\n.legend .biz{ font-size:15px; font-weight:600; flex:1; color:var(--dtext); }\n.legend .comp{ font-family:var(--mono); font-size:10.5px; letter-spacing:.12em; color:var(--dfaint); text-transform:uppercase; }\n.stacknote{ margin-top:22px; font-size:13px; color:var(--dfaint); line-height:1.65; max-width:42ch; }\n\n/* ---- 03 offer ---- */\n.steps{ display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(16px,2.2vw,30px); margin-top:clamp(30px,4vh,46px); }\n.step{ padding-top:24px; border-top:2px solid var(--ink); }\n.step .num{ font-family:var(--mono); font-size:11px; letter-spacing:.18em; color:var(--faint); }\n.step h3{ margin-top:14px; font-size:clamp(19px,1.9vw,23px); font-weight:700; letter-spacing:-.012em; }\n.step .what{ margin-top:8px; font-family:var(--mono); font-size:11.5px; letter-spacing:.05em; color:var(--faint); }\n.step .why{ margin-top:14px; font-size:14.5px; line-height:1.6; color:var(--faint); max-width:34ch; }\n.underline{ margin-top:clamp(36px,5vh,56px); padding-top:26px; border-top:1px solid var(--hair); font-size:clamp(16px,1.6vw,20px); font-weight:200; letter-spacing:-.01em; max-width:52ch; }\n.underline b{ font-weight:700; }\n\n/* ---- 04 proof ---- */\n.levers{ display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:clamp(18px,2.4vw,34px); margin-top:clamp(28px,4vh,44px); }\n.lever .v{ font-size:clamp(30px,3.4vw,44px); font-weight:200; letter-spacing:-.02em; line-height:1; font-variant-numeric:tabular-nums; }\n.lever .l{ margin-top:10px; font-size:13px; line-height:1.45; color:var(--faint); max-width:22ch; }\n.logos{ margin-top:clamp(46px,6vh,72px); overflow:hidden; background:var(--dark); padding:34px 0; }\n.logos-in{ display:flex; width:max-content; animation:mq 42s linear infinite; }\n@keyframes mq{ to{ transform:translateX(-50%); } }\n.logos-h{ display:flex; align-items:center; gap:clamp(38px,5vw,72px); padding-right:clamp(38px,5vw,72px); }\n.logos img{ height:27px; width:auto; opacity:.5; transition:opacity .3s; }\n.logos img:hover{ opacity:.95; }\n\n/* ---- 05 industries ---- */\n.inds{ display:grid; grid-template-columns:repeat(2,1fr); gap:1px; background:var(--dhair); border:1px solid var(--dhair); border-radius:12px; overflow:hidden; margin-top:clamp(28px,4vh,44px); }\n.ind{ background:var(--dark); padding:clamp(26px,3vw,40px); display:flex; flex-direction:column; gap:14px; transition:background .3s; cursor:pointer; }\n.ind:hover{ background:#101216; }\n.ind .setor{ font-family:var(--mono); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; display:flex; align-items:center; gap:9px; color:var(--dfaint); }\n.ind .setor i{ width:9px; height:9px; border-radius:3px; background:var(--c); flex:none; }\n.ind .man{ font-size:clamp(19px,2.1vw,27px); font-weight:200; letter-spacing:-.012em; line-height:1.18; color:var(--dtext); }\n.ind .man b{ font-weight:700; }\n\n/* ---- 06 close ---- */\n.close{ text-align:center; }\n.close .display{ max-width:none; }\n.close .sub{ margin-top:24px; font-size:clamp(15px,1.4vw,18px); color:var(--faint); }\n.close .btnrow{ margin-top:36px; display:flex; justify-content:center; gap:14px; flex-wrap:wrap; }\n.sign{ margin-top:clamp(64px,9vh,110px); padding-top:34px; border-top:1px solid var(--hair); display:flex; flex-direction:column; align-items:center; gap:16px; }\n.sign .sigmark{ width:190px; }\n.sign .assin{ font-weight:200; font-size:clamp(19px,2.2vw,27px); letter-spacing:-.01em; }\n.sign .assin b{ font-weight:700; }\n.sign .pot{ font-size:12.5px; color:var(--faint); }\n\n/* ---- reveal ---- */\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:900px){\n  .stackwrap{ grid-template-columns:1fr; }\n  .stage{ height:clamp(360px,88vw,470px); margin-top:40px; }\n  .stack3d{ --gap:25px; width:min(238px,60vw); }\n  .steps{ grid-template-columns:1fr; gap:26px; }\n  .inds{ grid-template-columns:1fr; }\n  .hero{ min-height:0; padding:96px 0 40px; }\n  .hmeta{ position:relative; left:auto; right:auto; bottom:auto; margin-top:44px; padding:0 clamp(24px,4.6vw,58px); }\n}\n@media (max-width:560px){\n  .display{ font-size:clamp(32px,9vw,44px); }\n  h2{ font-size:clamp(25px,7vw,32px); }\n}\n@media (prefers-reduced-motion:reduce){\n  .rv{ opacity:1; transform:none; transition:none; }\n  .float{ animation:none; } .logos-in{ animation:none; } .layer{ transition:none; }\n}\n`,\n\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = HOME_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var dd = function(r){ try{ var h = d2.data(r); return h ? (h.records()||[]) : []; }catch(e){ return []; } };\n    var pick = function(rec, base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n\n    var LY = LAYERS();\n    var N = LY.length;\n\n    /* --- stack --- */\n    var layersHtml = '', legendHtml = '';\n    for(var i=0;i<N;i++){\n      var L = LY[i];\n      layersHtml += '<div class=\"layer\" data-comp=\"'+L.comp+'\" style=\"--c:'+L.c+';--lt:'+L.lt+';--i:'+(N-1-i)+';z-index:'+(N-i)+'\">'\n        + '<span class=\"ltag\">'+L.comp+'<small>'+esc(t('ly_'+L.key))+'</small></span></div>';\n      legendHtml += '<li data-comp=\"'+L.comp+'\"><span class=\"dot\" style=\"--c:'+L.c+'\"></span>'\n        + '<span class=\"biz\">'+esc(t('ly_'+L.key))+'</span><span class=\"comp\">'+L.comp+'</span></li>';\n    }\n\n    /* --- levers (proof) --- */\n    var lv = dd('cms-leversDataSet').sort(function(a,b){ return (a.ordem||0)-(b.ordem||0); }).slice(0,4);\n    var leversHtml = '';\n    for(var j=0;j<lv.length;j++){\n      var m = lv[j];\n      var un = pick(m,'unidade') || '';\n      var lb = String(pick(m,'label')||'');\n      var uw = String(un).replace(/[^A-Za-zÀ-ÿ]/g,'').toLowerCase();\n      if(uw){ var mm = lb.match(/\\s+(?:por|per)\\s+([A-Za-zÀ-ÿ]+)\\s*$/i); if(mm && mm[1].toLowerCase()===uw){ lb = lb.slice(0,mm.index); } }\n      leversHtml += '<div class=\"lever\"><div class=\"v\">'+esc(m.valor||'')+'<span style=\"font-size:.42em;font-weight:400;letter-spacing:0\">'+esc(un)+'</span></div>'\n        + '<div class=\"l\">'+esc(lb)+'</div></div>';\n    }\n    if(!leversHtml) leversHtml = '';\n\n    /* --- logos --- */\n    var lg = dd('cms-logosDataSet').filter(function(x){ return x && x.fileUrl && x.publico!==false; })\n              .sort(function(a,b){ return (a.ordem||0)-(b.ordem||0); });\n    var logoRow = '';\n    for(var k=0;k<lg.length;k++){ logoRow += '<img src=\"'+esc(lg[k].fileUrl)+'\" alt=\"\" loading=\"lazy\">'; }\n    var logosHtml = logoRow ? '<div class=\"logos\"><div class=\"logos-in\"><div class=\"logos-h\">'+logoRow+'</div><div class=\"logos-h\">'+logoRow+'</div></div></div>' : '';\n\n    /* --- industries --- */\n    var IND = INDS();\n    var indsHtml = '';\n    var cmsInds = dd('cms-industriesDataSet');\n    for(var q=0;q<IND.length;q++){\n      var it = IND[q];\n      var rec = null;\n      for(var z=0;z<cmsInds.length;z++){ if(cmsInds[z] && cmsInds[z].slug===it.slug){ rec = cmsInds[z]; break; } }\n      var man = rec ? pick(rec,'manchete') : '';\n      if(!man) man = t('ind_'+it.slug);\n      var nome = rec ? (lang==='pt' ? (rec.name_pt||'') : (rec['name_'+lang]||rec.name_pt||'')) : '';\n      if(!nome) nome = t('indn_'+it.slug);\n      indsHtml += '<div class=\"ind\" data-nav data-href=\"/industrias/'+it.slug+'\" style=\"--c:'+it.c+'\">'\n        + '<div class=\"setor\"><i></i>'+esc(nome)+'</div>'\n        + '<div class=\"man\">'+esc(man)+'</div></div>';\n    }\n\n    return ''\n    + '<div class=\"hv4\">'\n      + '<div class=\"seam\"></div>'\n\n      /* 01 — HERO */\n      + '<section class=\"dark hero\">'\n        + '<svg class=\"wormsvg\" viewBox=\"0 0 1600 900\" preserveAspectRatio=\"xMidYMid slice\" aria-hidden=\"true\">'\n          + '<defs><linearGradient id=\"wg\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"820\" x2=\"1600\" y2=\"380\">'\n            + '<stop offset=\"0\" stop-color=\"#9b5cff\"/><stop offset=\".26\" stop-color=\"#4ddfe6\"/>'\n            + '<stop offset=\".52\" stop-color=\"#4de0a1\"/><stop offset=\".76\" stop-color=\"#e8e84d\"/>'\n            + '<stop offset=\"1\" stop-color=\"#ff4d9e\"/></linearGradient></defs>'\n          + '<path data-worm stroke=\"url(#wg)\" pathLength=\"1\" style=\"stroke-dasharray:1;stroke-dashoffset:1\"'\n          + ' d=\"M -80 700 C 300 470, 470 940, 820 700 C 1060 540, 1140 250, 1310 350 C 1470 445, 1520 590, 1700 520\"/>'\n        + '</svg>'\n        + '<div class=\"frame\">'\n          + '<div class=\"rv\">'\n            + '<div class=\"h-kick\"><i></i><span class=\"kicker\">'+esc(t('kick'))+'</span></div>'\n            + '<h1 class=\"display\">'+t('h1a')+' <b>'+t('h1b')+'</b></h1>'\n            + '<p class=\"h-sub\">'+t('hsub')+'</p>'\n            + '<div class=\"h-cta\">'\n              + '<button class=\"btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta1'))+' &rarr;</button>'\n              + '<button class=\"btn ghost\" data-nav data-href=\"/plataforma\">'+esc(t('cta2'))+'</button>'\n            + '</div>'\n          + '</div>'\n        + '</div>'\n        + '<div class=\"hmeta\"><span class=\"idx\">01 — 07</span></div>'\n      + '</section>'\n\n      /* 02 — STACK */\n      + '<section class=\"dark\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"shead rv\"><div>'\n            + '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(t('k_stack'))+'</p>'\n            + '<h2>'+t('h_stack')+'</h2>'\n          + '</div><span class=\"idx\">03 — 07</span></div>'\n          + '<p class=\"lede rv\" style=\"margin-bottom:clamp(24px,4vh,42px)\">'+esc(t('l_stack'))+'</p>'\n          + '<div class=\"stackwrap\">'\n            + '<div class=\"stage rv\" aria-hidden=\"true\"><div class=\"float\"><div class=\"stack3d\" data-stack><div class=\"shadow\"></div>'+layersHtml+'</div></div></div>'\n            + '<div class=\"rv\"><ul class=\"legend\" data-legend>'+legendHtml+'</ul>'\n            + '<p class=\"stacknote\">'+esc(t('n_stack'))+'</p></div>'\n          + '</div>'\n        + '</div>'\n      + '</section>'\n\n      /* 03 — SPLASH */\n      + '<section class=\"dark splash\">'\n        + '<img class=\"splash-img\" src=\"https://www.data2.media/file/rzzWkPvZaaTa5wLLVuiXJ\" alt=\"\" loading=\"lazy\">'\n        + '<div class=\"scrim\"></div>'\n        + '<div class=\"frame\">'\n          + '<p class=\"display rv\">'+t('h_splasha')+' <b>'+t('h_splashb')+'</b></p>'\n          + '<span class=\"idx\" style=\"display:block;margin-top:28px\">02 — 07</span>'\n        + '</div>'\n      + '</section>'\n\n      /* 04 — OFERTA */\n      + '<section class=\"paper\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"shead rv\"><div>'\n            + '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(t('k_offer'))+'</p>'\n            + '<h2>'+t('h_offer')+'</h2>'\n          + '</div><span class=\"idx\">04 — 07</span></div>'\n          + '<div class=\"steps\">'\n            + '<div class=\"step rv\"><div class=\"num\">01</div><h3>'+esc(t('s1t'))+'</h3><div class=\"what\">'+esc(t('s1w'))+'</div><p class=\"why\">'+esc(t('s1d'))+'</p></div>'\n            + '<div class=\"step rv\"><div class=\"num\">02</div><h3>'+esc(t('s2t'))+'</h3><div class=\"what\">'+esc(t('s2w'))+'</div><p class=\"why\">'+esc(t('s2d'))+'</p></div>'\n            + '<div class=\"step rv\"><div class=\"num\">03</div><h3>'+esc(t('s3t'))+'</h3><div class=\"what\">'+esc(t('s3w'))+'</div><p class=\"why\">'+esc(t('s3d'))+'</p></div>'\n          + '</div>'\n          + '<p class=\"underline rv\">'+t('u_offer')+'</p>'\n        + '</div>'\n      + '</section>'\n\n      /* 04 — PROVA */\n      + '<section class=\"paper\" style=\"padding-top:0\">'\n        + '<div class=\"frame\" style=\"padding-top:0\">'\n          + '<div class=\"shead rv\"><div>'\n            + '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(t('k_proof'))+'</p>'\n            + '<h2>'+t('h_proof')+'</h2>'\n          + '</div><span class=\"idx\">05 — 07</span></div>'\n          + '<div class=\"levers rv\">'+leversHtml+'</div>'\n        + '</div>'\n        + logosHtml\n      + '</section>'\n\n      /* 05 — INDÚSTRIAS */\n      + '<section class=\"dark\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"shead rv\"><div>'\n            + '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(t('k_ind'))+'</p>'\n            + '<h2>'+t('h_ind')+'</h2>'\n          + '</div><span class=\"idx\">06 — 07</span></div>'\n          + '<div class=\"inds rv\">'+indsHtml+'</div>'\n        + '</div>'\n      + '</section>'\n\n      /* 06 — FECHO */\n      + '<section class=\"paper close\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"rv\">'\n            + '<p class=\"display\">'+t('h_closea')+' <b>'+t('h_closeb')+'</b></p>'\n            + '<p class=\"sub\">'+esc(t('c_sub'))+'</p>'\n            + '<div class=\"btnrow\"><button class=\"btn\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta1'))+' &rarr;</button></div>'\n          + '</div>'\n          + '<div class=\"sign rv\">'\n            + SIGMARK('sigmark')\n            + '<p class=\"assin\">'+t('assin_a')+' <b>'+t('assin_b')+'</b></p>'\n            + '<p class=\"pot\">'+esc(t('pot'))+'</p>'\n          + '</div>'\n        + '</div>'\n      + '</section>'\n    + '</div>';\n  },\n\n  mounted(d2, root){ HV4_SETUP(d2, root); },\n  updated(d2, root){ HV4_SETUP(d2, root); }\n};\n\n/* ============ helpers (function declarations — they hoist) ============ */\n\nfunction D2LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction LAYERS(){\n  return [\n    {comp:'UI',       key:'ui',       c:'#5b86ff', lt:'#fff'},\n    {comp:'Registry', key:'registry', c:'#ff6a4d', lt:'#fff'},\n    {comp:'Media',    key:'media',    c:'#e8e84d', lt:'#2a2a10'},\n    {comp:'ID',       key:'id',       c:'#4de0a1', lt:'#0c2e1f'},\n    {comp:'Connect',  key:'connect',  c:'#4ddfe6', lt:'#0c2c30'},\n    {comp:'Domain',   key:'domain',   c:'#ff4d9e', lt:'#fff'},\n    {comp:'Rush',     key:'rush',     c:'#9b5cff', lt:'#fff'},\n    {comp:'Cashier',  key:'cashier',  c:'#84e05a', lt:'#12300c'}\n  ];\n}\n\nfunction INDS(){\n  return [\n    {slug:'cx',         c:'#4ddfe6'},\n    {slug:'financeiro', c:'#84e05a'},\n    {slug:'varejo',     c:'#ff4d9e'},\n    {slug:'supply',     c:'#9b5cff'}\n  ];\n}\n\nfunction SIGMARK(cls){\n  return '<svg class=\"'+cls+'\" viewBox=\"0 0 459.554 148.471\" fill=\"none\" aria-label=\"Data²\" role=\"img\">'\n  + '<g transform=\"translate(-678.859 -300.605)\">'\n  + '<path transform=\"translate(664.5 447)\" fill=\"currentColor\" d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\"/>'\n  + '<path transform=\"translate(1095.5 395)\" fill=\"currentColor\" d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\"/>'\n  + '</g></svg>';\n}\n\nfunction HOME_T(){ return {\n  pt:{\n    kick:'Plataforma e time · escala enterprise',\n    h1a:'Da necessidade à produção.', h1b:'O resto é demo.',\n    hsub:'Solução completa <b>em produção em 2 a 4 semanas</b> — sobre a nossa própria plataforma.',\n    cta1:'Trazer um problema', cta2:'Ver a plataforma',\n\n    k_stack:'A plataforma',\n    h_stack:'Tudo que o seu problema precisa. <b>Num lugar só.</b>',\n    l_stack:'Oito componentes, uma runtime. Interface, dados, arquivos, identidade, integrações, decisão, eventos e pagamento — nascem ligados.',\n    n_stack:'Passe o mouse por qualquer camada. Cada uma é um componente com profundidade própria — e todas falam a mesma língua.',\n    ly_ui:'Interfaces ricas', ly_registry:'Framework de dados', ly_media:'Arquivos e entrega',\n    ly_id:'Identidade e acesso', ly_connect:'Acesso externo', ly_domain:'Lógica de negócio',\n    ly_rush:'Pipeline de eventos', ly_cashier:'Pagamentos',\n    h_splasha:'Não é um kit de peças.', h_splashb:'É uma peça só.',\n\n    k_offer:'Como trabalhamos',\n    h_offer:'Não é projeto. É investimento <b>com data de retorno.</b>',\n    s1t:'O caso', s1w:'Lean Inception · semana zero', s1d:'A dor vira escopo com número antes de qualquer linha de código.',\n    s2t:'O prazo', s2w:'Sprint · 2 a 4 semanas', s2d:'Solução completa em produção. Não é piloto, não é prova de conceito.',\n    s3t:'O retorno', s3w:'Medido, em produção', s3d:'No mesmo trimestre em que foi aprovado.',\n    u_offer:'Quem promete data <b>já assumiu a responsabilidade.</b>',\n\n    k_proof:'Em produção',\n    h_proof:'Antes de produção, todo número é promessa. <b>Estes vieram de produção.</b>',\n\n    k_ind:'Onde já resolvemos',\n    h_ind:'O setor muda. <b>A distância até produção, não.</b>',\n    indn_cx:'CX / Contact Center', indn_financeiro:'Serviços financeiros', indn_varejo:'Varejo', indn_supply:'Supply chain',\n    ind_cx:'Quem liga não quer conversar. Quer resolver.',\n    ind_financeiro:'Cada centavo com origem.',\n    ind_varejo:'A vitrine muda mais rápido que o sistema.',\n    ind_supply:'Estoque certo no lugar errado ainda é estoque errado.',\n\n    h_closea:'Traga o problema.', h_closeb:'Devolvemos rodando.',\n    c_sub:'Começa com trinta minutos, sem roteiro de vendas.',\n    assin_a:'Necessidade', assin_b:'elevada à produção.',\n    pot:'O ² é elevar à potência.'\n  },\n  en:{\n    kick:'Platform and team · enterprise scale',\n    h1a:'From necessity to production.', h1b:'The rest is a demo.',\n    hsub:'A complete solution <b>in production in 2 to 4 weeks</b> — on a platform that is ours.',\n    cta1:'Bring a problem', cta2:'See the platform',\n\n    k_stack:'The platform',\n    h_stack:'Everything your problem needs. <b>In one place.</b>',\n    l_stack:'Eight components, one runtime. Interface, data, files, identity, integrations, decision, events and payment — born connected.',\n    n_stack:'Hover any layer. Each one is a component with its own depth — and all of them speak the same language.',\n    ly_ui:'Rich user interfaces', ly_registry:'Data framework', ly_media:'Storage and delivery',\n    ly_id:'Identity and access', ly_connect:'External access', ly_domain:'Business logic',\n    ly_rush:'Event pipeline', ly_cashier:'Payments',\n    h_splasha:'It is not a kit of parts.', h_splashb:'It is a single piece.',\n\n    k_offer:'How we work',\n    h_offer:'It is not a project. It is an investment <b>with a return date.</b>',\n    s1t:'The case', s1w:'Lean Inception · week zero', s1d:'The pain becomes scope with a number, before a single line of code.',\n    s2t:'The deadline', s2w:'Sprint · 2 to 4 weeks', s2d:'A complete solution in production. Not a pilot, not a proof of concept.',\n    s3t:'The return', s3w:'Measured, in production', s3d:'In the same quarter it was approved.',\n    u_offer:'Whoever promises a date <b>has already taken responsibility.</b>',\n\n    k_proof:'In production',\n    h_proof:'Before production, every number is a promise. <b>These came from production.</b>',\n\n    k_ind:'Where we have solved it',\n    h_ind:'The sector changes. <b>The distance to production does not.</b>',\n    indn_cx:'CX / Contact Center', indn_financeiro:'Financial services', indn_varejo:'Retail', indn_supply:'Supply chain',\n    ind_cx:'People who call do not want to talk. They want it solved.',\n    ind_financeiro:'Every cent with an origin.',\n    ind_varejo:'The storefront changes faster than the system.',\n    ind_supply:'The right stock in the wrong place is still the wrong stock.',\n\n    h_closea:'Bring the problem.', h_closeb:'We hand it back running.',\n    c_sub:'It starts with thirty minutes, no sales script.',\n    assin_a:'Necessity,', assin_b:'raised to production.',\n    pot:'The ² means raised to the power.'\n  },\n  es:{\n    kick:'Plataforma y equipo · escala enterprise',\n    h1a:'De la necesidad a la producción.', h1b:'El resto es demo.',\n    hsub:'Una solución completa <b>en producción en 2 a 4 semanas</b> — sobre nuestra propia plataforma.',\n    cta1:'Traer un problema', cta2:'Ver la plataforma',\n\n    k_stack:'La plataforma',\n    h_stack:'Todo lo que tu problema necesita. <b>En un solo lugar.</b>',\n    l_stack:'Ocho componentes, un runtime. Interfaz, datos, archivos, identidad, integraciones, decisión, eventos y pago — nacen conectados.',\n    n_stack:'Pasa el mouse por cualquier capa. Cada una es un componente con profundidad propia — y todas hablan el mismo idioma.',\n    ly_ui:'Interfaces ricas', ly_registry:'Framework de datos', ly_media:'Archivos y entrega',\n    ly_id:'Identidad y acceso', ly_connect:'Acceso externo', ly_domain:'Lógica de negocio',\n    ly_rush:'Pipeline de eventos', ly_cashier:'Pagos',\n    h_splasha:'No es un kit de piezas.', h_splashb:'Es una sola pieza.',\n\n    k_offer:'Cómo trabajamos',\n    h_offer:'No es un proyecto. Es una inversión <b>con fecha de retorno.</b>',\n    s1t:'El caso', s1w:'Lean Inception · semana cero', s1d:'El dolor se vuelve alcance con número, antes de una sola línea de código.',\n    s2t:'El plazo', s2w:'Sprint · 2 a 4 semanas', s2d:'Solución completa en producción. No es piloto, no es prueba de concepto.',\n    s3t:'El retorno', s3w:'Medido, en producción', s3d:'En el mismo trimestre en que fue aprobado.',\n    u_offer:'Quien promete una fecha <b>ya asumió la responsabilidad.</b>',\n\n    k_proof:'En producción',\n    h_proof:'Antes de producción, todo número es una promesa. <b>Estos vinieron de producción.</b>',\n\n    k_ind:'Dónde ya lo resolvimos',\n    h_ind:'El sector cambia. <b>La distancia a producción, no.</b>',\n    indn_cx:'CX / Contact Center', indn_financeiro:'Servicios financieros', indn_varejo:'Retail', indn_supply:'Supply chain',\n    ind_cx:'Quien llama no quiere conversar. Quiere resolver.',\n    ind_financeiro:'Cada centavo con su origen.',\n    ind_varejo:'La vitrina cambia más rápido que el sistema.',\n    ind_supply:'Stock correcto en el lugar equivocado sigue siendo stock equivocado.',\n\n    h_closea:'Trae el problema.', h_closeb:'Te lo devolvemos funcionando.',\n    c_sub:'Empieza con treinta minutos, sin guion de ventas.',\n    assin_a:'La necesidad,', assin_b:'elevada a producción.',\n    pot:'El ² es elevar a la potencia.'\n  }\n}; }\n\nfunction HV4_SETUP(d2, root){\n  var host = root.querySelector('.hv4');\n  if(!host) return;\n\n  /* reveals */\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  /* nav — rebind inside this shadow root */\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n\n  /* stack — legend <-> layer linkage */\n  var layers = Array.prototype.slice.call(root.querySelectorAll('.layer'));\n  var rows   = Array.prototype.slice.call(root.querySelectorAll('.legend li'));\n  function raise(comp, on){\n    for(var i=0;i<layers.length;i++){\n      if(layers[i].getAttribute('data-comp')===comp) layers[i].classList.toggle('raised', on);\n    }\n  }\n  rows.forEach(function(li){\n    var c = li.getAttribute('data-comp');\n    d2.on(li,'mouseenter',function(){ raise(c,true); });\n    d2.on(li,'mouseleave',function(){ raise(c,false); });\n  });\n  layers.forEach(function(el){\n    var c = el.getAttribute('data-comp');\n    d2.on(el,'mouseenter',function(){ raise(c,true); });\n    d2.on(el,'mouseleave',function(){ raise(c,false); });\n  });\n\n  /* worm draw-in on the hero */\n  try{\n    var w = root.querySelector('[data-worm]');\n    if(w && !(window.matchMedia && window.matchMedia('(prefers-reduced-motion:reduce)').matches)){\n      setTimeout(function(){\n        if(!w.isConnected) return;\n        w.style.transition = 'stroke-dashoffset 2.6s cubic-bezier(.25,.6,.3,1)';\n        w.style.strokeDashoffset = '0';\n      }, 260);\n    } else if(w){ w.style.strokeDashoffset = '0'; }\n  }catch(e){}\n}\n"}}}}}}}},{"_id":"6a834baad8f86844d32e48a7","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"nav_v4","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n\n.nv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --w1:#9b5cff; --w2:#5b86ff; --w3:#4ddfe6; --w4:#4de0a1;\n  --w5:#84e05a; --w6:#e8e84d; --w7:#ff6a4d; --w8:#ff4d9e;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --wormh:linear-gradient(90deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  --barH:66px;\n  position:relative; height:0; width:100%;\n  font-family:var(--grot); line-height:1.5; -webkit-font-smoothing:antialiased;\n}\n\n/* ---------- shared type ---------- */\n.kicker{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; }\n\n/* ---------- 1. fixed bar ---------- */\n.bar{\n  position:fixed; top:0; left:0; right:0; height:var(--barH); z-index:900;\n  background:rgba(10,11,13,.72);\n  -webkit-backdrop-filter:blur(20px) saturate(150%); backdrop-filter:blur(20px) saturate(150%);\n  border-bottom:1px solid var(--dhair); color:var(--dtext);\n}\n.bar::before{ content:\"\"; position:absolute; left:0; right:0; top:0; height:2px; background:var(--wormh); opacity:.85; }\n.bar-in{\n  max-width:1220px; margin:0 auto; height:100%;\n  padding:0 clamp(20px,4.6vw,58px); display:flex; align-items:center; gap:clamp(10px,2vw,28px);\n}\n.brand{ appearance:none; background:none; border:0; padding:6px 0; cursor:pointer; color:var(--dtext); flex:none; display:flex; align-items:center; }\n.brand .sigmark{ width:78px; display:block; color:currentColor; }\n.brand:hover{ opacity:.78; }\n\n.dests{ display:flex; align-items:center; gap:clamp(2px,.9vw,10px); margin-left:auto; }\n.dest{\n  appearance:none; background:none; border:0; cursor:pointer; font-family:var(--grot);\n  font-size:14px; font-weight:500; letter-spacing:-.004em; color:var(--dfaint);\n  padding:9px 12px; border-radius:9px; display:flex; align-items:center; gap:8px; white-space:nowrap;\n  transition:color .2s, background .2s;\n}\n.dest:hover, .dest.on{ color:var(--dtext); background:rgba(236,237,234,.07); }\n.dest .car{\n  width:5px; height:5px; border-right:1.4px solid currentColor; border-bottom:1.4px solid currentColor;\n  transform:rotate(45deg) translateY(-1px); opacity:.5; transition:transform .26s ease; flex:none;\n}\n.dest.on .car{ transform:rotate(-135deg) translateY(1px); opacity:.9; }\n\n.langs{\n  display:flex; align-items:center; gap:1px; flex:none;\n  margin-left:clamp(4px,1vw,14px); padding-left:clamp(8px,1.4vw,18px); border-left:1px solid var(--dhair);\n}\n.lang{\n  position:relative; appearance:none; background:none; border:0; cursor:pointer;\n  font-family:var(--mono); font-size:10.5px; letter-spacing:.14em; color:var(--dfaint);\n  padding:8px 7px; border-radius:6px; transition:color .2s;\n}\n.lang:hover{ color:var(--dtext); }\n.lang.on{ color:var(--dtext); }\n.lang.on::after{ content:\"\"; position:absolute; left:6px; right:6px; bottom:3px; height:2px; border-radius:2px; background:var(--wormh); }\n\n.cta{\n  appearance:none; border:0; cursor:pointer; font-family:var(--grot); font-size:13.5px; font-weight:600;\n  padding:11px 20px; border-radius:999px; background:var(--dtext); color:var(--dark);\n  margin-left:clamp(6px,1.4vw,18px); flex:none; white-space:nowrap; transition:transform .2s, opacity .2s;\n}\n.cta:hover{ transform:translateY(-2px); }\n.cta:active{ transform:none; }\n\n.burger{\n  display:none; appearance:none; background:none; cursor:pointer; margin-left:auto; flex:none;\n  border:1px solid var(--dhair); border-radius:11px; width:48px; height:44px;\n  flex-direction:column; align-items:center; justify-content:center; gap:5px; transition:border-color .2s;\n}\n.burger:hover{ border-color:var(--dtext); }\n.burger span{ display:block; width:20px; height:1.5px; border-radius:2px; background:var(--dtext); }\n.burger span:nth-child(2){ width:14px; }\n\n/* ---------- 2. desktop mega ---------- */\n.mega{\n  position:fixed; left:0; right:0; top:var(--barH); z-index:880;\n  background:rgba(10,11,13,.95);\n  -webkit-backdrop-filter:blur(26px) saturate(150%); backdrop-filter:blur(26px) saturate(150%);\n  border-bottom:1px solid var(--dhair); color:var(--dtext);\n  opacity:0; visibility:hidden; transform:translateY(-12px); pointer-events:none;\n  transition:opacity .24s ease, transform .3s cubic-bezier(.25,.7,.25,1), visibility .24s;\n}\n.mega.on{ opacity:1; visibility:visible; transform:none; pointer-events:auto; }\n.mega::after{ content:\"\"; position:absolute; left:0; right:0; bottom:0; height:2px; background:var(--wormh); opacity:.7; }\n.mega-in{\n  max-width:1220px; margin:0 auto;\n  padding:clamp(28px,3.2vw,44px) clamp(24px,4.6vw,58px) clamp(32px,3.8vw,50px);\n  display:grid; gap:clamp(20px,3vw,50px);\n}\n.mg-plat .mega-in{ grid-template-columns:minmax(184px,.82fr) 1.09fr 1.09fr; }\n.mg-cons .mega-in{ grid-template-columns:minmax(184px,.82fr) 1fr 1fr; }\n.mg-emp  .mega-in{ grid-template-columns:minmax(184px,.6fr) minmax(260px,.8fr); justify-content:start; }\n\n.col{ min-width:0; }\n.col > .kicker{\n  display:block; color:var(--dfaint); padding-bottom:12px; margin-bottom:12px;\n  border-bottom:1px solid var(--dhair); min-height:24px;\n}\n.lks{ list-style:none; display:flex; flex-direction:column; }\n.lk{\n  display:flex; align-items:center; justify-content:space-between; gap:10px;\n  padding:10px 2px; font-size:15px; font-weight:400; color:var(--dtext); cursor:pointer;\n  transition:color .18s, transform .18s;\n}\n.lk:hover{ color:#fff; transform:translateX(3px); }\n.lk .arw{ font-family:var(--mono); font-size:12px; color:var(--dfaint); opacity:0; transition:opacity .18s; }\n.lk:hover .arw{ opacity:1; }\n.lk.tech{ font-family:var(--mono); font-size:13px; letter-spacing:.02em; }\n\n.grid2{ display:grid; grid-template-columns:1fr; gap:1px; }\n.pr{\n  display:flex; align-items:flex-start; gap:12px; padding:9px 12px 9px 10px; border-radius:10px;\n  cursor:pointer; transition:background .2s, transform .2s;\n}\n.pr:hover{ background:rgba(236,237,234,.06); transform:translateX(3px); }\n.pr i{\n  width:10px; height:10px; border-radius:3px; background:var(--c); flex:none; margin-top:5px;\n  box-shadow:0 0 0 3px color-mix(in oklab, var(--c), transparent 84%);\n}\n.pr.round i{ width:9px; height:9px; border-radius:99px; }\n.pr .tx{ min-width:0; }\n.pr .nm{ font-size:14.5px; font-weight:600; color:var(--dtext); line-height:1.22; }\n.pr .fn{ font-size:12px; color:var(--dfaint); margin-top:3px; line-height:1.35; }\n\n.startcard{\n  border:1px solid var(--dhair); border-radius:15px; padding:clamp(20px,2vw,26px);\n  background:rgba(236,237,234,.03); display:flex; flex-direction:column; gap:15px; align-items:flex-start;\n}\n.startcard .ln{ font-size:clamp(16px,1.5vw,20px); font-weight:200; letter-spacing:-.01em; line-height:1.28; }\n.startcard .ln b{ font-weight:700; }\n.startcard .sm{ font-size:12.5px; color:var(--dfaint); line-height:1.55; }\n.btn2{\n  appearance:none; border:1px solid var(--dhair); background:transparent; color:var(--dtext);\n  border-radius:999px; padding:10px 18px; font-family:var(--grot); font-size:13px; font-weight:500;\n  cursor:pointer; transition:border-color .2s, transform .2s;\n}\n.btn2:hover{ border-color:var(--dtext); transform:translateY(-2px); }\n\n/* ---------- 3. mobile fullscreen ---------- */\n.mob{\n  position:fixed; inset:0; z-index:1000; background:var(--dark); color:var(--dtext);\n  display:flex; flex-direction:column;\n  opacity:0; visibility:hidden; transform:translateY(-10px); pointer-events:none;\n  transition:opacity .28s ease, transform .34s cubic-bezier(.25,.7,.25,1), visibility .28s;\n}\n.mob.on{ opacity:1; visibility:visible; transform:none; pointer-events:auto; }\n.mob::before{ content:\"\"; position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--worm); z-index:6; }\n.mtop{\n  position:relative; z-index:5; flex:none; height:var(--barH);\n  display:flex; align-items:center; justify-content:space-between;\n  padding:0 clamp(18px,5vw,30px); border-bottom:1px solid var(--dhair); background:var(--dark);\n}\n.mtop .sigmark{ width:74px; display:block; color:var(--dtext); }\n.mtop .brand{ padding:0; }\n.xbtn{\n  appearance:none; background:none; border:1px solid var(--dhair); border-radius:11px;\n  width:48px; height:44px; cursor:pointer; color:var(--dtext);\n  display:flex; align-items:center; justify-content:center; flex:none; transition:border-color .2s;\n}\n.xbtn:hover{ border-color:var(--dtext); }\n.xbtn svg{ width:15px; height:15px; display:block; }\n\n.mscroll{\n  position:relative; z-index:2; flex:1 1 auto; min-height:0;\n  overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain;\n  padding-bottom:20px;\n}\n.mhead{\n  position:sticky; top:0; z-index:4; background:var(--dark); cursor:pointer;\n  border-bottom:1px solid var(--dhair);\n  padding:clamp(19px,5vw,26px) clamp(18px,5vw,30px) clamp(13px,3.4vw,18px);\n  transition:background .2s;\n}\n.mhead:active{ background:#101216; }\n.mhead .idx{ display:block; font-size:10px; letter-spacing:.18em; color:var(--dfaint); margin-bottom:9px; }\n.mhead .big{ display:block; font-weight:200; font-size:clamp(30px,9.2vw,44px); letter-spacing:-.022em; line-height:1.02; }\n.mhead .big b{ font-weight:700; }\n.msub{ padding:0 clamp(18px,5vw,30px) clamp(24px,6vw,34px); }\n.subk{\n  display:block; font-family:var(--grot); font-size:10.5px; letter-spacing:.22em;\n  text-transform:uppercase; font-weight:500; color:var(--dfaint); margin:22px 0 6px;\n}\n.msub > .subk:first-child{ margin-top:16px; }\n.mlk{\n  display:flex; align-items:center; justify-content:space-between; gap:12px;\n  padding:15px 2px; border-bottom:1px solid var(--dhair);\n  font-size:17px; font-weight:400; color:var(--dtext); cursor:pointer; min-height:52px;\n}\n.mlk .arw{ font-family:var(--mono); font-size:13px; color:var(--dfaint); flex:none; }\n.mlk.tech{ font-family:var(--mono); font-size:15px; letter-spacing:.01em; }\n.mpr{\n  display:flex; align-items:center; gap:14px; padding:13px 2px;\n  border-bottom:1px solid var(--dhair); cursor:pointer; min-height:56px;\n}\n.mpr i{\n  width:11px; height:11px; border-radius:3.5px; background:var(--c); flex:none;\n  box-shadow:0 0 0 3px color-mix(in oklab, var(--c), transparent 84%);\n}\n.mpr.round i{ width:10px; height:10px; border-radius:99px; }\n.mpr .nm{ font-size:16px; font-weight:600; line-height:1.2; }\n.mpr .fn{ font-size:12.5px; color:var(--dfaint); margin-top:2px; line-height:1.3; }\n\n.mfoot{\n  position:relative; z-index:5; flex:none; background:var(--dark); border-top:1px solid var(--dhair);\n  padding:15px clamp(18px,5vw,30px) calc(15px + env(safe-area-inset-bottom, 0px));\n  display:flex; flex-direction:column; gap:13px;\n}\n.mfoot .fk{ font-size:10.5px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; color:var(--dfaint); }\n.mlangs{ display:flex; align-items:center; gap:8px; }\n.mlang{\n  appearance:none; background:none; border:1px solid var(--dhair); border-radius:999px;\n  padding:10px 15px; font-family:var(--mono); font-size:11px; letter-spacing:.14em;\n  color:var(--dfaint); cursor:pointer; transition:color .2s, border-color .2s;\n}\n.mlang:hover{ color:var(--dtext); border-color:var(--dtext); }\n.mlang.on{ color:var(--dark); background:var(--dtext); border-color:var(--dtext); }\n.mcta{\n  appearance:none; border:0; cursor:pointer; width:100%;\n  font-family:var(--grot); font-size:15.5px; font-weight:600;\n  padding:17px 22px; border-radius:999px; background:var(--dtext); color:var(--dark);\n}\n\n/* ---------- breakpoints ---------- */\n@media (max-width:1080px){\n  .nv4{ --barH:60px; }\n  .dests, .langs, .cta{ display:none; }\n  .burger{ display:flex; }\n  .mega{ display:none; }\n}\n@media (min-width:1081px){\n  .mob{ display:none; }\n}\n@media (prefers-reduced-motion:reduce){\n  .mega, .mob, .dest, .dest .car, .lk, .pr, .cta, .btn2, .mhead{ transition:none; }\n  .mega{ transform:none; } .mob{ transform:none; }\n}\n`,\n\n  render(d2){\n    var lang = NAV_LANG(d2);\n    var TT   = NAV_T();\n    var t    = function(k){\n      var v = (TT[lang] && TT[lang][k]);\n      if(v == null) v = TT.en[k];\n      return (v == null) ? k : v;\n    };\n    var esc  = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n\n    var open = d2.state.mega || '';\n    var mob  = !!d2.state.mob;\n\n    var PR  = NAV_PRODUCTS();\n    var IND = NAV_INDUSTRIES();\n\n    var PLAT = [\n      {href:'/plataforma',                  k:'p_vis'},\n      {href:'/plataforma/como-funciona',    k:'p_como'},\n      {href:'/plataforma/data-framework',   k:'p_fw'},\n      {href:'/plataforma/agent-native',     k:'p_agent'},\n      {href:'/plataforma/data2-lang',       k:'p_lang', tech:true}\n    ];\n    var CONS = [\n      {href:'/consultoria', k:'c_como'},\n      {href:'/precos',      k:'c_prec'},\n      {href:'/casos',       k:'c_casos'}\n    ];\n    var EMP = [\n      {href:'/empresa',          k:'e_quem'},\n      {href:'/empresa/carreiras',k:'e_car'},\n      {href:'/empresa/contato',  k:'e_cont'},\n      {href:'/recursos',         k:'e_rec'}\n    ];\n    var LANGS = ['pt','en','es'];\n\n    /* ---- desktop link list ---- */\n    var lks = function(arr){\n      var o = '<ul class=\"lks\">';\n      for(var i=0;i<arr.length;i++){\n        o += '<li class=\"lk'+(arr[i].tech?' tech':'')+'\" data-nav data-href=\"'+arr[i].href+'\">'\n           + esc(t(arr[i].k)) + '<span class=\"arw\">&rarr;</span></li>';\n      }\n      return o + '</ul>';\n    };\n\n    /* ---- desktop coloured rows (products / industries) ---- */\n    var rows = function(arr, from, to, base, round){\n      var o = '<div class=\"grid2\">';\n      for(var i=from;i<to && i<arr.length;i++){\n        var r = arr[i];\n        o += '<div class=\"pr'+(round?' round':'')+'\" data-nav data-href=\"'+base+r.slug+'\" style=\"--c:'+r.c+'\">'\n           + '<i></i><div class=\"tx\"><div class=\"nm\">'+esc(r.name || t(r.nameKey))+'</div>'\n           + '<div class=\"fn\">'+esc(t(r.fnKey))+'</div></div></div>';\n      }\n      return o + '</div>';\n    };\n\n    /* ---- mobile rows ---- */\n    var mlks = function(arr){\n      var o = '';\n      for(var i=0;i<arr.length;i++){\n        o += '<div class=\"mlk'+(arr[i].tech?' tech':'')+'\" data-nav data-href=\"'+arr[i].href+'\">'\n           + esc(t(arr[i].k)) + '<span class=\"arw\">&rarr;</span></div>';\n      }\n      return o;\n    };\n    var mrows = function(arr, base, round){\n      var o = '';\n      for(var i=0;i<arr.length;i++){\n        var r = arr[i];\n        o += '<div class=\"mpr'+(round?' round':'')+'\" data-nav data-href=\"'+base+r.slug+'\" style=\"--c:'+r.c+'\">'\n           + '<i></i><div><div class=\"nm\">'+esc(r.name || t(r.nameKey))+'</div>'\n           + '<div class=\"fn\">'+esc(t(r.fnKey))+'</div></div></div>';\n      }\n      return o;\n    };\n\n    /* ---- lang pickers ---- */\n    var langBar = '';\n    for(var a=0;a<LANGS.length;a++){\n      langBar += '<button class=\"lang'+(LANGS[a]===lang?' on':'')+'\" type=\"button\" data-lang=\"'+LANGS[a]\n              +  '\" aria-pressed=\"'+(LANGS[a]===lang?'true':'false')+'\">'+LANGS[a].toUpperCase()+'</button>';\n    }\n    var langMob = '';\n    for(var b=0;b<LANGS.length;b++){\n      langMob += '<button class=\"mlang'+(LANGS[b]===lang?' on':'')+'\" type=\"button\" data-lang=\"'+LANGS[b]\n              +  '\" aria-pressed=\"'+(LANGS[b]===lang?'true':'false')+'\">'+LANGS[b].toUpperCase()+'</button>';\n    }\n\n    var DESTS = [{k:'plat', lk:'d_plat'}, {k:'cons', lk:'d_cons'}, {k:'emp', lk:'d_emp'}];\n    var destBar = '';\n    for(var c=0;c<DESTS.length;c++){\n      destBar += '<button class=\"dest'+(open===DESTS[c].k?' on':'')+'\" type=\"button\" data-dest=\"'+DESTS[c].k\n              +  '\" aria-expanded=\"'+(open===DESTS[c].k?'true':'false')+'\">'\n              +  esc(t(DESTS[c].lk))+'<span class=\"car\"></span></button>';\n    }\n\n    /* ---- mobile group ---- */\n    var mgroup = function(idx, ak, bk, href, body){\n      return '<section class=\"mgroup\">'\n        + '<div class=\"mhead\" data-nav data-href=\"'+href+'\">'\n          + '<span class=\"idx\">'+idx+' &mdash; 03</span>'\n          + '<span class=\"big\">'+(t(ak)?esc(t(ak))+' ':'')+'<b>'+esc(t(bk))+'</b></span>'\n        + '</div>'\n        + '<div class=\"msub\">'+body+'</div>'\n      + '</section>';\n    };\n\n    return ''\n    + '<div class=\"nv4\">'\n\n      /* ---------- BAR ---------- */\n      + '<header class=\"bar\">'\n        + '<div class=\"bar-in\">'\n          + '<button class=\"brand\" type=\"button\" data-nav data-href=\"/\" aria-label=\"Data2\">'+SIGMARK('sigmark')+'</button>'\n          + '<nav class=\"dests\" aria-label=\"'+esc(t('a_main'))+'\">'+destBar+'</nav>'\n          + '<div class=\"langs\" role=\"group\" aria-label=\"'+esc(t('a_lang'))+'\">'+langBar+'</div>'\n          + '<button class=\"cta\" type=\"button\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta'))+' &rarr;</button>'\n          + '<button class=\"burger\" type=\"button\" data-burger aria-label=\"'+esc(t('a_menu'))+'\" aria-expanded=\"'+(mob?'true':'false')+'\">'\n            + '<span></span><span></span><span></span>'\n          + '</button>'\n        + '</div>'\n      + '</header>'\n\n      /* ---------- MEGA · A PLATAFORMA ---------- */\n      + '<div class=\"mega mg-plat'+(open==='plat'?' on':'')+'\" data-panel=\"plat\">'\n        + '<div class=\"mega-in\">'\n          + '<div class=\"col\"><span class=\"kicker\">'+esc(t('k_plat'))+'</span>'+lks(PLAT)+'</div>'\n          + '<div class=\"col\"><span class=\"kicker\">'+esc(t('k_prod'))+'</span>'+rows(PR,0,4,'/produtos/',false)+'</div>'\n          + '<div class=\"col\"><span class=\"kicker\">&nbsp;</span>'+rows(PR,4,8,'/produtos/',false)+'</div>'\n        + '</div>'\n      + '</div>'\n\n      /* ---------- MEGA · CONSULTORIA ---------- */\n      + '<div class=\"mega mg-cons'+(open==='cons'?' on':'')+'\" data-panel=\"cons\">'\n        + '<div class=\"mega-in\">'\n          + '<div class=\"col\"><span class=\"kicker\">'+esc(t('k_cons'))+'</span>'+lks(CONS)+'</div>'\n          + '<div class=\"col\"><span class=\"kicker\">'+esc(t('k_ind'))+'</span>'+rows(IND,0,5,'/industrias/',true)+'</div>'\n          + '<div class=\"col\"><span class=\"kicker\">&nbsp;</span>'+rows(IND,5,9,'/industrias/',true)+'</div>'\n        + '</div>'\n      + '</div>'\n\n      /* ---------- MEGA · EMPRESA ---------- */\n      + '<div class=\"mega mg-emp'+(open==='emp'?' on':'')+'\" data-panel=\"emp\">'\n        + '<div class=\"mega-in\">'\n          + '<div class=\"col\"><span class=\"kicker\">'+esc(t('k_emp'))+'</span>'+lks(EMP)+'</div>'\n          + '<div class=\"col\"><span class=\"kicker\">'+esc(t('k_start'))+'</span>'\n            + '<div class=\"startcard\">'\n              + '<p class=\"ln\">'+t('st_line')+'</p>'\n              + '<p class=\"sm\">'+esc(t('st_sm'))+'</p>'\n              + '<button class=\"btn2\" type=\"button\" data-nav data-href=\"/empresa/contato\">'+esc(t('st_btn'))+' &rarr;</button>'\n            + '</div>'\n          + '</div>'\n        + '</div>'\n      + '</div>'\n\n      /* ---------- MOBILE FULLSCREEN ---------- */\n      + '<div class=\"mob'+(mob?' on':'')+'\" role=\"dialog\" aria-modal=\"true\" aria-label=\"'+esc(t('a_menu'))+'\">'\n        + '<div class=\"mtop\">'\n          + '<button class=\"brand\" type=\"button\" data-nav data-href=\"/\" aria-label=\"Data2\">'+SIGMARK('sigmark')+'</button>'\n          + '<button class=\"xbtn\" type=\"button\" data-close aria-label=\"'+esc(t('a_close'))+'\">'\n            + '<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M1 1 L15 15 M15 1 L1 15\" stroke=\"currentColor\" stroke-width=\"1.4\" fill=\"none\" stroke-linecap=\"round\"/></svg>'\n          + '</button>'\n        + '</div>'\n\n        + '<div class=\"mscroll\" data-mscroll>'\n          + mgroup('01','mb_plat_a','mb_plat_b','/plataforma',\n              '<span class=\"subk\">'+esc(t('k_plat'))+'</span>' + mlks(PLAT)\n            + '<span class=\"subk\">'+esc(t('k_prod'))+'</span>' + mrows(PR,'/produtos/',false))\n          + mgroup('02','mb_cons_a','mb_cons_b','/consultoria',\n              '<span class=\"subk\">'+esc(t('k_cons'))+'</span>' + mlks(CONS)\n            + '<span class=\"subk\">'+esc(t('k_ind'))+'</span>' + mrows(IND,'/industrias/',true))\n          + mgroup('03','mb_emp_a','mb_emp_b','/empresa',\n              '<span class=\"subk\">'+esc(t('k_emp'))+'</span>' + mlks(EMP))\n        + '</div>'\n\n        + '<div class=\"mfoot\">'\n          + '<span class=\"fk\">'+esc(t('a_lang'))+'</span>'\n          + '<div class=\"mlangs\" role=\"group\" aria-label=\"'+esc(t('a_lang'))+'\">'+langMob+'</div>'\n          + '<button class=\"mcta\" type=\"button\" data-nav data-href=\"/empresa/contato\">'+esc(t('cta'))+' &rarr;</button>'\n        + '</div>'\n      + '</div>'\n\n    + '</div>';\n  },\n\n  mounted(d2, root){ NAV_SETUP(d2, root); },\n  updated(d2, root){ NAV_SETUP(d2, root); }\n};\n\n/* ============ helpers (function declarations — they hoist) ============ */\n\nfunction NAV_LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction NAV_SETLANG(d2, v){\n  if(v!=='pt' && v!=='en' && v!=='es') return;\n  try{\n    var s = d2.store('siteLocale'); if(!s) return;\n    s.set('lang', v);\n    var back = s.get('lang'); if(back==null) back = s.get('data.lang');\n    if(back !== v) s.set('data.lang', v);\n  }catch(e){}\n}\n\nfunction NAV_ISMOBILE(){\n  try{ return !!(window.matchMedia && window.matchMedia('(max-width:1080px)').matches); }\n  catch(e){ return false; }\n}\n\n/* the 8 products — colours + business function match home-v4 1:1 */\nfunction NAV_PRODUCTS(){\n  return [\n    {slug:'ui',       name:'UI',       fnKey:'fn_ui',       c:'#5b86ff'},\n    {slug:'registry', name:'Registry', fnKey:'fn_registry', c:'#ff6a4d'},\n    {slug:'media',    name:'Media',    fnKey:'fn_media',    c:'#e8e84d'},\n    {slug:'id',       name:'ID',       fnKey:'fn_id',       c:'#4de0a1'},\n    {slug:'connect',  name:'Connect',  fnKey:'fn_connect',  c:'#4ddfe6'},\n    {slug:'domain',   name:'Domain',   fnKey:'fn_domain',   c:'#ff4d9e'},\n    {slug:'rush',     name:'Rush',     fnKey:'fn_rush',     c:'#9b5cff'},\n    {slug:'cashier',  name:'Cashier',  fnKey:'fn_cashier',  c:'#84e05a'}\n  ];\n}\n\n/* the 9 industries — cx / financeiro / varejo / supply keep home-v4's colours */\nfunction NAV_INDUSTRIES(){\n  return [\n    {slug:'cx',         nameKey:'in_cx',         fnKey:'ih_cx',         c:'#4ddfe6'},\n    {slug:'varejo',     nameKey:'in_varejo',     fnKey:'ih_varejo',     c:'#ff4d9e'},\n    {slug:'financeiro', nameKey:'in_financeiro', fnKey:'ih_financeiro', c:'#84e05a'},\n    {slug:'seguros',    nameKey:'in_seguros',    fnKey:'ih_seguros',    c:'#5b86ff'},\n    {slug:'vendas',     nameKey:'in_vendas',     fnKey:'ih_vendas',     c:'#ff6a4d'},\n    {slug:'rh',         nameKey:'in_rh',         fnKey:'ih_rh',         c:'#e8e84d'},\n    {slug:'supply',     nameKey:'in_supply',     fnKey:'ih_supply',     c:'#9b5cff'},\n    {slug:'bi',         nameKey:'in_bi',         fnKey:'ih_bi',         c:'#4de0a1'},\n    {slug:'compras',    nameKey:'in_compras',    fnKey:'ih_compras',    c:'#5b86ff'}\n  ];\n}\n\nfunction SIGMARK(cls){\n  return '<svg class=\"'+cls+'\" viewBox=\"0 0 459.554 148.471\" fill=\"none\" aria-label=\"Data²\" role=\"img\">'\n  + '<g transform=\"translate(-678.859 -300.605)\">'\n  + '<path transform=\"translate(664.5 447)\" fill=\"currentColor\" d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\"/>'\n  + '<path transform=\"translate(1095.5 395)\" fill=\"currentColor\" d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\"/>'\n  + '</g></svg>';\n}\n\nfunction NAV_T(){ return {\n  pt:{\n    d_plat:'A Plataforma', d_cons:'Consultoria', d_emp:'Empresa',\n    cta:'Falar com a gente',\n\n    a_main:'Navegação principal', a_lang:'Idioma', a_menu:'Menu', a_close:'Fechar',\n\n    k_plat:'A plataforma', k_prod:'Os 8 produtos', k_cons:'Consultoria',\n    k_ind:'Indústrias', k_emp:'A empresa', k_start:'Começa aqui',\n\n    p_vis:'Visão geral', p_como:'Como funciona', p_fw:'Data Framework',\n    p_agent:'Agent-native', p_lang:'data2-lang',\n\n    fn_ui:'Interfaces ricas', fn_registry:'Framework de dados', fn_media:'Arquivos e entrega',\n    fn_id:'Identidade e acesso', fn_connect:'Acesso externo', fn_domain:'Lógica de negócio',\n    fn_rush:'Pipeline de eventos', fn_cashier:'Pagamentos',\n\n    c_como:'Como trabalhamos', c_prec:'Preços', c_casos:'Casos',\n\n    in_cx:'CX / Contact Center', in_varejo:'Varejo', in_financeiro:'Serviços financeiros',\n    in_seguros:'Seguros', in_vendas:'Vendas', in_rh:'RH',\n    in_supply:'Supply chain', in_bi:'BI', in_compras:'Compras',\n    ih_cx:'Atendimento e voz', ih_varejo:'Loja e vitrine', ih_financeiro:'Crédito e conciliação',\n    ih_seguros:'Sinistro e apólice', ih_vendas:'Funil e proposta', ih_rh:'Pessoas e jornada',\n    ih_supply:'Estoque e rota', ih_bi:'Painel e decisão', ih_compras:'Cotação e contrato',\n\n    e_quem:'Quem somos', e_car:'Carreiras', e_cont:'Contato', e_rec:'Recursos',\n\n    st_line:'Trinta minutos. <b>Sem roteiro de vendas.</b>',\n    st_sm:'Traga o problema como ele é hoje — a planilha, a fila, o retrabalho. Devolvemos o escopo com número.',\n    st_btn:'Marcar uma conversa',\n\n    mb_plat_a:'A', mb_plat_b:'Plataforma',\n    mb_cons_a:'',  mb_cons_b:'Consultoria',\n    mb_emp_a:'A',  mb_emp_b:'Empresa'\n  },\n  en:{\n    d_plat:'The Platform', d_cons:'Consulting', d_emp:'Company',\n    cta:'Talk to us',\n\n    a_main:'Main navigation', a_lang:'Language', a_menu:'Menu', a_close:'Close',\n\n    k_plat:'The platform', k_prod:'The 8 products', k_cons:'Consulting',\n    k_ind:'Industries', k_emp:'The company', k_start:'Start here',\n\n    p_vis:'Overview', p_como:'How it works', p_fw:'Data Framework',\n    p_agent:'Agent-native', p_lang:'data2-lang',\n\n    fn_ui:'Rich user interfaces', fn_registry:'Data framework', fn_media:'Files and delivery',\n    fn_id:'Identity and access', fn_connect:'External access', fn_domain:'Business logic',\n    fn_rush:'Event pipeline', fn_cashier:'Payments',\n\n    c_como:'How we work', c_prec:'Pricing', c_casos:'Cases',\n\n    in_cx:'CX / Contact Center', in_varejo:'Retail', in_financeiro:'Financial services',\n    in_seguros:'Insurance', in_vendas:'Sales', in_rh:'HR',\n    in_supply:'Supply chain', in_bi:'BI', in_compras:'Procurement',\n    ih_cx:'Support and voice', ih_varejo:'Store and storefront', ih_financeiro:'Credit and reconciliation',\n    ih_seguros:'Claims and policy', ih_vendas:'Pipeline and proposal', ih_rh:'People and journey',\n    ih_supply:'Stock and route', ih_bi:'Dashboard and decision', ih_compras:'Sourcing and contract',\n\n    e_quem:'Who we are', e_car:'Careers', e_cont:'Contact', e_rec:'Resources',\n\n    st_line:'Thirty minutes. <b>No sales script.</b>',\n    st_sm:'Bring the problem exactly as it is today — the spreadsheet, the queue, the rework. We hand back the scope with a number.',\n    st_btn:'Book a conversation',\n\n    mb_plat_a:'The', mb_plat_b:'Platform',\n    mb_cons_a:'',    mb_cons_b:'Consulting',\n    mb_emp_a:'The',  mb_emp_b:'Company'\n  },\n  es:{\n    d_plat:'La Plataforma', d_cons:'Consultoría', d_emp:'Empresa',\n    cta:'Hablar con nosotros',\n\n    a_main:'Navegación principal', a_lang:'Idioma', a_menu:'Menú', a_close:'Cerrar',\n\n    k_plat:'La plataforma', k_prod:'Los 8 productos', k_cons:'Consultoría',\n    k_ind:'Industrias', k_emp:'La empresa', k_start:'Empieza aquí',\n\n    p_vis:'Visión general', p_como:'Cómo funciona', p_fw:'Data Framework',\n    p_agent:'Agent-native', p_lang:'data2-lang',\n\n    fn_ui:'Interfaces ricas', fn_registry:'Framework de datos', fn_media:'Archivos y entrega',\n    fn_id:'Identidad y acceso', fn_connect:'Acceso externo', fn_domain:'Lógica de negocio',\n    fn_rush:'Pipeline de eventos', fn_cashier:'Pagos',\n\n    c_como:'Cómo trabajamos', c_prec:'Precios', c_casos:'Casos',\n\n    in_cx:'CX / Contact Center', in_varejo:'Retail', in_financeiro:'Servicios financieros',\n    in_seguros:'Seguros', in_vendas:'Ventas', in_rh:'RRHH',\n    in_supply:'Supply chain', in_bi:'BI', in_compras:'Compras',\n    ih_cx:'Atención y voz', ih_varejo:'Tienda y vitrina', ih_financeiro:'Crédito y conciliación',\n    ih_seguros:'Siniestro y póliza', ih_vendas:'Embudo y propuesta', ih_rh:'Personas y recorrido',\n    ih_supply:'Stock y ruta', ih_bi:'Panel y decisión', ih_compras:'Cotización y contrato',\n\n    e_quem:'Quiénes somos', e_car:'Carreras', e_cont:'Contacto', e_rec:'Recursos',\n\n    st_line:'Treinta minutos. <b>Sin guion de ventas.</b>',\n    st_sm:'Trae el problema tal como es hoy — la planilla, la cola, el retrabajo. Devolvemos el alcance con número.',\n    st_btn:'Agendar una conversación',\n\n    mb_plat_a:'La', mb_plat_b:'Plataforma',\n    mb_cons_a:'',   mb_cons_b:'Consultoría',\n    mb_emp_a:'La',  mb_emp_b:'Empresa'\n  }\n}; }\n\nfunction NAV_CANCEL(root){\n  try{ if(root.__nv4t){ clearTimeout(root.__nv4t); root.__nv4t = null; } }catch(e){}\n}\n\nfunction NAV_UNLOCK(doc){\n  try{\n    var b = doc && doc.body; if(!b) return;\n    if(b.getAttribute('data-nv4lock') === '1'){\n      b.style.overflow = b.getAttribute('data-nv4prev') || '';\n      b.removeAttribute('data-nv4lock');\n      b.removeAttribute('data-nv4prev');\n    }\n  }catch(e){}\n}\n\nfunction NAV_SETUP(d2, root){\n  var host = root.querySelector('.nv4'); if(!host) return;\n  var doc = host.ownerDocument || document;\n\n  /* body scroll lock — re-evaluated every pass, idempotent */\n  try{\n    var b = doc && doc.body;\n    if(b){\n      if(d2.state.mob){\n        if(b.getAttribute('data-nv4lock') !== '1'){\n          b.setAttribute('data-nv4prev', b.style.overflow || '');\n          b.setAttribute('data-nv4lock', '1');\n          b.style.overflow = 'hidden';\n        }\n      } else {\n        NAV_UNLOCK(doc);\n      }\n    }\n  }catch(e){}\n\n  /* wire once — the flag lives on the stable container, not on morphed markup */\n  if(root.__nv4wired) return;\n  root.__nv4wired = true;\n\n  /* clicks — one delegated listener on the container */\n  try{\n    d2.on(root, 'click', function(e){\n      var tg = e.target; if(!tg || !tg.closest) return;\n\n      var lg = tg.closest('[data-lang]');\n      if(lg){ e.preventDefault(); NAV_SETLANG(d2, lg.getAttribute('data-lang')); return; }\n\n      var bg = tg.closest('[data-burger]');\n      if(bg){ e.preventDefault(); d2.setState({ mega:null, mob:true }); return; }\n\n      var cl = tg.closest('[data-close]');\n      if(cl){ e.preventDefault(); d2.state.mob = false; return; }\n\n      var ds = tg.closest('[data-dest]');\n      if(ds){\n        e.preventDefault();\n        NAV_CANCEL(root);\n        var k = ds.getAttribute('data-dest');\n        d2.state.mega = (d2.state.mega === k) ? null : k;\n        return;\n      }\n\n      var a = tg.closest('[data-nav]');\n      if(a){\n        var h = a.getAttribute('data-href'); if(!h) return;\n        e.preventDefault();\n        NAV_CANCEL(root);\n        d2.setState({ mega:null, mob:false });\n        try{ d2.state.path = h; }catch(_e1){}\n        try{ d2.router('site_router').goTo(h); }catch(_e2){}\n      }\n    });\n  }catch(e){}\n\n  /* hover-to-open (mouseenter cannot be delegated — direct binding required) */\n  try{\n    var dests = Array.prototype.slice.call(root.querySelectorAll('[data-dest]'));\n    dests.forEach(function(el){\n      d2.on(el, 'mouseenter', function(){\n        if(NAV_ISMOBILE()) return;\n        NAV_CANCEL(root);\n        d2.state.mega = el.getAttribute('data-dest');\n      });\n    });\n    d2.on(host, 'mouseenter', function(){ NAV_CANCEL(root); });\n    d2.on(host, 'mouseleave', function(){\n      if(NAV_ISMOBILE()) return;\n      NAV_CANCEL(root);\n      root.__nv4t = setTimeout(function(){ try{ d2.state.mega = null; }catch(_e3){} }, 170);\n    });\n  }catch(e){}\n\n  /* ESC closes whatever is open */\n  try{\n    d2.on(window, 'keydown', function(e){\n      var k = e.key || '';\n      if(k === 'Escape' || k === 'Esc' || e.keyCode === 27){\n        if(d2.state.mob)  d2.state.mob  = false;\n        if(d2.state.mega) d2.state.mega = null;\n      }\n    });\n  }catch(e){}\n\n  try{\n    d2.onUnmount(function(){\n      NAV_CANCEL(root);\n      NAV_UNLOCK(doc);\n      root.__nv4wired = false;\n    });\n  }catch(e){}\n}\n"}}}}}}}},{"_id":"6a835142cfcb17d5d83f83dc","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_hero","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n\n.hv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; background:var(--dark); color:var(--dtext);\n  overflow-x:clip;\n}\n.hv4::after{\n  content:\"\"; position:absolute; inset:0; pointer-events:none; z-index:38; opacity:.05;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E\");\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n\n.kicker{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; }\n.display{ font-weight:200; letter-spacing:-.018em; font-size:clamp(40px,6.6vw,96px); line-height:1.02; text-wrap:balance; }\n.display b{ font-weight:700; display:block; }\n\n.dark{ background:var(--dark); color:var(--dtext); }\n.dark .kicker{ color:var(--dfaint); } .dark .idx{ color:var(--dfaint); }\n\n.hero{ position:relative; min-height:min(94vh,940px); display:flex; align-items:center; overflow:hidden; }\n.hero .frame{ width:100%; z-index:5; }\n.wormsvg{ position:absolute; inset:0; width:100%; height:100%; z-index:1; pointer-events:none; opacity:.5; }\n.wormsvg path{ fill:none; stroke-linecap:round; stroke-width:30; }\n.h-kick{ display:flex; align-items:center; gap:10px; margin-bottom:26px; }\n.h-kick i{ width:22px; height:9px; border-radius:99px; background:var(--worm); flex:none; }\n.hero .display{ max-width:15ch; }\n.h-sub{ margin-top:30px; font-size:clamp(16px,1.5vw,20px); line-height:1.55; color:var(--dtext); max-width:44ch; font-weight:300; }\n.h-sub b{ font-weight:600; }\n.h-cta{ margin-top:38px; display:flex; align-items:center; gap:16px; flex-wrap:wrap; }\n.btn{\n  appearance:none; border:0; cursor:pointer; font-family:var(--grot); font-size:14.5px; font-weight:600;\n  padding:15px 26px; border-radius:999px; background:var(--dtext); color:var(--dark); transition:transform .2s, opacity .2s;\n}\n.btn:hover{ transform:translateY(-2px); } .btn:active{ transform:none; }\n.btn.ghost{ background:transparent; color:var(--dtext); border:1px solid var(--dhair); font-weight:500; }\n.btn.ghost:hover{ border-color:var(--dtext); }\n.hmeta{ position:absolute; left:clamp(24px,4.6vw,58px); right:clamp(24px,4.6vw,58px); bottom:34px; display:flex; justify-content:space-between; align-items:flex-end; z-index:5; }\n\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:900px){\n  .hero{ min-height:0; padding:96px 0 40px; }\n  .hmeta{ position:relative; left:auto; right:auto; bottom:auto; margin-top:44px; padding:0 clamp(24px,4.6vw,58px); }\n}\n@media (max-width:560px){\n  .display{ font-size:clamp(32px,9vw,44px); }\n}\n@media (prefers-reduced-motion:reduce){\n  .rv{ opacity:1; transform:none; transition:none; }\n}\n`,\n\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = HERO_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var P = d2.params || {};\n    var val = function(k, dflt){ var v = P[k]; if(v==null) return dflt; return String(v); };\n\n    var eyebrow = val('eyebrow', t('kick'));\n    var ha = val('ha',''), hb = val('hb','');\n    if(!ha && !hb){ ha = t('h1a'); hb = t('h1b'); }\n    var sub = val('sub', t('hsub'));\n    var c1  = val('cta1', t('cta1'));\n    var c1h = val('cta1href','/empresa/contato') || '/empresa/contato';\n    var c2  = val('cta2', t('cta2'));\n    var c2h = val('cta2href','/plataforma') || '/plataforma';\n    var idx = val('idx','01 — 07');\n    var showWorm = (P.worm === false || P.worm === 'false') ? false : true;\n\n    var h = '<div class=\"hv4\"><section class=\"dark hero\">';\n    if(showWorm) h += WORMSVG();\n    h += '<div class=\"frame\"><div class=\"rv\">';\n    if(eyebrow) h += '<div class=\"h-kick\"><i></i><span class=\"kicker\">'+esc(eyebrow)+'</span></div>';\n    h += '<h1 class=\"display\">'+ha+(hb ? ' <b>'+hb+'</b>' : '')+'</h1>';\n    if(sub) h += '<p class=\"h-sub\">'+sub+'</p>';\n    if(c1 || c2){\n      h += '<div class=\"h-cta\">';\n      if(c1) h += '<button class=\"btn\" data-nav data-href=\"'+esc(c1h)+'\">'+esc(c1)+' &rarr;</button>';\n      if(c2) h += '<button class=\"btn ghost\" data-nav data-href=\"'+esc(c2h)+'\">'+esc(c2)+'</button>';\n      h += '</div>';\n    }\n    h += '</div></div>';\n    if(idx) h += '<div class=\"hmeta\"><span class=\"idx\">'+esc(idx)+'</span></div>';\n    h += '</section></div>';\n    return h;\n  },\n\n  mounted(d2, root){ HERO_SETUP(d2, root); },\n  updated(d2, root){ HERO_SETUP(d2, root); }\n};\n\n/* ============ helpers (function declarations — they hoist) ============ */\n\nfunction D2LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction WORMSVG(){\n  return '<svg class=\"wormsvg\" viewBox=\"0 0 1600 900\" preserveAspectRatio=\"xMidYMid slice\" aria-hidden=\"true\">'\n    + '<defs><linearGradient id=\"wg\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"820\" x2=\"1600\" y2=\"380\">'\n      + '<stop offset=\"0\" stop-color=\"#9b5cff\"/><stop offset=\".26\" stop-color=\"#4ddfe6\"/>'\n      + '<stop offset=\".52\" stop-color=\"#4de0a1\"/><stop offset=\".76\" stop-color=\"#e8e84d\"/>'\n      + '<stop offset=\"1\" stop-color=\"#ff4d9e\"/></linearGradient></defs>'\n    + '<path data-worm stroke=\"url(#wg)\" pathLength=\"1\" style=\"stroke-dasharray:1;stroke-dashoffset:1\"'\n    + ' d=\"M -80 700 C 300 470, 470 940, 820 700 C 1060 540, 1140 250, 1310 350 C 1470 445, 1520 590, 1700 520\"/>'\n  + '</svg>';\n}\n\nfunction HERO_T(){ return {\n  pt:{\n    kick:'Plataforma e time · escala enterprise',\n    h1a:'Da necessidade à produção.', h1b:'O resto é demo.',\n    hsub:'Solução completa <b>em produção em 2 a 4 semanas</b> — sobre a nossa própria plataforma.',\n    cta1:'Trazer um problema', cta2:'Ver a plataforma'\n  },\n  en:{\n    kick:'Platform and team · enterprise scale',\n    h1a:'From necessity to production.', h1b:'The rest is a demo.',\n    hsub:'A complete solution <b>in production in 2 to 4 weeks</b> — on a platform that is ours.',\n    cta1:'Bring a problem', cta2:'See the platform'\n  },\n  es:{\n    kick:'Plataforma y equipo · escala enterprise',\n    h1a:'De la necesidad a la producción.', h1b:'El resto es demo.',\n    hsub:'Una solución completa <b>en producción en 2 a 4 semanas</b> — sobre nuestra propia plataforma.',\n    cta1:'Traer un problema', cta2:'Ver la plataforma'\n  }\n}; }\n\nfunction HERO_SETUP(d2, root){\n  var host = root.querySelector('.hv4');\n  if(!host) return;\n\n  /* reveals */\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  /* nav — rebind inside this shadow root */\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n\n  /* worm draw-in */\n  try{\n    var w = root.querySelector('[data-worm]');\n    if(w && !(window.matchMedia && window.matchMedia('(prefers-reduced-motion:reduce)').matches)){\n      setTimeout(function(){\n        if(!w.isConnected) return;\n        w.style.transition = 'stroke-dashoffset 2.6s cubic-bezier(.25,.6,.3,1)';\n        w.style.strokeDashoffset = '0';\n      }, 260);\n    } else if(w){ w.style.strokeDashoffset = '0'; }\n  }catch(e){}\n}\n"}},"eyebrow":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"eyebrow"}}}},"ha":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"ha"}}}},"hb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"hb"}}}},"sub":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sub"}}}},"cta1":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"cta1"}}}},"cta1href":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"cta1href"}}}},"cta2":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"cta2"}}}},"cta2href":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"cta2href"}}}},"worm":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"worm"}}}},"idx":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idx"}}}}}}}}}},{"_id":"6a835165e90bd5fa9dd94d47","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_proof","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n\n.hv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; background:var(--paper); color:var(--ink);\n  overflow-x:clip;\n}\n.hv4::after{\n  content:\"\"; position:absolute; inset:0; pointer-events:none; z-index:38; opacity:.05;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E\");\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n\n.kicker{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; }\nh2{ font-weight:200; font-size:clamp(30px,4.2vw,56px); letter-spacing:-.014em; line-height:1.08; text-wrap:balance; max-width:20ch; }\nh2 b{ font-weight:700; }\n.shead{ display:flex; justify-content:space-between; align-items:baseline; gap:20px; margin-bottom:clamp(30px,4.6vh,52px); }\n\n.paper{ background:var(--paper); color:var(--ink); }\n.paper .kicker{ color:var(--faint); } .paper .idx{ color:var(--faint); }\n\n.levers{ display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:clamp(18px,2.4vw,34px); margin-top:clamp(28px,4vh,44px); }\n.lever .v{ font-size:clamp(30px,3.4vw,44px); font-weight:200; letter-spacing:-.02em; line-height:1; font-variant-numeric:tabular-nums; }\n.lever .l{ margin-top:10px; font-size:13px; line-height:1.45; color:var(--faint); max-width:22ch; }\n.logos{ margin-top:clamp(46px,6vh,72px); overflow:hidden; background:var(--dark); padding:34px 0; }\n.logos-in{ display:flex; width:max-content; animation:mq 42s linear infinite; }\n@keyframes mq{ to{ transform:translateX(-50%); } }\n.logos-h{ display:flex; align-items:center; gap:clamp(38px,5vw,72px); padding-right:clamp(38px,5vw,72px); }\n.logos img{ height:27px; width:auto; opacity:.5; transition:opacity .3s; }\n.logos img:hover{ opacity:.95; }\n\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:560px){\n  h2{ font-size:clamp(25px,7vw,32px); }\n}\n@media (prefers-reduced-motion:reduce){\n  .rv{ opacity:1; transform:none; transition:none; }\n  .logos-in{ animation:none; }\n}\n`,\n\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = PROOF_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var dd = function(r){ try{ var h = d2.data(r); return h ? (h.records()||[]) : []; }catch(e){ return []; } };\n    var pick = function(rec, base){ if(!rec) return ''; if(lang==='pt') return rec[base]||''; return rec[base+'_'+lang] || rec[base] || ''; };\n    var P = d2.params || {};\n    var val = function(k, dflt){ var v = P[k]; if(v==null) return dflt; return String(v); };\n\n    var kicker = val('kicker', t('k_proof'));\n    var idx = val('idx','');\n    var ha = val('title',''), hb = val('titleb','');\n    if(!ha && !hb){ ha = t('h_proof_a'); hb = t('h_proof_b'); }\n\n    /* --- levers --- */\n    var lv = dd('cms-leversDataSet').sort(function(a,b){ return (a.ordem||0)-(b.ordem||0); }).slice(0,4);\n    var leversHtml = '';\n    for(var j=0;j<lv.length;j++){\n      var m = lv[j];\n      var un = pick(m,'unidade') || '';\n      var lb = String(pick(m,'label')||'');\n      var uw = String(un).replace(/[^A-Za-zÀ-ÿ]/g,'').toLowerCase();\n      if(uw){ var mm = lb.match(/\\s+(?:por|per)\\s+([A-Za-zÀ-ÿ]+)\\s*$/i); if(mm && mm[1].toLowerCase()===uw){ lb = lb.slice(0,mm.index); } }\n      leversHtml += '<div class=\"lever\"><div class=\"v\">'+esc(m.valor||'')+'<span style=\"font-size:.42em;font-weight:400;letter-spacing:0\">'+esc(un)+'</span></div>'\n        + '<div class=\"l\">'+esc(lb)+'</div></div>';\n    }\n\n    /* --- logos --- */\n    var lg = dd('cms-logosDataSet').filter(function(x){ return x && x.fileUrl && x.publico!==false; })\n              .sort(function(a,b){ return (a.ordem||0)-(b.ordem||0); });\n    var logoRow = '';\n    for(var k=0;k<lg.length;k++){ logoRow += '<img src=\"'+esc(lg[k].fileUrl)+'\" alt=\"\" loading=\"lazy\">'; }\n    var logosHtml = logoRow ? '<div class=\"logos\"><div class=\"logos-in\"><div class=\"logos-h\">'+logoRow+'</div><div class=\"logos-h\">'+logoRow+'</div></div></div>' : '';\n\n    return ''\n    + '<div class=\"hv4\">'\n      + '<section class=\"paper\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"shead rv\"><div>'\n            + (kicker ? '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(kicker)+'</p>' : '')\n            + '<h2>'+ha+(hb ? ' <b>'+hb+'</b>' : '')+'</h2>'\n          + '</div>'+(idx ? '<span class=\"idx\">'+esc(idx)+'</span>' : '')+'</div>'\n          + '<div class=\"levers rv\">'+leversHtml+'</div>'\n        + '</div>'\n        + logosHtml\n      + '</section>'\n    + '</div>';\n  },\n\n  mounted(d2, root){ PROOF_SETUP(d2, root); },\n  updated(d2, root){ PROOF_SETUP(d2, root); }\n};\n\n/* ============ helpers (function declarations — they hoist) ============ */\n\nfunction D2LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction PROOF_T(){ return {\n  pt:{\n    k_proof:'Em produção',\n    h_proof_a:'Antes de produção, todo número é promessa.',\n    h_proof_b:'Estes vieram de produção.'\n  },\n  en:{\n    k_proof:'In production',\n    h_proof_a:'Before production, every number is a promise.',\n    h_proof_b:'These came from production.'\n  },\n  es:{\n    k_proof:'En producción',\n    h_proof_a:'Antes de producción, todo número es una promesa.',\n    h_proof_b:'Estos vinieron de producción.'\n  }\n}; }\n\nfunction PROOF_SETUP(d2, root){\n  var host = root.querySelector('.hv4');\n  if(!host) return;\n\n  /* reveals */\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  /* nav — rebind inside this shadow root */\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n"}},"kicker":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"kicker"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"titleb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"titleb"}}}},"idx":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idx"}}}}}}}}}},{"_id":"6a8351a0532c02953f2a6ecd","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_stack","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n.v4stk{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; overflow-x:clip;\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n.kicker{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; }\nh2{ font-weight:200; font-size:clamp(30px,4.2vw,56px); letter-spacing:-.014em; line-height:1.08; text-wrap:balance; max-width:20ch; }\nh2 b{ font-weight:700; }\n.lede{ margin-top:20px; font-size:clamp(15px,1.3vw,17px); line-height:1.66; max-width:56ch; }\n.shead{ display:flex; justify-content:space-between; align-items:baseline; gap:20px; margin-bottom:clamp(30px,4.6vh,52px); }\n.dark{ background:var(--dark); color:var(--dtext); }\n.dark .kicker{ color:var(--dfaint); } .dark .idx{ color:var(--dfaint); } .dark .lede{ color:var(--dfaint); }\n.stackwrap{ display:grid; grid-template-columns:1.05fr .95fr; gap:clamp(24px,3.4vw,54px); align-items:center; }\n.stage{ perspective:1700px; height:clamp(400px,52vw,560px); display:flex; align-items:center; justify-content:center; }\n.float{ animation:bob 9s ease-in-out infinite; }\n@keyframes bob{ 0%,100%{transform:translateY(0)} 50%{transform:translateY(-10px)} }\n.stack3d{\n  position:relative; width:min(330px,58vw); aspect-ratio:1; transform-style:preserve-3d;\n  transform:rotateX(55deg) rotateZ(-45deg); --gap:38px;\n}\n.layer{\n  position:absolute; inset:0; border-radius:34px; transform-style:preserve-3d;\n  transform:translateZ(calc(var(--i) * var(--gap)));\n  transition:transform .6s cubic-bezier(.3,.7,.2,1), opacity .4s, filter .4s;\n  background:linear-gradient(155deg, color-mix(in oklab,var(--c),white 42%) 0%, var(--c) 48%, color-mix(in oklab,var(--c),black 22%) 100%);\n  box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--c),white 30%);\n  cursor:pointer;\n}\n.layer::after{\n  content:\"\"; position:absolute; inset:0; border-radius:inherit;\n  background:color-mix(in oklab,var(--c),black 45%); transform:translateZ(-13px);\n}\n.layer .ltag{ display:none; }\n.layer .ltag small{ display:block; font-size:10.5px; font-weight:500; letter-spacing:.11em; text-transform:uppercase; opacity:.72; margin-top:3px; }\n.layer.raised{ transform:translateZ(calc(var(--i) * var(--gap) + 34px)); }\n.shadow{ position:absolute; inset:-8%; border-radius:50%; background:radial-gradient(closest-side,rgba(0,0,0,.55),transparent 72%); transform:translateZ(-46px) scale(1.25); }\n.legend{ list-style:none; }\n.legend li{ display:flex; align-items:center; gap:14px; padding:12px 10px; border-bottom:1px solid var(--dhair); border-radius:6px; transition:background .2s, opacity .3s; cursor:pointer; }\n.legend li:first-child{ border-top:1px solid var(--dhair); }\n.legend li:hover{ background:rgba(236,237,234,.05); }\n.legend .dot{ width:11px; height:11px; border-radius:4px; background:var(--c); flex:none; transition:filter .3s; }\n.legend .biz{ font-size:15px; font-weight:600; flex:1; color:var(--dtext); }\n.legend .comp{ font-family:var(--mono); font-size:10.5px; letter-spacing:.12em; color:var(--dfaint); text-transform:uppercase; }\n.stacknote{ margin-top:22px; font-size:13px; color:var(--dfaint); line-height:1.65; max-width:42ch; }\n\n/* mode: prod — camadas mais separadas.\n   O grupo cresce a partir da camada de baixo, entao explodir o --gap empurra o\n   topo pra fora da caixa (transform 3D extrapola). translateZ recentra o grupo\n   e a stage ganha altura pra caber a projecao. */\n.stage.prod{ height:clamp(520px,66vw,700px); }\n.stack3d.prod{ --gap:60px; transform:rotateX(55deg) rotateZ(-45deg) translateZ(-154px); }\n/* mode: sol — camadas fora do foco apagadas */\n.layer.dim{ opacity:.22; filter:saturate(.08); box-shadow:none; }\n.legend li.dim{ opacity:.38; }\n.legend li.dim .dot{ filter:saturate(.08); }\n\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:900px){\n  .stackwrap{ grid-template-columns:1fr; }\n  .stage{ height:clamp(360px,88vw,470px); margin-top:40px; }\n  .stack3d{ --gap:25px; width:min(238px,60vw); }\n  .stage.prod{ height:clamp(450px,110vw,580px); }\n  .stack3d.prod{ --gap:40px; transform:rotateX(55deg) rotateZ(-45deg) translateZ(-105px); }\n}\n@media (max-width:560px){ h2{ font-size:clamp(25px,7vw,32px); } }\n@media (prefers-reduced-motion:reduce){\n  .rv{ opacity:1; transform:none; transition:none; }\n  .float{ animation:none; } .layer{ transition:none; }\n}\n`,\n\n  render(d2){\n    var lang = V4LANG(d2);\n    var TT = STK_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var pv = function(k){ return V4P(d2,k); };\n\n    var mode = pv('mode') || 'inst';\n    if(mode!=='prod' && mode!=='sol') mode = 'inst';\n\n    var litRaw = pv('lit');\n    var lit = [];\n    if(litRaw){ var parts = litRaw.split(','); for(var a=0;a<parts.length;a++){ var s0 = parts[a].trim().toLowerCase(); if(s0) lit.push(s0); } }\n    var soloing = (mode==='sol' && lit.length>0);\n\n    var title  = pv('title')  || t('h_a');\n    var titleb = pv('titleb') || t('h_b');\n    var lede   = pv('lede')   || t('lede');\n    var idx    = pv('idx');\n\n    var LY = STK_LAYERS(), N = LY.length;\n    var layersHtml = '', legendHtml = '';\n    for(var i=0;i<N;i++){\n      var L = LY[i];\n      var dim = soloing && lit.indexOf(L.key) < 0;\n      layersHtml += '<div class=\"layer'+(dim?' dim':'')+'\" data-comp=\"'+L.comp+'\" style=\"--c:'+L.c+';--lt:'+L.lt+';--i:'+(N-1-i)+';z-index:'+(N-i)+'\">'\n        + '<span class=\"ltag\">'+L.comp+'<small>'+esc(t('ly_'+L.key))+'</small></span></div>';\n      legendHtml += '<li'+(dim?' class=\"dim\"':'')+' data-comp=\"'+L.comp+'\"><span class=\"dot\" style=\"--c:'+L.c+'\"></span>'\n        + '<span class=\"biz\">'+esc(t('ly_'+L.key))+'</span><span class=\"comp\">'+L.comp+'</span></li>';\n    }\n\n    var pc = (mode==='prod') ? ' prod' : '';\n\n    return ''\n    + '<div class=\"v4stk\">'\n      + '<section class=\"dark\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"shead rv\"><div>'\n            + '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(t('kicker'))+'</p>'\n            + '<h2>'+esc(title)+' <b>'+esc(titleb)+'</b></h2>'\n          + '</div>'+(idx ? '<span class=\"idx\">'+esc(idx)+'</span>' : '')+'</div>'\n          + '<p class=\"lede rv\" style=\"margin-bottom:clamp(24px,4vh,42px)\">'+esc(lede)+'</p>'\n          + '<div class=\"stackwrap\">'\n            + '<div class=\"stage rv'+pc+'\" aria-hidden=\"true\"><div class=\"float\"><div class=\"stack3d'+pc+'\" data-stack><div class=\"shadow\"></div>'+layersHtml+'</div></div></div>'\n            + '<div class=\"rv\"><ul class=\"legend\" data-legend>'+legendHtml+'</ul>'\n            + '<p class=\"stacknote\">'+esc(t('note'))+'</p></div>'\n          + '</div>'\n        + '</div>'\n      + '</section>'\n    + '</div>';\n  },\n\n  mounted(d2, root){ V4STK_SETUP(d2, root); },\n  updated(d2, root){ V4STK_SETUP(d2, root); }\n};\n\n/* ===== helpers (function declarations — hoistam) ===== */\n\nfunction V4LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction V4P(d2,k){\n  var v = null;\n  try{ if(d2.params && d2.params[k]!=null) v = d2.params[k]; }catch(e){}\n  if(v==null){ try{ if(typeof d2.param==='function') v = d2.param(k); }catch(e){} }\n  if(v==null) return '';\n  return String(v).trim();\n}\n\nfunction STK_LAYERS(){\n  return [\n    {comp:'UI',       key:'ui',       c:'#5b86ff', lt:'#fff'},\n    {comp:'Registry', key:'registry', c:'#ff6a4d', lt:'#fff'},\n    {comp:'Media',    key:'media',    c:'#e8e84d', lt:'#2a2a10'},\n    {comp:'ID',       key:'id',       c:'#4de0a1', lt:'#0c2e1f'},\n    {comp:'Connect',  key:'connect',  c:'#4ddfe6', lt:'#0c2c30'},\n    {comp:'Domain',   key:'domain',   c:'#ff4d9e', lt:'#fff'},\n    {comp:'Rush',     key:'rush',     c:'#9b5cff', lt:'#fff'},\n    {comp:'Cashier',  key:'cashier',  c:'#84e05a', lt:'#12300c'}\n  ];\n}\n\nfunction STK_T(){ return {\n  pt:{\n    kicker:'A plataforma',\n    h_a:'Tudo que o seu problema precisa.', h_b:'Num lugar só.',\n    lede:'Oito componentes, uma runtime. Interface, dados, arquivos, identidade, integrações, decisão, eventos e pagamento — nascem ligados.',\n    note:'Passe o mouse por qualquer camada. Cada uma é um componente com profundidade própria — e todas falam a mesma língua.',\n    ly_ui:'Interfaces ricas', ly_registry:'Framework de dados', ly_media:'Arquivos e entrega',\n    ly_id:'Identidade e acesso', ly_connect:'Acesso externo', ly_domain:'Lógica de negócio',\n    ly_rush:'Pipeline de eventos', ly_cashier:'Pagamentos'\n  },\n  en:{\n    kicker:'The platform',\n    h_a:'Everything your problem needs.', h_b:'In one place.',\n    lede:'Eight components, one runtime. Interface, data, files, identity, integrations, decision, events and payment — born connected.',\n    note:'Hover any layer. Each one is a component with its own depth — and all of them speak the same language.',\n    ly_ui:'Rich user interfaces', ly_registry:'Data framework', ly_media:'Storage and delivery',\n    ly_id:'Identity and access', ly_connect:'External access', ly_domain:'Business logic',\n    ly_rush:'Event pipeline', ly_cashier:'Payments'\n  },\n  es:{\n    kicker:'La plataforma',\n    h_a:'Todo lo que tu problema necesita.', h_b:'En un solo lugar.',\n    lede:'Ocho componentes, un runtime. Interfaz, datos, archivos, identidad, integraciones, decisión, eventos y pago — nacen conectados.',\n    note:'Pasa el mouse por cualquier capa. Cada una es un componente con profundidad propia — y todas hablan el mismo idioma.',\n    ly_ui:'Interfaces ricas', ly_registry:'Framework de datos', ly_media:'Archivos y entrega',\n    ly_id:'Identidad y acceso', ly_connect:'Acceso externo', ly_domain:'Lógica de negocio',\n    ly_rush:'Pipeline de eventos', ly_cashier:'Pagos'\n  }\n}; }\n\nfunction V4STK_SETUP(d2, root){\n  var host = root.querySelector('.v4stk');\n  if(!host) return;\n\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n\n  var layers = Array.prototype.slice.call(root.querySelectorAll('.layer'));\n  var rows   = Array.prototype.slice.call(root.querySelectorAll('.legend li'));\n  function raise(comp, on){\n    for(var i=0;i<layers.length;i++){\n      if(layers[i].getAttribute('data-comp')===comp) layers[i].classList.toggle('raised', on);\n    }\n  }\n  rows.forEach(function(li){\n    var c = li.getAttribute('data-comp');\n    d2.on(li,'mouseenter',function(){ raise(c,true); });\n    d2.on(li,'mouseleave',function(){ raise(c,false); });\n  });\n  layers.forEach(function(el){\n    var c = el.getAttribute('data-comp');\n    d2.on(el,'mouseenter',function(){ raise(c,true); });\n    d2.on(el,'mouseleave',function(){ raise(c,false); });\n  });\n}\n"}},"mode":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"mode"}}}},"lit":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"lit"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"titleb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"titleb"}}}},"lede":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"lede"}}}},"idx":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idx"}}}}}}}}}},{"_id":"6a8351b90ff17e1f2d6ac8b7","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_footer","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n\n.hv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --wormh:linear-gradient(90deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; background:var(--paper); color:var(--ink);\n  overflow-x:clip;\n}\n.seam{ position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--worm); z-index:40; }\n.hv4::after{\n  content:\"\"; position:absolute; inset:0; pointer-events:none; z-index:38; opacity:.05;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E\");\n}\n.wormline{ height:3px; width:100%; background:var(--wormh); position:relative; z-index:6; }\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(56px,8vh,96px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n\n.kicker{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; color:var(--faint); }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; color:var(--faint); }\n\n.ftop{ display:grid; grid-template-columns:1.1fr 2.6fr; gap:clamp(36px,5vw,76px); align-items:start; }\n\n.sigmark{ width:170px; color:var(--ink); display:block; }\n.assin{ margin-top:28px; font-weight:200; font-size:clamp(19px,2.2vw,27px); letter-spacing:-.01em; line-height:1.16; }\n.assin b{ font-weight:700; }\n.pot{ margin-top:12px; font-size:12.5px; color:var(--faint); }\n\n.fmap{ display:grid; grid-template-columns:repeat(4,1fr); gap:clamp(20px,2.8vw,40px); }\n.fcol h4{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; color:var(--faint); margin-bottom:18px; }\n.fcol ul{ list-style:none; display:flex; flex-direction:column; gap:11px; }\n.fcol a{ display:flex; align-items:center; gap:9px; font-size:14px; line-height:1.35; color:var(--ink); text-decoration:none; opacity:.8; transition:opacity .2s; cursor:pointer; }\n.fcol a:hover{ opacity:1; }\n.fcol a i{ width:9px; height:9px; border-radius:3px; background:var(--c); flex:none; }\n\n.fbot{ margin-top:clamp(44px,6vh,76px); padding-top:22px; border-top:1px solid var(--hair); display:flex; justify-content:space-between; align-items:center; gap:16px; flex-wrap:wrap; }\n\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:900px){\n  .ftop{ grid-template-columns:1fr; gap:44px; }\n  .fmap{ grid-template-columns:repeat(2,1fr); gap:32px; }\n}\n@media (max-width:560px){\n  .sigmark{ width:140px; }\n  .fcol a{ font-size:13.5px; }\n}\n@media (max-width:360px){\n  .fmap{ grid-template-columns:1fr; gap:28px; }\n}\n@media (prefers-reduced-motion:reduce){\n  .rv{ opacity:1; transform:none; transition:none; }\n}\n`,\n\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = FOOT_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n\n    var link = function(label, href, color){\n      return '<li><a data-nav data-href=\"'+esc(href)+'\">'\n        + (color ? '<i style=\"--c:'+color+'\"></i>' : '')\n        + esc(label)+'</a></li>';\n    };\n    var col = function(head, items){\n      var s = '<div class=\"fcol\"><h4>'+esc(head)+'</h4><ul>';\n      for(var i=0;i<items.length;i++) s += items[i];\n      return s + '</ul></div>';\n    };\n\n    var plat = col(t('c_plat'), [\n      link(t('p1'), '/plataforma'),\n      link(t('p2'), '/plataforma/como-funciona'),\n      link(t('p3'), '/plataforma/data-framework'),\n      link(t('p4'), '/plataforma/agent-native'),\n      link(t('p5'), '/plataforma/data2-lang')\n    ]);\n\n    var PR = FPRODUCTS(), pitems = [];\n    for(var q=0;q<PR.length;q++) pitems.push(link(PR[q].n, '/produtos/'+PR[q].s, PR[q].c));\n    var prod = col(t('c_prod'), pitems);\n\n    var cons = col(t('c_cons'), [\n      link(t('n1'), '/consultoria'),\n      link(t('n2'), '/industrias'),\n      link(t('n3'), '/casos'),\n      link(t('n4'), '/precos')\n    ]);\n\n    var emp = col(t('c_emp'), [\n      link(t('e1'), '/empresa'),\n      link(t('e2'), '/empresa/carreiras'),\n      link(t('e3'), '/empresa/contato'),\n      link(t('e4'), '/recursos')\n    ]);\n\n    return ''\n    + '<div class=\"hv4\">'\n      + '<div class=\"seam\"></div>'\n      + '<div class=\"wormline\"></div>'\n      + '<footer class=\"frame\">'\n        + '<div class=\"ftop rv\">'\n          + '<div class=\"fbrand\">'\n            + SIGMARK('sigmark')\n            + '<p class=\"assin\">'+t('assin_a')+' <b>'+t('assin_b')+'</b></p>'\n            + '<p class=\"pot\">'+esc(t('pot'))+'</p>'\n          + '</div>'\n          + '<nav class=\"fmap\">'+plat+prod+cons+emp+'</nav>'\n        + '</div>'\n        + '<div class=\"fbot\"><span class=\"idx\">© '+(new Date()).getFullYear()+'</span>'\n          + '<span class=\"kicker\">'+esc(t('tag'))+'</span></div>'\n      + '</footer>'\n    + '</div>';\n  },\n\n  mounted(d2, root){ FOOT_SETUP(d2, root); },\n  updated(d2, root){ FOOT_SETUP(d2, root); }\n};\n\n/* ============ helpers (function declarations — they hoist) ============ */\n\nfunction D2LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction FPRODUCTS(){\n  return [\n    {n:'UI',       s:'ui',       c:'#5b86ff'},\n    {n:'Registry', s:'registry', c:'#ff6a4d'},\n    {n:'Media',    s:'media',    c:'#e8e84d'},\n    {n:'ID',       s:'id',       c:'#4de0a1'},\n    {n:'Connect',  s:'connect',  c:'#4ddfe6'},\n    {n:'Domain',   s:'domain',   c:'#ff4d9e'},\n    {n:'Rush',     s:'rush',     c:'#9b5cff'},\n    {n:'Cashier',  s:'cashier',  c:'#84e05a'}\n  ];\n}\n\nfunction FOOT_T(){ return {\n  pt:{\n    c_plat:'Plataforma', c_prod:'Produtos', c_cons:'Consultoria', c_emp:'Empresa',\n    p1:'Visão geral', p2:'Como funciona', p3:'Data Framework', p4:'Agent-native', p5:'data2-lang',\n    n1:'Como trabalhamos', n2:'Indústrias', n3:'Casos', n4:'Preços',\n    e1:'Quem somos', e2:'Carreiras', e3:'Contato', e4:'Recursos',\n    assin_a:'Necessidade', assin_b:'elevada à produção.',\n    pot:'O ² é elevar à potência.',\n    tag:'Escala enterprise'\n  },\n  en:{\n    c_plat:'Platform', c_prod:'Products', c_cons:'Consulting', c_emp:'Company',\n    p1:'Overview', p2:'How it works', p3:'Data Framework', p4:'Agent-native', p5:'data2-lang',\n    n1:'How we work', n2:'Industries', n3:'Cases', n4:'Pricing',\n    e1:'About us', e2:'Careers', e3:'Contact', e4:'Resources',\n    assin_a:'Necessity,', assin_b:'raised to production.',\n    pot:'The ² means raised to the power.',\n    tag:'Enterprise scale'\n  },\n  es:{\n    c_plat:'Plataforma', c_prod:'Productos', c_cons:'Consultoría', c_emp:'Empresa',\n    p1:'Visión general', p2:'Cómo funciona', p3:'Data Framework', p4:'Agent-native', p5:'data2-lang',\n    n1:'Cómo trabajamos', n2:'Industrias', n3:'Casos', n4:'Precios',\n    e1:'Quiénes somos', e2:'Carreras', e3:'Contacto', e4:'Recursos',\n    assin_a:'La necesidad,', assin_b:'elevada a producción.',\n    pot:'El ² es elevar a la potencia.',\n    tag:'Escala enterprise'\n  }\n}; }\n\nfunction FOOT_SETUP(d2, root){\n  var host = root.querySelector('.hv4');\n  if(!host) return;\n\n  /* reveals */\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  /* nav — rebind inside this shadow root */\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n\nfunction SIGMARK(cls){\n  return '<svg class=\"'+cls+'\" viewBox=\"0 0 459.554 148.471\" fill=\"none\" aria-label=\"Data²\" role=\"img\">'\n  + '<g transform=\"translate(-678.859 -300.605)\">'\n  + '<path transform=\"translate(664.5 447)\" fill=\"currentColor\" d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\"/>'\n  + '<path transform=\"translate(1095.5 395)\" fill=\"currentColor\" d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\"/>'\n  + '</g></svg>';\n}\n"}}}}}}}},{"_id":"6a8351bee42011de736123f8","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_splash","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n.v4spl{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; overflow-x:clip;\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; }\n.display{ font-weight:200; letter-spacing:-.018em; font-size:clamp(40px,6.6vw,96px); line-height:1.02; text-wrap:balance; }\n.display b{ font-weight:700; display:block; }\n.dark{ background:var(--dark); color:var(--dtext); }\n.dark .idx{ color:var(--dfaint); }\n\n.splash{ position:relative; min-height:min(86vh,720px); display:flex; align-items:center; overflow:hidden; }\n.splash-img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center; z-index:1; }\n.splash .scrim{ position:absolute; inset:0; z-index:2; background:linear-gradient(90deg,rgba(10,11,13,.94) 0%,rgba(10,11,13,.6) 40%,rgba(10,11,13,0) 70%); }\n.splash .frame{ position:relative; z-index:3; width:100%; }\n.splash .display{ max-width:13ch; }\n\n/* side:right — texto à direita, scrim invertido */\n.splash.right .scrim{ background:linear-gradient(270deg,rgba(10,11,13,.94) 0%,rgba(10,11,13,.6) 40%,rgba(10,11,13,0) 70%); }\n.splash.right .display{ margin-left:auto; text-align:right; }\n.splash.right .idx{ text-align:right; }\n\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:560px){ .display{ font-size:clamp(32px,9vw,44px); } }\n@media (prefers-reduced-motion:reduce){ .rv{ opacity:1; transform:none; transition:none; } }\n`,\n\n  render(d2){\n    var lang = V4LANG(d2);\n    var TT = SPL_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var pv = function(k){ return V4P(d2,k); };\n\n    var img  = pv('img') || 'https://www.data2.media/file/rzzWkPvZaaTa5wLLVuiXJ';\n    var ha   = pv('ha') || t('ha');\n    var hb   = pv('hb') || t('hb');\n    var side = (pv('side').toLowerCase()==='right') ? 'right' : 'left';\n    var idx  = pv('idx');\n\n    return ''\n    + '<div class=\"v4spl\">'\n      + '<section class=\"dark splash '+side+'\">'\n        + '<img class=\"splash-img\" src=\"'+esc(img)+'\" alt=\"\" loading=\"lazy\">'\n        + '<div class=\"scrim\"></div>'\n        + '<div class=\"frame\">'\n          + '<p class=\"display rv\">'+esc(ha)+' <b>'+esc(hb)+'</b></p>'\n          + (idx ? '<span class=\"idx\" style=\"display:block;margin-top:28px\">'+esc(idx)+'</span>' : '')\n        + '</div>'\n      + '</section>'\n    + '</div>';\n  },\n\n  mounted(d2, root){ V4SPL_SETUP(d2, root); },\n  updated(d2, root){ V4SPL_SETUP(d2, root); }\n};\n\n/* ===== helpers (function declarations — hoistam) ===== */\n\nfunction V4LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction V4P(d2,k){\n  var v = null;\n  try{ if(d2.params && d2.params[k]!=null) v = d2.params[k]; }catch(e){}\n  if(v==null){ try{ if(typeof d2.param==='function') v = d2.param(k); }catch(e){} }\n  if(v==null) return '';\n  return String(v).trim();\n}\n\nfunction SPL_T(){ return {\n  pt:{ ha:'Não é um kit de peças.', hb:'É uma peça só.' },\n  en:{ ha:'It is not a kit of parts.', hb:'It is a single piece.' },\n  es:{ ha:'No es un kit de piezas.', hb:'Es una sola pieza.' }\n}; }\n\nfunction V4SPL_SETUP(d2, root){\n  var host = root.querySelector('.v4spl');\n  if(!host) return;\n\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n"}},"img":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"img"}}}},"ha":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"ha"}}}},"hb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"hb"}}}},"side":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"side"}}}},"idx":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idx"}}}}}}}}}},{"_id":"6a8351d171265fd4aa3032ff","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_cta","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n.v4cta{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; overflow-x:clip;\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n.display{ font-weight:200; letter-spacing:-.018em; font-size:clamp(40px,6.6vw,96px); line-height:1.02; text-wrap:balance; }\n.display b{ font-weight:700; display:block; }\n.paper{ background:var(--paper); color:var(--ink); }\n\n.btn{\n  appearance:none; border:0; cursor:pointer; font-family:var(--grot); font-size:14.5px; font-weight:600;\n  padding:15px 26px; border-radius:999px; background:var(--dtext); color:var(--dark); transition:transform .2s, opacity .2s;\n}\n.btn:hover{ transform:translateY(-2px); } .btn:active{ transform:none; }\n.paper .btn{ background:var(--ink); color:var(--paper); }\n\n.close{ text-align:center; }\n.close .display{ max-width:none; }\n.close .sub{ margin-top:24px; font-size:clamp(15px,1.4vw,18px); color:var(--faint); }\n.close .btnrow{ margin-top:36px; display:flex; justify-content:center; gap:14px; flex-wrap:wrap; }\n\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:560px){ .display{ font-size:clamp(32px,9vw,44px); } }\n@media (prefers-reduced-motion:reduce){ .rv{ opacity:1; transform:none; transition:none; } }\n`,\n\n  render(d2){\n    var lang = V4LANG(d2);\n    var TT = CTA_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var pv = function(k){ return V4P(d2,k); };\n\n    var ha   = pv('ha')   || t('ha');\n    var hb   = pv('hb')   || t('hb');\n    var sub  = pv('sub')  || t('sub');\n    var btn  = pv('btn')  || t('btn');\n    var href = pv('href') || '/empresa/contato';\n\n    return ''\n    + '<div class=\"v4cta\">'\n      + '<section class=\"paper close\">'\n        + '<div class=\"frame\">'\n          + '<div class=\"rv\">'\n            + '<p class=\"display\">'+esc(ha)+' <b>'+esc(hb)+'</b></p>'\n            + '<p class=\"sub\">'+esc(sub)+'</p>'\n            + '<div class=\"btnrow\"><button class=\"btn\" data-nav data-href=\"'+esc(href)+'\">'+esc(btn)+' &rarr;</button></div>'\n          + '</div>'\n        + '</div>'\n      + '</section>'\n    + '</div>';\n  },\n\n  mounted(d2, root){ V4CTA_SETUP(d2, root); },\n  updated(d2, root){ V4CTA_SETUP(d2, root); }\n};\n\n/* ===== helpers (function declarations — hoistam) ===== */\n\nfunction V4LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction V4P(d2,k){\n  var v = null;\n  try{ if(d2.params && d2.params[k]!=null) v = d2.params[k]; }catch(e){}\n  if(v==null){ try{ if(typeof d2.param==='function') v = d2.param(k); }catch(e){} }\n  if(v==null) return '';\n  return String(v).trim();\n}\n\nfunction CTA_T(){ return {\n  pt:{ ha:'Traga o problema.', hb:'Devolvemos rodando.',\n       sub:'Começa com trinta minutos, sem roteiro de vendas.', btn:'Trazer um problema' },\n  en:{ ha:'Bring the problem.', hb:'We hand it back running.',\n       sub:'It starts with thirty minutes, no sales script.', btn:'Bring a problem' },\n  es:{ ha:'Trae el problema.', hb:'Te lo devolvemos funcionando.',\n       sub:'Empieza con treinta minutos, sin guion de ventas.', btn:'Traer un problema' }\n}; }\n\nfunction V4CTA_SETUP(d2, root){\n  var host = root.querySelector('.v4cta');\n  if(!host) return;\n\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n"}},"ha":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"ha"}}}},"hb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"hb"}}}},"sub":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sub"}}}},"btn":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"btn"}}}},"href":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"href"}}}}}}}}}},{"_id":"6a835306809f62e448262c48","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_shell","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; }\n.v4sh{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --worm:linear-gradient(180deg,#9b5cff,#5b86ff,#4ddfe6,#4de0a1,#84e05a,#e8e84d,#ff6a4d,#ff4d9e);\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; background:var(--dark); color:var(--dtext);\n  font-family:var(--grot); line-height:1.5; -webkit-font-smoothing:antialiased; overflow-x:clip;\n}\n/* the worm seam belongs to the PAGE, not to each fold — one continuous rail */\n.v4seam{ position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--worm); z-index:60; pointer-events:none; }\n/* film grain — page chrome, one layer over the whole document */\n.v4sh::after{\n  content:\"\"; position:absolute; inset:0; pointer-events:none; z-index:59; opacity:.05; mix-blend-mode:overlay;\n  background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E\");\n}\n.v4main{ position:relative; display:block; width:100%; padding-top:var(--barH,66px); }\n@media (max-width:1080px){ .v4main{ padding-top:60px; } }\n\n.soon{ background:var(--dark); color:var(--dtext); min-height:62vh; display:flex; align-items:center; }\n.soon .fr{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); width:100%; }\n.soon .kk{ font-family:var(--grot); font-size:11px; letter-spacing:.22em; text-transform:uppercase; color:var(--dfaint); }\n.soon h2{ font-weight:200; font-size:clamp(30px,4.2vw,52px); letter-spacing:-.014em; line-height:1.08; margin:20px 0 0; max-width:20ch; }\n.soon h2 b{ font-weight:700; display:block; }\n.soon .rt{ margin-top:24px; font-family:var(--mono); font-size:12px; color:var(--dfaint); }\n.soon .bk{ margin-top:32px; display:inline-block; font-size:14.5px; font-weight:600; padding:14px 24px; border-radius:999px;\n  background:var(--dtext); color:var(--dark); cursor:pointer; border:0; font-family:var(--grot); }\n`,\n\n  render(d2){\n    var path = V4_PATH(d2);\n    var hit  = V4_MATCH(path);\n    var body;\n    if(hit){\n      var p = { slug: hit.slug || '' };\n      body = d2.render('www@'+hit.ref, p, {key:'pg_'+hit.ref, style:'display:block;width:100%'});\n    } else {\n      body = V4_SOON(d2, path);\n    }\n    return ''\n      + '<div class=\"v4sh\" data-v4sh>'\n        + '<div class=\"v4seam\"></div>'\n        + d2.render('www@nav_v4', {}, {key:'v4nav', style:'display:block;width:100%'})\n        + '<main class=\"v4main\">' + body + '</main>'\n        + d2.render('www@v4_footer', {}, {key:'v4ft', style:'display:block;width:100%'})\n      + '</div>';\n  },\n\n  mounted(d2, root){ V4_WIRE(d2, root); },\n  updated(d2, root){ V4_WIRE(d2, root); }\n};\n\n/* ---------- helpers (function declarations hoist) ---------- */\n\nfunction V4_PATH(d2){\n  var p = '';\n  try{ var r = d2.router('site_router'); if(r && r.path) p = r.path; }catch(e){}\n  if(!p){ try{ p = d2.state.path || ''; }catch(e){} }\n  if(!p) p = '/';\n  p = String(p).split('?')[0].split('#')[0];\n  if(p.length > 1 && p.charAt(p.length-1) === '/') p = p.slice(0, -1);\n  return p || '/';\n}\n\n/* static allowlist — d2.render of an unknown ref does NOT throw, it renders empty */\nfunction V4_STATIC(){\n  return {\n    '/': 'v4_home',\n    '/plataforma': 'v4_plataforma',\n    '/plataforma/como-funciona': 'v4_comofunciona',\n    '/plataforma/data-framework': 'v4_dataframework',\n    '/plataforma/agent-native': 'v4_agentnative',\n    '/plataforma/data2-lang': 'v4_data2lang',\n    '/produtos': 'v4_produtos',\n    '/consultoria': 'v4_consultoria',\n    '/industrias': 'v4_industrias',\n    '/casos': 'v4_casos',\n    '/precos': 'v4_precos',\n    '/recursos': 'v4_recursos',\n    '/empresa': 'v4_empresa',\n    '/empresa/carreiras': 'v4_carreiras',\n    '/empresa/contato': 'v4_contato'\n  };\n}\n\n/* dynamic segments — the shell extracts the slug and passes it as a declared scalar */\nfunction V4_DYN(){\n  return [\n    { pre: '/produtos/',   ref: 'v4_produto'  },\n    { pre: '/industrias/', ref: 'v4_industria' },\n    { pre: '/casos/',      ref: 'v4_caso'     }\n  ];\n}\n\n/* only refs that ACTUALLY exist render; everything else falls to the \"soon\" state */\nfunction V4_BUILT(){\n  return { v4_home: 1 };\n}\n\nfunction V4_MATCH(path){\n  var built = V4_BUILT();\n  var st = V4_STATIC();\n  if(Object.prototype.hasOwnProperty.call(st, path)){\n    var r = st[path];\n    return built[r] ? { ref: r, slug: '' } : null;\n  }\n  var dyn = V4_DYN();\n  for(var i=0;i<dyn.length;i++){\n    if(path.indexOf(dyn[i].pre) === 0){\n      var slug = path.slice(dyn[i].pre.length);\n      if(slug && slug.indexOf('/') === -1){\n        return built[dyn[i].ref] ? { ref: dyn[i].ref, slug: slug } : null;\n      }\n    }\n  }\n  return null;\n}\n\nfunction V4_LANG(d2){\n  try{\n    var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction V4_SOON_T(){\n  return {\n    pt:{ k:'Em construção', ha:'Esta página está sendo montada.', hb:'A home já está no ar.', bk:'Voltar para a home' },\n    en:{ k:'Under construction', ha:'This page is being assembled.', hb:'The home is already live.', bk:'Back to the home' },\n    es:{ k:'En construcción', ha:'Esta página se está montando.', hb:'La home ya está en vivo.', bk:'Volver a la home' }\n  };\n}\n\nfunction V4_SOON(d2, path){\n  var lang = V4_LANG(d2);\n  var TT = V4_SOON_T();\n  var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n  var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n  return ''\n    + '<section class=\"soon\"><div class=\"fr\">'\n      + '<p class=\"kk\">' + esc(t('k')) + '</p>'\n      + '<h2>' + esc(t('ha')) + '<b>' + esc(t('hb')) + '</b></h2>'\n      + '<p class=\"rt\">' + esc(path) + '</p>'\n      + '<button class=\"bk\" data-nav data-href=\"/\">' + esc(t('bk')) + ' &rarr;</button>'\n    + '</div></section>';\n}\n\nfunction V4_WIRE(d2, root){\n  var host = root.querySelector('[data-v4sh]');\n  if(!host) return;\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]');\n      if(!a) return;\n      var h = a.getAttribute('data-href');\n      if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n"}}}}}}}},{"_id":"6a83545ed8f86844d32e5421","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_steps","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n.hv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; background:var(--paper); color:var(--ink); overflow-x:clip;\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n.kicker{ font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; color:var(--faint); }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; color:var(--faint); }\nh2{ font-weight:200; font-size:clamp(30px,4.2vw,56px); letter-spacing:-.014em; line-height:1.08; text-wrap:balance; max-width:20ch; }\nh2 b{ font-weight:700; }\n.shead{ display:flex; justify-content:space-between; align-items:baseline; gap:20px; margin-bottom:clamp(30px,4.6vh,52px); }\n.steps{ display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(16px,2.2vw,30px); margin-top:clamp(30px,4vh,46px); }\n.step{ padding-top:24px; border-top:2px solid var(--ink); }\n.step .num{ font-family:var(--mono); font-size:11px; letter-spacing:.18em; color:var(--faint); }\n.step h3{ margin-top:14px; font-size:clamp(19px,1.9vw,23px); font-weight:700; letter-spacing:-.012em; }\n.step .what{ margin-top:8px; font-family:var(--mono); font-size:11.5px; letter-spacing:.05em; color:var(--faint); }\n.step .why{ margin-top:14px; font-size:14.5px; line-height:1.6; color:var(--faint); max-width:34ch; }\n.underline{ margin-top:clamp(36px,5vh,56px); padding-top:26px; border-top:1px solid var(--hair); font-size:clamp(16px,1.6vw,20px); font-weight:200; letter-spacing:-.01em; max-width:52ch; }\n.underline b{ font-weight:700; }\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n@media (max-width:900px){ .steps{ grid-template-columns:1fr; gap:26px; } }\n@media (max-width:560px){ h2{ font-size:clamp(25px,7vw,32px); } }\n@media (prefers-reduced-motion:reduce){ .rv{ opacity:1; transform:none; transition:none; } }\n`,\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = STEPS_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var P = d2.params || {};\n    var val = function(k, dflt){ var v = P[k]; if(v==null) return dflt; return String(v); };\n\n    var kicker = val('kicker', t('k'));\n    var idx = val('idx','');\n    var ha = val('title',''), hb = val('titleb','');\n    if(!ha && !hb){ ha = t('h_a'); hb = t('h_b'); }\n    var under = val('under', t('u'));\n\n    var steps = '';\n    for(var i=1;i<=3;i++){\n      steps += '<div class=\"step rv\"><div class=\"num\">0'+i+'</div>'\n        + '<h3>'+esc(t('s'+i+'t'))+'</h3>'\n        + '<div class=\"what\">'+esc(t('s'+i+'w'))+'</div>'\n        + '<p class=\"why\">'+esc(t('s'+i+'d'))+'</p></div>';\n    }\n\n    return '<div class=\"hv4\"><section class=\"paper\"><div class=\"frame\">'\n      + '<div class=\"shead rv\"><div>'\n      + (kicker ? '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(kicker)+'</p>' : '')\n      + '<h2>'+ha+(hb ? ' <b>'+hb+'</b>' : '')+'</h2>'\n      + '</div>'+(idx ? '<span class=\"idx\">'+esc(idx)+'</span>' : '')+'</div>'\n      + '<div class=\"steps\">'+steps+'</div>'\n      + (under ? '<p class=\"underline rv\">'+under+'</p>' : '')\n      + '</div></section></div>';\n  },\n  mounted(d2, root){ STEPS_SETUP(d2, root); },\n  updated(d2, root){ STEPS_SETUP(d2, root); }\n};\n\nfunction D2LANG(d2){\n  try{ var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction STEPS_T(){ return {\n  pt:{ k:'Como trabalhamos', h_a:'Não é projeto. É investimento', h_b:'com data de retorno.',\n    s1t:'O caso', s1w:'Lean Inception · semana zero', s1d:'A dor vira escopo com número antes de qualquer linha de código.',\n    s2t:'O prazo', s2w:'Sprint · 2 a 4 semanas', s2d:'Solução completa em produção. Não é piloto, não é prova de conceito.',\n    s3t:'O retorno', s3w:'Medido, em produção', s3d:'No mesmo trimestre em que foi aprovado.',\n    u:'Quem promete data <b>já assumiu a responsabilidade.</b>' },\n  en:{ k:'How we work', h_a:'It is not a project. It is an investment', h_b:'with a return date.',\n    s1t:'The case', s1w:'Lean Inception · week zero', s1d:'The pain becomes scope with a number, before a single line of code.',\n    s2t:'The deadline', s2w:'Sprint · 2 to 4 weeks', s2d:'A complete solution in production. Not a pilot, not a proof of concept.',\n    s3t:'The return', s3w:'Measured, in production', s3d:'In the same quarter it was approved.',\n    u:'Whoever promises a date <b>has already taken responsibility.</b>' },\n  es:{ k:'Cómo trabajamos', h_a:'No es un proyecto. Es una inversión', h_b:'con fecha de retorno.',\n    s1t:'El caso', s1w:'Lean Inception · semana cero', s1d:'El dolor se vuelve alcance con número, antes de una sola línea de código.',\n    s2t:'El plazo', s2w:'Sprint · 2 a 4 semanas', s2d:'Solución completa en producción. No es piloto, no es prueba de concepto.',\n    s3t:'El retorno', s3w:'Medido, en producción', s3d:'En el mismo trimestre en que fue aprobado.',\n    u:'Quien promete una fecha <b>ya asumió la responsabilidad.</b>' }\n}; }\n\nfunction STEPS_SETUP(d2, root){\n  var host = root.querySelector('.hv4');\n  if(!host) return;\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n"}},"kicker":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"kicker"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"titleb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"titleb"}}}},"under":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"under"}}}},"idx":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idx"}}}}}}}}}},{"_id":"6a83545e4914c2963372b4e0","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_industries","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n.hv4{\n  --paper:#eeeeea; --ink:#16171a; --faint:#63656a; --hair:#d4d4ce;\n  --dark:#0a0b0d; --dtext:#ecedea; --dfaint:#8f9197; --dhair:#26282c;\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; font-family:var(--grot); line-height:1.5;\n  -webkit-font-smoothing:antialiased; background:var(--dark); color:var(--dtext); overflow-x:clip;\n}\n.frame{ max-width:1220px; margin:0 auto; padding:clamp(64px,10vh,124px) clamp(24px,4.6vw,58px); position:relative; z-index:5; }\n.kicker{ font-size:11px; letter-spacing:.22em; text-transform:uppercase; font-weight:500; color:var(--dfaint); }\n.idx{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; color:var(--dfaint); }\nh2{ font-weight:200; font-size:clamp(30px,4.2vw,56px); letter-spacing:-.014em; line-height:1.08; text-wrap:balance; max-width:20ch; color:var(--dtext); }\nh2 b{ font-weight:700; }\n.shead{ display:flex; justify-content:space-between; align-items:baseline; gap:20px; margin-bottom:clamp(30px,4.6vh,52px); }\n.inds{ display:grid; grid-template-columns:repeat(2,1fr); gap:1px; background:var(--dhair); border:1px solid var(--dhair); border-radius:12px; overflow:hidden; margin-top:clamp(28px,4vh,44px); }\n.ind{ background:var(--dark); padding:clamp(26px,3vw,40px); display:flex; flex-direction:column; gap:14px; transition:background .3s; cursor:pointer; }\n.ind:hover{ background:#101216; }\n.ind .setor{ font-family:var(--mono); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; display:flex; align-items:center; gap:9px; color:var(--dfaint); }\n.ind .setor i{ width:9px; height:9px; border-radius:3px; background:var(--c); flex:none; }\n.ind .man{ font-size:clamp(19px,2.1vw,27px); font-weight:200; letter-spacing:-.012em; line-height:1.18; color:var(--dtext); }\n.ind .man b{ font-weight:700; }\n.rv{ opacity:0; transform:translateY(22px); transition:opacity .85s ease, transform .85s ease; }\n.rv.in{ opacity:1; transform:none; }\n@media (max-width:900px){ .inds{ grid-template-columns:1fr; } }\n@media (max-width:560px){ h2{ font-size:clamp(25px,7vw,32px); } }\n@media (prefers-reduced-motion:reduce){ .rv{ opacity:1; transform:none; transition:none; } }\n`,\n  render(d2){\n    var lang = D2LANG(d2);\n    var TT = IND_T();\n    var t = function(k){ var v = TT[lang] && TT[lang][k]; if(v==null) v = TT.en[k]; return v==null ? k : v; };\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n    var dd = function(r){ try{ var h = d2.data(r); return h ? (h.records()||[]) : []; }catch(e){ return []; } };\n    var P = d2.params || {};\n    var val = function(k, dflt){ var v = P[k]; if(v==null) return dflt; return String(v); };\n\n    var kicker = val('kicker', t('k'));\n    var idx = val('idx','');\n    var ha = val('title',''), hb = val('titleb','');\n    if(!ha && !hb){ ha = t('h_a'); hb = t('h_b'); }\n\n    var COL = IND_COLORS();\n    var want = val('slugs','cx,financeiro,varejo,supply').split(',');\n    var recs = dd('cms-industriesDataSet');\n    var html = '';\n    for(var q=0;q<want.length;q++){\n      var slug = String(want[q]).trim();\n      if(!slug) continue;\n      var rec = null;\n      for(var z=0;z<recs.length;z++){ if(recs[z] && recs[z].slug === slug){ rec = recs[z]; break; } }\n      var man = '';\n      if(rec){ man = (lang==='pt') ? (rec.manchete||'') : (rec['manchete_'+lang] || rec.manchete || ''); }\n      if(!man) man = t('m_'+slug) || '';\n      var nome = '';\n      if(rec){ nome = (lang==='pt') ? (rec.name_pt||'') : (rec['name_'+lang] || rec.name_pt || ''); }\n      if(!nome) nome = t('n_'+slug) || slug;\n      var c = COL[slug] || '#5b86ff';\n      html += '<div class=\"ind\" data-nav data-href=\"/industrias/'+esc(slug)+'\" style=\"--c:'+c+'\">'\n        + '<div class=\"setor\"><i></i>'+esc(nome)+'</div>'\n        + '<div class=\"man\">'+esc(man)+'</div></div>';\n    }\n\n    return '<div class=\"hv4\"><section><div class=\"frame\">'\n      + '<div class=\"shead rv\"><div>'\n      + (kicker ? '<p class=\"kicker\" style=\"margin-bottom:18px\">'+esc(kicker)+'</p>' : '')\n      + '<h2>'+ha+(hb ? ' <b>'+hb+'</b>' : '')+'</h2>'\n      + '</div>'+(idx ? '<span class=\"idx\">'+esc(idx)+'</span>' : '')+'</div>'\n      + '<div class=\"inds rv\">'+html+'</div>'\n      + '</div></section></div>';\n  },\n  mounted(d2, root){ IND_SETUP(d2, root); },\n  updated(d2, root){ IND_SETUP(d2, root); }\n};\n\nfunction D2LANG(d2){\n  try{ var s = d2.store('siteLocale');\n    if(s){ var v = s.get('lang'); if(v==null) v = s.get('data.lang');\n      if(v==='en'||v==='es'||v==='pt') return v; }\n  }catch(e){}\n  return 'pt';\n}\n\nfunction IND_COLORS(){ return {\n  cx:'#4ddfe6', varejo:'#ff4d9e', financeiro:'#84e05a', seguros:'#5b86ff',\n  vendas:'#ff6a4d', rh:'#e8e84d', supply:'#9b5cff', bi:'#4de0a1', compras:'#5b86ff'\n}; }\n\nfunction IND_T(){ return {\n  pt:{ k:'Onde já resolvemos', h_a:'O setor muda.', h_b:'A distância até produção, não.',\n    n_cx:'CX / Contact Center', n_financeiro:'Serviços financeiros', n_varejo:'Varejo', n_supply:'Supply chain',\n    m_cx:'Quem liga não quer conversar. Quer resolver.', m_financeiro:'Cada centavo com origem.',\n    m_varejo:'A vitrine muda mais rápido que o sistema.', m_supply:'Estoque certo no lugar errado ainda é estoque errado.' },\n  en:{ k:'Where we have solved it', h_a:'The sector changes.', h_b:'The distance to production does not.',\n    n_cx:'CX / Contact Center', n_financeiro:'Financial services', n_varejo:'Retail', n_supply:'Supply chain',\n    m_cx:'People who call do not want to talk. They want it solved.', m_financeiro:'Every cent with an origin.',\n    m_varejo:'The storefront changes faster than the system.', m_supply:'The right stock in the wrong place is still the wrong stock.' },\n  es:{ k:'Dónde ya lo resolvimos', h_a:'El sector cambia.', h_b:'La distancia a producción, no.',\n    n_cx:'CX / Contact Center', n_financeiro:'Servicios financieros', n_varejo:'Retail', n_supply:'Supply chain',\n    m_cx:'Quien llama no quiere conversar. Quiere resolver.', m_financeiro:'Cada centavo con su origen.',\n    m_varejo:'La vitrina cambia más rápido que el sistema.', m_supply:'Stock correcto en el lugar equivocado sigue siendo stock equivocado.' }\n}; }\n\nfunction IND_SETUP(d2, root){\n  var host = root.querySelector('.hv4');\n  if(!host) return;\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.12});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n"}},"kicker":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"kicker"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"titleb":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"titleb"}}}},"idx":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idx"}}}},"slugs":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slugs"}}}}}}}}}},{"_id":"6a8354785a7c75b8a2c3780a","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"v4_home","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `:host{ display:block; width:100%; }`,\n\n  /* A home é composição — cada dobra é um componente do kit.\n     O índice (\"01 — 07\") vem daqui porque só a página sabe a ordem. */\n  render(d2){\n    var R = function(ref, params, k){\n      return d2.render('www@'+ref, params || {}, { key:k, style:'display:block;width:100%' });\n    };\n    return ''\n      + R('v4_hero',       { idx:'01 — 07' }, 'hm_hero')\n      + R('v4_stack',      { idx:'02 — 07' }, 'hm_stack')\n      + R('v4_splash',     { idx:'03 — 07' }, 'hm_splash')\n      + R('v4_steps',      { idx:'04 — 07' }, 'hm_steps')\n      + R('v4_proof',      { idx:'05 — 07' }, 'hm_proof')\n      + R('v4_industries', { idx:'06 — 07' }, 'hm_inds')\n      + R('v4_cta',        {},               'hm_cta');\n  }\n};\n"}},"slug":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slug"}}}}}}}}}},{"_id":"6a8edd521a8b98a0617545ea","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"r1_home","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n:host{ display:block; width:100%; }\n*{ box-sizing:border-box; margin:0; padding:0; }\n\n.r1{\n  --paper:#f7f6f2; --ink:#111113; --ink-2:#3a3a3d; --mut:#6b6b6e; --line:#dedcd4;\n  --c1:#5b86ff; --c2:#ff6a4d; --c3:#e8e84d; --c4:#4de0a1; --c5:#4ddfe6; --c6:#ff4d9e; --c7:#9b5cff; --c8:#84e05a;\n  --grot:'Helvetica Neue',Helvetica,Arial,sans-serif;\n  --mono:'SF Mono',ui-monospace,Menlo,Consolas,monospace;\n  position:relative; width:100%; background:var(--paper); color:var(--ink);\n  font-family:var(--grot); line-height:1.4; -webkit-font-smoothing:antialiased;\n}\n\n.wrap{ max-width:1180px; margin:0 auto; padding:40px clamp(22px,4vw,56px) 90px; }\n\n/* mark — flat, no glow */\n.mark{ display:flex; align-items:center; gap:16px; }\n.mark svg{ width:78px; height:auto; color:var(--ink); }\n.ring{ position:relative; width:44px; height:44px; flex:none; }\n.ring i{ position:absolute; width:9px; height:9px; border-radius:50%; }\n\n.chg{ font-weight:800; color:var(--c1); animation:chgcolor 9s linear infinite; }\n@keyframes chgcolor{\n  0%{color:var(--c1)} 12.5%{color:var(--c2)} 25%{color:var(--c3)} 37.5%{color:var(--c4)}\n  50%{color:var(--c5)} 62.5%{color:var(--c6)} 75%{color:var(--c7)} 87.5%{color:var(--c8)} 100%{color:var(--c1)}\n}\n@media (prefers-reduced-motion:reduce){ .chg{ animation:none; color:var(--c1); } }\n\n/* ---- manifesto takeover ---- */\n.mf{ position:fixed; inset:0; z-index:999999; background:#050505; display:flex; align-items:center; justify-content:center;\n  opacity:0; pointer-events:none; transition:opacity .28s ease; overflow:hidden; }\n.mf.on{ opacity:1; pointer-events:auto; }\n.mf .wash{ position:absolute; inset:-10%; opacity:0; transition:none; pointer-events:none; }\n.mf .txt{ position:relative; font-family:var(--grot); font-weight:800; letter-spacing:-.01em; text-align:center;\n  max-width:82vw; padding:0 24px; line-height:1.14; text-wrap:balance; transition:none; }\n.mf .x{ position:absolute; top:22px; right:26px; font-family:var(--mono); font-size:11.5px; letter-spacing:.1em;\n  text-transform:uppercase; color:#f2f0ea; cursor:pointer; border:1px solid rgba(242,240,234,.4);\n  border-radius:999px; padding:9px 15px; background:rgba(11,11,12,.82); z-index:3; }\n.mf .x:hover{ border-color:rgba(242,240,234,.75); }\n.mf .static{ display:none; max-width:640px; max-height:78vh; overflow:auto; text-align:left; color:#eee; font-weight:400; padding:32px; }\n.mf .static p{ font-size:16px; line-height:1.7; margin-bottom:6px; }\n@media (max-width:640px){ .mf .x{ top:16px; right:16px; font-size:10.5px; padding:7px 12px; } }\n\n/* hero */\n.hero{ margin-top:clamp(48px,9vh,96px); max-width:920px; }\n.eyebrow{ font-family:var(--mono); font-size:11.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--mut); }\nh1{ margin-top:18px; font-size:clamp(34px,5.6vw,64px); font-weight:800; letter-spacing:-.02em; line-height:1.06; color:var(--ink); text-wrap:balance; }\n.claim{ margin-top:20px; font-size:clamp(19px,2.1vw,26px); font-weight:700; letter-spacing:-.012em; line-height:1.32; color:var(--ink); max-width:58ch; }\n.sub{ margin-top:22px; font-size:clamp(16px,1.7vw,20px); line-height:1.55; color:var(--ink-2); max-width:60ch; font-weight:400; }\n.sub b{ font-weight:700; color:var(--ink); }\n.sub .l2{ margin-top:8px; display:block; }\n\n.cta{ margin-top:34px; display:flex; align-items:center; gap:20px; flex-wrap:wrap; }\n.btn{ appearance:none; border:0; cursor:pointer; font-family:var(--grot); font-size:15px; font-weight:700;\n  padding:15px 26px; border-radius:8px; background:var(--ink); color:var(--paper); transition:opacity .15s; }\n.btn:hover{ opacity:.82; }\n.btn.gh{ background:transparent; color:var(--ink); border:1.5px solid var(--ink); }\n.btn.gh:hover{ opacity:.6; }\n\n.note{ margin-top:24px; display:inline-flex; align-items:center; gap:10px; font-size:13.5px; color:var(--ink-2);\n  border:1px solid var(--line); border-radius:999px; padding:10px 16px 10px 14px; background:#fff; }\n.note b{ color:var(--ink); font-weight:700; }\n.note a{ color:var(--ink); font-weight:700; text-decoration:underline; text-underline-offset:2px; }\n\n/* chips — flat, hairline border, no shadow */\n.chips{ margin-top:40px; display:flex; gap:10px; flex-wrap:wrap; }\n.chip{ font-family:var(--mono); font-size:12px; letter-spacing:.03em; color:var(--ink-2);\n  border:1px solid var(--line); border-radius:999px; padding:9px 14px; background:#fff; }\n\n/* divider + capability band */\n.hr{ margin-top:clamp(56px,8vh,88px); border-top:1px solid var(--line); }\n.band{ padding-top:clamp(40px,6vh,56px); }\n.band .kick{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--mut); }\n.band h2{ margin-top:14px; font-size:clamp(21px,2.6vw,30px); font-weight:700; letter-spacing:-.01em; line-height:1.24; max-width:52ch; color:var(--ink); }\n\n/* the 8 components — flat squares, no gloss */\n.dots{ margin-top:clamp(34px,5vh,48px); display:grid; grid-template-columns:repeat(4,1fr); gap:1px; background:var(--line); border:1px solid var(--line); }\n@media (max-width:720px){ .dots{ grid-template-columns:repeat(2,1fr); } }\n.dot{ appearance:none; border:0; border-left:3px solid transparent; background:#fff; padding:20px 18px; display:flex; align-items:center; gap:12px;\n  cursor:pointer; font-family:var(--grot); text-align:left; width:100%; transition:background .15s, border-color .15s; }\n.dot:hover{ background:#fbfaf7; }\n.dot.on{ background:#f4f2ec; border-left-color:var(--c); }\n.dot i{ width:12px; height:12px; border-radius:3px; background:var(--c); flex:none; }\n.dot span{ font-size:13.5px; font-weight:600; color:var(--ink); }\n\n.detail{ margin-top:1px; border:1px solid var(--line); border-top:4px solid var(--c,var(--line)); background:#fff; padding:32px 34px 34px; }\n.detail .dhead{ display:flex; align-items:center; gap:14px; margin-bottom:14px; }\n.detail .dhead i{ width:22px; height:22px; border-radius:6px; flex:none; }\n.detail .dhead b{ font-size:23px; font-weight:800; color:var(--ink); letter-spacing:-.01em; }\n.detail .dhead span{ font-family:var(--mono); font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--c,var(--mut)); font-weight:700; }\n.dblurb{ font-size:16.5px; line-height:1.55; color:var(--ink-2); max-width:62ch; margin:0 0 22px; }\n.duse{ display:flex; gap:8px; flex-wrap:wrap; margin:0 0 26px; padding:0; list-style:none; }\n.duse li{ font-family:var(--mono); font-size:11px; letter-spacing:.03em; color:var(--ink-2); background:var(--paper); border:1px solid var(--line); padding:6px 12px; border-radius:999px; }\n.dfeats{ list-style:none; display:grid; grid-template-columns:repeat(2,1fr); gap:14px 32px; padding-top:22px; border-top:1px solid var(--line); }\n.dfeats li{ font-size:15px; line-height:1.5; color:var(--ink-2); padding-left:24px; position:relative; }\n.dfeats li::before{ content:'✓'; position:absolute; left:0; top:0; color:var(--c,var(--ink)); font-weight:800; }\n@media (max-width:640px){ .dfeats{ grid-template-columns:1fr; } }\n\n.rv{ opacity:0; transform:translateY(10px); transition:opacity .5s ease, transform .5s ease; }\n.rv.in{ opacity:1; transform:none; }\n\n@media (max-width:560px){\n  .wrap{ padding:28px 18px 60px; }\n  h1{ font-size:clamp(28px,9vw,36px); }\n  .cta{ flex-direction:column; align-items:flex-start; }\n}\n@media (prefers-reduced-motion:reduce){ .rv{ opacity:1; transform:none; transition:none; } }\n`,\n\n  render(d2){\n    var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n\n    var PROD = PROD_DATA();\n    var dotsHtml = '';\n    for(var i=0;i<PROD.length;i++){\n      var pd = PROD[i];\n      dotsHtml += '<button type=\"button\" class=\"dot rv'+(i===0?' on':'')+'\" data-comp=\"'+pd.k+'\" style=\"--c:'+pd.c+'\" aria-pressed=\"'+(i===0?'true':'false')+'\"><i></i><span>'+esc(pd.name)+' — '+esc(pd.tag)+'</span></button>';\n    }\n    var detailHtml = PROD_DETAIL_HTML(PROD[0]);\n\n    var chips = ['Bancos de dados em tempo real','IA multicanal · WhatsApp, telefone, web','Integrações complexas','Agentes autônomos','Times de negócio'];\n    var chipsHtml = '';\n    for(var j=0;j<chips.length;j++){ chipsHtml += '<span class=\"chip rv\">'+esc(chips[j])+'</span>'; }\n\n    return ''\n    + '<div class=\"r1\">'\n      + '<div class=\"wrap\">'\n\n        + '<div class=\"mark\">' + ICONRING() + SIGMARK() + '</div>'\n\n        + '<section class=\"hero\">'\n          + '<p class=\"eyebrow rv\">Plataforma + time de especialistas</p>'\n          + '<h1 class=\"rv\">Lead the <span class=\"chg\">Change</span> in your Industry.</h1>'\n          + '<p class=\"claim rv\">Seu time de negócio no comando da tecnologia — de forma segura, governável e observável.</p>'\n          + '<p class=\"sub rv\">De bancos de dados em tempo real a <b>IA multicanal</b> — WhatsApp, telefone, web.'\n            + '<span class=\"l2\">De integrações complexas a <b>agentes autônomos.</b> Simples, rápido, barato e seguro.</span></p>'\n          + '<div class=\"cta rv\">'\n            + '<button class=\"btn\" type=\"button\" data-nav data-href=\"/empresa/contato\">Começar a construir</button>'\n            + '<button class=\"btn gh\" type=\"button\" data-nav data-href=\"/empresa/contato\">Falar com um especialista</button>'\n          + '</div>'\n          + '<div class=\"note rv\">◆ Prefere construir <b>com a gente?</b> Nosso time de especialistas entra junto com o seu — até o seu time evoluir sozinho. <a data-nav data-href=\"/consultoria\">Saiba mais</a></div>'\n          + '<div class=\"chips\">'+chipsHtml+'</div>'\n        + '</section>'\n\n        + '<div class=\"hr\"></div>'\n\n        + '<section class=\"band\">'\n          + '<p class=\"kick rv\">A plataforma, em componentes</p>'\n          + '<h2 class=\"rv\">Um só sistema — do banco de dados ao agente autônomo — pra que seu time construa e evolua sozinho.</h2>'\n          + '<div class=\"dots\">'+dotsHtml+'</div>'\n          + '<div class=\"detail rv\" data-detail style=\"--c:'+PROD[0].c+'\">'+detailHtml+'</div>'\n        + '</section>'\n\n      + '</div>'\n      + MF_HTML()\n    + '</div>';\n  },\n\n  mounted(d2, root){ R1_SETUP(d2, root); MF_INIT(d2, root); PROD_SETUP(d2, root); },\n  updated(d2, root){ R1_SETUP(d2, root); MF_INIT(d2, root); PROD_SETUP(d2, root); }\n};\n\nfunction R1_SETUP(d2, root){\n  var host = root.querySelector('.r1');\n  if(!host) return;\n  try{\n    var io = new IntersectionObserver(function(es){\n      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });\n    }, {threshold:.1});\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ io.observe(el); });\n  }catch(e){\n    Array.prototype.slice.call(root.querySelectorAll('.rv')).forEach(function(el){ el.classList.add('in'); });\n  }\n  try{\n    d2.on(host, 'click', function(e){\n      var a = e.target.closest('[data-nav]'); if(!a) return;\n      var h = a.getAttribute('data-href'); if(!h) return;\n      e.preventDefault();\n      try{ d2.state.path = h; }catch(_){}\n      try{ d2.router('site_router').goTo(h); }catch(_){}\n    });\n  }catch(e){}\n}\n\nfunction MF_HTML(){\n  return '<div class=\"mf\" data-mf aria-hidden=\"true\">'\n    + '<div class=\"wash\" data-mfwash></div>'\n    + '<button class=\"x\" data-mfclose type=\"button\">ESC · fechar</button>'\n    + '<div class=\"txt\" data-mftxt></div>'\n    + '<div class=\"static\" data-mfstatic></div>'\n  + '</div>';\n}\n\nfunction MF_HEX(){ return ['#5b86ff','#ff6a4d','#e8e84d','#4de0a1','#4ddfe6','#ff4d9e','#9b5cff','#84e05a']; }\n\nfunction MF_BEATS(){ return [\n  {t:\"Change is not an option anymore.\", emph:true},\n  {t:\"You can say change is not safe.\"},\n  {t:\"Or the masses won't change that fast.\"},\n  {t:\"But you're wrong. And you know that.\"},\n  {t:\"Change scares people. It makes them freeze.\"},\n  {t:\"That's why sometimes you prefer to cheat yourself.\"},\n  {t:\"New markets are being created —\"},\n  {t:\"faster than old markets are being destroyed.\"},\n  {t:\"The world is changing fast.\"},\n  {t:\"It's harder. But it doesn't need to be a bad thing.\"},\n  {t:\"The world is becoming more horizontal, fragmented and distributed.\"},\n  {t:\"Expanding its frontiers at an exponential rate.\"},\n  {t:\"Heading to a 10 billion population scalability problem.\"},\n  {t:\"There is no less truth in the future. No less transparency.\"},\n  {t:\"Our information is already out of our control.\"},\n  {t:\"Most of it is being delegated to machines you don't know how to control.\"},\n  {t:\"You think you should use computers to solve your problems.\"},\n  {t:\"When in fact, organisations use you to solve problems through computers.\"},\n  {t:\"Software is not relevant anymore. It's all about the amount of users the providers control.\"},\n  {t:\"Be a user. Be used.\", emph:true},\n  {t:\"It's our current scalability framework — and from now on,\"},\n  {t:\"or at least for you, it will always be.\"},\n  {t:\"You can't control the code. You can't control the world.\"},\n  {t:\"We could be wiring the world's neurons — and together, we would become more conscious.\"},\n  {t:\"Everyone's frequency. Just one pulse.\"},\n  {t:\"You know what? We're not going to have less change.\"},\n  {t:\"We are not going to be less conscious.\"},\n  {t:\"We gonna break the walls.\", emph:true},\n  {t:\"Everyone could also be a provider.\"},\n  {t:\"Everyone could also be playing actively.\"},\n  {t:\"Creating relevant messages, products,\"},\n  {t:\"and services for a world\"},\n  {t:\"where truth is measured.\"},\n  {t:\"Helping everyone to adopt and thrive, in order to assist the future.\"},\n  {t:\"Rising for something new, aligned with the world we want to live in.\"},\n  {t:\"Disrupting the software.\"},\n  {t:\"Providing development.\"},\n  {t:\"For the rest of us.\", emph:true}\n]; }\n\nfunction MF_INIT(d2, root){\n  var overlay = root.querySelector('[data-mf]');\n  if(!overlay || overlay.__mfBound) return;\n  overlay.__mfBound = true;\n  var wash = overlay.querySelector('[data-mfwash]');\n  var txt = overlay.querySelector('[data-mftxt]');\n  var staticEl = overlay.querySelector('[data-mfstatic]');\n  var closeBtn = overlay.querySelector('[data-mfclose]');\n  var chg = root.querySelector('.chg');\n  var HEX = MF_HEX();\n  var BEATS = MF_BEATS();\n  var timers = [];\n  var running = false;\n  var reduce = false;\n  try{ reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion:reduce)').matches; }catch(e){}\n\n  function clearTimers(){ timers.forEach(function(id){ clearTimeout(id); }); timers = []; }\n  function esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); }\n  function sizeFor(t){\n    var len = t.length;\n    if(len<=18) return 'clamp(28px,5.2vw,68px)';\n    if(len<=34) return 'clamp(23px,4.2vw,52px)';\n    if(len<=55) return 'clamp(20px,3.3vw,42px)';\n    if(len<=80) return 'clamp(17px,2.7vw,34px)';\n    return 'clamp(15px,2.2vw,28px)';\n  }\n  function holdFor(t, emph){\n    var words = t.trim().split(/\\s+/).length;\n    var base = 260 + words*45;\n    if(emph) base = base*1.3;\n    return Math.max(340, Math.min(base, 900));\n  }\n  function pauseFor(emph){ return emph ? 220 : 140; }\n  function hexA(hex, a){\n    var r = parseInt(hex.slice(1,3),16), g = parseInt(hex.slice(3,5),16), b = parseInt(hex.slice(5,7),16);\n    return 'rgba('+r+','+g+','+b+','+a+')';\n  }\n\n  function openOverlay(){\n    overlay.classList.add('on');\n    overlay.setAttribute('aria-hidden','false');\n    try{ document.body.style.overflow = 'hidden'; }catch(e){}\n  }\n  function closeOverlay(){\n    running = false;\n    clearTimers();\n    overlay.classList.remove('on');\n    overlay.setAttribute('aria-hidden','true');\n    overlay.style.background = '';\n    try{ document.body.style.overflow = ''; }catch(e){}\n  }\n\n  function playStatic(){\n    txt.style.display = 'none';\n    staticEl.style.display = 'block';\n    staticEl.innerHTML = BEATS.map(function(b){ return '<p>'+esc(b.t)+'</p>'; }).join('');\n  }\n\n  function playBeats(){\n    txt.style.display = 'block';\n    staticEl.style.display = 'none';\n    var i = 0;\n    function showNext(){\n      if(!running || !overlay.isConnected) return;\n      if(i >= BEATS.length){ timers.push(setTimeout(closeOverlay, 220)); return; }\n      var b = BEATS[i]; i++;\n      var whiteBg = (i % 2 === 1);\n      var bg = whiteBg ? '#f2f0ea' : '#0b0b0c';\n      var fg = whiteBg ? '#0b0b0c' : '#f2f0ea';\n      var hold = holdFor(b.t, b.emph);\n      var pause = pauseFor(b.emph);\n      txt.textContent = b.t;\n      txt.style.fontSize = sizeFor(b.t);\n      txt.style.color = fg;\n      txt.style.opacity = '1';\n      overlay.style.background = bg;\n      timers.push(setTimeout(function(){\n        if(!txt.isConnected) return;\n        txt.style.opacity = '0';\n      }, hold));\n      timers.push(setTimeout(showNext, hold + pause));\n    }\n    showNext();\n  }\n\n  function start(){\n    if(running) return;\n    running = true;\n    openOverlay();\n    if(reduce) playStatic(); else playBeats();\n  }\n\n  try{ d2.on(chg, 'click', function(e){ e.preventDefault(); start(); }); }catch(e){}\n  try{ d2.on(closeBtn, 'click', function(e){ e.preventDefault(); closeOverlay(); }); }catch(e){}\n  try{ d2.on(overlay, 'click', function(e){ if(e.target === overlay) closeOverlay(); }); }catch(e){}\n  try{ d2.on(document, 'keydown', function(e){ if(e.key === 'Escape' && overlay.classList.contains('on')) closeOverlay(); }); }catch(e){}\n}\n\nfunction PROD_DATA(){ return [\n  {k:'ui', name:'UI', c:'var(--c1)', tag:'Interfaces ricas', blurb:'Toda tela do seu produto — sem escrever HTML, CSS ou gerenciar estado à mão.', use:['Painéis internos','Portais de cliente','Apps multiplataforma'], feats:[\n    'Telas e fluxos completos, sem escrever HTML/CSS do zero',\n    'Componentes reativos que atualizam com os dados em tempo real',\n    'Layouts responsivos para desktop, tablet e mobile',\n    'Prototipagem e produção no mesmo lugar — sem handoff pra dev'\n  ]},\n  {k:'registry', name:'Registry', c:'var(--c2)', tag:'Dados e catálogo', blurb:'O banco de dados do seu negócio, com estrutura, busca e histórico prontos de fábrica.', use:['Catálogos','CRM','Cadastros mestres'], feats:[\n    'Bancos de dados estruturados, com tipos e validação nativa',\n    'Busca semântica — encontra por significado, não só por palavra exata',\n    'Relacionamentos entre tabelas, sem escrever SQL',\n    'Versionamento e histórico de cada registro'\n  ]},\n  {k:'media', name:'Media', c:'var(--c3)', tag:'Arquivos e entrega', blurb:'Todo arquivo — documento, imagem, vídeo — armazenado, versionado e entregue rápido em qualquer lugar.', use:['Galeria de produto','Documentos','Geração de imagem'], feats:[\n    'Upload, armazenamento e organização de arquivos e documentos',\n    'Entrega via CDN, rápida em qualquer região',\n    'Geração de imagem por IA, sob demanda',\n    'Controle de versões e histórico de cada arquivo'\n  ]},\n  {k:'id', name:'ID', c:'var(--c4)', tag:'Identidade e acesso', blurb:'Quem pode ver o quê, com login, papéis e trilha de auditoria prontos desde o primeiro dia.', use:['Login e SSO','Permissões','Compliance'], feats:[\n    'Login, permissões e papéis de acesso configuráveis',\n    'Autenticação própria ou integrada (SSO, redes sociais)',\n    'Trilha de auditoria — quem fez o quê, e quando',\n    'Políticas de acesso por dado, não só por tela'\n  ]},\n  {k:'connect', name:'Connect', c:'var(--c5)', tag:'Integrações externas', blurb:'A ponte com qualquer sistema — legado, SaaS ou API nova — sem reescrever o que já funciona.', use:['ERP e SAP','Webhooks','APIs de parceiro'], feats:[\n    'Chama qualquer API externa — REST, webhook, e-mail',\n    'Conecta com sistemas legados sem trocar o que já existe',\n    'Eventos em tempo real via socket',\n    'Autenticação e segredos gerenciados com segurança'\n  ]},\n  {k:'domain', name:'Domain', c:'var(--c6)', tag:'IA e lógica de negócio', blurb:'A camada de decisão do seu negócio — agentes que entendem contexto, decidem com o porquê e explicam a resposta.', use:['Atendimento por IA','Recomendação','Automação de decisão'], feats:[\n    'Decide com o porquê — cada decisão fica registrada e auditável',\n    'Voz, texto, imagem e visão — multimodal, nativo',\n    'Busca o que importa antes de responder',\n    'Streaming em tempo real, milhares de tokens por segundo'\n  ]},\n  {k:'rush', name:'Rush', c:'var(--c7)', tag:'Eventos e automação', blurb:'O motor de tempo real — cada evento do seu negócio dispara a reação certa, na hora certa.', use:['Pipelines de agentes','Rotinas agendadas','Automação de processo'], feats:[\n    'Reage a eventos do seu negócio no instante em que acontecem',\n    'Agendamentos e rotinas recorrentes',\n    'Pipelines de agentes autônomos, com regras que você audita',\n    'Cada execução com log completo'\n  ]},\n  {k:'cashier', name:'Cashier', c:'var(--c8)', tag:'Pagamentos', blurb:'Cobrança, conciliação e repasse — o dinheiro do seu negócio rastreado até o centavo.', use:['Assinaturas','Marketplace','Conciliação financeira'], feats:[\n    'Cobrança, assinatura e repasse, processados uma vez só',\n    'Conciliação automática, com a origem de cada centavo',\n    'Integração com os principais gateways de pagamento',\n    'Trilha de auditoria financeira completa'\n  ]}\n]; }\n\nfunction PROD_DETAIL_HTML(p){\n  var esc = function(s){ return (s==null?'':String(s)).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };\n  var feats = p.feats.map(function(f){ return '<li>'+esc(f)+'</li>'; }).join('');\n  var use = (p.use||[]).map(function(u){ return '<li>'+esc(u)+'</li>'; }).join('');\n  return '<div class=\"dhead\"><i style=\"background:'+p.c+'\"></i><b>'+esc(p.name)+'</b><span>'+esc(p.tag)+'</span></div>'\n       + '<p class=\"dblurb\">'+esc(p.blurb||'')+'</p>'\n       + '<ul class=\"duse\">'+use+'</ul>'\n       + '<ul class=\"dfeats\">'+feats+'</ul>';\n}\n\nfunction PROD_SETUP(d2, root){\n  var host = root.querySelector('.r1');\n  if(!host || host.__prodBound) return;\n  host.__prodBound = true;\n  var PROD = PROD_DATA();\n  var detail = root.querySelector('[data-detail]');\n  var dots = Array.prototype.slice.call(root.querySelectorAll('.dot'));\n  dots.forEach(function(btn){\n    d2.on(btn, 'click', function(){\n      var k = btn.getAttribute('data-comp');\n      var p = null;\n      for(var i=0;i<PROD.length;i++){ if(PROD[i].k===k){ p=PROD[i]; break; } }\n      if(!p || !detail) return;\n      dots.forEach(function(x){ x.classList.remove('on'); x.setAttribute('aria-pressed','false'); });\n      btn.classList.add('on'); btn.setAttribute('aria-pressed','true');\n      detail.style.setProperty('--c', p.c);\n      detail.innerHTML = PROD_DETAIL_HTML(p);\n    });\n  });\n}\n\nfunction ICONRING(){\n  var COLORS = ['var(--c1)','var(--c2)','var(--c3)','var(--c4)','var(--c5)','var(--c6)','var(--c7)','var(--c8)'];\n  var html = '';\n  var R = 16;\n  for(var i=0;i<8;i++){\n    var ang = (Math.PI*2*i/8) - Math.PI/2;\n    var x = 22 + R*Math.cos(ang) - 4.5;\n    var y = 22 + R*Math.sin(ang) - 4.5;\n    html += '<i style=\"left:'+x.toFixed(1)+'px;top:'+y.toFixed(1)+'px;background:'+COLORS[i]+'\"></i>';\n  }\n  return '<div class=\"ring\" aria-hidden=\"true\">'+html+'</div>';\n}\n\nfunction SIGMARK(){\n  return '<svg viewBox=\"0 0 459.554 148.471\" fill=\"none\" aria-label=\"Data²\" role=\"img\">'\n  + '<g transform=\"translate(-678.859 -300.605)\">'\n  + '<path transform=\"translate(664.5 447)\" fill=\"currentColor\" d=\"M14.359-122.138H75.428a148.024,148.024,0,0,1,16.175.865,49.592,49.592,0,0,1,16.349,5.017,50.6,50.6,0,0,1,14.445,10.38,58.331,58.331,0,0,1,9.774,13.58,61.26,61.26,0,0,1,5.536,15.483,77.146,77.146,0,0,1,1.73,16.089q0,17.819-6.92,30.708A54.761,54.761,0,0,1,114.7-9.861a51.9,51.9,0,0,1-11.072,5.45,68.767,68.767,0,0,1-11.5,2.941,98.6,98.6,0,0,1-11.5,1.211Q74.909,0,69.719,0H14.359ZM26.469-10.207H65.394q6.055,0,12.369-.173a73.177,73.177,0,0,0,12.37-1.384A64.307,64.307,0,0,0,101.9-15.311a37.089,37.089,0,0,0,10.726-6.834,39.087,39.087,0,0,0,11.245-17.473,68.5,68.5,0,0,0,3.114-20.414,67.7,67.7,0,0,0-2.6-18.857,47.079,47.079,0,0,0-8.131-16.089,39.361,39.361,0,0,0-10.553-9.688,48.312,48.312,0,0,0-11.245-5.1,45.376,45.376,0,0,0-10.553-1.9q-5.017-.259-8.3-.259H26.469ZM263.133-.173q-2.595.346-5.1.519t-5.277.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.467,59.467,0,0,1-9.256,4.844,68.866,68.866,0,0,1-12.8,3.893,82.923,82.923,0,0,1-17.04,1.557q-11.764,0-17.387-1.9a56.36,56.36,0,0,1-7.525-2.941,28.342,28.342,0,0,1-9.6-9.255A24.591,24.591,0,0,1,154.835-25.6a24.907,24.907,0,0,1,3.027-12.456,25.929,25.929,0,0,1,7.353-8.477,36.879,36.879,0,0,1,11.937-5.19,103.75,103.75,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.376,48.376,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q230.609-73.7,223.43-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.521,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.568,33.568,0,0,0-3.114,7.006l-11.937-.519a40.255,40.255,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.16,58.16,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.752,85.752,0,0,1,9.256,1.038,90.48,90.48,0,0,1,9.082,1.99,31.348,31.348,0,0,1,7.872,3.287,19.89,19.89,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.817,27.817,0,0,1,1.384,6.4q.259,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968,8.188,8.188,0,0,0,1.99,4.066,8.512,8.512,0,0,0,4.238,2.249,24.406,24.406,0,0,0,7.439.346ZM238.567-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.484,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.369-1.125A73.708,73.708,0,0,0,217.893-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.75,20.75,0,0,0,4.844-10.726A86.815,86.815,0,0,0,238.567-46.364Zm53.8-73.7v34.6h24.22v9H292.37v40.655q0,6.228.259,11.332a26.276,26.276,0,0,0,1.816,8.823,11.668,11.668,0,0,0,4.931,5.709q3.373,1.989,9.6,1.99a58.913,58.913,0,0,0,7.612-.519V.692q-2.941.519-5.622.865a45.4,45.4,0,0,1-5.8.346,33.2,33.2,0,0,1-11.937-1.99A16.222,16.222,0,0,1,285.1-6.747a25.125,25.125,0,0,1-3.547-11.245q-.605-6.574-.605-15.743V-76.466H264.69v-9h16.262v-29.064ZM432.522-.188c-1.73.231-3.28.419-4.952.534s-3.431.173-5.276.173q-7.266,0-10.207-3.114t-3.979-10.034q-2.595,1.9-6.4,4.411a59.465,59.465,0,0,1-9.256,4.844,68.865,68.865,0,0,1-12.8,3.893,82.922,82.922,0,0,1-17.04,1.557q-11.764,0-17.386-1.9A56.359,56.359,0,0,1,337.7-2.768a28.342,28.342,0,0,1-9.6-9.255,24.591,24.591,0,0,1-3.72-13.581A24.907,24.907,0,0,1,327.4-38.06a25.929,25.929,0,0,1,7.352-8.477,36.879,36.879,0,0,1,11.937-5.19,103.749,103.749,0,0,1,16.694-2.768q9.429-.865,20.76-1.125t23.788-.433a48.378,48.378,0,0,0-.605-7.612,12.089,12.089,0,0,0-3.893-6.92Q400.149-73.7,392.97-75.6t-20.327-1.9a85.006,85.006,0,0,0-16.522,1.3,30.566,30.566,0,0,0-10.034,3.633,16.669,16.669,0,0,0-5.622,5.536,33.567,33.567,0,0,0-3.114,7.006l-11.937-.519a40.254,40.254,0,0,1,1.557-5.277,28.9,28.9,0,0,1,2.941-5.8,30.014,30.014,0,0,1,8.217-8.391,39.385,39.385,0,0,1,10.294-4.93,58.159,58.159,0,0,1,11.591-2.335q6.055-.606,12.11-.606,4.152,0,8.736.259a85.751,85.751,0,0,1,9.256,1.038A90.482,90.482,0,0,1,399.2-84.6a31.348,31.348,0,0,1,7.872,3.287,19.891,19.891,0,0,1,6.4,5.622,25.409,25.409,0,0,1,3.374,6.574,27.818,27.818,0,0,1,1.384,6.4q.26,3.028.259,4.757v36.5a29.841,29.841,0,0,0,.519,5.968A8.189,8.189,0,0,0,421-11.418a8.512,8.512,0,0,0,4.238,2.249,23.452,23.452,0,0,0,7.288.331ZM408.107-46.364q-9.688,0-19.549.173t-18.511.951a108,108,0,0,0-15.483,2.422,30.135,30.135,0,0,0-10.639,4.411,16.457,16.457,0,0,0-5.622,6.142,15.459,15.459,0,0,0-1.643,6.833q0,5.882,3.2,9.342a20.362,20.362,0,0,0,7.612,5.19,35.483,35.483,0,0,0,9,2.249,69.488,69.488,0,0,0,7.525.519,66.684,66.684,0,0,0,12.37-1.125A73.707,73.707,0,0,0,387.434-12.2a41.312,41.312,0,0,0,8.91-4.325,34.318,34.318,0,0,0,6.228-5.1,20.749,20.749,0,0,0,4.844-10.726A86.812,86.812,0,0,0,408.107-46.364Z\"/>'\n  + '<path transform=\"translate(1095.5 395)\" fill=\"currentColor\" d=\"M.512-37.631C.512-44,2.263-49.153,5.339-53.064a33.374,33.374,0,0,1,11.47-9.294q9.822-4.878,12.755-7.251A7.727,7.727,0,0,0,32.5-75.937a9.882,9.882,0,0,0-2.439-6.987q-2.439-2.637-7.778-2.637T14.832-82.2a15.491,15.491,0,0,0-2.175,8.174H2.307q0-9.888,5.636-15.128t14.667-5.24q9.163,0,14.733,4.417t5.57,12.92q0,7.844-4.054,11.865t-12.821,8.24q-11.272,5.076-13.25,10.085H42.913v9.229Z\"/>'\n  + '</g></svg>';\n}\n"}}}}}}}},{"_id":"6ace6cc858509f165b22f282","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"kDataInAWrap","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Deck \"Data² in a wrap\" (apresentação institucional, outubro 2026).\n// O módulo completo (CSS + slides + notas) vive no drive `assets` e é carregado em runtime.\n// Para editar: apresentacao-data2/data2-in-a-wrap/ → python3 build.py → subir wrap.js no drive assets\n// e trocar o SRC abaixo → publicar.\nconst SRC='https://www.data2.media/file/-dfk3Q6XDuIZgUeRsEd5J'\nlet MOD=null, LOADING=null, BOOTED=false\n\nfunction load(){\n  if(!LOADING){\n    LOADING=fetch(SRC,{cache:'no-cache'})\n      .then(r=>r.text())\n      .then(code=>import(URL.createObjectURL(new Blob([code],{type:'text/javascript'}))))\n      .then(m=>{ MOD=m.default; return MOD })\n  }\n  return LOADING\n}\n\nexport default {\n  css:`:host{display:block}\n  .ld{height:100vh;height:100svh;background:#0E1220;display:flex;align-items:center;justify-content:center;\n    font-family:-apple-system,BlinkMacSystemFont,sans-serif;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:rgba(255,255,255,.6)}`,\n  render(d2){\n    if(!d2.state.ready||!MOD) return '<div class=\"ld\">loading</div>'\n    return '<style>'+MOD.css+'</style>'+MOD.render(d2)\n  },\n  mounted(d2){\n    load().then(()=>{\n      d2.state.ready=1\n      // preview do builder (data2.qa) já exige login de builder: pula o gate\n      try{ if(/\\.data2\\.qa$/.test(location.hostname)) d2.state.unlocked=true }catch(e){}\n      setTimeout(()=>{ if(!BOOTED){ BOOTED=true; MOD.mounted(d2) } },0)\n    }).catch(()=>{})\n  },\n  updated(d2){\n    if(BOOTED&&MOD&&MOD.updated) MOD.updated(d2)\n  }\n}\n"}}}}}}}},{"_id":"6adf6f09580bb624d299d483","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-site","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 (fase 1): a home de apresentacao-data2/data2-deck/home inteira, num iframe.\n// O HTML vive no Drive ns26-files; `src` é a URL dele, ligada na instância.\n// Para atualizar: python3 data2-deck/tools/deploy_ns26.py → subir site-ns26.html no Drive → trocar `src` → publicar.\n// O hash da página (#/customers/bluma, #/platform/rush…) vai e volta entre o app e o iframe.\nexport default {\n  css: `:host{display:block;width:100%;height:100%}\n  .wrap{position:relative;width:100%;height:100vh;height:100dvh;background:#0B0C10}\n  iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}\n  .ld{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font:11px/1 -apple-system,BlinkMacSystemFont,sans-serif;letter-spacing:.24em;text-transform:uppercase;color:rgba(255,255,255,.55)}\n  .ld[hidden]{display:none}`,\n  render(d2) {\n    return `<div class=\"wrap\" data-d2-static><div class=\"ld\">Data²</div><iframe title=\"Data²\" allow=\"autoplay; fullscreen\"></iframe></div>`\n  },\n  mounted(d2) {\n    const src = d2.param('src')\n    const frame = d2.$('iframe'), ld = d2.$('.ld')\n    if (!src || !frame) return\n    let url = null\n    fetch(src, { cache: 'no-cache' })\n      .then(r => r.text())\n      .then(html => {\n        url = URL.createObjectURL(new Blob([html], { type: 'text/html' }))\n        frame.src = url + (location.hash || '')\n        frame.addEventListener('load', () => {\n          ld.hidden = true\n          try {\n            const w = frame.contentWindow\n            const sync = () => { try { history.replaceState(history.state, '', location.pathname + location.search + (w.location.hash || '')) } catch (e) {} }\n            w.addEventListener('hashchange', sync)\n            w.addEventListener('popstate', sync)\n            // o site navega com pushState/replaceState, que não disparam evento: avisa depois de cada um\n            ;['pushState', 'replaceState'].forEach(k => {\n              const orig = w.history[k].bind(w.history)\n              w.history[k] = (...a) => { const r = orig(...a); sync(); return r }\n            })\n            sync()\n          } catch (e) {}\n        })\n      })\n      .catch(() => { ld.textContent = 'Erro ao carregar' })\n    d2.onUnmount(() => { if (url) URL.revokeObjectURL(url) })\n  },\n}\n"}},"src":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"src"}}}}}}}}}},{"_id":"6adf7210707f43f0fdfb745a","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-shell","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · shell. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/shell.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\n// Os parâmetros string são os typeIds das partes (www@ns26-nav, www@ns26-splash…); locale = Store siteLocale.\nconst SRC = 'https://www.data2.media/file/KSQjaYinjbMMJIxPn4-Bi'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block;width:100%;height:100%}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 shell', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}},"nav":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"nav"}}}},"splash":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"splash"}}}},"signup":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"signup"}}}},"book":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"book"}}}},"footer":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"footer"}}}},"why":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"why"}}}},"explorer":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"explorer"}}}},"proof":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"proof"}}}},"doors":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"doors"}}}},"platform":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"platform"}}}},"band":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"band"}}}},"pricing":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"pricing"}}}},"casePage":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"casePage"}}}},"builderPage":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"builderPage"}}}},"mcpPage":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"mcpPage"}}}},"specialistsPage":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"specialistsPage"}}}}}}}}}},{"_id":"6adf76908a7090cf2ca81bd8","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-nav","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · nav. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/nav.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/IqH2ts_kbjfNluVH9HQpo'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 nav', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf769113973d5001e3c72b","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-splash","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · splash. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/splash.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/_Q5ACfKbM4R-afJ2650N5'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 splash', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7691977ac80c66d80f61","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-signup","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · signup. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/signup.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/G5x-TMxQUowOTQJJyXwvz'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block;height:100%}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 signup', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf769214eb9bc478b60af8","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-book","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · book. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/book.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/y7u3u_aqCJpHY2MSycPSX'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 book', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf76928a7090cf2ca81bf4","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-footer","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · footer. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/footer.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/m_asp4nOpvxGEUZg_VPAo'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 footer', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7693c3b0894bf569679c","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-why","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · why. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/why.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/5fxaO43OB5ByyV0R4PGz6'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 why', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7693c2040be6c6961386","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-explorer","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · explorer. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/explorer.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/oX1rO7yke3vgq4CucutME'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 explorer', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf769314eb9bc478b60aff","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-proof","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · proof. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/proof.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/jgcuT7YNLdAR1JltlrqKg'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 proof', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7694580bb624d299e8da","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-doors","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · doors. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/doors.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/2A0nyMxs00q_tYQMqW4Fz'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 doors', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7694182264c38e2eeaf7","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-platform","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · platform. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/platform.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/naldnX9jE3k9_F_rO_Vu7'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 platform', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf769514eb9bc478b60b08","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-band","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · band. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/band.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/8I5Bzb10Xm_Zy5RdqGIpE'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 band', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf76958a7090cf2ca81bf9","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-pricing","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · pricing. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/pricing.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/bgdURITX4H7j-ol28pSmR'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 pricing', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf769500e4ea2d30a9937a","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-case","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · case (slug: aramis | bluma | porsche). Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/case.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/rwLXqAZQG_uZCyYBIWsqK'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 case', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}},"slug":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slug"}}}}}}}}}},{"_id":"6adf769614eb9bc478b60b13","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-builder","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · builder. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/builder.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/D2SOCnETVbPR20s-hIlUo'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 builder', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7696c2040be6c69613a0","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-mcp","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · mcp. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/mcp.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/21-xIasvc1DrroDbRR7Pk'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 mcp', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf7696a980678d251abcd6","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-specialists","package":"www","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"// Novo site 2026 · specialists. Carregador: o módulo desta parte vive no Drive ns26-files.\n// Fonte: apresentacao-data2/data2-deck/tools/ns26.py → ns26/specialists.js. Para mudar: rodar o gerador,\n// subir o arquivo novo no Drive e trocar o SRC abaixo (ns26/drive.json guarda os endereços).\nconst SRC = 'https://www.data2.media/file/wYfNDZcT4Kggejd1bFk1m'\nlet MOD = null, LOADING = null\nconst load = () => LOADING || (LOADING = fetch(SRC).then(r => r.text()).then(code => import(URL.createObjectURL(new Blob([code], { type: 'text/javascript' })))).then(m => (MOD = m.default)))\nexport default {\n  css: `:host{display:block}`,\n  render(d2) { return d2.state.ready && MOD ? '<style>' + MOD.css + '</style>' + MOD.render(d2) : '' },\n  mounted(d2, root) {\n    const boot = () => { if (root.__booted) return; if (!root.querySelector('style')) { setTimeout(boot, 16); return } root.__booted = 1; if (!root.getElementById) root.getElementById = id => root.querySelector('#' + CSS.escape(id)); MOD.mounted(d2, root) }\n    load().then(() => { d2.state.ready = 1; setTimeout(boot, 0) }).catch(e => console.error('ns26 specialists', e))\n  },\n  updated(d2, root) { if (root.__booted && MOD.updated) MOD.updated(d2, root) },\n}\n"}},"locale":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"locale"}}}},"base":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"base"}}}}}}}}}},{"_id":"6adf87e570b36a65f1e4d41e","component":"data2-core-types@Component","system":"618d6a444e43970b360badd6","params":{"extends":"data2-core-primitives@Block","component":"ns26-bento-status","package":"www","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 SECTIONS = ['Hero', 'Manifesto', 'Challenges', 'Demo logística', 'Clientes', 'Builder e MCP', 'Plataforma', 'Specialists', 'Logos', 'Pricing', 'CTA final']\nconst PRODUCTS = [\n  ['Registry', 'dados tipados'], ['UI', 'telas'], ['Domain', 'agentes'], ['Rush', 'tudo que entra'],\n  ['Connect', 'tudo que sai'], ['Cashier', 'billing'], ['Media', 'mídia'], ['ID', 'quem pode o quê']\n]\nconst CHALLENGES = [\n  ['Onde está meu pedido', 'WMS · Transportadora · WhatsApp', ''],\n  ['Atendimento e pós-venda numa base', 'WhatsApp · Call center', 'Bluma'],\n  ['Provador virtual com IA generativa', 'Loja online · GenAI', 'Aramis'],\n  ['Clube, restaurante e cozinha num hub', 'CRM · Cozinha', 'TEMPO by Porsche'],\n  ['Ruptura prevista por loja e SKU', 'PDV · Estoque · Compras', ''],\n  ['Vídeo da embalagem ligado ao pedido', 'Câmera · Pedidos', '']\n]\nconst PENDING = [\n  'Notas internas visíveis na página (\"a confirmar…\")',\n  'Pricing sem planos e valores',\n  'CTAs Start building, Talk to sales e Sign up apontam pra #',\n  'Learn, About, Careers e textos legais desabilitados',\n  'Arquivos finais dos logos de clientes'\n]\nconst LOGOS = ['[B]³', 'Whirlpool', 'Arcadis', 'Goomer', 'Hub', 'Tiba', 'Bliss']\n\nconst chip = (t, cls = '') => `<span class=\"chip ${cls}\">${t}</span>`\n\nexport default {\n  css: `\n:host{display:block;height:100%;overflow:auto;background:#f6f5f1;color:#16151a;font-family:Inter,ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",sans-serif;-webkit-font-smoothing:antialiased}\n.wrap{max-width:1280px;margin:0 auto;padding:40px 28px 56px;box-sizing:border-box}\nheader{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:24px}\n.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#85827a}\nh1{font-size:28px;font-weight:600;margin:6px 0 0;letter-spacing:-.01em}\n.status{display:flex;gap:8px;flex-wrap:wrap}\n.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;grid-auto-flow:dense}\n.card{background:#ffffff;border:1px solid #e7e5df;border-radius:18px;padding:20px;box-sizing:border-box;display:flex;flex-direction:column;gap:12px;min-width:0;box-shadow:0 1px 2px rgba(22,21,26,.04)}\n.w2{grid-column:span 2}.w3{grid-column:span 3}.w4{grid-column:span 4}.h2{grid-row:span 2}\n.lbl{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#85827a;display:flex;justify-content:space-between;gap:8px}\n.hero{background:radial-gradient(120% 120% at 0% 0%,#e3dcff 0%,#ffffff 62%);border-color:#d9d1fb}\n.hero h2{font-size:44px;line-height:1.02;font-weight:650;margin:4px 0 0;letter-spacing:-.02em}\n.hero p{margin:0;color:#4a3fb3;font-size:15px}\n.cta{display:flex;gap:8px;flex-wrap:wrap}\n.btn{font-size:13px;padding:8px 14px;border-radius:999px;border:1px solid #cdc5f4;color:#16151a;background:#fff}\n.btn.p{background:#16151a;color:#fff;border-color:#16151a}\n.chip{font-size:12px;padding:5px 10px;border-radius:999px;background:#f3f2ed;border:1px solid #e3e1da;color:#45423c;white-space:nowrap}\n.chip.ok{background:#e7f6ee;border-color:#b8e3c9;color:#17663f}\n.chip.warn{background:#fdf3e1;border-color:#f0d49c;color:#87590a}\n.chip.bad{background:#fdecec;border-color:#f2c4c4;color:#9b2c2c}\n.stat{display:flex;flex-direction:column}\n.stat b{font-size:40px;font-weight:650;letter-spacing:-.02em;line-height:1}\n.stat span{font-size:13px;color:#85827a;margin-top:6px}\n.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}\nol.man{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:12px}\nol.man li{display:grid;grid-template-columns:28px 1fr;gap:8px;font-size:14px;line-height:1.45;color:#55524b}\nol.man li i{font-style:normal;color:#5a49d6;font-weight:600}\nol.man li strong{color:#16151a;font-weight:600;display:block}\n.list{display:flex;flex-direction:column;gap:2px}\n.row{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid #efede7;font-size:14px}\n.row:first-child{border-top:0}\n.row small{color:#85827a;font-size:12px;display:block;margin-top:2px}\n.cases{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}\n.case{border-radius:14px;padding:14px;background:#f6f5f1;border:1px solid #ebe9e3;display:flex;flex-direction:column;gap:4px;min-height:96px;justify-content:flex-end}\n.case b{font-size:16px}.case span{font-size:12px;color:#6f6c65}\n.c1{background:linear-gradient(160deg,#ece7ff,#f8f7f4)}.c2{background:linear-gradient(160deg,#e2f4ee,#f8f7f4)}.c3{background:linear-gradient(160deg,#fbeadb,#f8f7f4)}\n.ways{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n.way{border-radius:14px;padding:14px;background:#f8f7f4;border:1px solid #ebe9e3;font-size:13px;color:#5f5c55;display:flex;flex-direction:column;gap:6px}\n.way b{color:#16151a;font-size:15px}\ncode{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;background:#f4f3ef;border:1px solid #e7e5df;border-radius:8px;padding:8px;color:#1d6b47;display:block;overflow-x:auto;white-space:nowrap}\n.prods{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.prod{background:#f8f7f4;border:1px solid #ebe9e3;border-radius:12px;padding:10px}\n.prod b{font-size:14px;display:block}.prod span{font-size:12px;color:#85827a}\n.chips{display:flex;flex-wrap:wrap;gap:6px}\n.pend li{font-size:13px;color:#7a5208;line-height:1.4}\nul.pend{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px}\n.alert{background:#fdf2f2;border-color:#f2cfcf}\n.alert p{margin:0;font-size:13px;line-height:1.5;color:#8a2f2f}\n.big{font-size:22px;font-weight:600;line-height:1.2;margin:0}\n.muted{color:#85827a;font-size:13px;margin:0;line-height:1.5}\nfooter{margin-top:22px;font-size:12px;color:#9a978f}\n.mock{display:flex;align-items:center;gap:14px;background:rgba(255,255,255,.8);border:1px solid #e4def9;border-radius:12px;padding:8px 12px;font-size:12px;color:#55524b;flex-wrap:wrap}\n.mock .logo{font-weight:700;color:#16151a;font-size:13px}\n.mock .items{display:flex;gap:10px;flex:1;flex-wrap:nowrap;white-space:nowrap;overflow:hidden;min-width:0}\n.mock .r{display:flex;gap:10px;align-items:center}\n.mock .su{background:#16151a;color:#fff;border-radius:999px;padding:3px 10px}\n.map{display:flex;flex-direction:column;gap:8px;margin-top:6px}\n.maplbl{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#85827a}\n.steps{display:flex;flex-wrap:wrap;gap:6px}\n.step{font-size:12px;padding:5px 10px;border-radius:999px;background:rgba(255,255,255,.85);border:1px solid #e4def9;color:#3e3a6e;display:inline-flex;gap:6px}\n.step i{font-style:normal;color:#8a80d6;font-variant-numeric:tabular-nums}\n.kicker{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#6b62b8;margin-top:auto;padding-top:14px}\n.tabs{display:flex;flex-wrap:wrap;gap:6px;align-items:center;border-top:1px solid #ece8fb;padding-top:12px}\n.tab{font-size:12px;padding:4px 10px;border-radius:8px;color:#6f6c65;display:inline-flex;gap:6px}\n.tab i{font-style:normal;color:#a19eda}\n.tab.on{background:#efeafe;color:#3e3a6e}\n.tag{margin-left:auto;font-size:13px;color:#6b62b8}\n@media (max-width:620px){.mock .items{display:none}.tag{margin-left:0}}\n@media (max-width:1000px){.grid{grid-template-columns:repeat(2,1fr)}.w3,.w4{grid-column:span 2}.prods{grid-template-columns:repeat(2,1fr)}}\n@media (max-width:620px){.grid{grid-template-columns:1fr}.w2,.w3,.w4{grid-column:span 1}.h2{grid-row:auto}.hero h2{font-size:34px}.cases,.ways,.stats{grid-template-columns:1fr}}\n`,\n  render(d2) {\n    return `<div class=\"wrap\">\n<header>\n  <div><div class=\"eyebrow\">www · workspace \"novo site 2026\"</div><h1>Status do novo site Data²</h1></div>\n  <div class=\"status\">${chip('Rascunho', 'warn')}${chip('EN + PT')}${chip('Atualizado 26 out 2026')}</div>\n</header>\n<div class=\"grid\">\n\n  <section class=\"card hero w2 h2\">\n    <div class=\"lbl\"><span>Hero</span><span>01</span></div>\n    <div class=\"mock\"><span class=\"logo\">Data²</span><span class=\"items\"><span>Challenges</span><span>Platform</span><span>Customers</span><span>Specialists</span><span>Pricing</span><span>Learn</span></span><span class=\"r\"><span>EN · PT</span><span>Log in</span><span class=\"su\">Sign up</span></span></div>\n    <div class=\"map\"><div class=\"maplbl\">Ordem da home · ${SECTIONS.length} seções</div><div class=\"steps\">${SECTIONS.map((s, i) => `<span class=\"step\"><i>${String(i + 1).padStart(2, '0')}</i>${s}</span>`).join('')}</div></div>\n    <div class=\"kicker\">Data² · Disrupting Software Development</div>\n    <h2>Build your own anything.</h2>\n    <p>Data² is the platform for the disruption of enterprise software.</p>\n    <div class=\"cta\"><span class=\"btn p\">Start building</span><span class=\"btn\">Talk to sales</span><span class=\"btn\">Why Data²</span></div>\n    <div class=\"tabs\">${['Data²', 'Cases', 'Build', 'Specialists'].map((t, i) => `<span class=\"tab${i === 0 ? ' on' : ''}\"><i>0${i + 1}</i>${t}</span>`).join('')}<span class=\"tag\">Simpler. Better. Faster. Yours.</span></div>\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Em números</span></div>\n    <div class=\"stats\">\n      <div class=\"stat\"><b>11</b><span>seções na home</span></div>\n      <div class=\"stat\"><b>16</b><span>módulos de código</span></div>\n      <div class=\"stat\"><b>31</b><span>arquivos no Drive</span></div>\n      <div class=\"stat\"><b>3</b><span>cases com vídeo</span></div>\n      <div class=\"stat\"><b>8</b><span>produtos da plataforma</span></div>\n      <div class=\"stat\"><b>10</b><span>indústrias no footer</span></div>\n    </div>\n  </section>\n\n  <section class=\"card\">\n    <div class=\"lbl\"><span>Versões</span></div>\n    <div class=\"list\">\n      <div class=\"row\"><div>Home monolítica<small>HTML único, ~300 KB</small></div></div>\n      <div class=\"row\"><div>Home modular<small>shell + 16 componentes</small></div></div>\n      <div class=\"row\"><div>Previews de produto<small>app separado</small></div></div>\n    </div>\n  </section>\n\n  <section class=\"card alert\">\n    <div class=\"lbl\"><span>Atenção técnica</span></div>\n    <p class=\"big\" style=\"color:#b23a3a\">Só roda no .next</p>\n    <p>Code components renderizam no player QA (<b>.next.data2.app</b>) e aparecem como tela preta no player de produção. Definir o caminho de publicação antes de apontar o www.</p>\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Manifesto</span><span>02</span></div>\n    <p class=\"big\">We scaled almost everything with software. Except building software itself.</p>\n    <ol class=\"man\">\n      <li><i>01</i><div><strong>Este ano, todo mundo viu.</strong>Agentes reconstruindo suítes e jogos inteiros a partir do código.</div></li>\n      <li><i>02</i><div><strong>Construir ficou barato. Rodar continua difícil.</strong>Dados governados, identidade, políticas, integrações.</div></li>\n      <li><i>03</i><div><strong>Fazemos isso pra enterprise desde 2020.</strong>Onde o software dos times e dos agentes roda de verdade.</div></li>\n    </ol>\n  </section>\n\n  <section class=\"card w2 h2\">\n    <div class=\"lbl\"><span>Start from the challenge</span><span>03</span></div>\n    <p class=\"muted\">Configurador em frase: \"We're in [indústria], our [área] team needs to [resolver]\". Exemplos:</p>\n    <div class=\"list\">\n      ${CHALLENGES.map(([t, s, c]) => `<div class=\"row\"><div>${t}<small>${s}</small></div>${c ? chip('Case · ' + c, 'ok') : ''}</div>`).join('')}\n    </div>\n    <p class=\"muted\">Cada card mostra os sistemas que cruza e o KPI que mexe. Depois vem a demo de logística: torre de rastreio + agente de WhatsApp feitos pela operação num sprint.</p>\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Clientes</span><span>04</span></div>\n    <div class=\"cases\">\n      <div class=\"case c1\"><b>Aramis</b><span>Provador virtual em casa</span></div>\n      <div class=\"case c2\"><b>Bluma</b><span>Bem-estar em escala</span></div>\n      <div class=\"case c3\"><b>TEMPO by Porsche</b><span>Todos os sistemas num hub</span></div>\n    </div>\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Duas formas de construir</span><span>05</span></div>\n    <div class=\"ways\">\n      <div class=\"way\"><b>Builder</b>Pra quem tem o problema. Tabelas, telas, agentes e políticas num lugar só.</div>\n      <div class=\"way\"><b>MCP</b>Pra devs e times de dados, via Claude Code, Cursor ou qualquer cliente MCP.</div>\n    </div>\n    <code>$ claude mcp add data2 --transport http &lt;ENDPOINT&gt;</code>\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Plataforma · oito produtos, uma base</span><span>06</span></div>\n    <div class=\"prods\">${PRODUCTS.map(([n, d]) => `<div class=\"prod\"><b>${n}</b><span>${d}</span></div>`).join('')}</div>\n    <div class=\"chips\">${['VTEX', 'HubSpot', 'Twilio', 'WhatsApp', 'Google Sheets', 'GitHub', 'Discord', 'WordPress'].map(x => chip(x)).join('')}</div>\n  </section>\n\n  <section class=\"card\">\n    <div class=\"lbl\"><span>Specialists</span><span>07</span></div>\n    <p class=\"big\">Your team in the software loop.</p>\n    <p class=\"muted\">Forward deployed engineering em sprints, dentro do ambiente governado do cliente.</p>\n  </section>\n\n  <section class=\"card\">\n    <div class=\"lbl\"><span>Pricing</span><span>08</span></div>\n    <p class=\"big\">Start small. Pay for what runs.</p>\n    <div class=\"chips\">${['Sem setup', 'Pay as you go', 'Sem infra', 'Free trial'].map(x => chip(x)).join('')}</div>\n    ${chip('Planos e valores pendentes', 'warn')}\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Logos de clientes</span><span>09</span></div>\n    <div class=\"chips\">${LOGOS.map(x => chip(x)).join('')}</div>\n    ${chip('Arquivos dos logos a confirmar', 'warn')}\n  </section>\n\n  <section class=\"card w2\">\n    <div class=\"lbl\"><span>Pendências antes de publicar</span><span>${PENDING.length}</span></div>\n    <ul class=\"pend\">${PENDING.map(p => `<li>${p}</li>`).join('')}</ul>\n  </section>\n\n</div>\n<footer>Painel gerado via MCP a partir do conteúdo renderizado do app novo-site-2026. Leitura feita em 26/10/2026.</footer>\n</div>`\n  }\n}"}}}}}}}},{"_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":{"component":"data2-core-flow@If","displayName":"management exception never picks the system","params":{"compare":{"component":"data2-core-logical-operators@Or","params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-logical-operators@Not","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}}}]}},"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"d2_app":"management"}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"identityProviders":[{"provider":{"component":"data2-core-primitives@String","params":{"content":"GOOGLE"}},"clientId":{"component":"data2-core-primitives@String","params":{"content":"55470861603-22pvfc1t49lp8cjnbfk71s5ct9hp1q1v.apps.googleusercontent.com"}}}]},"reference":"Data2BuilderAuthentication","updatedAt":"2026-10-19T16:23:02.013Z","updateMetadata":{"updatedBy":{"user":"5f1609be1ca96def427e1559"}}},{"_id":"5f060ee51ca96def42f3fbd1","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"UsersTableDataSource"}},"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}}},"reference":"UsersDataSet","updatedAt":"2026-03-04T21:16:40.291Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f1600b70528b92601890f75","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ServiceComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ServiceComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:20.208Z","createdAt":"2020-07-20T20:38:15.436Z"},{"_id":"5f1602190528b92601890f7d","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":40000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentInstancesTableDataSource"}},"sort":{"_id":1},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:07.089Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"5f16017f0528b92601890f7a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"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":[{"_id":"6a734b1d61dfc4fe11022b66","component":"data2-core-ai@Assistant","reference":"homeAskExec","system":"618d6a444e43970b360badd6","params":{"model":"cerebras","_context":"Você é a Data² respondendo no site institucional para um TOMADOR DE DECISÃO (C-level, VP, diretor de área) de uma grande organização, sob pressão de resultado. Responda SEMPRE em português do Brasil, em no máximo 4 frases curtas, tom executivo, confiante e sóbrio. LIDERE pelo RESULTADO DE NEGÓCIO: o que dá para resolver, a alavanca (número quando houver) e em quanto tempo entra em produção. A tecnologia é razão-para-acreditar, nunca a manchete — só cite runtime/plataforma en passant se ajudar a explicar velocidade, segurança ou propriedade do ativo. NUNCA use jargão de engenharia na superfície (nada de \"é só uma linha\", \"deploy\", \"rush handler\", IDs). Modelo mental da Data²: engenheiros embarcam no time do cliente por sprints de 2 a 4 semanas e entregam o sistema rodando em produção — e a plataforma continua do cliente (own-your-data). Capacidades e alavancas REAIS que você pode citar: Contact Center/CX (+100k contatos/dia, −85% de tickets, −50% no tempo de resolução, URA conversacional + handoff humano com dossiê); Varejo (+20% de conversão, cadastro de SKU de dias para minutos, busca por intenção, try-on sob demanda); Financeiro (conciliação de horas para minutos, R$15M conciliados por mês, transações idempotentes e auditáveis); Seguros (triagem FNOL de horas para minutos, +26pp de satisfação, lê CNH/laudo/foto); Vendas (pergunta vira lista de ação em segundos, escala para milhares de vendedores); BI/Dados (dashboard sob demanda em segundos, resposta em texto/gráfico/tabela). Sempre feche convidando a \"falar com engenharia\" para desenhar o caso específico. Se perguntarem algo fora de escopo, traga de volta para o resultado de negócio que a Data² move.","premisses":"Máximo 4 frases. Sem markdown, sem listas, sem bullet, sem emojis. Texto corrido, direto. Sempre em pt-BR.","creativity":35,"maxTokens":320}},{"_id":"6a79f7b497585404f85830a6","component":"data2-rush@HTTPListener","reference":"idenergy-deck-save-lead","system":"618d6a444e43970b360badd6","params":{}}]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a73451e17369143d78126ac","component":"data2-core-primitives@Router","system":"618d6a444e43970b360badd6","displayName":"Site Router (Fase 0)","params":{"routerType":{"component":"data2-core-primitives@String","params":{"content":"browser"}},"routes":[{"component":"data2-core-primitives@Route","params":{"path":"","name":"Data² — Nós entramos como time. Você fica com a plataforma.","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma","name":"Plataforma · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/como-funciona","name":"Como funciona · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/data-framework","name":"Data Framework · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/agent-native","name":"Agent-native · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/data2-lang","name":"data2-lang · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/runtimes/rush","name":"Componente Rush · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/runtimes/connect","name":"Componente Connect · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/plataforma/runtimes/domain","name":"Componente Domain · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/produtos","name":"Produtos · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/industrias","name":"Indústrias · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/industrias/:slug","name":"Indústria · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/casos","name":"Casos · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/casos/:slug","name":"Caso · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/consultoria","name":"Consultoria · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/precos","name":"Preços · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/empresa","name":"Empresa · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/empresa/carreiras","name":"Carreiras · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/empresa/contato","name":"Contato · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/recursos","name":"Recursos · Data²","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}}}],"notFound":{"component":"data2-core-types@ArtboardReference","params":{"reference":"Vwvn76DjtPZpeBW7IJHhp"}}},"reference":"site_router"},{"_id":"6adf87e9e6f57ff91621c725","component":"data2-core-primitives@Artboard","system":"618d6a444e43970b360badd6","displayName":"Bento — status novo site 2026","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Bento — status novo site 2026"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"ciqqUQel6WHp4oiUdD16K"},{"_id":"6a7b130d68641501c2dc67c5","component":"data2-core-primitives@Artboard","system":"618d6a444e43970b360badd6","displayName":"Site Shell — Modular (preview)","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Site Shell — Modular (preview)"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"Vwvn76DjtPZpeBW7IJHhp"},{"_id":"bf6f918f949a8b022cc9eb84","parent":"6adf87e9e6f57ff91621c725","component":"data2-core-primitives@Block","system":"618d6a444e43970b360badd6","displayName":"base (garante o Block no bundle)","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1,"height":1}}},"index":0,"reference":"APc_OGdXfDTbBEnKYPZGJ"},{"_id":"33984ca29c2796e65a98f978","parent":"6adf87e9e6f57ff91621c725","component":"www@ns26-bento-status","system":"618d6a444e43970b360badd6","displayName":"Bento status","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"85s-jC19gP0LcsJA6YVmq"},{"_id":"b5fbb91b9a40d130aa3e14d6","parent":"6a7b130d68641501c2dc67c5","component":"www@site-shell-v3","system":"618d6a444e43970b360badd6","displayName":"site-shell-v3 (full-bleed)","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"ZkyOu_jqpAFgbuEW94Onv"}]}},{"_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":"6adf8807e6f57ff91621c78b","displayName":"Bento — status novo site 2026","reference":"CA5aO643Wr7VOFsVxvlaD","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"ns26-bento"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"ciqqUQel6WHp4oiUdD16K"}}},"system":"618d6a444e43970b360badd6","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a7343246c45fa6e94b7b4ed","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-nav-items"}}},"reference":"cms-nav-itemsDataSet"},{"_id":"6a7342da4c1485462235570a","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-products"}}},"reference":"cms-productsDataSet"},{"_id":"6a734374b0472fdf04c082f4","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-industries"}}},"reference":"cms-industriesDataSet"},{"_id":"6a7342e00894fbd99c706020","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-runtimes"}}},"reference":"cms-runtimesDataSet"},{"_id":"6a734319e3cbf7803583824e","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-cases"}}},"reference":"cms-casesDataSet"},{"_id":"6a73430ca9d7cf0ea9961e9d","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-home-sections"}}},"reference":"cms-home-sectionsDataSet"},{"_id":"6a7342e5d96c6ac4372286ea","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-levers"}}},"reference":"cms-leversDataSet"},{"_id":"6a73432ba9d7cf0ea9961ed4","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-logos"}}},"reference":"cms-logosDataSet"},{"_id":"6a7348b517369143d78134fe","component":"data2-core@Store","system":"618d6a444e43970b360badd6","params":{"initialData":{"used":0,"max":4}},"reference":"homeAskStore"},{"_id":"6a7342ea4c14854622355750","component":"data2-core@DataSet","system":"618d6a444e43970b360badd6","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"cms-settings"}}},"reference":"cms-settingsDataSet"},{"_id":"6a7b7ab256bee0ef230ce270","component":"data2-core@Store","system":"618d6a444e43970b360badd6","params":{"initialData":{"lang":"pt"}},"reference":"siteLocale"},{"_id":"6a734324d89cbcf805017444","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-nav-items","schema":[{"component":"data2-core-types@Field","params":{"key":"label","title":"Label","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"href","title":"Href","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"grupo","title":"Grupo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"parent","title":"Parent","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"kind","title":"Tipo (top/mega/footer)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"label_en","title":"Label (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"label_es","title":"Label (ES)","component":"data2-core-primitives@String"}}]},"reference":"cms-nav-items"},{"_id":"6a7342da6c45fa6e94b7b430","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-products","schema":[{"component":"data2-core-types@Field","params":{"key":"key","title":"Key","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"name","title":"Nome","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"tagline","title":"Tagline","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"description","title":"Descrição","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"accent","title":"Cor de acento","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"name_en","title":"Nome (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"name_es","title":"Nome (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"tagline_en","title":"Tagline (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"tagline_es","title":"Tagline (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"description_en","title":"Descrição (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"description_es","title":"Descrição (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"provas","title":"Provas de escala","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"provas_en","title":"Provas de escala (EN)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"provas_es","title":"Provas de escala (ES)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"capacidades","title":"Capacidades","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"capacidades_en","title":"Capacidades (EN)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"capacidades_es","title":"Capacidades (ES)","component":"data2-core-primitives@Array"}}]},"reference":"cms-products"},{"_id":"6a7343748e9bf46a533c181c","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-industries","schema":[{"component":"data2-core-types@Field","params":{"key":"slug","title":"Slug","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"name_pt","title":"Nome (PT)","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"name_en","title":"Nome (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"hue","title":"Hue (stop verme)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"dor","title":"Dor","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"oferta","title":"Oferta / o que construimos","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"capacidades","title":"Capacidades","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"produtos_runtimes","title":"Produtos / runtimes","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"alavancas","title":"Alavancas","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"caso_lastro","title":"Caso lastro (ref interna)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"ativo","title":"Ativo","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"construimos","title":"O que construímos","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"name_es","title":"Nome (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"dor_en","title":"Dor (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"dor_es","title":"Dor (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"oferta_en","title":"Oferta (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"oferta_es","title":"Oferta (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"capacidades_en","title":"Capacidades (EN)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"capacidades_es","title":"Capacidades (ES)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"alavancas_en","title":"Alavancas (EN)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"alavancas_es","title":"Alavancas (ES)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"construimos_en","title":"O que construímos (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"construimos_es","title":"O que construímos (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"manchete","title":"Manchete (PT)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"manchete_en","title":"Manchete (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"manchete_es","title":"Manchete (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"solucoes","title":"Soluções (PT)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"solucoes_en","title":"Soluções (EN)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"solucoes_es","title":"Soluções (ES)","component":"data2-core-primitives@Array"}}]},"reference":"cms-industries"},{"_id":"6a7342e04c1485462235571d","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-runtimes","schema":[{"component":"data2-core-types@Field","params":{"key":"key","title":"Key","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"name","title":"Nome","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"papel","title":"Papel","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"description","title":"Descrição","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"accent","title":"Cor de acento","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"papel_en","title":"Papel (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"papel_es","title":"Papel (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"description_en","title":"Descrição (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"description_es","title":"Descrição (ES)","component":"data2-core-primitives@String"}}]},"reference":"cms-runtimes"},{"_id":"6a7343198e9bf46a533c164c","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-cases","schema":[{"component":"data2-core-types@Field","params":{"key":"slug","title":"Slug","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"cliente_setor","title":"Cliente / setor (rótulo)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"desafio","title":"Desafio","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"alavanca","title":"Alavanca","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"industria","title":"Indústria (slug)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"publico","title":"Público","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"feito","title":"O que foi feito","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"contexto","title":"Contexto","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"resultado","title":"Resultado","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"duracao","title":"Duração","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"stack","title":"Stack (componentes)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"cliente_setor_en","title":"Cliente/setor (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cliente_setor_es","title":"Cliente/setor (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"desafio_en","title":"Desafio (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"desafio_es","title":"Desafio (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"alavanca_en","title":"Alavanca (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"alavanca_es","title":"Alavanca (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"feito_en","title":"O que foi feito (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"feito_es","title":"O que foi feito (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"contexto_en","title":"Contexto (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"contexto_es","title":"Contexto (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"resultado_en","title":"Resultado (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"resultado_es","title":"Resultado (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"duracao_en","title":"Duração (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"duracao_es","title":"Duração (ES)","component":"data2-core-primitives@String"}}]},"reference":"cms-cases"},{"_id":"6a73430c4c1485462235579e","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-home-sections","schema":[{"component":"data2-core-types@Field","params":{"key":"sid","title":"ID","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"eyebrow","title":"Eyebrow","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"headline","title":"Headline","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"subhead","title":"Subhead","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cta_label","title":"CTA label","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cta_href","title":"CTA href","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"tipo","title":"Tipo / motivo visual","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"ativo","title":"Ativo","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"eyebrow_en","title":"Eyebrow (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"eyebrow_es","title":"Eyebrow (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"headline_en","title":"Headline (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"headline_es","title":"Headline (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"subhead_en","title":"Subhead (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"subhead_es","title":"Subhead (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cta_label_en","title":"CTA label (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cta_label_es","title":"CTA label (ES)","component":"data2-core-primitives@String"}}]},"reference":"cms-home-sections"},{"_id":"6a7342e5d89cbcf8050173bd","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-levers","schema":[{"component":"data2-core-types@Field","params":{"key":"valor","title":"Valor","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"unidade","title":"Unidade","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"label","title":"Label","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"placeholder","title":"É placeholder","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"label_en","title":"Label (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"label_es","title":"Label (ES)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"unidade_en","title":"Unidade (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"unidade_es","title":"Unidade (ES)","component":"data2-core-primitives@String"}}]},"reference":"cms-levers"},{"_id":"6a73432bf0d3eb70f15cb942","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-logos","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Nome interno","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"label","title":"Rótulo (setor)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"industria","title":"Indústria (slug)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"logo","title":"Arquivo do logo","component":"data2-core-types@File"}},{"component":"data2-core-types@Field","params":{"key":"publico","title":"Público","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"fileUrl","title":"URL do arquivo","component":"data2-core-primitives@String"}}]},"reference":"cms-logos"},{"_id":"6a7342eae3cbf780358381b8","component":"data2-core@Data2TableDataSource","system":"618d6a444e43970b360badd6","params":{"table":"cms-settings","schema":[{"component":"data2-core-types@Field","params":{"key":"key","title":"Key","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"value","title":"Valor","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"label","title":"Descrição","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"grupo","title":"Grupo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"value_en","title":"Valor (EN)","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"value_es","title":"Valor (ES)","component":"data2-core-primitives@String"}}]},"reference":"cms-settings"}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}