agentworkshop 0.7.39 → 0.7.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.AgentWorkShop/prompts/host-tools.json +55 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +55 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/88GOowgO2.js +1 -0
- package/.output/public/_nuxt/{BNT8gYU92.js → BC9wjTJK2.js} +2 -2
- package/.output/public/_nuxt/{CY9LbPCI.js → BN16aRdQ.js} +1 -1
- package/.output/public/_nuxt/BWVhZntO.js +1 -0
- package/.output/public/_nuxt/{HBLJ-wei.js → BXxH0UQE.js} +1 -1
- package/.output/public/_nuxt/{zIGh7R49.js → BneN7fbu.js} +1 -1
- package/.output/public/_nuxt/BsROmY89.js +1 -0
- package/.output/public/_nuxt/{DUrecWPx.js → C0ZrS1KL.js} +2 -2
- package/.output/public/_nuxt/{C_OLzD09.js → C4oW1HsE.js} +1 -1
- package/.output/public/_nuxt/{CUDwzgLV.js → C4s_niy-.js} +9 -9
- package/.output/public/_nuxt/CFxtLwjp.js +1 -0
- package/.output/public/_nuxt/{Cec0Ua3F.js → CS50LB_l.js} +1 -1
- package/.output/public/_nuxt/CssgYAAL2.js +1 -0
- package/.output/public/_nuxt/D6mbFA-a.js +1 -0
- package/.output/public/_nuxt/D98NH8kG.js +1 -0
- package/.output/public/_nuxt/DGIuvyRN2.js +1 -0
- package/.output/public/_nuxt/DGbd-UiG.js +1 -0
- package/.output/public/_nuxt/{CojCTLKD.js → DGj-WEBg.js} +1 -1
- package/.output/public/_nuxt/{DDShH71m.js → DS8qj8EL.js} +1 -1
- package/.output/public/_nuxt/DTFCy6h-.js +1 -0
- package/.output/public/_nuxt/{DrYV5i68.js → DUjW5Yq5.js} +1 -1
- package/.output/public/_nuxt/{45zuyAso.js → D_OTvQza.js} +1 -1
- package/.output/public/_nuxt/Dap5PmTL.js +2 -0
- package/.output/public/_nuxt/Dqw1lpr-.js +1 -0
- package/.output/public/_nuxt/DvLxILQP.js +1 -0
- package/.output/public/_nuxt/IREZ1eC2.js +1 -0
- package/.output/public/_nuxt/TownView.f-YOdXRs.css +1 -0
- package/.output/public/_nuxt/_id_.D9ymtHB5.css +1 -0
- package/.output/public/_nuxt/_id_.jf-_8E_c.css +1 -0
- package/.output/public/_nuxt/_wsId_.B4WiqkIS.css +1 -0
- package/.output/public/_nuxt/agents.ZD0rVdHE.css +1 -0
- package/.output/public/_nuxt/aml.BN8ZEW4h.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/78a295bb-2072-48a4-8b46-6d545fdae743.json +1 -0
- package/.output/public/_nuxt/ca4TJ3Op.js +1 -0
- package/.output/public/_nuxt/channel-templates.BOtahzPi.css +1 -0
- package/.output/public/_nuxt/daq.DjSgY94l.css +1 -0
- package/.output/public/_nuxt/dcw.8Y7FqCVN.css +1 -0
- package/.output/public/_nuxt/default.J32SgqFY.css +1 -0
- package/.output/public/_nuxt/entry.bdm0tv6M.css +1 -0
- package/.output/public/_nuxt/eqq3wWQF.js +18 -0
- package/.output/public/_nuxt/logs.BpKzmKsh.css +1 -0
- package/.output/public/_nuxt/monitor.D9pe7qN6.css +1 -0
- package/.output/public/_nuxt/pages.D7aSDlUI.css +1 -0
- package/.output/public/_nuxt/permissions.DwTVlFe6.css +1 -0
- package/.output/public/_nuxt/plugins.sb4nDGqr.css +1 -0
- package/.output/public/_nuxt/{Cbq-mryP.js → qr6R6Ha1.js} +1 -1
- package/.output/public/_nuxt/settings.BTgR-NiE.css +1 -0
- package/.output/public/_nuxt/teams.CxnxKVVs.css +1 -0
- package/.output/public/_nuxt/tokens.BFY7qv4f.css +1 -0
- package/.output/public/_nuxt/{town.DKIAhKnx.css → town.BBXZmeoP.css} +1 -1
- package/.output/public/_nuxt/users.DLgZ1D0h.css +1 -0
- package/.output/public/_nuxt/workshop.CR_QzeAN.css +1 -0
- package/.output/public/_nuxt/{BzHEilTt.js → xh3_vYcu.js} +1 -1
- package/.output/public/_nuxt/yF0aYMF1.js +4 -0
- package/.output/server/chunks/_/entity.mjs.map +1 -1
- package/.output/server/chunks/_/nitro.mjs +2355 -1362
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/{TownView-jVazYOjN.mjs → TownView--otsnr_7.mjs} +290 -208
- package/.output/server/chunks/build/TownView--otsnr_7.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CfVosNg3.mjs → _id_-Brv-JSvr.mjs} +142 -141
- package/.output/server/chunks/build/_id_-Brv-JSvr.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-Hwr4rZpr.mjs → _id_-D9pl1OZy.mjs} +38 -36
- package/.output/server/chunks/build/_id_-D9pl1OZy.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs → _wsId_-BASfDf0s.mjs} +295 -261
- package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs.map → _wsId_-BASfDf0s.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-Bvin73QY.mjs → agents-CLQqJF2y.mjs} +21 -27
- package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +1 -0
- package/.output/server/chunks/build/{aml-BCSJCdX7.mjs → aml-_7FdFL2p.mjs} +109 -109
- package/.output/server/chunks/build/{aml-BCSJCdX7.mjs.map → aml-_7FdFL2p.mjs.map} +1 -1
- package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -1
- package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs → channel-templates-p6SZNjlM.mjs} +19 -19
- package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs.map → channel-templates-p6SZNjlM.mjs.map} +1 -1
- package/.output/server/chunks/build/{daq-C03Uu5UE.mjs → daq-DkMvD8sg.mjs} +193 -126
- package/.output/server/chunks/build/daq-DkMvD8sg.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-6vEYVeje.mjs → dcw-C1jgVJkO.mjs} +46 -46
- package/.output/server/chunks/build/{dcw-6vEYVeje.mjs.map → dcw-C1jgVJkO.mjs.map} +1 -1
- package/.output/server/chunks/build/{default-CZmZFpqH.mjs → default-BE4r0FZN.mjs} +152 -58
- package/.output/server/chunks/build/{default-CZmZFpqH.mjs.map → default-BE4r0FZN.mjs.map} +1 -1
- package/.output/server/chunks/build/{logs-B-xhuqln.mjs → logs--dByNyhw.mjs} +35 -35
- package/.output/server/chunks/build/{logs-B-xhuqln.mjs.map → logs--dByNyhw.mjs.map} +1 -1
- package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs → monitor-C0okQaXz.mjs} +33 -33
- package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs.map → monitor-C0okQaXz.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-BO7yZsXA.mjs → pages-B0bUWnC6.mjs} +35 -19
- package/.output/server/chunks/build/pages-B0bUWnC6.mjs.map +1 -0
- package/.output/server/chunks/build/{permissions-B52oOmaO.mjs → permissions-68SsNjex.mjs} +12 -12
- package/.output/server/chunks/build/{permissions-B52oOmaO.mjs.map → permissions-68SsNjex.mjs.map} +1 -1
- package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs → plugins-lGlUr1lj.mjs} +17 -17
- package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs.map → plugins-lGlUr1lj.mjs.map} +1 -1
- package/.output/server/chunks/build/{settings-DoQ2Oq3P.mjs → settings-Ddd1qx2Z.mjs} +50 -47
- package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +1 -0
- package/.output/server/chunks/build/{teams-2kz3CusY.mjs → teams-MEDLZdMn.mjs} +38 -34
- package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs → tokens-C7fTM5C2.mjs} +14 -14
- package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs.map → tokens-C7fTM5C2.mjs.map} +1 -1
- package/.output/server/chunks/build/{town-BOl6hs9B.mjs → town-CoQdblbZ.mjs} +38 -12
- package/.output/server/chunks/build/town-CoQdblbZ.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqStream-CIBaiGAl.mjs → useDaqStream-DfCFpb3p.mjs} +9 -3
- package/.output/server/chunks/build/useDaqStream-DfCFpb3p.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwStream-CBbiYnWe.mjs → useDcwStream-UPiX-3iO.mjs} +11 -2
- package/.output/server/chunks/build/useDcwStream-UPiX-3iO.mjs.map +1 -0
- package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +49 -0
- package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -0
- package/.output/server/chunks/build/{users-fohSmF-J.mjs → users-Cfd5-l2-.mjs} +6 -6
- package/.output/server/chunks/build/{users-fohSmF-J.mjs.map → users-Cfd5-l2-.mjs.map} +1 -1
- package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs → workshop-BL5bhfs0.mjs} +15 -15
- package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs.map → workshop-BL5bhfs0.mjs.map} +1 -1
- package/.output/server/chunks/build/{workspaces-BuydxM-3.mjs → workspaces-Bgz5Ekwp.mjs} +18 -3
- package/.output/server/chunks/build/workspaces-Bgz5Ekwp.mjs.map +1 -0
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +6 -2
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +8 -6
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +14 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -3
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +31 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +28 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +32 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +34 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +33 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +34 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +3 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +5 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +3 -3
- package/.output/server/chunks/virtual/entry.mjs +51 -25
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +203 -39
- package/README.md +739 -591
- package/app/app.vue +9 -3
- package/app/assets/css/main.css +517 -7
- package/app/components/AppHeader.vue +98 -7
- package/app/components/AppSidebar.vue +117 -11
- package/app/components/AwChart.vue +2 -1
- package/app/components/workshop/AgentInspectorDrawer.vue +6 -6
- package/app/components/workshop/AgentLanesView.vue +52 -1
- package/app/components/workshop/AssetLibrary.vue +4 -2
- package/app/components/workshop/ChannelSessionList.vue +4 -2
- package/app/components/workshop/Composer.vue +96 -0
- package/app/components/workshop/DaqNodeRow.vue +19 -0
- package/app/components/workshop/DaqTemplateIcon.vue +33 -0
- package/app/components/workshop/DeviceTwinPanel.vue +37 -35
- package/app/components/workshop/EventBlock.vue +3 -3
- package/app/components/workshop/InspectorPanel.vue +47 -11
- package/app/components/workshop/LiveAgentBar.vue +34 -0
- package/app/components/workshop/TaskBoardView.vue +83 -33
- package/app/components/workshop/TranscriptTimeline.vue +56 -0
- package/app/components/workshop/blocks/ClusterError.vue +1 -1
- package/app/components/workshop/blocks/ClusterRoute.vue +3 -1
- package/app/components/workshop/blocks/ClusterStatus.vue +2 -2
- package/app/components/workshop/blocks/ClusterStream.vue +8 -2
- package/app/components/workshop/town/ModelPreview3D.vue +1 -1
- package/app/components/workshop/town/TownView.vue +507 -82
- package/app/composables/useResponsive.ts +88 -0
- package/app/composables/useRouteMeta.ts +3 -0
- package/app/composables/workshop/useDaqStream.ts +7 -4
- package/app/composables/workshop/useDcwStream.ts +8 -2
- package/app/composables/workshop/useVisibleInterval.ts +2 -2
- package/app/composables/workshop/useWorkshopApi.ts +1 -1
- package/app/layouts/default.vue +46 -2
- package/app/pages/aml/index.vue +712 -616
- package/app/pages/daq/[id].vue +12 -7
- package/app/pages/daq/index.vue +216 -13
- package/app/pages/dcw/[id].vue +117 -32
- package/app/pages/dcw/index.vue +83 -23
- package/app/pages/index.vue +35 -1
- package/app/pages/logs/index.vue +147 -13
- package/app/pages/monitor.vue +56 -12
- package/app/pages/permissions/index.vue +34 -0
- package/app/pages/plugins/index.vue +35 -4
- package/app/pages/settings.vue +90 -21
- package/app/pages/tokens.vue +23 -0
- package/app/pages/town.vue +50 -5
- package/app/pages/users.vue +23 -0
- package/app/pages/workshop/agents.vue +92 -2
- package/app/pages/workshop/channel-templates.vue +53 -0
- package/app/pages/workshop/index.vue +14 -0
- package/app/pages/workshop/teams.vue +66 -6
- package/app/pages/workshop/w/[wsId].vue +202 -14
- package/app/plugins/aw-plugins.client.ts +13 -8
- package/app/stores/app.ts +33 -1
- package/app/stores/workshop/user.ts +1 -1
- package/app/stores/workshop/workspaces.ts +18 -2
- package/app/utils/api-error.ts +1 -1
- package/cli/commands/build.mjs +8 -1
- package/docker-compose.yml +6 -0
- package/docs/cli.en.md +2 -2
- package/docs/cli.md +2 -2
- package/docs/plugins.en.md +33 -1
- package/docs/plugins.md +29 -1
- package/docs/sdk.en.md +1 -1
- package/docs/sdk.md +1 -1
- package/i18n/locales/en.ts +2 -0
- package/i18n/locales/zh-CN.ts +2 -0
- package/nuxt.config.ts +31 -0
- package/package.json +11 -2
- package/scripts/_dbg-param-map-e2e.ts +242 -0
- package/scripts/_dbg-param-map-rest-smoke.mjs +73 -0
- package/scripts/_dbg-param-real-scenario.mjs +153 -0
- package/scripts/_loop-biax-campaign.mjs +124 -0
- package/scripts/api-live-e2e.mjs +40 -8
- package/scripts/capture-walkthrough.mjs +232 -0
- package/scripts/render-walkthrough-figure.mjs +46 -0
- package/scripts/seed-walkthrough-fixture.mjs +143 -0
- package/scripts/test-plugin-hardening.mjs +8 -0
- package/scripts/test-serial-bridge.mjs +418 -0
- package/scripts/ui/admin-shots.mjs +46 -0
- package/scripts/ui/audit-layout.mjs +301 -0
- package/scripts/ui/bump-microfont.mjs +39 -0
- package/scripts/ui/e2e-interactive.mjs +328 -0
- package/scripts/ui/lib.mjs +198 -0
- package/scripts/ui/linkcheck2.mjs +37 -0
- package/scripts/ui/live-render-check.mjs +72 -0
- package/scripts/ui/md-lint.mjs +80 -0
- package/scripts/ui/perf-audit.mjs +132 -0
- package/scripts/ui/readme-assets.mjs +30 -0
- package/scripts/ui/readme-shots.mjs +42 -0
- package/scripts/ui/record.mjs +225 -0
- package/scripts/ui/seed-admin.mjs +68 -0
- package/scripts/ui/seed-demo.mjs +83 -0
- package/scripts/ui/seed-industrial-demo.mjs +171 -0
- package/scripts/ui/shot-hero.mjs +25 -0
- package/scripts/ui/shots.mjs +75 -0
- package/scripts/ui/sim-ui-shot.mjs +16 -0
- package/scripts/ui/verify-nav.mjs +51 -0
- package/scripts/ui/verify-responsive.mjs +285 -0
- package/server/api/system/config-groups/[id].patch.ts +1 -1
- package/server/api/system/config-groups/index.post.ts +1 -1
- package/server/api/system/settings/events.get.ts +1 -1
- package/server/api/system/settings/index.patch.ts +1 -1
- package/server/api/workshop/agent-tools/invoke.post.ts +16 -2
- package/server/api/workshop/aml/datasets/[id].get.ts +8 -1
- package/server/api/workshop/daq/index.get.ts +3 -1
- package/server/api/workshop/daq/infra/reconnect.post.ts +1 -1
- package/server/api/workshop/daq/templates/[key].delete.ts +1 -0
- package/server/api/workshop/daq/templates/[key].patch.ts +1 -0
- package/server/api/workshop/daq/templates/index.post.ts +1 -0
- package/server/api/workshop/dcw/[id]/write.post.ts +10 -2
- package/server/api/workshop/dcw/[id].delete.ts +5 -2
- package/server/api/workshop/dcw/index.get.ts +5 -0
- package/server/api/workshop/dcw/lines/[id].patch.ts +1 -1
- package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -0
- package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -0
- package/server/api/workshop/dcw/params/[id].delete.ts +19 -0
- package/server/api/workshop/dcw/params/[id].patch.ts +23 -0
- package/server/api/workshop/dcw/params/index.get.ts +27 -0
- package/server/api/workshop/dcw/params/index.post.ts +25 -0
- package/server/api/workshop/permissions/index.get.ts +3 -1
- package/server/plugins/aw-plugins.ts +23 -10
- package/server/plugins/dev-stability-guard.ts +3 -1
- package/server/plugins/system-config.ts +6 -1
- package/server/plugins-builtin/serial-bridge/client.mjs +210 -0
- package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -0
- package/server/plugins-builtin/serial-bridge/i18n.json +62 -0
- package/server/plugins-builtin/serial-bridge/index.mjs +247 -0
- package/server/plugins-builtin/serial-bridge/lib.mjs +208 -0
- package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -0
- package/server/services/system-config.ts +28 -9
- package/server/services/workshop/agents/adapters/one-shot-cli-agent.ts +2 -1
- package/server/services/workshop/agents/agent-interface.ts +8 -6
- package/server/services/workshop/agents/base-agent.ts +18 -4
- package/server/services/workshop/agents/claude-agent.ts +7 -3
- package/server/services/workshop/agents/codex-agent.ts +3 -3
- package/server/services/workshop/agents/dsh-agent.ts +3 -3
- package/server/services/workshop/agents/goose-agent.ts +0 -1
- package/server/services/workshop/agents/harness-terminal.ts +14 -1
- package/server/services/workshop/agents/hermes-agent.ts +4 -2
- package/server/services/workshop/agents/host-tool-bridge.ts +5 -1
- package/server/services/workshop/agents/industrial-context.ts +4 -1
- package/server/services/workshop/agents/industrial-tools.ts +164 -6
- package/server/services/workshop/agents/omp-agent.ts +15 -9
- package/server/services/workshop/agents/opencode-agent.ts +47 -21
- package/server/services/workshop/agents/qwen-agent.ts +10 -5
- package/server/services/workshop/aml/entity.ts +3 -1
- package/server/services/workshop/aml/python-runtime.ts +3 -2
- package/server/services/workshop/daq/bus/mqtt.adapter.ts +8 -4
- package/server/services/workshop/daq/daq-controller.ts +25 -5
- package/server/services/workshop/daq/daq-runtime.ts +5 -3
- package/server/services/workshop/daq/drivers.ts +141 -11
- package/server/services/workshop/daq/host-ports.ts +3 -2
- package/server/services/workshop/daq/storage/timescale.adapter.ts +3 -1
- package/server/services/workshop/db/channel.repo.ts +4 -0
- package/server/services/workshop/db/ops.repo.ts +5 -2
- package/server/services/workshop/db/retention.ts +8 -3
- package/server/services/workshop/dcw/dcw-controller.ts +147 -16
- package/server/services/workshop/dcw/dcw-product.repo.ts +38 -1
- package/server/services/workshop/dcw/dcw-runtime.ts +3 -2
- package/server/services/workshop/dcw/drivers.ts +90 -4
- package/server/services/workshop/dcw/param-conversion.ts +78 -0
- package/server/services/workshop/dcw/param-limits.ts +142 -0
- package/server/services/workshop/dcw/param-map.repo.ts +305 -0
- package/server/services/workshop/dcw/plugin-bridge.ts +45 -0
- package/server/services/workshop/dcw/recipe-rollback-manager.ts +13 -7
- package/server/services/workshop/plugins/host.mjs +30 -0
- package/server/services/workshop/runtime/agent-runtime.ts +4 -0
- package/server/services/workshop/runtime/manager.ts +9 -2
- package/server/services/workshop/settings.ts +4 -2
- package/server/types/pg.d.ts +49 -0
- package/server/utils/stability-severity.ts +13 -2
- package/shared/config/groups.mjs +22 -1
- package/shared/config/home.d.mts +28 -0
- package/shared/daq-protocol.ts +15 -0
- package/shared/dcw-protocol.ts +136 -0
- package/uno.config.ts +12 -1
- package/.output/public/_nuxt/8NMOXZOV.js +0 -1
- package/.output/public/_nuxt/BFkgkW8u.js +0 -4
- package/.output/public/_nuxt/C5gUkRwn.js +0 -1
- package/.output/public/_nuxt/CM12FuB42.js +0 -1
- package/.output/public/_nuxt/CZiw7sEV.js +0 -1
- package/.output/public/_nuxt/Cc_9VzD42.js +0 -1
- package/.output/public/_nuxt/CdPzkOMV.js +0 -1
- package/.output/public/_nuxt/CmsOtOAA2.js +0 -1
- package/.output/public/_nuxt/D1YDxZpZ.js +0 -1
- package/.output/public/_nuxt/D20Yamr4.js +0 -1
- package/.output/public/_nuxt/DAe0h2MB.js +0 -1
- package/.output/public/_nuxt/DmqknNvV.js +0 -18
- package/.output/public/_nuxt/DnUuIR83.js +0 -1
- package/.output/public/_nuxt/S_fVQwJK.js +0 -1
- package/.output/public/_nuxt/TownView.0oLiQgTC.css +0 -1
- package/.output/public/_nuxt/_id_.D-SYuyZb.css +0 -1
- package/.output/public/_nuxt/_id_.hma_BU6T.css +0 -1
- package/.output/public/_nuxt/_wsId_.B12v3PhY.css +0 -1
- package/.output/public/_nuxt/agents.BV70ioCv.css +0 -1
- package/.output/public/_nuxt/ahgEJu2R.js +0 -1
- package/.output/public/_nuxt/aml.COEKNNqK.css +0 -1
- package/.output/public/_nuxt/builds/meta/4457d63f-0866-4cea-b320-04a321f24795.json +0 -1
- package/.output/public/_nuxt/channel-templates.C-M5nKcC.css +0 -1
- package/.output/public/_nuxt/daq.B3265ZDn.css +0 -1
- package/.output/public/_nuxt/dcw.DLYZqEhT.css +0 -1
- package/.output/public/_nuxt/default.BXI_fZUi.css +0 -1
- package/.output/public/_nuxt/entry.BB-Eeh-J.css +0 -1
- package/.output/public/_nuxt/logs.CqFyMrJw.css +0 -1
- package/.output/public/_nuxt/monitor.B--1dPzs.css +0 -1
- package/.output/public/_nuxt/pages.ooEzrMm9.css +0 -1
- package/.output/public/_nuxt/permissions.B1pjGChZ.css +0 -1
- package/.output/public/_nuxt/plugins.5e5chZ67.css +0 -1
- package/.output/public/_nuxt/pz2JDAM7.js +0 -2
- package/.output/public/_nuxt/settings.Dm3M0RLy.css +0 -1
- package/.output/public/_nuxt/teams.BC75EGnR.css +0 -1
- package/.output/public/_nuxt/tokens.xRb1fSPU.css +0 -1
- package/.output/public/_nuxt/users.CXnP2E08.css +0 -1
- package/.output/public/_nuxt/workshop.Jk5HxWPE.css +0 -1
- package/.output/server/chunks/build/TownView-jVazYOjN.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CfVosNg3.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-Hwr4rZpr.mjs.map +0 -1
- package/.output/server/chunks/build/agents-Bvin73QY.mjs.map +0 -1
- package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +0 -1
- package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +0 -1
- package/.output/server/chunks/build/settings-DoQ2Oq3P.mjs.map +0 -1
- package/.output/server/chunks/build/teams-2kz3CusY.mjs.map +0 -1
- package/.output/server/chunks/build/town-BOl6hs9B.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs.map +0 -1
- package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +0 -1
- /package/.output/public/_nuxt/{36oeS8_R2.js → 36oeS8_R.js} +0 -0
- /package/.output/public/_nuxt/{CYWVXZTS.js → CYWVXZTS2.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./BU83-NnX.js";import{w as t}from"./DdD9mCHM.js";import{$ as n,Ht as r,R as i,S as a,Ut as o,V as s,Vt as c,W as l,b as u,ct as ee,d,dt as te,f,h as p,i as m,m as h,nt as g,p as _,pt as v,tt as y,xt as b,y as x}from"./CSkxz2NX.js";import{d as S,f as C,l as ne,u as w}from"./D6uzXueg.js";import{n as re,t as ie}from"./xh3_vYcu.js";import{n as ae}from"./KZQX7xoM.js";import{t as oe}from"./aWWIh8YL.js";import{t as se}from"./DBHNsT1Y.js";import{t as ce}from"./DzbFpZRk.js";import{t as le}from"./BYhEUx8t.js";import{t as ue}from"./CYWVXZTS2.js";import{n as de,r as fe,t as pe}from"./DHFrCUxA2.js";import{t as me}from"./DZtm4l-P2.js";import{t as he}from"./CClOy-Hz2.js";import{t as ge}from"./DIaZ2PTo2.js";import{t as _e}from"./DeyBFhKH2.js";import{t as T}from"./BDNMzG2s2.js";import{t as E}from"./D0ZBQrN_2.js";import{t as ve}from"./BN6iuJEg2.js";import{t as ye}from"./zq5t1vyX.js";var be={class:`settings-page`},xe={class:`aw-page-head`},Se={class:`aw-kicker`},Ce={class:`aw-stamp`},we={class:`settings-layout`},Te={class:`settings-nav`},Ee=[`onClick`],De={class:`settings-body`},Oe={class:`section-title`},ke={class:`section-desc`},Ae={class:`set-row`},je={class:`set-text`},Me={class:`set-title`},Ne={class:`set-sub`},Pe={class:`color-swatches`},Fe=[`title`,`onClick`],Ie={class:`swatch-label`},Le={key:0,class:`i-tabler-check swatch-check`},Re={class:`toggle-row`},ze={class:`set-text`},Be={class:`set-title`},Ve={class:`set-sub`},He=[`aria-checked`],Ue={class:`toggle-row`},We={class:`set-text`},Ge={class:`set-title`},Ke={class:`set-sub`},qe={class:`section-title`},Je={class:`section-desc`},Ye={class:`rt-groups-bar`},Xe=[`title`],Ze={class:`rt-groups-count`},Qe={key:1,class:`rt-group-form`},$e=[`disabled`],et=[`role`,`tabindex`,`onClick`,`onKeydown`],tt=[`onKeydown`],nt=[`onClick`],rt={key:3,class:`rt-group-title`},it={class:`rt-group-badge`},at={class:`rt-group-fields`},ot={key:4,class:`rt-group-desc`},st=[`disabled`,`title`,`onClick`],ct=[`disabled`,`title`,`onClick`],lt=[`disabled`,`title`,`onClick`],ut=[`disabled`,`title`,`onClick`],dt=[`disabled`,`title`,`onClick`],ft={class:`rt-group-body`},pt={key:0,class:`rt-group-empty`},mt={class:`rt-main`},ht={class:`rt-title`},gt={class:`rt-sub`},_t={class:`rt-ctrl`},vt={key:3,class:`rt-color`},yt=[`value`,`onInput`],bt=[`title`,`onClick`],xt={class:`rt-actions`},St=[`disabled`],Ct={class:`rt-path aw-mono`},wt={class:`rt-group-title plugin-group-title`},Tt={class:`section-desc`},Et={key:2,class:`identity-note`},Dt={class:`plugin-main`},Ot={class:`rt-title`},kt={class:`aw-mono`},At={key:0,class:`rt-tag`},jt={key:1,class:`rt-tag src-runtime`},Mt={key:2,class:`rt-tag restart`},Nt={class:`rt-sub`},Pt={class:`rt-ctrl`},Ft={key:0,class:`plugin-health faint`},It=[`onClick`],Lt=[`aria-checked`,`disabled`,`onClick`],Rt={key:0,class:`identity-note`},zt={class:`section-title`},Bt={class:`section-desc`},Vt={class:`aw-mono`},Ht={class:`identity-note`},Ut=`aw.settings.groups.collapsed`,Wt=T(a({__name:`settings`,setup(a){let{t:T,locale:Wt,locales:Gt,setLocale:Kt}=ae(),D=re(),O=ie(),qt=t().public,k=ge(),A=ve(),j=v(`appearance`),M=_e(),N=v({}),P=v(new Set),F=v(!1),I=v(null);function L(){N.value={...M.effective},P.value=new Set}n(()=>M.loaded,e=>{e&&L()},{immediate:!0}),n(()=>M.effective,()=>{P.value.size===0&&L()},{deep:!0});function R(e){P.value.add(e),I.value=null}async function Jt(){if(P.value.size){F.value=!0,I.value=null;try{let e={};for(let t of P.value)e[t]=N.value[t];let t=await M.patch(e);L();let n=t.restartRequired??[];I.value=n.length?{type:`warning`,text:T(`settings.runtime.restartNotice`,{keys:n.join(`, `)})}:{type:`success`,text:T(`settings.runtime.savedLive`)}}catch(e){let t=e;I.value={type:`error`,text:t?.response?.data?.message||t?.message||String(e)}}finally{F.value=!1}}}async function Yt(e){try{await M.patch({[e]:null}),P.value.delete(e),N.value[e]=M.effective[e],I.value={type:`success`,text:T(`settings.runtime.keyReset`,{key:e})}}catch(e){let t=e;I.value={type:`error`,text:t?.response?.data?.message||t?.message||String(e)}}}async function Xt(){try{await M.resetAll(),L(),I.value={type:`success`,text:T(`settings.runtime.resetAllDone`)}}catch(e){let t=e;I.value={type:`error`,text:t?.response?.data?.message||t?.message||String(e)}}}let Zt={server:`settings.runtime.groupServer`,app:`settings.runtime.groupApp`,api:`settings.runtime.groupApi`,theme:`settings.runtime.groupTheme`,i18n:`settings.runtime.groupI18n`,security:`settings.runtime.groupSecurity`,daq:`settings.runtime.groupDaq`,memory:`settings.runtime.groupMemory`,omp:`settings.runtime.groupOmp`,harness:`settings.runtime.groupHarness`,dcw:`settings.runtime.groupDcw`,workshop:`settings.runtime.groupWorkshop`,backup:`settings.runtime.groupBackup`,retention:`settings.runtime.groupRetention`,log:`settings.runtime.groupLog`,plugins:`settings.runtime.groupPlugins`};function Qt(e){if(e.labelKey&&T(e.labelKey)!==e.labelKey)return T(e.labelKey);if(e.label&&e.label!==e.id)return e.label;let t=Zt[e.id];return t?T(t):e.label||e.id}function $t(e){return e.source===`plugin`?e.plugin?`${T(`settings.groups.srcPlugin`)}: ${e.plugin}`:T(`settings.groups.srcPlugin`):e.source===`user`?T(`settings.groups.srcUser`):T(`settings.groups.srcBuiltin`)}function en(e){return e===`runtime`?`src-runtime`:e===`env`?`src-env`:`src-yaml`}function tn(e){let t=e.labelKey;return t&&T(t)!==t?T(t):e.label}let z=v({});function nn(){try{z.value=JSON.parse(localStorage.getItem(Ut)??`{}`)??{}}catch{z.value={}}}function rn(){try{localStorage.setItem(Ut,JSON.stringify(z.value))}catch{}}function B(e){let t=z.value[e.id];return t===void 0?e.collapsed:t}function V(e){e.collapsible&&(z.value={...z.value,[e.id]:!B(e)},rn())}function an(){let e=M.groups.filter(e=>e.collapsible),t=e.some(e=>!B(e)),n={...z.value};for(let r of e)n[r.id]=t;z.value=n,rn()}let on=d(()=>M.groups.filter(e=>e.collapsible).some(e=>!B(e))),H=d(()=>k.isAdmin),U=v(!1),W=te({label:``,description:``,collapsed:!1}),G=v(``),K=v(``),q=v(``);async function sn(){if(W.label.trim()){G.value=`create`;try{await M.createGroup({label:W.label.trim(),description:W.description.trim(),collapsed:W.collapsed}),U.value=!1,W.label=``,W.description=``,W.collapsed=!1,e.success(T(`settings.groups.created`))}catch(t){e.error(E(t,T(`settings.groups.createFail`)))}finally{G.value=``}}}function cn(e){K.value=e.id,q.value=e.label}async function ln(t){let n=q.value.trim();if(K.value=``,n){G.value=t;try{await M.updateGroup(t,{label:n}),e.success(T(`settings.groups.renamed`))}catch(t){e.error(E(t,T(`settings.groups.updateFail`)))}finally{G.value=``}}}async function un(t,n){let r=[...M.groups],i=r.findIndex(e=>e.id===t),a=i+n;if(i<0||a<0||a>=r.length)return;let o=r[i],s=r[a];G.value=t;try{let e=[...r];e.splice(i,1),e.splice(a,0,o);let t=(a+1)*10,n=(i+1)*10;await M.updateGroup(o.id,{order:t}),await M.updateGroup(s.id,{order:n})}catch(t){e.error(E(t,T(`settings.groups.updateFail`)))}finally{G.value=``}}async function dn(t){G.value=t.id;try{await M.updateGroup(t.id,{collapsed:!t.collapsed})}catch(t){e.error(E(t,T(`settings.groups.updateFail`)))}finally{G.value=``}}async function fn(t){let n=t.fieldCount??0;if(n>0){e.warning(T(`settings.groups.deleteHasFields`,{p0:Qt(t),p1:n}));return}G.value=t.id;try{await M.deleteGroup(t.id),e.success(T(`settings.groups.deleted`))}catch(t){e.error(E(t,T(`settings.groups.deleteFail`)))}finally{G.value=``}}let J=v([]),Y=v(!1),pn=v(!1),X=v(new Set),Z=v({}),mn=e=>(e.routes??[]).some(e=>String(e.path||``).endsWith(`/health`));async function hn(){Y.value=!0;try{let e=await A.listPlugins(),t=e?.plugins??e?.data?.plugins??[];J.value=Array.isArray(t)?t:[],pn.value=!0}catch(t){e.error(E(t,T(`plugins.loadFail`)))}finally{Y.value=!1}}async function gn(t,n){if(!X.value.has(t.name)){X.value.add(t.name);try{n?await A.enablePlugin(t.name):await A.disablePlugin(t.name),t.enabled=n,e.success(T(n?`plugins.enabled`:`plugins.disabled`))}catch(t){e.error(E(t,T(`plugins.adminRequired`)))}finally{X.value.delete(t.name)}}}async function _n(e){if(mn(e)){Z.value={...Z.value,[e.name]:`checking`};try{let t=await A.pluginHealth(e.name);Z.value={...Z.value,[e.name]:vn(e.name,t)}}catch(t){Z.value={...Z.value,[e.name]:{ok:!1,reason:E(t,T(`plugins.loadFail`))}}}}}function vn(e,t){if(e===`rag-bridge`){let e=t.backend,n=t.web,r=!!e?.ok&&!!n?.ok,i=e?.ok?n?.error||n?.status||`web`:e?.error||e?.status||`backend`;return r?{ok:!0}:{ok:!1,reason:i}}if(e===`diag-bridge`){let e=t.remote;return e?.status===`ok`?{ok:!0}:{ok:!1,reason:e?.status||`remote`}}return{ok:!0}}function yn(e){return Z.value[e]===`checking`}function Q(e){let t=Z.value[e];return t&&t!==`checking`?t:null}function bn(e){return X.value.has(e)}n(j,e=>{e===`runtime`&&!pn.value&&!Y.value&&k.isLoggedIn&&hn()},{immediate:!0}),i(nn);let $=String(qt.primaryColor),xn=[{value:$,label:T(`settings.accentInk`)},{value:`#c9963f`,label:T(`settings.accentStone`)},{value:`#44615a`,label:T(`settings.accentMoss`)},{value:`#3f6094`,label:T(`settings.accentSlate`)},{value:`#6b5aa0`,label:T(`settings.accentPlum`)},{value:`#9c5744`,label:T(`settings.accentClay`)}],Sn=d(()=>D.accent??$);function Cn(t){D.setAccent(t===$?null:t),e.success(T(`settings.accentApplied`))}function wn(){D.setAccent(null),e.success(T(`settings.accentReset`))}let Tn=d(()=>Gt.value.map(e=>({label:e.name,value:e.code}))),En=e=>{e!=null&&(localStorage.setItem(`aw.locale`,String(e)),Kt(String(e)),window.location.reload())},Dn=d(()=>[{label:T(`home.fields.name`),value:O.name},{label:T(`home.fields.version`),value:`v${O.version}`},{label:T(`home.fields.mode`),value:O.mode},{label:T(`home.fields.apiBase`),value:`${O.apiBase} (${qt.apiTimeout}ms)`},{label:T(`home.fields.primary`),value:$},{label:`i18n`,value:Wt.value}]),On=d(()=>[{key:`appearance`,icon:`i-tabler-palette`,label:T(`settings.theme`)},{key:`runtime`,icon:`i-tabler-settings`,label:T(`settings.runtimeTab`)},{key:`system`,icon:`i-tabler-server-2`,label:T(`settings.systemTab`)}]);return(e,t)=>{let n=oe,i=ce,a=se,d=ue,te=pe,v=he,re=me,ie=ye,ae=fe,ge=de,_e=le;return s(),p(`div`,be,[f(`div`,xe,[f(`div`,null,[f(`p`,Se,o(b(T)(`menu.system`))+` / settings `,1),f(`h1`,null,o(b(T)(`settings.title`)),1)]),f(`span`,Ce,`v`+o(b(O).version),1)]),u(_e,{bordered:!1,class:`settings-card`},{default:y(()=>[f(`div`,we,[f(`div`,Te,[(s(!0),p(m,null,l(b(On),e=>(s(),p(`button`,{key:e.key,class:c([`nav-item`,{active:b(j)===e.key}]),onClick:t=>j.value=e.key},[f(`span`,{class:c(e.icon)},null,2),f(`span`,null,o(e.label),1)],10,Ee))),128))]),f(`div`,De,[g(f(`div`,null,[f(`h3`,Oe,o(b(T)(`settings.theme`)),1),f(`p`,ke,o(b(T)(`settings.appearanceDesc`)),1),f(`div`,Ae,[f(`div`,je,[f(`div`,Me,o(b(T)(`settings.primaryColor`)),1),f(`div`,Ne,o(b(T)(`settings.accentDesc`)),1)])]),f(`div`,Pe,[(s(),p(m,null,l(xn,e=>f(`button`,{key:e.value,class:c([`swatch`,{on:b(Sn).toLowerCase()===e.value.toLowerCase()}]),style:r({"--sw":e.value}),title:e.label,onClick:t=>Cn(e.value)},[t[10]||=f(`span`,{class:`swatch-dot`},null,-1),f(`span`,Ie,o(e.label),1),b(Sn).toLowerCase()===e.value.toLowerCase()?(s(),p(`span`,Le)):h(``,!0)],14,Fe)),64))]),f(`button`,{class:`aw-pill outline reset-btn`,onClick:wn},[t[11]||=f(`span`,{class:`i-tabler-rotate`},null,-1),x(` `+o(b(T)(`settings.accentResetAction`)),1)]),f(`div`,Re,[f(`div`,ze,[f(`div`,Be,o(b(D).isDark?b(T)(`common.dark`):b(T)(`common.light`)),1),f(`div`,Ve,o(b(T)(`settings.darkDesc`)),1)]),f(`button`,{class:c([`switch`,{on:b(D).isDark}]),role:`switch`,"aria-checked":b(D).isDark,onClick:t[0]||=e=>b(D).toggleDark()},[...t[12]||=[f(`span`,{class:`knob`},null,-1)]],10,He)]),f(`div`,Ue,[f(`div`,We,[f(`div`,Ge,o(b(T)(`header.language`)),1),f(`div`,Ke,o(b(T)(`settings.languageDesc`)),1)]),u(n,{value:b(Wt),options:b(Tn),style:{width:`140px`},onChange:En},null,8,[`value`,`options`])])],512),[[w,b(j)===`appearance`]]),g(f(`div`,null,[f(`h3`,qe,o(b(T)(`settings.runtimeTab`)),1),f(`p`,Je,o(b(T)(`settings.runtime.desc`)),1),b(I)?(s(),_(i,{key:0,type:b(I).type,"show-icon":``,class:`rt-notice`,message:b(I).text},null,8,[`type`,`message`])):h(``,!0),f(`div`,Ye,[f(`button`,{class:`aw-pill outline rt-groups-toggle`,title:b(T)(`settings.groups.toggleAll`),onClick:an},[f(`span`,{class:c(b(on)?`i-tabler-chevrons-up`:`i-tabler-chevrons-down`)},null,2),x(` `+o(b(on)?b(T)(`settings.groups.collapseAll`):b(T)(`settings.groups.expandAll`)),1)],8,Xe),f(`span`,Ze,o(b(T)(`settings.groups.count`,{p0:b(M).groups.length})),1),b(H)?(s(),p(`button`,{key:0,class:`aw-pill outline rt-groups-add`,onClick:t[1]||=e=>U.value=!b(U)},[t[13]||=f(`span`,{class:`i-tabler-plus`},null,-1),x(` `+o(b(T)(`settings.groups.newGroup`)),1)])):h(``,!0)]),b(H)&&b(U)?(s(),p(`div`,Qe,[u(a,{value:b(W).label,"onUpdate:value":t[2]||=e=>b(W).label=e,placeholder:b(T)(`settings.groups.namePlaceholder`),style:{width:`220px`},onPressEnter:sn},null,8,[`value`,`placeholder`]),u(a,{value:b(W).description,"onUpdate:value":t[3]||=e=>b(W).description=e,placeholder:b(T)(`settings.groups.descPlaceholder`),style:{width:`320px`},onPressEnter:sn},null,8,[`value`,`placeholder`]),u(d,{checked:b(W).collapsed,"onUpdate:checked":t[4]||=e=>b(W).collapsed=e},{default:y(()=>[x(o(b(T)(`settings.groups.defaultCollapsed`)),1)]),_:1},8,[`checked`]),f(`button`,{class:`aw-pill primary`,disabled:!b(W).label.trim()||b(G)===`create`,onClick:sn},o(b(G)===`create`?`…`:b(T)(`settings.groups.create`)),9,$e),f(`button`,{class:`aw-pill outline`,onClick:t[5]||=e=>U.value=!1},o(b(T)(`settings.groups.cancel`)),1)])):h(``,!0),(s(!0),p(m,null,l(b(M).groups,e=>(s(),p(`section`,{key:e.id,class:c([`rt-group`,{collapsed:B(e),"grp-plugin":e.source===`plugin`}])},[f(`header`,{class:`rt-group-head`,role:e.collapsible?`button`:void 0,tabindex:e.collapsible?0:void 0,onClick:t=>V(e),onKeydown:[S(C(t=>V(e),[`prevent`]),[`enter`]),S(C(t=>V(e),[`prevent`]),[`space`])]},[e.collapsible?(s(),p(`span`,{key:0,class:c([`rt-caret`,B(e)?`i-tabler-chevron-right`:`i-tabler-chevron-down`])},null,2)):h(``,!0),e.icon?(s(),p(`span`,{key:1,class:c([`rt-group-icon`,e.icon])},null,2)):h(``,!0),b(K)===e.id?(s(),p(m,{key:2},[g(f(`input`,{"onUpdate:modelValue":t[6]||=e=>ee(q)?q.value=e:null,class:`rt-rename aw-mono`,onClick:t[7]||=C(()=>{},[`stop`]),onKeydown:[S(C(t=>ln(e.id),[`prevent`]),[`enter`]),t[8]||=S(C(e=>K.value=``,[`prevent`]),[`esc`])]},null,40,tt),[[ne,b(q)]]),f(`button`,{class:`mini-btn`,onClick:C(t=>ln(e.id),[`stop`])},o(b(T)(`settings.groups.ok`)),9,nt)],64)):(s(),p(`h4`,rt,o(Qt(e)),1)),f(`span`,it,o($t(e)),1),f(`span`,at,o(b(T)(`settings.groups.fields`,{p0:e.fieldCount??0})),1),e.description?(s(),p(`span`,ot,o(e.description),1)):h(``,!0),b(H)&&e.source!==`plugin`?(s(),p(`span`,{key:5,class:`rt-group-ops`,onClick:t[9]||=C(()=>{},[`stop`])},[f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.moveUp`),onClick:t=>un(e.id,-1)},[...t[14]||=[f(`span`,{class:`i-tabler-arrow-up`},null,-1)]],8,st),f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.moveDown`),onClick:t=>un(e.id,1)},[...t[15]||=[f(`span`,{class:`i-tabler-arrow-down`},null,-1)]],8,ct),f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.rename`),onClick:t=>cn(e)},[...t[16]||=[f(`span`,{class:`i-tabler-pencil`},null,-1)]],8,lt),f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.defaultCollapsed`),onClick:t=>dn(e)},[f(`span`,{class:c(e.collapsed?`i-tabler-chevrons-down`:`i-tabler-chevrons-up`)},null,2)],8,ut),e.source===`user`?(s(),p(`button`,{key:0,class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.delete`),onClick:t=>fn(e)},[...t[17]||=[f(`span`,{class:`i-tabler-trash`},null,-1)]],8,dt)):h(``,!0)])):h(``,!0)],40,et),g(f(`div`,ft,[e.fieldCount??0?h(``,!0):(s(),p(`p`,pt,o(b(T)(`settings.groups.emptyHint`)),1)),(s(!0),p(m,null,l(b(M).fieldsOf(e.id),e=>(s(),p(`div`,{key:e.key,class:`rt-row`},[f(`div`,mt,[f(`div`,ht,[x(o(tn(e))+` `,1),f(`span`,{class:c([`rt-tag`,en(b(M).sourceOf(e.key))])},o(b(M).sourceOf(e.key)),3),f(`span`,{class:c([`rt-tag`,e.applies])},o(e.applies===`live`?b(T)(`settings.runtime.live`):b(T)(`settings.runtime.restart`)),3)]),f(`div`,gt,o(e.description),1)]),f(`div`,_t,[e.type===`number`?(s(),_(te,{key:0,value:b(N)[e.key],"onUpdate:value":t=>b(N)[e.key]=t,min:e.min,max:e.max,onChange:t=>R(e.key)},null,8,[`value`,`onUpdate:value`,`min`,`max`,`onChange`])):e.type===`boolean`?(s(),_(v,{key:1,checked:b(N)[e.key],"onUpdate:checked":t=>b(N)[e.key]=t,onChange:t=>R(e.key)},null,8,[`checked`,`onUpdate:checked`,`onChange`])):e.type===`select`?(s(),_(n,{key:2,value:b(N)[e.key],"onUpdate:value":t=>b(N)[e.key]=t,style:{width:`160px`},options:(e.options??[]).map(e=>({label:e,value:e})),onChange:t=>R(e.key)},null,8,[`value`,`onUpdate:value`,`options`,`onChange`])):e.type===`color`?(s(),p(`span`,vt,[f(`input`,{type:`color`,value:String(b(N)[e.key]??`#35e0a0`),onInput:t=>{b(N)[e.key]=t.target.value,R(e.key)}},null,40,yt),u(a,{value:String(b(N)[e.key]??``),style:{width:`110px`},class:`aw-mono`,onChange:t=>{b(N)[e.key]=t.target.value,R(e.key)}},null,8,[`value`,`onChange`])])):(s(),_(a,{key:4,value:b(N)[e.key],"onUpdate:value":t=>b(N)[e.key]=t,style:{width:`220px`},onChange:t=>R(e.key)},null,8,[`value`,`onUpdate:value`,`onChange`])),f(`button`,{class:`aw-pill outline rt-reset`,title:b(T)(`settings.runtime.resetKey`),onClick:t=>Yt(e.key)},[...t[18]||=[f(`span`,{class:`i-tabler-rotate`},null,-1)]],8,bt)])]))),128))],512),[[w,!B(e)]])],2))),128)),f(`div`,xt,[f(`button`,{class:`aw-pill primary`,disabled:!b(P).size||b(F),onClick:Jt},[t[19]||=f(`span`,{class:`i-tabler-device-floppy`},null,-1),x(` `+o(b(F)?`…`:b(T)(`settings.runtime.save`)),1)],8,St),f(`button`,{class:`aw-pill outline`,onClick:Xt},o(b(T)(`settings.runtime.resetAll`)),1),f(`span`,Ct,o(b(M).settingsPath),1)]),f(`h4`,wt,o(b(T)(`plugins.title`)),1),f(`p`,Tt,o(b(T)(`plugins.desc`)),1),b(k).isLoggedIn?(s(),_(re,{key:3,spinning:b(Y)},{default:y(()=>[(s(!0),p(m,null,l(b(J),e=>(s(),p(`div`,{key:e.name,class:c([`plugin-row`,{off:e.enabled===!1}])},[f(`div`,Dt,[f(`div`,Ot,[f(`span`,kt,o(e.name),1),e.version?(s(),p(`span`,At,`v`+o(e.version),1)):h(``,!0),e.builtin?(s(),p(`span`,jt,o(b(T)(`plugins.builtin`)),1)):h(``,!0),e.error?(s(),p(`span`,Mt,o(e.error),1)):h(``,!0)]),f(`div`,Nt,o(e.description||`—`),1)]),f(`div`,Pt,[yn(e.name)?(s(),p(`span`,Ft,[t[20]||=f(`span`,{class:`i-tabler-loader-2 spin`},null,-1),x(` `+o(b(T)(`plugins.healthChecking`)),1)])):Q(e.name)?(s(),p(`span`,{key:1,class:c([`plugin-health`,Q(e.name).ok?`ok`:`bad`])},[f(`span`,{class:c(Q(e.name).ok?`i-tabler-circle-check`:`i-tabler-alert-circle`)},null,2),x(` `+o(Q(e.name).ok?b(T)(`plugins.healthOk`):`${b(T)(`plugins.healthBad`)}: ${Q(e.name).reason??``}`),1)],2)):h(``,!0),mn(e)?(s(),p(`button`,{key:2,class:`aw-pill outline rt-reset`,onClick:t=>_n(e)},[t[21]||=f(`span`,{class:`i-tabler-heartbeat`},null,-1),x(` `+o(b(T)(`plugins.healthCheck`)),1)],8,It)):h(``,!0),f(`button`,{class:c([`switch`,{on:e.enabled!==!1}]),role:`switch`,"aria-checked":e.enabled!==!1,disabled:bn(e.name),onClick:t=>gn(e,e.enabled===!1)},[...t[22]||=[f(`span`,{class:`knob`},null,-1)]],10,Lt)])],2))),128)),b(J).length===0&&!b(Y)?(s(),p(`div`,Rt,o(b(T)(`plugins.empty`)),1)):h(``,!0)]),_:1},8,[`spinning`])):(s(),p(`div`,Et,o(b(T)(`plugins.needLogin`)),1)),b(J).length?(s(),_(ie,{key:4,"slot-name":`settings.plugins`})):h(``,!0)],512),[[w,b(j)===`runtime`]]),g(f(`div`,null,[f(`h3`,zt,o(b(T)(`settings.systemTab`)),1),f(`p`,Bt,o(b(T)(`settings.systemDesc`)),1),u(ge,{bordered:``,column:1,size:`small`},{default:y(()=>[(s(!0),p(m,null,l(b(Dn),e=>(s(),_(ae,{key:e.label,label:e.label},{default:y(()=>[f(`span`,Vt,o(e.value),1)]),_:2},1032,[`label`]))),128))]),_:1}),f(`p`,Ht,o(b(k).isLoggedIn?`${b(T)(`settings.identity`)}: ${b(k).user?.name} (${b(k).user?.role})`:b(T)(`settings.identityGuest`)),1)],512),[[w,b(j)===`system`]])])])]),_:1})])}}}),[[`__scopeId`,`data-v-ed43cc9b`]]);export{Wt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./BU83-NnX.js";import{$ as t,Ht as n,P as r,R as i,S as a,Ut as o,V as s,Vt as c,W as l,b as u,d,dt as f,f as p,h as m,i as h,m as g,nt as _,p as v,pt as y,tt as b,xt as x,y as S}from"./CSkxz2NX.js";import{c as C,f as ee,l as w,s as te}from"./D6uzXueg.js";import{n as ne}from"./DtYHUi5Z.js";import{t as re}from"./BHA40aHa.js";import{n as ie}from"./KZQX7xoM.js";import{t as ae}from"./DZtm4l-P2.js";import{t as T}from"./BDNMzG2s2.js";import{t as E}from"./D0ZBQrN_2.js";import{t as oe}from"./BC9wjTJK2.js";import{t as se}from"./CNs_Ozdc2.js";import{t as ce}from"./DTFCy6h-.js";import{a as le,i as ue,n as de,r as fe,t as pe}from"./D98NH8kG.js";import{t as me}from"./ca4TJ3Op.js";import{t as he}from"./C3J6FYKa.js";import{t as D}from"./CFxtLwjp.js";var O={class:`mono dim`},k={class:`mono ch`},ge=[`title`],_e=[`title`],ve={class:`trend-cell`},ye=[`title`],be=[`y1`,`y2`],xe=[`y1`,`y2`],Se=[`points`],A=[`y1`,`y2`],Ce={class:`mono`},we={class:`mono`},Te=[`title`],Ee=[`value`,`title`],De={value:``},Oe=[`value`],ke=[`title`],j={key:1,class:`run-pill na`},Ae={class:`prod-cell`},M=[`title`],N=[`title`],P={key:1,class:`dim`},je={class:`dev-binds`},Me=[`title`],Ne=[`onClick`],Pe=[`title`],F={value:``},Fe=[`value`,`disabled`],Ie={class:`right`},Le=[`title`],Re=120,I=26,ze=Object.assign(T(a({__name:`DaqNodeRow`,props:{n:{}},setup(t){let n=t,{t:r}=ie(),i=pe(),a=me(),f=he();function _(e){if(!e.lastAt)return!0;let t=e.intervalMs??i.controller.defaultIntervalMs;return Date.now()-Date.parse(e.lastAt)>Math.max(t*4,12e3)}function v(e){return e.enabled?e.lineId?a.lineStateOf(e.lineId).active?!i.controller.running||_(e)?`offline`:e.state:`idle`:`unassigned`:`disabled`}function y(e){let t=v(e);return t===`ok`||t===`warn`||t===`alarm`}function C(e){if(!e.lineId)return null;let t=a.lineStateOf(e.lineId);return!t.active||!t.recipeId?null:a.recipes.find(e=>e.id===t.recipeId)?.daqWindows?.find(t=>t.nodeId===e.id)??null}function ee(e){let t=C(e);return!t||e.value==null?!1:t.min!=null&&e.value<t.min||t.max!=null&&e.value>t.max}function w(e){let t=C(e);return t&&(t.min!=null||t.max!=null)?{min:t.min,max:t.max}:e.warnLow!=null||e.warnHigh!=null?{min:e.warnLow,max:e.warnHigh}:{min:null,max:null}}function te(e){let t=e.filter(Number.isFinite);if(t.length<2)return``;let n=Math.min(...t),r=Math.max(...t)-n||1;return t.map((e,i)=>`${(i/(t.length-1)*Re).toFixed(1)},${(I-(e-n)/r*24-1).toFixed(1)}`).join(` `)}function ne(e,t){if(t==null||!Number.isFinite(t))return null;let n=e.filter(Number.isFinite);if(n.length<2)return null;let r=Math.min(...n,t),i=Math.max(...n,t)-r||1;return Number((I-(t-r)/i*24-1).toFixed(1))}function ae(e){let t=v(e),n=r(`daq.k44c2n065`);if(t===`offline`)return e.lastError?{key:t,label:n,tip:e.lastError}:{key:t,label:n,tip:i.controller.running?r(`daq.k1staled129`,{p0:Math.round(Math.max((e.intervalMs??i.controller.defaultIntervalMs)*4,12e3)/1e3)}):r(`daq.k1gateoff140`)};let a={ok:r(`daq.k41k5c062`),warn:r(`daq.k49z8v063`),alarm:r(`daq.k3xmid064`),offline:n,idle:r(`daq.k3ozyqz117`),disabled:r(`daq.k1disabl130`),unassigned:r(`daq.k3ootr6053`)};if(t===`idle`)return{key:t,label:a.idle,tip:r(`daq.k1idlehin139`)};if((t===`ok`||t===`warn`||t===`alarm`)&&ee(e)){let t=C(e);return{key:`alarm`,label:r(`daq.k1l3pt51104`),tip:r(`daq.k1hrrqa1122`,{p0:t?.min??`-∞`,p1:t?.max??`+∞`,p2:``})}}return{key:t,label:a[t],tip:``}}function T(e){let t=i.templates.find(t=>t.key===le(e));return t?`${t.name} · ${t.ch}`:e||`-`}let oe=e=>e==null?r(`daq.k9vnp9h124`,{p0:i.controller.defaultIntervalMs}):`${e}ms`,se=e=>e==null?r(`daq.k9vnp9h124`,{p0:i.controller.defaultPublishIntervalMs}):e===0?r(`daq.k41mvv078`):`${e}ms`,ce=e=>i.meta.drivers.find(t=>t.kind===e)?.status===`planned`,ue=e=>e.deviceIds??(e.deviceBindingId?[e.deviceBindingId]:[]),de=e=>f.twins.find(t=>t.id===e)?.name??e,fe=d(()=>f.twins.filter(e=>e.kind!==`daq`&&!(e.modelRef??``).startsWith(`daq-`)&&!(e.modelRef??``).startsWith(`dcw-`))),D=d(()=>{let e=n.n,t=w(e),r=e.lineId?a.lineStateOf(e.lineId):null;return{tpl:T(e.templateRef),pill:ae(e),alarm:ee(e),live:y(e),trend:te(e.hist),limMin:ne(e.hist,t.min),limMax:ne(e.hist,t.max),interval:oe(e.intervalMs),publish:se(e.publishIntervalMs),lineActive:!!r?.active,lineProduct:r?.productName??``,lineRecipe:r?.recipeName??``}});async function ze(){let t=n.n,a=!t.enabled;try{await i.patchNode(t.id,{enabled:a}),t.enabled=a,a||(t.state=`offline`),e.success(r(a?`daq.k1nodestart147`:`daq.k1nodestop146`))}catch(t){e.error(E(t))}}async function Be(t){let r=t.target.value;try{await i.patchNode(n.n.id,{lineId:r});let e=n.n;e.lineId=r}catch(t){e.error(E(t))}}async function Ve(t){let r=t.target.value;if(!r)return;let a=n.n;if(!a.deviceIds?.includes(r)){try{await i.setNodeBindings(a.id,[...a.deviceIds??[],r])}catch(t){e.error(E(t))}t.target.value=``}}async function He(t){let r=n.n;try{await i.setNodeBindings(r.id,(r.deviceIds??[]).filter(e=>e!==t))}catch(t){e.error(E(t))}}return(e,n)=>{let r=re;return s(),m(`tr`,{class:c({"row-recipe-alarm":D.value.alarm})},[p(`td`,null,[p(`span`,O,o(t.n.id.slice(0,8)),1),p(`b`,null,o(t.n.name),1),p(`small`,k,o(D.value.tpl),1)]),p(`td`,null,[p(`span`,{class:c([`st-pill`,[D.value.pill.key]]),title:D.value.pill.tip},o(D.value.pill.label),11,ge)]),p(`td`,{class:c([`mono val`,{stale:!D.value.live,"val-alarm":t.n.state===`alarm`||D.value.alarm}]),title:D.value.live?void 0:D.value.pill.tip},[S(o(t.n.value==null?`--`:t.n.value.toFixed(t.n.decimals))+` `,1),p(`small`,null,o(t.n.unit),1)],10,_e),p(`td`,ve,[(s(),m(`svg`,{class:`trend`,viewBox:`0 0 120 26`,preserveAspectRatio:`none`,title:e.$t(`daq.k1trnd002`)},[D.value.limMin==null?g(``,!0):(s(),m(`line`,{key:0,class:`lim`,x1:`0`,y1:D.value.limMin,x2:`120`,y2:D.value.limMin},null,8,be)),D.value.limMax==null?g(``,!0):(s(),m(`line`,{key:1,class:`lim max`,x1:`0`,y1:D.value.limMax,x2:`120`,y2:D.value.limMax},null,8,xe)),D.value.trend?(s(),m(`polyline`,{key:2,class:c([`trace`,{alarm:t.n.state===`alarm`||D.value.alarm}]),points:D.value.trend},null,10,Se)):(s(),m(`line`,{key:3,class:`trace-idle`,x1:`0`,y1:I/2,x2:`120`,y2:I/2},null,8,A))],8,ye))]),p(`td`,Ce,o(D.value.interval),1),p(`td`,we,o(D.value.publish),1),p(`td`,null,[p(`span`,{class:c([`drv-tag`,{planned:ce(t.n.driver)}]),title:ce(t.n.driver)?e.$t(`daq.k1plndrv138`):``},o(t.n.driver),11,Te)]),p(`td`,null,[p(`select`,{class:`line-sel`,value:t.n.lineId,title:e.$t(`daq.k3q23v3010`),onChange:Be},[p(`option`,De,o(e.$t(`daq.k3ootr6053`)),1),(s(!0),m(h,null,l(x(a).lines,e=>(s(),m(`option`,{key:e.id,value:e.id},o(e.name),9,Oe))),128))],40,Ee)]),p(`td`,null,[t.n.lineId?(s(),m(`span`,{key:0,class:c([`run-pill`,{on:D.value.lineActive}]),title:e.$t(`daq.k1runtipc131`)},[n[0]||=p(`span`,{class:`rp-dot`},null,-1),S(` `+o(D.value.lineActive?e.$t(`daq.k3vp67i096`):e.$t(`daq.k3ozyqz117`)),1)],10,ke)):(s(),m(`span`,j,o(e.$t(`daq.k3ootr6053`)),1))]),p(`td`,Ae,[t.n.lineId&&D.value.lineActive?(s(),m(h,{key:0},[p(`b`,{title:e.$t(`daq.k1prdrtip132`)},o(D.value.lineProduct||`--`),9,M),p(`small`,{class:`mono`,title:e.$t(`daq.k1prdrtip132`)},o(D.value.lineRecipe||`--`),9,N)],64)):(s(),m(`span`,P,`--`))]),p(`td`,null,[p(`div`,je,[(s(!0),m(h,null,l(ue(t.n),t=>(s(),m(`span`,{key:t,class:`dev-bind-chip`,title:e.$t(`daq.k2bindtip137`)},[S(o(de(t))+` `,1),p(`span`,{class:`dev-unbind`,title:`unbind`,onClick:e=>He(t)},`✕`,8,Ne)],8,Me))),128)),p(`select`,{class:`line-sel dev-add`,value:``,title:e.$t(`daq.k2bindtip137`),onChange:Ve},[p(`option`,F,o(e.$t(`daq.k3own4q056`)),1),(s(!0),m(h,null,l(fe.value,e=>(s(),m(`option`,{key:e.id,value:e.id,disabled:(t.n.deviceIds??[]).includes(e.id)},o(de(e.id)),9,Fe))),128))],40,Pe)])]),p(`td`,Ie,[p(`button`,{class:c([`node-toggle`,{off:!t.n.enabled}]),title:t.n.enabled?e.$t(`daq.k1nodestop146`):e.$t(`daq.k1nodestart147`),onClick:ze},[p(`span`,{class:c(t.n.enabled?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),S(` `+o(t.n.enabled?e.$t(`daq.k1nodestop146`):e.$t(`daq.k1nodestart147`)),1)],10,Le),u(r,{class:`console-link`,to:`/daq/${t.n.id}`},{default:b(()=>[n[1]||=p(`span`,{class:`i-tabler-dashboard`},null,-1),S(` `+o(e.$t(`daq.k3o3jg2074`)),1)]),_:1},8,[`to`])])],2)}}}),[[`__scopeId`,`data-v-4b6f87e1`]]),{__name:`WorkshopDaqNodeRow`}),Be={class:`page`},Ve={class:`aw-page-head`},He={class:`sub`},Ue={class:`badges mono`},We=[`title`],Ge=[`title`],Ke={class:`txt`},qe={class:`mono`},Je={key:1,class:`infra-banner`},Ye={class:`txt`},Xe={key:2,class:`infra-banner`},Ze={class:`txt`},Qe=[`disabled`],$e={key:3,class:`alarm-bar`},et={class:`bar-label`},tt={class:`mono`},nt={class:`alarm-scroll`},rt=[`title`],it={class:`mono dim`},at={class:`mono`},ot={key:0,class:`esc mono`},st=[`onClick`],ct={class:`aw-tile ctrl-card`},lt={class:`ctrl-row`},ut={class:`ctrl-left`},dt=[`title`],ft={class:`cycle mono`},pt=[`title`],mt={class:`ctrl-right`},ht={class:`ctrl-metrics mono`},gt=[`title`],_t=[`title`],vt=[`title`],yt=[`title`],bt={class:`line-strip`},xt={class:`strip-label`},St={class:`mono`},Ct={class:`strip-scroll`},wt={key:0,class:`lp-run`},Tt={key:1,class:`lp-idle`},Et={class:`lp-idle`},Dt={class:`modal`},Ot={class:`m-title`},kt={class:`seg-row`},At={class:`f-grid`},jt={class:`f`},Mt=[`value`],Nt={class:`f`},Pt=[`placeholder`],Ft={key:0,class:`f`},It=[`placeholder`],Lt={class:`f-grid`},Rt={class:`f`},zt=[`value`],Bt={key:0,class:`f-grid driver-form`},Vt={key:0},Ht=[`onUpdate:modelValue`],Ut=[`value`],Wt=[`onUpdate:modelValue`,`type`,`placeholder`],Gt={key:2,class:`hint`},Kt={class:`test-row`},qt=[`disabled`],Jt={key:1,class:`m-err`},Yt={class:`m-actions`},Xt=[`disabled`,`title`],Zt={class:`modal`},Qt={class:`m-title`},$t={class:`sec-label`},en={class:`tpl-table`},tn={class:`mono dim`},nn={class:`mono range`},rn={class:`right actions`},an=[`onClick`],on=[`onClick`],sn={key:0},cn={colspan:`3`,class:`empty`},ln={class:`sec-label`},un={class:`f-grid`},dn={class:`f`},fn=[`placeholder`],pn={class:`f`},mn={class:`f`},hn=[`placeholder`],gn={class:`f`},_n=[`placeholder`],vn={class:`f`},yn={class:`f`},bn={class:`f`},xn={class:`f`},Sn=[`value`],Cn={class:`f`},wn={class:`hint`},Tn={class:`f`},En={class:`hint`},Dn={key:0,class:`m-err`},On={class:`m-actions`},kn=[`disabled`],An={class:`sec-label`},jn={class:`tpl-table`},Mn={class:`mono dim`},Nn={class:`mono range`},Pn={class:`right actions`},Fn=[`onClick`],In={class:`aw-tile opt-card`},Ln={class:`opt-count mono`},Rn={class:`opt-filters`},zn={value:``},Bn=[`value`],Vn={value:``},Hn=[`value`],Un={key:0,class:`opt-empty`},Wn={class:`opt-list`},Gn={class:`opt-line1`},Kn={class:`opt-node`},qn={class:`mono opt-params`},Jn={class:`mono opt-time`},Yn=[`disabled`,`onClick`],Xn=[`onClick`],Zn={class:`opt-line2 mono`},Qn={key:1,class:`opt-open-hint`},$n={key:2,class:`opt-agg`},er={key:3,class:`opt-agg`},tr={key:0,class:`opt-series`},nr={class:`opt-spark`,viewBox:`0 0 240 36`,preserveAspectRatio:`none`},rr=[`points`],ir={class:`mono`},ar={key:0,class:`opt-empty`},or={class:`aw-tile table-card`},sr={class:`tbl-toolbar`},cr={class:`filters`},lr={class:`flt`},ur={value:``},dr=[`value`],fr={value:`none`},pr={class:`flt`},mr={value:``},hr=[`value`],gr={value:`none`},_r=[`title`],vr={value:``},yr={value:`on`},br={value:`off`},xr={class:`flt`},Sr={value:``},Cr={value:`ok`},wr={value:`warn`},Tr={value:`alarm`},Er={value:`offline`},Dr={class:`flt`},Or={value:``},kr=[`value`],Ar={class:`flt`},jr={value:``},Mr=[`value`],Nr=[`title`],Pr={value:``},Fr={value:`live`},Ir={value:`hour`},Lr={value:`day`},Rr={value:`old`},zr={value:`never`},Br={class:`flt`},Vr=[`placeholder`],Hr={class:`count mono`},Ur={class:`ops-panels`},Wr={class:`panel-head`},Gr={class:`panel-body`},Kr={key:0,class:`panel-empty`},qr={class:`mono dim`},Jr={class:`mono`},Yr={key:0,class:`esc mono`},Xr=[`onClick`],Zr={class:`ops-panel event-panel`},Qr={class:`panel-head`},$r={class:`panel-body`},ei={key:0,class:`panel-empty`},ti={class:`mono dim t`},ni=[`title`],ri=[`title`],ii=[`title`],ai={class:`right`},oi={key:0,class:`vs-pad`,"aria-hidden":`true`},si={key:1,class:`vs-pad`,"aria-hidden":`true`},ci={key:2},li={colspan:`11`},ui={class:`pane-empty`,style:{"min-height":`120px`}},di={class:`pe-sub`},fi={key:3},pi={colspan:`11`},mi={class:`pane-empty`,style:{"min-height":`90px`}},hi={class:`pe-sub`},gi={key:6,class:`err`},_i=42,vi=8,yi=T(a({__name:`index`,setup(a){let{t:T}=ie();se({layout:`default`}),ne({title:()=>T(`titles.daq`)});let O=pe(),k=me(),ge=oe(),_e=d(()=>k.lines.some(e=>k.lineStateOf(e.id).active)),ve=D();function ye(e){return{write:T(`logs.kind.write`),manual:T(`logs.kind.manual`),alarm:T(`logs.kind.alarm`),line:T(`logs.kind.line`),recipe:T(`logs.kind.recipe`),rollback:T(`logs.kind.rollback`),daq:T(`logs.kind.daq`),system:T(`logs.kind.system`)}[e]??(e||T(`logs.kind.system`))}function be(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`:``}async function xe(t){try{await O.ackAlarm(t),e.success(T(`daq.k1acked144`))}catch(t){e.error(E(t))}}let Se=null;i(()=>{ge.ensureConnected(),Se=O.ensureWsFeed(),ve.ensureLive(),O.load(),O.fetchAlarms(),k.load(),ki.load(),k.loadOptimizations(),ce(()=>{O.load(),O.fetchAlarms()},5e3,{bgMs:3e4}),ce(()=>{k.load()},15e3,{bgMs:6e4})}),r(()=>{Se?.()});let A=f({lineId:``,deviceId:``,template:``,driver:``,lineRun:``,state:``,time:``,search:``}),Ce=d(()=>!!(A.lineId||A.deviceId||A.template||A.driver||A.lineRun||A.state||A.time||A.search.trim()));function we(){A.lineId=``,A.deviceId=``,A.template=``,A.driver=``,A.lineRun=``,A.state=``,A.time=``,A.search=``}let Te=d(()=>{let e=new Map;for(let t of O.nodes)e.set(t.templateRef,(e.get(t.templateRef)??0)+1);return[...e.entries()].map(([e,t])=>({ref:e,count:t,label:Hi(e)}))}),Ee=d(()=>{let e=new Map;for(let t of O.nodes)e.set(t.driver,(e.get(t.driver)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t,label:O.meta.drivers.find(t=>t.kind===e)?.label??e}))});function De(e){if(!e.lastAt)return`never`;let t=Date.now()-Date.parse(e.lastAt);return t<=3e5?`live`:t<=36e5?`hour`:t<=864e5?`day`:`old`}function Oe(e){return!A.time||De(e)===A.time}function ke(e){let t=A.search.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.id.toLowerCase().includes(t)}let j=y(!1),Ae=y(!1),M=y(``),N=y(``),P=y({}),je=y(``),Me=d(()=>k.recipes.filter(e=>!M.value||e.lineId===M.value));function Ne(e){return{open:`daq.k1optst001`,judged:`daq.k1optst008`,"judged-keep":`daq.k1optst002`,"rolled-back":`daq.k1optst003`,superseded:`daq.k1optst004`,"superseded-manual":`daq.k1optst005`,"closed-line-stop":`daq.k1optst006`,failed:`daq.k1optst007`}[e]??`daq.k1optst001`}async function Pe(){j.value=!j.value,j.value&&(Ae.value=!0,await F())}async function F(){await k.loadOptimizations({lineId:M.value||void 0,recipeId:N.value||void 0})}function Fe(){N.value&&!Me.value.some(e=>e.id===N.value)&&(N.value=``),F()}async function Ie(e){je.value=e;try{let t=await k.optimizationSeries(e);P.value={...P.value,[e]:t}}finally{je.value=``}}function Le(e,t=240,n=36){let r=e.map(e=>e.value??e.avg??0).filter(Number.isFinite);if(r.length<2)return``;let i=Math.min(...r),a=Math.max(...r)-i||1;return r.map((e,o)=>`${o/(r.length-1)*t},${n-(e-i)/a*n}`).join(` `)}async function Re(e){await k.rollbackOptimization(e),await F()}function I(e){return e==null?`--`:String(Number(e.toFixed(2)))}let yi=d(()=>{let e=new Map;for(let t of O.nodes)for(let n of t.deviceIds??(t.deviceBindingId?[t.deviceBindingId]:[]))e.set(n,(e.get(n)??0)+1);return ki.twins.filter(t=>e.has(t.id)).map(t=>({id:t.id,name:Ai.get(t.id)??t.name,count:e.get(t.id)}))});function bi(e){if(!A.lineRun)return!0;let t=!!e.lineId&&k.lineStateOf(e.lineId).active;return A.lineRun===`on`?t:!t}let L=d(()=>k.lines.find(e=>e.id===A.lineId)??null),R=d(()=>L.value?k.lineStateOf(L.value.id):null);function xi(e){if(!e.lastAt)return!0;let t=e.intervalMs??O.controller.defaultIntervalMs;return Date.now()-Date.parse(e.lastAt)>Math.max(t*4,12e3)}function Si(e){return e.enabled?e.lineId?k.lineStateOf(e.lineId).active?!O.controller.running||xi(e)?`offline`:e.state:`idle`:`unassigned`:`disabled`}let z=d(()=>O.nodes.filter(e=>{if(A.lineId&&(A.lineId===`none`?e.lineId:(e.lineId??``)!==A.lineId))return!1;let t=e.deviceIds??(e.deviceBindingId?[e.deviceBindingId]:[]);return!(A.deviceId&&(A.deviceId===`none`?t.length>0:!t.includes(A.deviceId))||A.template&&e.templateRef!==A.template||A.driver&&e.driver!==A.driver||!bi(e)||A.state&&Si(e)!==A.state||!Oe(e)||!ke(e))})),Ci=y(null),B=y(0),V=y(60),wi=d(()=>{let e=z.value,t=Math.min(B.value,Math.max(0,e.length-1));return e.slice(t,V.value)}),Ti=d(()=>B.value*_i),Ei=d(()=>Math.max(0,(z.value.length-V.value)*_i)),Di=0;function Oi(){let e=Ci.value;if(!e)return;let t=z.value.length,n=window.innerHeight||800,r=e.getBoundingClientRect().top+window.scrollY+40,i=Math.floor((window.scrollY-r)/_i),a=Math.ceil(n/_i)+16,o=Math.max(0,Math.min(i-vi,Math.max(0,t-1))),s=Math.max(o,Math.min(t,o+a));o!==B.value&&(B.value=o),s!==V.value&&(V.value=s)}function H(){Di||=requestAnimationFrame(()=>{Di=0,Oi()})}i(()=>{Oi(),window.addEventListener(`scroll`,H,{passive:!0}),window.addEventListener(`resize`,H,{passive:!0})}),r(()=>{window.removeEventListener(`scroll`,H),window.removeEventListener(`resize`,H),Di&&cancelAnimationFrame(Di)}),t(()=>z.value.length,()=>{B.value=0,V.value=Math.min(z.value.length,V.value||60),H()});let ki=he(),Ai=new Map;t(()=>ki.twins,e=>{for(let t of e)Ai.set(t.id,t.name)},{immediate:!0,deep:!0});let U=y(!1),W=y(`mock`),G=y(fe[0]?.key??`temp-tc`),K=y(`modbus-tcp`),q=y(``),ji=y(null),J=y({}),Mi=f({kind:`none`,scale:1,offset:0}),Ni=y(!1),Y=y(null),Pi=y(!1),Fi=y(``),Ii=d(()=>O.meta.drivers.length?O.meta.drivers:de.map(e=>({...e}))),Li=d(()=>Ii.value.find(e=>e.kind===K.value)),Ri=d(()=>Li.value?.configFields??[]),zi=e=>O.meta.drivers.find(t=>t.kind===e)?.status!==`planned`&&O.meta.driverAvailable?.[e]!==!1;t(K,()=>{let e={};for(let t of Ri.value)t.default!==void 0&&(e[t.key]=t.default);J.value=e,Y.value=null},{immediate:!0});async function Bi(){Ni.value=!0,Y.value=null;try{Y.value=await O.testDriver(K.value,J.value)}catch(e){Y.value={ok:!1,message:E(e)}}finally{Ni.value=!1}}async function Vi(){Pi.value=!0,Fi.value=``;try{let e=Mi.kind===`linear`?{kind:`linear`,scale:Number(Mi.scale),offset:Number(Mi.offset)}:void 0;if(W.value===`mock`)await O.createFromTemplate(`daq-${G.value}`,{name:q.value?{name:q.value}.name:void 0,transform:e});else{for(let e of Ri.value)if(e.required&&!J.value[e.key]&&J.value[e.key]!==0)throw Error(T(`daq.kyuadl0125`,{p0:e.label}));let t=O.templates.find(e=>e.key===G.value);await O.createFromTemplate(`daq-${G.value}`,{name:q.value||void 0,driver:K.value,driverConfig:{...J.value},transform:e,intervalMs:ji.value,unit:t?.unit,min:t?.min,max:t?.max,decimals:t?.decimals})}U.value=!1,q.value=``,Y.value=null}catch(e){Fi.value=E(e)}finally{Pi.value=!1}}function Hi(e){let t=O.templates.find(t=>t.key===le(e));return t?`${t.name} · ${t.ch}`:e||`-`}let Ui=y(!1),X=y(null),Wi=y(!1),Z=y(``),Q=y(``),$=f({name:``,ch:``,code:``,unit:``,min:0,max:100,base:50,amp:2,decimals:2,icon:`thermo`}),Gi={thermo:T(`daq.k422b8079`),pressure:T(`daq.k3x6ff080`),tension:T(`daq.k3z9xc081`),encoder:T(`daq.k3subk4082`),camera:T(`daq.k47atw083`),gateway:T(`daq.kz7yhbj084`)},Ki=d(()=>O.templates.filter(e=>!e.builtin)),qi=d(()=>O.templates.filter(e=>e.builtin));function Ji(e,t=!1){$.name=t?T(`daq.k2hbo3c126`,{p0:e.name}):e.name,$.ch=e.ch,$.code=e.code,$.unit=e.unit,$.min=e.min,$.max=e.max,$.base=e.base,$.amp=e.amp,$.decimals=e.decimals,$.icon=e.icon}function Yi(){X.value=null,Z.value=``,Q.value=``,Ji({key:``,name:``,code:``,ch:``,unit:``,base:50,amp:2,min:0,max:100,decimals:2,icon:`thermo`})}function Xi(e){X.value=e.key,Z.value=``,Ji(e)}function Zi(e){X.value=null,Z.value=``,Ji(e,!0)}async function Qi(){Wi.value=!0,Z.value=``;try{let e=e=>{let t=Number(e);return e===``||e==null||!Number.isFinite(t)?void 0:t},t={name:$.name.trim(),ch:$.ch.trim()||void 0,code:$.code.trim()||void 0,unit:$.unit.trim(),min:e($.min),max:e($.max),base:e($.base),amp:e($.amp),decimals:e($.decimals),icon:$.icon};X.value?await O.updateTemplate(X.value,t):await O.createTemplate(t),Yi()}catch(e){Z.value=E(e)}finally{Wi.value=!1}}async function $i(e){if(Q.value!==e.key){Q.value=e.key;return}try{await O.removeTemplate(e.key)}catch(e){Z.value=E(e)}finally{Q.value=``}}let ea=y(!1);async function ta(){ea.value=!0;try{await O.reconnectInfra()}catch{}finally{ea.value=!1}}return(e,t)=>{let r=re,i=ze,a=ae;return s(),m(`div`,Be,[p(`div`,Ve,[p(`div`,null,[t[36]||=p(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / DAQ CONSOLE `,-1),p(`h1`,null,o(e.$t(`daq.k1emg364011`)),1),p(`p`,He,o(e.$t(`daq.k1wmg2bz012`)),1)]),p(`div`,Ue,[p(`span`,{class:`badge`,title:e.$t(`daq.k1tsdbtip133`)},`TSDB · `+o(x(O).meta.tsdb),9,We),p(`span`,{class:`badge`,title:e.$t(`daq.k1queuet134`)},`QUEUE · `+o(x(O).meta.queue),9,Ge)])]),x(O).loaded&&L.value&&R.value?(s(),m(`div`,{key:0,class:c([`infra-banner`,{good:R.value.active}])},[p(`span`,{class:c(R.value.active?`i-tabler-circle-check`:`i-tabler-info-circle`)},null,2),p(`span`,Ke,[R.value.active?(s(),m(h,{key:0},[S(o(e.$t(`daq.k3ktxbr085`))+o(L.value.name)+`」`+o(e.$t(`daq.k15lvw0o105`)),1),p(`b`,null,o(R.value.productName),1),t[37]||=S(` · Recipe:`,-1),p(`b`,null,o(R.value.recipeName),1),p(`small`,qe,o(e.$t(`daq.k400lb086`))+` `+o(R.value.runId?.slice(0,8))+` · `+o(e.$t(`daq.k3zkt2106`))+` `+o(R.value.startedAt?.slice(11,19))+` `+o(e.$t(`daq.k69vag8108`))+` `+o(R.value.taggedSamples)+` `+o(e.$t(`daq.k4118o092`)),1)],64)):(s(),m(h,{key:1},[S(o(e.$t(`daq.k3ktxbr085`))+o(L.value.name)+`」`+o(e.$t(`daq.k12uge2o107`)),1)],64))]),u(r,{class:`pill-btn`,to:`/dcw/${L.value.id}`},{default:b(()=>[S(o(R.value.active?e.$t(`daq.k1ukoy0v093`):e.$t(`daq.k1cg78i8109`)),1)]),_:1},8,[`to`])],2)):x(O).loaded&&!_e.value?(s(),m(`div`,Je,[t[38]||=p(`span`,{class:`i-tabler-info-circle`},null,-1),p(`span`,Ye,[S(o(e.$t(`daq.k19onw5w013`)),1),u(r,{to:`/dcw`},{default:b(()=>[S(o(e.$t(`daq.k1b2tk5c014`)),1)]),_:1}),S(o(e.$t(`daq.k1u9wnlg015`)),1)])])):g(``,!0),x(O).meta.infra?.degraded?(s(),m(`div`,Xe,[t[39]||=p(`span`,{class:`i-tabler-alert-triangle`},null,-1),p(`span`,Ze,o(x(O).meta.infra.warning),1),p(`button`,{class:`pill-btn`,disabled:ea.value,onClick:ta},o(ea.value?e.$t(`daq.k1ld43ur094`):e.$t(`daq.kzg9805110`)),9,Qe)])):g(``,!0),x(O).alarms.length?(s(),m(`div`,$e,[p(`span`,et,[t[40]||=p(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),S(` `+o(e.$t(`daq.k1alarm141`))+` `,1),p(`b`,tt,o(x(O).alarms.length),1)]),p(`div`,nt,[(s(!0),m(h,null,l(x(O).alarms,t=>(s(),m(`span`,{key:t.id,class:`alarm-item`,title:e.$t(`daq.k1esc143`,{p0:t.escalation})},[p(`b`,null,o(t.nodeName),1),p(`span`,it,o(t.metric),1),p(`span`,at,o(t.value)+` `+o(t.rule===`lt-min`?`<`:`>`)+` `+o(t.threshold),1),t.escalation>0?(s(),m(`small`,ot,`+`+o(t.escalation),1)):g(``,!0),p(`button`,{class:`mini-btn ack`,onClick:e=>xe(t.id)},o(e.$t(`daq.k1ack142`)),9,st)],8,rt))),128))])])):g(``,!0),p(`section`,ct,[p(`div`,lt,[p(`div`,ut,[p(`button`,{class:c([`aw-pill`,{running:x(O).controller.running}]),title:e.$t(`daq.k1snap145`),onClick:t[0]||=e=>x(O).controllerAction(x(O).controller.running?`pause`:`resume`)},[p(`span`,{class:c(x(O).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),S(` `+o(x(O).controller.running?e.$t(`daq.kpui00095`):e.$t(`daq.knxpdpt111`)),1)],10,dt),p(`label`,ft,[S(o(e.$t(`daq.k1ifahxj016`))+` `,1),_(p(`input`,{"onUpdate:modelValue":t[1]||=e=>x(O).controller.defaultIntervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,onChange:t[2]||=e=>x(O).controllerAction(`config`,x(O).controller.defaultIntervalMs)},null,544),[[w,x(O).controller.defaultIntervalMs,void 0,{number:!0}]]),t[41]||=S(`ms `,-1)]),p(`label`,{class:`cycle mono`,title:e.$t(`daq.k1e8lcoo001`)},[S(o(e.$t(`daq.k1if98n0017`))+` `,1),_(p(`input`,{"onUpdate:modelValue":t[3]||=e=>x(O).controller.defaultPublishIntervalMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,onChange:t[4]||=e=>x(O).controllerAction(`config`,x(O).controller.defaultIntervalMs,x(O).controller.defaultPublishIntervalMs)},null,544),[[w,x(O).controller.defaultPublishIntervalMs,void 0,{number:!0}]]),t[42]||=S(`ms `,-1)],8,pt)]),p(`div`,mt,[p(`span`,ht,[p(`span`,null,o(e.$t(`daq.k45uio067`))+` `+o(x(O).controller.nodesOnline)+`/`+o(x(O).controller.nodesTotal),1),t[43]||=p(`span`,{class:`sep`},`·`,-1),p(`span`,{title:e.$t(`daq.k1yztsu4002`)},o(e.$t(`daq.k3xagp087`))+` `+o(x(O).meta.produced),9,gt),t[44]||=p(`span`,{class:`sep`},`·`,-1),p(`span`,{title:e.$t(`daq.ko09iha003`)},o(e.$t(`daq.k427eu088`))+` `+o(x(O).meta.consumed),9,_t),t[45]||=p(`span`,{class:`sep`},`·`,-1),p(`span`,{class:c({warn:(x(O).meta.dropped??0)>0}),title:e.$t(`daq.k1droptip135`)},o(e.$t(`daq.k3w8go089`))+` `+o(x(O).meta.dropped),11,vt),t[46]||=p(`span`,{class:`sep`},`·`,-1),p(`span`,{title:e.$t(`daq.kj1jbmw004`)},o(e.$t(`daq.k3wusd090`))+` `+o(x(O).meta.samplesStored),9,yt)]),p(`button`,{class:`aw-pill outline add-btn`,onClick:t[5]||=e=>{Ui.value=!0,Yi()}},[t[47]||=p(`span`,{class:`i-tabler-adjustments-horizontal`},null,-1),S(` `+o(e.$t(`daq.k1f5cv0s018`)),1)]),p(`button`,{class:`aw-pill add-btn`,onClick:t[6]||=e=>U.value=!0},[t[48]||=p(`span`,{class:`i-tabler-plus`},null,-1),S(` `+o(e.$t(`daq.k1fn0ukb019`)),1)])])]),p(`div`,bt,[p(`span`,xt,[t[49]||=p(`span`,{class:`i-tabler-route`},null,-1),S(` `+o(e.$t(`daq.k1b2o3b6020`)),1),p(`small`,St,o(x(k).lines.length),1)]),p(`div`,Ct,[(s(!0),m(h,null,l(x(k).lines,i=>(s(),v(r,{key:i.id,class:c([`line-pill`,{on:x(k).lineStateOf(i.id).active}]),style:n({"--lc":i.color}),to:`/dcw/${i.id}`,title:x(k).lineStateOf(i.id).active?e.$t(`daq.k3v957u120`,{p0:i.name,p1:x(k).lineStateOf(i.id).productName,p2:x(k).lineStateOf(i.id).recipeName}):e.$t(`daq.k1x7jnru121`,{p0:i.name})},{default:b(()=>[t[50]||=p(`span`,{class:`lp-dot`},null,-1),p(`b`,null,o(i.name),1),x(k).lineStateOf(i.id).active?(s(),m(`small`,wt,o(x(k).lineStateOf(i.id).recipeName??e.$t(`daq.k3vp67i096`)),1)):(s(),m(`small`,Tt,o(e.$t(`daq.k3zgkk021`)),1))]),_:2},1032,[`class`,`style`,`to`,`title`]))),128)),x(k).lines.length===0?(s(),v(r,{key:0,class:`line-pill`,to:`/dcw`},{default:b(()=>[t[51]||=p(`span`,{class:`lp-dot`},null,-1),p(`b`,null,o(e.$t(`daq.k1el12b1022`)),1),p(`small`,Et,o(e.$t(`daq.k8jxxe8023`)),1)]),_:1})):g(``,!0)])])]),U.value?(s(),m(`div`,{key:4,class:`modal-mask`,onClick:t[14]||=ee(e=>U.value=!1,[`self`])},[p(`div`,Dt,[p(`h3`,Ot,o(e.$t(`daq.k19rioqa024`)),1),p(`div`,kt,[p(`button`,{class:c([`seg`,{on:W.value===`mock`}]),onClick:t[7]||=e=>W.value=`mock`},o(e.$t(`daq.k1p5c1un025`)),3),p(`button`,{class:c([`seg`,{on:W.value===`real`}]),onClick:t[8]||=e=>W.value=`real`},o(e.$t(`daq.k1cbcp3o026`)),3)]),p(`div`,At,[p(`label`,jt,[p(`span`,null,o(e.$t(`daq.k1fsgerc027`)),1),_(p(`select`,{"onUpdate:modelValue":t[9]||=e=>G.value=e,class:`inp`},[(s(!0),m(h,null,l(x(O).templates,t=>(s(),m(`option`,{key:t.key,value:t.key},o(t.name)+` · `+o(t.ch)+`(`+o(t.min)+`~`+o(t.max)+` `+o(t.unit)+`)`+o(t.builtin?``:e.$t(`daq.kr45rk9097`)),9,Mt))),128))],512),[[C,G.value]])]),p(`label`,Nt,[p(`span`,null,o(e.$t(`daq.k1ce2k1y028`)),1),_(p(`input`,{"onUpdate:modelValue":t[10]||=e=>q.value=e,class:`inp`,placeholder:e.$t(`daq.kgpxzy3005`)},null,8,Pt),[[w,q.value]])]),W.value===`real`?(s(),m(`label`,Ft,[p(`span`,null,o(e.$t(`daq.k13mfsfc029`)),1),_(p(`input`,{"onUpdate:modelValue":t[11]||=e=>ji.value=e,type:`number`,min:`1000`,max:`60000`,step:`500`,class:`inp`,placeholder:e.$t(`daq.k1eg1000a136`)},null,8,It),[[w,ji.value,void 0,{number:!0}]])])):g(``,!0)]),W.value===`real`?(s(),m(h,{key:0},[p(`div`,Lt,[p(`label`,Rt,[p(`span`,null,o(e.$t(`daq.k1kt87rx030`)),1),_(p(`select`,{"onUpdate:modelValue":t[12]||=e=>K.value=e,class:`inp`},[(s(!0),m(h,null,l(Ii.value.filter(e=>e.status!==`planned`),t=>(s(),m(`option`,{key:t.kind,value:t.kind},o(t.label)+o(t.plugin?` ⌁`:``)+o(zi(t.kind)?``:e.$t(`daq.kjbqphp098`)),9,zt))),128))],512),[[C,K.value]])])]),Ri.value.length?(s(),m(`div`,Bt,[(s(!0),m(h,null,l(Ri.value,e=>(s(),m(`label`,{key:e.key,class:`f`},[p(`span`,null,[S(o(e.label),1),e.required?(s(),m(`em`,Vt,`*`)):g(``,!0)]),e.type===`select`?_((s(),m(`select`,{key:0,"onUpdate:modelValue":t=>J.value[e.key]=t,class:`inp`},[(s(!0),m(h,null,l(e.options,e=>(s(),m(`option`,{key:e.value,value:e.value},o(e.label),9,Ut))),128))],8,Ht)),[[C,J.value[e.key]]]):_((s(),m(`input`,{key:1,"onUpdate:modelValue":t=>J.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`inp`},null,8,Wt)),[[te,J.value[e.key]]]),e.hint?(s(),m(`small`,Gt,o(e.hint),1)):g(``,!0)]))),128))])):g(``,!0),p(`div`,Kt,[p(`button`,{class:`pill-btn`,disabled:Ni.value,onClick:Bi},o(Ni.value?e.$t(`daq.k1fsh720099`):e.$t(`daq.k1fstglk112`)),9,qt),Y.value?(s(),m(`span`,{key:0,class:c([`test-result`,Y.value.ok?`ok`:`bad`])},[S(o(Y.value.ok?`✓`:`✗`)+` `+o(Y.value.message),1),Y.value.latencyMs==null?g(``,!0):(s(),m(h,{key:0},[S(`(`+o(Y.value.latencyMs)+`ms)`,1)],64))],2)):g(``,!0)])],64)):g(``,!0),Fi.value?(s(),m(`p`,Jt,o(Fi.value),1)):g(``,!0),p(`div`,Yt,[p(`button`,{class:`aw-pill outline`,onClick:t[13]||=e=>U.value=!1},o(e.$t(`daq.k3xdnn031`)),1),p(`button`,{class:`aw-pill`,disabled:Pi.value||W.value===`real`&&Y.value!=null&&!Y.value.ok,title:W.value===`real`&&!(Y.value&&Y.value.ok)?e.$t(`daq.k1needtst137`):``,onClick:Vi},o(Pi.value?e.$t(`daq.k1bg4759100`):W.value===`real`?e.$t(`daq.k7pxjxo113`):e.$t(`daq.k1bge46t118`)),9,Xt)])])])):g(``,!0),Ui.value?(s(),m(`div`,{key:5,class:`modal-mask`,onClick:t[25]||=ee(e=>Ui.value=!1,[`self`])},[p(`div`,Zt,[p(`h3`,Qt,o(e.$t(`daq.k11mv96s032`)),1),p(`p`,$t,o(e.$t(`daq.ktji4ky033`)),1),p(`table`,en,[p(`tbody`,null,[(s(!0),m(h,null,l(Ki.value,t=>(s(),m(`tr`,{key:t.key},[p(`td`,null,[p(`b`,null,o(t.name),1),p(`small`,tn,o(t.code),1)]),p(`td`,nn,o(t.min)+`~`+o(t.max)+` `+o(t.unit)+` · `+o(t.decimals)+` `+o(e.$t(`daq.k48oi091`)),1),p(`td`,rn,[p(`button`,{class:`mini-btn`,onClick:e=>Xi(t)},o(e.$t(`daq.k45eb0034`)),9,an),p(`button`,{class:`mini-btn danger`,onClick:e=>$i(t)},o(Q.value===t.key?e.$t(`daq.k1hhheu3101`):e.$t(`daq.k3xakp114`)),9,on)])]))),128)),Ki.value.length?g(``,!0):(s(),m(`tr`,sn,[p(`td`,cn,o(e.$t(`daq.kztvzbo035`)),1)]))])]),p(`p`,ln,o(X.value?e.$t(`daq.k1iiph0s102`):e.$t(`daq.k1efixrj115`)),1),p(`div`,un,[p(`label`,dn,[p(`span`,null,[S(o(e.$t(`daq.k3xhia036`)),1),t[52]||=p(`em`,null,`*`,-1)]),_(p(`input`,{"onUpdate:modelValue":t[15]||=e=>x($).name=e,class:`inp`,placeholder:e.$t(`daq.k5opd2t006`)},null,8,fn),[[w,x($).name]])]),p(`label`,pn,[p(`span`,null,[S(o(e.$t(`daq.k3x4ef037`)),1),t[53]||=p(`em`,null,`*`,-1)]),_(p(`input`,{"onUpdate:modelValue":t[16]||=e=>x($).unit=e,class:`inp`,placeholder:`如 %RH`},null,512),[[w,x($).unit]])]),p(`label`,mn,[p(`span`,null,o(e.$t(`daq.k1l477m0038`)),1),_(p(`input`,{"onUpdate:modelValue":t[17]||=e=>x($).ch=e,class:`inp`,placeholder:e.$t(`daq.kk8o4tl007`)},null,8,hn),[[w,x($).ch]])]),p(`label`,gn,[p(`span`,null,o(e.$t(`daq.k1ayxrqb039`)),1),_(p(`input`,{"onUpdate:modelValue":t[18]||=e=>x($).code=e,class:`inp`,placeholder:e.$t(`daq.kzn3l7l008`)},null,8,_n),[[w,x($).code]])]),p(`label`,vn,[p(`span`,null,[S(o(e.$t(`daq.k1l9jv5m040`)),1),t[54]||=p(`em`,null,`*`,-1)]),_(p(`input`,{"onUpdate:modelValue":t[19]||=e=>x($).min=e,type:`number`,class:`inp`},null,512),[[w,x($).min,void 0,{number:!0}]])]),p(`label`,yn,[p(`span`,null,[S(o(e.$t(`daq.k1l9jv4p041`)),1),t[55]||=p(`em`,null,`*`,-1)]),_(p(`input`,{"onUpdate:modelValue":t[20]||=e=>x($).max=e,type:`number`,class:`inp`},null,512),[[w,x($).max,void 0,{number:!0}]])]),p(`label`,bn,[p(`span`,null,o(e.$t(`daq.k3mxmcx042`)),1),_(p(`input`,{"onUpdate:modelValue":t[21]||=e=>x($).decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[w,x($).decimals,void 0,{number:!0}]])]),p(`label`,xn,[p(`span`,null,o(e.$t(`daq.k3xx56043`)),1),_(p(`select`,{"onUpdate:modelValue":t[22]||=e=>x($).icon=e,class:`inp`},[(s(!0),m(h,null,l(x(ue),e=>(s(),m(`option`,{key:e,value:e},o(Gi[e]),9,Sn))),128))],512),[[C,x($).icon]])]),p(`label`,Cn,[p(`span`,null,o(e.$t(`daq.k1f4eknv044`)),1),_(p(`input`,{"onUpdate:modelValue":t[23]||=e=>x($).base=e,type:`number`,class:`inp`},null,512),[[w,x($).base,void 0,{number:!0}]]),p(`small`,wn,o(e.$t(`daq.kytd15s045`)),1)]),p(`label`,Tn,[p(`span`,null,o(e.$t(`daq.k1f4ifpo046`)),1),_(p(`input`,{"onUpdate:modelValue":t[24]||=e=>x($).amp=e,type:`number`,class:`inp`},null,512),[[w,x($).amp,void 0,{number:!0}]]),p(`small`,En,o(e.$t(`daq.ksp2aji047`)),1)])]),Z.value?(s(),m(`p`,Dn,o(Z.value),1)):g(``,!0),p(`div`,On,[p(`button`,{class:`aw-pill outline`,onClick:Yi},o(e.$t(`daq.k48p40048`)),1),p(`button`,{class:`pill-btn`,disabled:Wi.value,onClick:Qi},o(Wi.value?e.$t(`daq.k1b38d59103`):X.value?e.$t(`daq.k1b39281116`):e.$t(`daq.k1b3dtga119`)),9,kn)]),p(`p`,An,o(e.$t(`daq.k1w8s84s049`)),1),p(`table`,jn,[p(`tbody`,null,[(s(!0),m(h,null,l(qi.value,t=>(s(),m(`tr`,{key:t.key},[p(`td`,null,[p(`b`,null,o(t.name),1),p(`small`,Mn,o(t.code),1)]),p(`td`,Nn,o(t.min)+`~`+o(t.max)+` `+o(t.unit)+` · `+o(t.decimals)+` `+o(e.$t(`daq.k48oi091`)),1),p(`td`,Pn,[p(`button`,{class:`mini-btn`,onClick:e=>Zi(t)},o(e.$t(`daq.k3y694050`)),9,Fn)])]))),128))])])])])):g(``,!0),p(`section`,In,[p(`button`,{class:`opt-head`,onClick:Pe},[t[56]||=p(`span`,{class:`i-tabler-flask`},null,-1),p(`b`,null,o(e.$t(`daq.k1optt001`)),1),p(`span`,Ln,o(x(k).optimizations.length),1),p(`span`,{class:c([`opt-chevron`,{open:j.value}])},null,2)]),p(`div`,{class:c([`opt-body`,{open:j.value}])},[Ae.value?(s(),m(h,{key:0},[p(`div`,Rn,[_(p(`select`,{"onUpdate:modelValue":t[26]||=e=>M.value=e,class:`inp-sel`,onChange:Fe},[p(`option`,zn,o(e.$t(`daq.k1optf001`)),1),(s(!0),m(h,null,l(x(k).lines,e=>(s(),m(`option`,{key:e.id,value:e.id},o(e.name),9,Bn))),128))],544),[[C,M.value]]),_(p(`select`,{"onUpdate:modelValue":t[27]||=e=>N.value=e,class:`inp-sel`,onChange:F},[p(`option`,Vn,o(e.$t(`daq.k1optf004`)),1),(s(!0),m(h,null,l(Me.value,e=>(s(),m(`option`,{key:e.id,value:e.id},o(e.name),9,Hn))),128))],544),[[C,N.value]]),p(`button`,{class:`mini-act`,onClick:F},o(e.$t(`daq.k1optf002`)),1)]),x(k).optimizations.length===0?(s(),m(`p`,Un,o(e.$t(`daq.k1opte001`)),1)):g(``,!0),p(`ul`,Wn,[(s(!0),m(h,null,l(x(k).optimizations.slice(0,30),t=>(s(),m(`li`,{key:t.id,class:c([`opt-row`,t.status])},[p(`div`,Gn,[p(`span`,{class:c([`opt-status`,t.status])},o(e.$t(Ne(t.status))),3),p(`b`,Kn,o(t.nodeName),1),p(`span`,qn,o(t.params[0]?.from??`?`)+` → `+o(t.params[0]?.to),1),p(`span`,Jn,o(t.setAt.slice(5,16).replace(`T`,` `)),1),P.value[t.id]?g(``,!0):(s(),m(`button`,{key:0,class:`mini-act`,disabled:je.value===t.id,onClick:e=>Ie(t.id)},o(e.$t(`daq.k1opta001`)),9,Yn)),t.status===`open`?(s(),m(`button`,{key:1,class:`mini-act danger`,onClick:e=>Re(t.id)},o(e.$t(`daq.k1opta002`)),9,Xn)):g(``,!0)]),p(`div`,Zn,[t.judge?(s(),m(`span`,{key:0,class:c([`opt-judge`,t.judge.verdict])},o(t.judge.verdict)+`(`+o(t.judge.by)+`): `+o(t.judge.reason.slice(0,70)),3)):t.status===`open`?(s(),m(`span`,Qn,o(e.$t(`daq.k1opto001`)),1)):g(``,!0),t.aggPending?(s(),m(`span`,$n,o(e.$t(`daq.k1optw001`)),1)):t.windowAgg&&t.windowAgg.channels.length?(s(),m(`span`,er,[(s(!0),m(h,null,l(t.windowAgg.channels,t=>(s(),m(h,{key:t.daqNodeId},[S(o(t.ch)+` `+o(I(t.min))+`~`+o(I(t.max))+`(`+o(e.$t(`daq.k1optw002`))+o(t.breaches<0?`-`:t.breaches)+`) `,1)],64))),128))])):g(``,!0)]),P.value[t.id]?(s(),m(`div`,tr,[(s(!0),m(h,null,l(P.value[t.id]?.channels??[],e=>(s(),m(`div`,{key:e.nodeId,class:`opt-ch`},[(s(),m(`svg`,nr,[p(`polyline`,{points:Le(e.points)},null,8,rr)])),p(`span`,ir,o(e.ch)+` `+o(I(e.points.at(-1)?.value??e.points.at(-1)?.avg))+o(e.unit),1)]))),128)),(P.value[t.id]?.channels.length??0)===0?(s(),m(`p`,ar,o(e.$t(`daq.k1opte002`)),1)):g(``,!0)])):g(``,!0)],2))),128))])],64)):g(``,!0)],2)]),u(a,{spinning:!x(O).loaded&&!x(O).error},{default:b(()=>[p(`section`,or,[p(`div`,sr,[p(`div`,cr,[p(`label`,lr,[p(`span`,null,o(e.$t(`daq.k3wj9n051`)),1),_(p(`select`,{"onUpdate:modelValue":t[28]||=e=>x(A).lineId=e,class:`inp-sel`},[p(`option`,ur,o(e.$t(`daq.k1bkl9uj052`)),1),(s(!0),m(h,null,l(x(k).lines,e=>(s(),m(`option`,{key:e.id,value:e.id},o(e.name),9,dr))),128)),p(`option`,fr,o(e.$t(`daq.k3ootr6053`)),1)],512),[[C,x(A).lineId]])]),p(`label`,pr,[p(`span`,null,o(e.$t(`daq.k1i8rtqt054`)),1),_(p(`select`,{"onUpdate:modelValue":t[29]||=e=>x(A).deviceId=e,class:`inp-sel`},[p(`option`,mr,o(e.$t(`daq.k1bkw4m2055`)),1),(s(!0),m(h,null,l(yi.value,e=>(s(),m(`option`,{key:e.id,value:e.id},o(e.name)+`(`+o(e.count)+`) `,9,hr))),128)),p(`option`,gr,o(e.$t(`daq.k3own4q056`)),1)],512),[[C,x(A).deviceId]])]),p(`label`,{class:`flt`,title:e.$t(`daq.khb8mru009`)},[p(`span`,null,o(e.$t(`daq.k1b2tkyv057`)),1),_(p(`select`,{"onUpdate:modelValue":t[30]||=e=>x(A).lineRun=e,class:`inp-sel`},[p(`option`,vr,o(e.$t(`daq.k3x4t1058`)),1),p(`option`,yr,o(e.$t(`daq.k1nxm3p7059`)),1),p(`option`,br,o(e.$t(`daq.k1ulx34e060`)),1)],512),[[C,x(A).lineRun]])],8,_r),p(`label`,xr,[p(`span`,null,o(e.$t(`daq.k1iwdfef061`)),1),_(p(`select`,{"onUpdate:modelValue":t[31]||=e=>x(A).state=e,class:`inp-sel`},[p(`option`,Sr,o(e.$t(`daq.k3x4t1058`)),1),p(`option`,Cr,o(e.$t(`daq.k41k5c062`)),1),p(`option`,wr,o(e.$t(`daq.k49z8v063`)),1),p(`option`,Tr,o(e.$t(`daq.k3xmid064`)),1),p(`option`,Er,o(e.$t(`daq.k44c2n065`)),1)],512),[[C,x(A).state]])]),p(`label`,Dr,[p(`span`,null,o(e.$t(`daq.k1flttpl010`)),1),_(p(`select`,{"onUpdate:modelValue":t[32]||=e=>x(A).template=e,class:`inp-sel`},[p(`option`,Or,o(e.$t(`daq.k1flttpl011`)),1),(s(!0),m(h,null,l(Te.value,e=>(s(),m(`option`,{key:e.ref,value:e.ref},o(e.label)+`(`+o(e.count)+`) `,9,kr))),128))],512),[[C,x(A).template]])]),p(`label`,Ar,[p(`span`,null,o(e.$t(`daq.k1fltdrv012`)),1),_(p(`select`,{"onUpdate:modelValue":t[33]||=e=>x(A).driver=e,class:`inp-sel`},[p(`option`,jr,o(e.$t(`daq.k1fltdrv013`)),1),(s(!0),m(h,null,l(Ee.value,e=>(s(),m(`option`,{key:e.kind,value:e.kind},o(e.label)+`(`+o(e.count)+`) `,9,Mr))),128))],512),[[C,x(A).driver]])]),p(`label`,{class:`flt`,title:e.$t(`daq.k1flttim014`)},[p(`span`,null,o(e.$t(`daq.k1flttim015`)),1),_(p(`select`,{"onUpdate:modelValue":t[34]||=e=>x(A).time=e,class:`inp-sel`},[p(`option`,Pr,o(e.$t(`daq.k1flttim016`)),1),p(`option`,Fr,o(e.$t(`daq.k1timlv017`)),1),p(`option`,Ir,o(e.$t(`daq.k1timhr018`)),1),p(`option`,Lr,o(e.$t(`daq.k1timdy019`)),1),p(`option`,Rr,o(e.$t(`daq.k1timld020`)),1),p(`option`,zr,o(e.$t(`daq.k1timnv021`)),1)],512),[[C,x(A).time]])],8,Nr),p(`label`,Br,[p(`span`,null,o(e.$t(`daq.k1fltsrc022`)),1),_(p(`input`,{"onUpdate:modelValue":t[35]||=e=>x(A).search=e,class:`inp-sel flt-search`,type:`search`,placeholder:e.$t(`daq.k1fltsph023`)},null,8,Vr),[[w,x(A).search]])]),Ce.value?(s(),m(`button`,{key:0,class:`mini-btn clear-btn`,onClick:we},o(e.$t(`daq.k1fygck2066`)),1)):g(``,!0)]),p(`span`,Hr,o(z.value.length)+` / `+o(x(O).nodes.length)+` `+o(e.$t(`daq.k45uio067`)),1)]),p(`div`,Ur,[p(`div`,{class:c([`ops-panel alarm-panel`,{live:x(O).alarms.length>0}])},[p(`div`,Wr,[t[57]||=p(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),p(`b`,null,o(e.$t(`daq.k1alarm141`)),1),p(`span`,{class:c([`mono cnt`,{hot:x(O).alarms.length>0}])},o(x(O).alarms.length),3)]),p(`div`,Gr,[x(O).alarms.length===0?(s(),m(`p`,Kr,o(e.$t(`daq.k1evt001`)),1)):(s(!0),m(h,{key:1},l(x(O).alarms,n=>(s(),m(`div`,{key:n.id,class:`alarm-row`},[t[58]||=p(`span`,{class:`i-tabler-alert-triangle tri`},null,-1),p(`b`,null,o(n.nodeName),1),p(`span`,qr,o(n.metric),1),p(`span`,Jr,o(n.value)+` `+o(n.rule===`lt-min`?`<`:`>`)+` `+o(n.threshold),1),n.escalation>0?(s(),m(`small`,Yr,`+`+o(n.escalation),1)):g(``,!0),p(`button`,{class:`mini-btn ack`,onClick:e=>xe(n.id)},o(e.$t(`daq.k1ack142`)),9,Xr)]))),128))])],2),p(`div`,Zr,[p(`div`,Qr,[t[60]||=p(`span`,{class:`i-tabler-activity`},null,-1),p(`b`,null,o(e.$t(`daq.k1evt002`)),1),u(r,{class:`panel-link`,to:`/logs`},{default:b(()=>[S(o(e.$t(`daq.k1evt003`)),1),t[59]||=p(`span`,{class:`i-tabler-arrow-right`},null,-1)]),_:1})]),p(`div`,$r,[x(ve).recent.length===0?(s(),m(`p`,ei,o(e.$t(`daq.k1evt004`)),1)):(s(!0),m(h,{key:1},l(x(ve).recent,(t,n)=>(s(),m(`div`,{key:`${t.at}:${t.actor}:${t.action}:${n}`,class:`evt-row`},[p(`span`,ti,o(be(t.at)),1),p(`span`,{class:c([`src-badge`,t.actorKind])},o(t.actorKind===`agent`?`Agent`:t.actorKind===`user`?e.$t(`logs.src.user`):e.$t(`logs.src.system`)),3),p(`span`,{class:c([`kind-chip`,t.kind])},o(ye(t.kind)),3),p(`span`,{class:`txt`,title:t.summary},o(t.summary),9,ni)]))),128))])])]),p(`table`,{ref_key:`nodesTableRef`,ref:Ci,class:`nodes-table`},[p(`thead`,null,[p(`tr`,null,[p(`th`,null,o(e.$t(`daq.k45uio067`)),1),p(`th`,null,o(e.$t(`daq.k42w8s068`)),1),p(`th`,null,o(e.$t(`daq.k3mv305069`)),1),p(`th`,null,o(e.$t(`daq.k1trnd001`)),1),p(`th`,null,o(e.$t(`daq.k1l6g2ga070`)),1),p(`th`,null,o(e.$t(`daq.k3zi0nf071`)),1),p(`th`,null,o(e.$t(`daq.k4a0la072`)),1),p(`th`,null,o(e.$t(`daq.k3wj9n051`)),1),p(`th`,{title:e.$t(`daq.k1runtipc131`)},o(e.$t(`daq.k1b2tkyv057`)),9,ri),p(`th`,{title:e.$t(`daq.k1prdrtip132`)},o(e.$t(`daq.k1prodrc128`)),9,ii),p(`th`,null,o(e.$t(`daq.k1i8rtqt054`)),1),p(`th`,ai,o(e.$t(`daq.k40aa6073`)),1)])]),p(`tbody`,null,[Ti.value>0?(s(),m(`tr`,oi,[p(`td`,{colspan:11,style:n({height:Ti.value+`px`})},null,4)])):g(``,!0),(s(!0),m(h,null,l(wi.value,e=>(s(),v(i,{key:e.id,n:e},null,8,[`n`]))),128)),Ei.value>0?(s(),m(`tr`,si,[p(`td`,{colspan:11,style:n({height:Ei.value+`px`})},null,4)])):g(``,!0),x(O).loaded&&x(O).nodes.length===0?(s(),m(`tr`,ci,[p(`td`,li,[p(`div`,ui,[p(`p`,di,o(e.$t(`daq.kvhjyc3075`)),1)])])])):x(O).loaded&&z.value.length===0?(s(),m(`tr`,fi,[p(`td`,pi,[p(`div`,mi,[p(`p`,hi,o(e.$t(`daq.k1w20qew076`)),1)])])])):g(``,!0)])],512)])]),_:1},8,[`spinning`]),x(O).error?(s(),m(`p`,gi,[S(o(x(O).error)+`(`,1),u(r,{to:`/workshop`},{default:b(()=>[S(o(e.$t(`daq.k1bhhheq077`)),1)]),_:1}),t[61]||=S(`) `,-1)])):g(``,!0)])}}}),[[`__scopeId`,`data-v-74f24580`]]);export{yi as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./BU83-NnX.js";import{C as t}from"./DdD9mCHM.js";import{R as n,S as ee,Ut as r,V as i,Vt as a,W as o,d as s,dt as c,f as l,h as u,i as d,m as f,nt as p,p as te,pt as m,s as ne,xt as h,y as g}from"./CSkxz2NX.js";import{c as _,d as re,f as ie,l as v}from"./D6uzXueg.js";import{t as y}from"./BDNMzG2s2.js";import{t as ae}from"./D0ZBQrN_2.js";import{t as oe}from"./BC9wjTJK2.js";import{t as se}from"./ca4TJ3Op.js";import{t as ce}from"./CFxtLwjp.js";var le={class:`page`},ue={class:`aw-page-head`},de={class:`sub`},fe={class:`head-actions`},pe=[`title`],b={class:`live-txt mono`},x={class:`filter-card`},S={class:`flt`},C={value:``},w=[`value`],T={class:`flt`},E={value:``},D=[`value`],O={class:`flt`},k={value:``},A=[`value`],j={class:`flt`},M={value:``},N={value:`user`},P={value:`system`},F={class:`flt`},I={value:``},L=[`value`],R={class:`flt flt-grow`},z=[`placeholder`],B=[`disabled`],me={class:`table-card`},he={key:0,class:`err`},ge={class:`log-table`},_e={class:`th-time`},ve={class:`th-src`},ye={class:`th-kind`},be={class:`th-scope`},xe={class:`th-detail`},Se={class:`mono dim`},Ce={class:`actor`},we={class:`summary`},Te={class:`mono dim action`},Ee={class:`scope`},De=[`title`],Oe=[`title`],ke={key:2,class:`scope-chip`,title:`Recipe`},Ae={key:3,class:`dim`},je={class:`detail-cell`},Me=[`onClick`],Ne={key:1,class:`dim`},Pe={key:0,class:`log-detail-row`},Fe={colspan:`7`,class:`detail-td`},V={class:`detail-box mono`},Ie={class:`log-empty-row`},Le={key:0,colspan:`7`,class:`empty`},Re={class:`modal`},ze={class:`m-title`},Be={class:`m-f`},Ve=[`placeholder`],He={class:`m-f`},Ue=[`placeholder`],We={class:`m-grid`},Ge={class:`m-f`},Ke={value:``},qe=[`value`],Je={class:`m-f`},Ye={value:``},Xe=[`value`],Ze={class:`m-f`},Qe={value:``},$e=[`value`],et={key:0,class:`err`},tt={class:`m-actions`},nt=[`disabled`],H=y(ee({name:`OpsLogsPage`,setup(ee){let y=e=>t().$i18n.t(e),H=se(),rt=oe(),U=ce(),it=[`write`,`manual`,`alarm`,`line`,`recipe`,`rollback`,`daq`,`system`],W=c({lineId:``,productId:``,recipeId:``,actorKind:``,kind:``,text:``}),G=m(null),K=m(!1),q=c({summary:``,detail:``,lineId:``,productId:``,recipeId:``}),at=s(()=>!!(W.lineId||W.productId||W.recipeId||W.actorKind||W.kind||W.text.trim())),J=s(()=>H.products.filter(e=>!W.lineId||e.lineId===W.lineId)),Y=s(()=>H.recipes.filter(e=>(!W.lineId||e.lineId===W.lineId)&&(!W.productId||e.productId===W.productId)));function X(){U.fetchLogs({lineId:W.lineId,productId:W.productId,recipeId:W.recipeId,actorKind:W.actorKind,kind:W.kind,q:W.text.trim(),limit:300}),G.value=null}function ot(){W.lineId=``,W.productId=``,W.recipeId=``,W.actorKind=``,W.kind=``,W.text=``,X()}function st(){q.summary=``,q.detail=``,q.lineId=W.lineId,q.productId=W.productId,q.recipeId=W.recipeId,K.value=!0}async function ct(){try{let t=q.detail.trim();await U.postManual({summary:q.summary.trim(),lineId:q.lineId,productId:q.productId,recipeId:q.recipeId,...t?{detail:{note:t}}:{}}),e.success(y(`logs.mOk`)),K.value=!1,X()}catch(t){e.error(ae(t))}}function lt(e){return!!e.detailJson&&e.detailJson!==`{}`}function ut(e){G.value=G.value===e.id?null:e.id}function dt(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function ft(e){let t=new Date(e);if(!Number.isFinite(t.getTime()))return e;let n=e=>String(e).padStart(2,`0`);return`${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function pt(e){return e===`agent`?`Agent`:y(e===`user`?`logs.src.user`:`logs.src.system`)}function mt(e){return e?y(`logs.kind.${e}`):`—`}function Z(e){return H.lines.find(t=>t.id===e)?.name??``}function Q(e){return H.products.find(t=>t.id===e)?.name??``}function $(e){return H.recipes.find(t=>t.id===e)?.name??``}return n(()=>{rt.ensureConnected(),U.ensureLive(),H.load(),X()}),(e,t)=>(i(),u(`div`,le,[l(`header`,ue,[l(`div`,null,[t[17]||=l(`p`,{class:`aw-kicker`},` agentworkshop / audit log `,-1),l(`h1`,null,r(e.$t(`logs.title`)),1),l(`p`,de,r(e.$t(`logs.sub`)),1)]),l(`div`,fe,[l(`span`,{class:`live-dot`,title:e.$t(`logs.liveHint`)},null,8,pe),l(`span`,b,r(e.$t(`logs.live`))+` `+r(h(U).recent.length),1),l(`button`,{class:`pill-btn`,onClick:st},[t[18]||=l(`span`,{class:`i-tabler-plus`},null,-1),g(` `+r(e.$t(`logs.manual`)),1)])])]),l(`section`,x,[l(`label`,S,[l(`span`,null,r(e.$t(`logs.fLine`)),1),p(l(`select`,{"onUpdate:modelValue":t[0]||=e=>W.lineId=e,class:`inp-sel`,onChange:t[1]||=e=>{W.productId=``,W.recipeId=``}},[l(`option`,C,r(e.$t(`logs.all`)),1),(i(!0),u(d,null,o(h(H).lines,e=>(i(),u(`option`,{key:e.id,value:e.id},r(e.name),9,w))),128))],544),[[_,W.lineId]])]),l(`label`,T,[l(`span`,null,r(e.$t(`logs.fProduct`)),1),p(l(`select`,{"onUpdate:modelValue":t[2]||=e=>W.productId=e,class:`inp-sel`,onChange:t[3]||=e=>W.recipeId=``},[l(`option`,E,r(e.$t(`logs.all`)),1),(i(!0),u(d,null,o(J.value,e=>(i(),u(`option`,{key:e.id,value:e.id},r(e.name),9,D))),128))],544),[[_,W.productId]])]),l(`label`,O,[t[19]||=l(`span`,null,`Recipe`,-1),p(l(`select`,{"onUpdate:modelValue":t[4]||=e=>W.recipeId=e,class:`inp-sel`},[l(`option`,k,r(e.$t(`logs.all`)),1),(i(!0),u(d,null,o(Y.value,e=>(i(),u(`option`,{key:e.id,value:e.id},r(e.name),9,A))),128))],512),[[_,W.recipeId]])]),l(`label`,j,[l(`span`,null,r(e.$t(`logs.fSource`)),1),p(l(`select`,{"onUpdate:modelValue":t[5]||=e=>W.actorKind=e,class:`inp-sel`},[l(`option`,M,r(e.$t(`logs.all`)),1),l(`option`,N,r(e.$t(`logs.src.user`)),1),t[20]||=l(`option`,{value:`agent`},` Agent `,-1),l(`option`,P,r(e.$t(`logs.src.system`)),1)],512),[[_,W.actorKind]])]),l(`label`,F,[l(`span`,null,r(e.$t(`logs.fKind`)),1),p(l(`select`,{"onUpdate:modelValue":t[6]||=e=>W.kind=e,class:`inp-sel`},[l(`option`,I,r(e.$t(`logs.all`)),1),(i(),u(d,null,o(it,t=>l(`option`,{key:t,value:t},r(e.$t(`logs.kind.${t}`)),9,L)),64))],512),[[_,W.kind]])]),l(`label`,R,[l(`span`,null,r(e.$t(`logs.fKeyword`)),1),p(l(`input`,{"onUpdate:modelValue":t[7]||=e=>W.text=e,class:`inp-sel`,type:`search`,placeholder:e.$t(`logs.fKeywordPh`),onKeydown:re(X,[`enter`])},null,40,z),[[v,W.text]])]),l(`button`,{class:`pill-btn`,disabled:h(U).loading.list,onClick:X},[t[21]||=l(`span`,{class:`i-tabler-search`},null,-1),g(` `+r(e.$t(`logs.query`)),1)],8,B),at.value?(i(),u(`button`,{key:0,class:`mini-btn`,onClick:ot},r(e.$t(`logs.reset`)),1)):f(``,!0)]),l(`section`,me,[h(U).error.list?(i(),u(`p`,he,r(h(U).error.list),1)):f(``,!0),l(`table`,ge,[l(`thead`,null,[l(`tr`,null,[l(`th`,_e,r(e.$t(`logs.thTime`)),1),l(`th`,ve,r(e.$t(`logs.fSource`)),1),l(`th`,null,r(e.$t(`logs.thActor`)),1),l(`th`,ye,r(e.$t(`logs.fKind`)),1),l(`th`,null,r(e.$t(`logs.thSummary`)),1),l(`th`,be,r(e.$t(`logs.thScope`)),1),l(`th`,xe,r(e.$t(`logs.thDetail`)),1)])]),l(`tbody`,null,[(i(!0),u(d,null,o(h(U).results,t=>(i(),u(d,{key:t.id},[l(`tr`,null,[l(`td`,Se,r(ft(t.at)),1),l(`td`,null,[l(`span`,{class:a([`src-badge`,t.actorKind])},r(pt(t.actorKind)),3)]),l(`td`,Ce,r(t.actorName||t.actor||`—`),1),l(`td`,null,[l(`span`,{class:a([`kind-chip`,t.kind])},r(mt(t.kind)),3)]),l(`td`,we,[g(r(t.summary)+` `,1),l(`small`,Te,r(t.action),1)]),l(`td`,Ee,[Z(t.lineId)?(i(),u(`span`,{key:0,class:`scope-chip`,title:e.$t(`logs.fLine`)},r(Z(t.lineId)),9,De)):f(``,!0),Q(t.productId)?(i(),u(`span`,{key:1,class:`scope-chip`,title:e.$t(`logs.fProduct`)},r(Q(t.productId)),9,Oe)):f(``,!0),$(t.recipeId)?(i(),u(`span`,ke,r($(t.recipeId)),1)):f(``,!0),!t.lineId&&!t.productId&&!t.recipeId?(i(),u(`span`,Ae,`—`)):f(``,!0)]),l(`td`,je,[lt(t)?(i(),u(`button`,{key:0,class:`mini-btn`,onClick:e=>ut(t)},r(G.value===t.id?e.$t(`logs.fold`):e.$t(`logs.expand`)),9,Me)):(i(),u(`span`,Ne,r(e.$t(`logs.noDetail`)),1))])]),G.value===t.id?(i(),u(`tr`,Pe,[l(`td`,Fe,[l(`pre`,V,r(dt(t.detailJson)),1)])])):f(``,!0)],64))),128)),l(`tr`,Ie,[h(U).results.length===0?(i(),u(`td`,Le,[h(U).loading.list?(i(),u(d,{key:0},[g(r(e.$t(`logs.loading`)),1)],64)):(i(),u(d,{key:1},[g(r(e.$t(`logs.empty`)),1)],64))])):f(``,!0)])])])]),(i(),te(ne,{to:`body`},[K.value?(i(),u(`div`,{key:0,class:`modal-mask`,onClick:t[16]||=ie(e=>K.value=!1,[`self`])},[l(`div`,Re,[l(`h3`,ze,r(e.$t(`logs.manual`)),1),l(`label`,Be,[l(`span`,null,r(e.$t(`logs.mSummary`))+` *`,1),p(l(`textarea`,{"onUpdate:modelValue":t[8]||=e=>q.summary=e,rows:`3`,placeholder:e.$t(`logs.mSummaryPh`)},null,8,Ve),[[v,q.summary]])]),l(`label`,He,[l(`span`,null,r(e.$t(`logs.mDetail`)),1),p(l(`textarea`,{"onUpdate:modelValue":t[9]||=e=>q.detail=e,rows:`2`,placeholder:e.$t(`logs.mDetailPh`)},null,8,Ue),[[v,q.detail]])]),l(`div`,We,[l(`label`,Ge,[l(`span`,null,r(e.$t(`logs.fLine`)),1),p(l(`select`,{"onUpdate:modelValue":t[10]||=e=>q.lineId=e,class:`inp-sel`,onChange:t[11]||=e=>{q.productId=``,q.recipeId=``}},[l(`option`,Ke,r(e.$t(`logs.all`)),1),(i(!0),u(d,null,o(h(H).lines,e=>(i(),u(`option`,{key:e.id,value:e.id},r(e.name),9,qe))),128))],544),[[_,q.lineId]])]),l(`label`,Je,[l(`span`,null,r(e.$t(`logs.fProduct`)),1),p(l(`select`,{"onUpdate:modelValue":t[12]||=e=>q.productId=e,class:`inp-sel`,onChange:t[13]||=e=>q.recipeId=``},[l(`option`,Ye,r(e.$t(`logs.all`)),1),(i(!0),u(d,null,o(J.value,e=>(i(),u(`option`,{key:e.id,value:e.id},r(e.name),9,Xe))),128))],544),[[_,q.productId]])]),l(`label`,Ze,[t[22]||=l(`span`,null,`Recipe`,-1),p(l(`select`,{"onUpdate:modelValue":t[14]||=e=>q.recipeId=e,class:`inp-sel`},[l(`option`,Qe,r(e.$t(`logs.all`)),1),(i(!0),u(d,null,o(Y.value,e=>(i(),u(`option`,{key:e.id,value:e.id},r(e.name),9,$e))),128))],512),[[_,q.recipeId]])])]),h(U).error.post?(i(),u(`p`,et,r(h(U).error.post),1)):f(``,!0),l(`div`,tt,[l(`button`,{class:`ghost-btn`,onClick:t[15]||=e=>K.value=!1},r(e.$t(`common.cancel`)),1),l(`button`,{class:`pill-btn`,disabled:h(U).loading.posting||!q.summary.trim(),onClick:ct},r(e.$t(`logs.mSubmit`)),9,nt)])])])):f(``,!0)]))]))}}),[[`__scopeId`,`data-v-d6872483`]]);export{H as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.model-preview-3d[data-v-ed056b0a]{border:1px solid var(--hud-line,#263340);background:radial-gradient(120% 90% at 50% 20%,#41c8f41f,#0000 62%),linear-gradient(#0b121b,#0e141d);border-radius:2px;width:100%;min-height:40px;position:relative;overflow:hidden}.mp-loading[data-v-ed056b0a]{place-items:center;display:grid;position:absolute;inset:0}.mp-spin[data-v-ed056b0a]{border:2px solid #41c8f440;border-top-color:#41c8f4;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite mp-spin-ed056b0a}@keyframes mp-spin-ed056b0a{to{transform:rotate(1turn)}}.mp-failed[data-v-ed056b0a]{font-family:var(--font-mono);letter-spacing:.12em;color:var(--hud-dim,#7f919e);place-items:center;font-size:10px;display:grid;position:absolute;inset:0}.asset-lib[data-v-3d6a30ed]{width:184px;font-family:var(--font-body);flex-direction:column;flex:none;gap:8px;padding:0 0 10px;display:flex}.lib-head[data-v-3d6a30ed]{border-bottom:1px solid #26334073;align-items:center;gap:7px;padding:10px 12px 6px;display:flex}.head-title[data-v-3d6a30ed]{font-family:var(--font-mono);letter-spacing:.16em;color:var(--hud-text,#d9e4ee);white-space:nowrap;font-size:10px;font-weight:600}.head-hint[data-v-3d6a30ed]{font-family:var(--font-mono);color:var(--hud-faint,#5b6c7b);white-space:nowrap;margin-left:auto;font-size:10px}.upload-box[data-v-3d6a30ed]{transition:border-color .16s var(--hud-ease,ease), background .16s var(--hud-ease,ease);background:#0b101866;border:1px dashed #263340cc;border-radius:2px;flex-direction:column;gap:7px;margin:8px 10px 0;padding:7px;display:flex}.upload-box.drop[data-v-3d6a30ed]{border-color:var(--hud-accent,#4da3ff);background:#4da3ff14}.upload-row[data-v-3d6a30ed]{cursor:pointer;align-items:center;gap:6px;min-height:26px;display:flex}.file-input[data-v-3d6a30ed]{display:none}.upload-name[data-v-3d6a30ed]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;font-size:10px;display:inline-flex;overflow:hidden}.upload-ico[data-v-3d6a30ed]{color:var(--hud-accent,#4da3ff);font-size:13px}.drop-hint[data-v-3d6a30ed]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-accent,#4da3ff);align-items:center;gap:5px;padding:2px 0 4px;font-size:10px;display:inline-flex}.upload-file-tag[data-v-3d6a30ed]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);border:1px solid var(--hud-line,#263340);border-radius:2px;padding:3px 6px;font-size:9.5px}.upload-actions[data-v-3d6a30ed]{align-items:center;gap:6px;display:flex}.upload-btn[data-v-3d6a30ed]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-text,#d9e4ee);background:var(--hud-panel-raised,#141b26);border:1px solid var(--hud-line,#263340);cursor:pointer;transition:border-color .14s var(--hud-ease,ease), color .14s var(--hud-ease,ease);border-radius:2px;padding:5px 10px;font-size:10px;font-weight:600}.upload-btn[data-v-3d6a30ed]:hover:not(:disabled){border-color:var(--hud-accent,#4da3ff);color:var(--hud-accent,#4da3ff)}.upload-btn[data-v-3d6a30ed]:disabled{opacity:.45;cursor:default}.upload-btn.go[data-v-3d6a30ed]{color:var(--hud-amber,#f5a742);background:#f5a74214;border-color:#f5a7428c}.upload-btn.go[data-v-3d6a30ed]:hover:not(:disabled){border-color:var(--hud-amber,#f5a742);color:var(--hud-amber,#f5a742);background:#f5a74229}.mini-err[data-v-3d6a30ed]{font-family:var(--font-mono);color:var(--hud-danger,#ff6b5c);font-size:9.5px}.mini-err[data-v-3d6a30ed],.mini-msg[data-v-3d6a30ed]{font-size:10px}.mini-msg[data-v-3d6a30ed]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);padding:0 10px}.lib-grid[data-v-3d6a30ed]{flex-direction:column;gap:4px;max-height:42vh;padding:6px 10px 2px;display:flex;overflow:hidden auto}.model-card[data-v-3d6a30ed]{cursor:grab;transition:background .14s var(--hud-ease,ease);background:#141b26a6;border:0;border-radius:2px;flex-direction:column;align-items:stretch;gap:4px;padding:6px;display:flex;position:relative}.model-card[data-v-3d6a30ed]:hover{background:var(--hud-panel-hover,#1a2432)}.model-card[data-v-3d6a30ed]:active{cursor:grabbing}.model-card .model-preview-3d[data-v-3d6a30ed]{margin-bottom:2px}.model-name[data-v-3d6a30ed]{color:var(--hud-text,#d9e4ee);text-align:left;text-overflow:ellipsis;white-space:nowrap;padding:0 2px;font-size:11px;font-weight:600;overflow:hidden}.model-badge[data-v-3d6a30ed]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint,#5b6c7b);text-align:left;padding:0 2px;font-size:10px}.card-actions[data-v-3d6a30ed]{justify-content:flex-end;gap:4px;display:flex}.card-btn[data-v-3d6a30ed]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-text,#d9e4ee);border:1px solid var(--hud-line,#263340);cursor:pointer;transition:border-color .14s var(--hud-ease,ease), color .14s var(--hud-ease,ease);background:0 0;border-radius:2px;padding:2px 8px;font-size:10px;font-weight:600}.card-btn[data-v-3d6a30ed]:hover:not(:disabled){border-color:var(--hud-accent,#4da3ff);color:var(--hud-accent,#4da3ff)}.card-btn.danger[data-v-3d6a30ed]{color:var(--hud-danger,#ff6b5c)}.card-btn.danger[data-v-3d6a30ed]:hover:not(:disabled){border-color:var(--hud-danger,#ff6b5c);color:var(--hud-danger,#ff6b5c)}.card-btn[data-v-3d6a30ed]:disabled{opacity:.45;cursor:default}.model-img[data-v-3d6a30ed]{-o-object-fit:contain;object-fit:contain;pointer-events:none;width:46px;height:68px}.model-img.glb[data-v-3d6a30ed]{background:var(--hud-input,#0b1018);border:1px dashed var(--hud-line,#263340);border-radius:2px;justify-content:center;align-items:center;width:100%;height:44px;display:inline-flex}.glb-cube[data-v-3d6a30ed]{color:var(--hud-faint,#5b6c7b);font-size:24px;line-height:1}.lib-note[data-v-3d6a30ed]{font-family:var(--font-mono);color:var(--hud-faint,#5b6c7b);align-items:center;gap:7px;padding:8px 2px;font-size:9.5px;display:flex}.loading-dot[data-v-3d6a30ed]{border:2px solid var(--hud-line,#263340);border-top-color:var(--hud-accent,#4da3ff);border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin-3d6a30ed}@keyframes spin-3d6a30ed{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.loading-dot[data-v-3d6a30ed]{animation:none}}.twin-panel[data-v-37ad3127]{width:auto;box-shadow:none;background:0 0;border:0;border-radius:0;flex-direction:column;flex:none;gap:8px;padding:0;display:flex}.twin-head[data-v-37ad3127]{border-bottom:1px solid #26334073;align-items:center;gap:8px;padding:10px 12px 6px;display:flex}.twin-error[data-v-37ad3127]{color:#ffb4b4;word-break:break-all;background:#ff6b6b1a;border:1px solid #ff6b6b59;border-radius:8px;padding:7px 10px;font-size:11px;line-height:1.5}.twin-kicker[data-v-37ad3127]{font-family:var(--font-mono);letter-spacing:.16em;color:var(--hud-text,#d9e4ee);font-size:10px;font-weight:600}.twin-count[data-v-37ad3127]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-dim,#8496a5);margin-left:auto;font-size:10px}.twin-empty[data-v-37ad3127]{padding:10px}.twin-empty-frame[data-v-37ad3127]{border:1px dashed var(--hud-line);flex-direction:column;gap:4px;padding:12px 10px;display:flex}.twin-empty-title[data-v-37ad3127]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-text);font-size:11px}.twin-empty-sub[data-v-37ad3127]{color:var(--hud-dim);font-size:10px;line-height:1.6}.twin-list[data-v-37ad3127]{flex-direction:column;gap:4px;max-height:46vh;padding:4px 0 10px;display:flex;overflow:hidden auto}.twin-card[data-v-37ad3127]{text-align:left;cursor:pointer;background:#141b26a6;border:0;border-radius:2px;flex-direction:column;gap:6px;margin:0 10px;padding:8px 9px;transition:background .16s;display:flex}.twin-card[data-v-37ad3127]:hover{background:var(--hud-panel-hover)}.twin-card[data-v-37ad3127]:active{background:var(--hud-panel-raised)}.twin-card:hover .twin-name[data-v-37ad3127]{color:#e8f1f8}.twin-card.daq[data-v-37ad3127]{background:#35e0a00f;border:1px solid #35e0a052}.twin-card.daq[data-v-37ad3127]:hover{background:#35e0a01c;border-color:#35e0a080}.twin-card.daq .twin-code[data-v-37ad3127],.twin-card.daq .twin-model-tag[data-v-37ad3127]{color:var(--hud-accent,#35e0a0)}.twin-row[data-v-37ad3127]{align-items:center;gap:8px;min-width:0;display:flex}.twin-model-tag[data-v-37ad3127]{min-width:30px;font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint);flex:none;font-size:10px;font-weight:600}.twin-idbar[data-v-37ad3127]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.twin-name[data-v-37ad3127]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;font-weight:600;overflow:hidden}.twin-code[data-v-37ad3127]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-dim);font-size:10px}.twin-del[data-v-37ad3127]{width:18px;height:18px;font-family:var(--font-mono);color:var(--hud-dim,#8496a5);border:1px solid var(--hud-line,#263340);cursor:pointer;background:0 0;border-radius:2px;flex:none;font-size:10px;line-height:1;transition:border-color .14s,color .14s,background .14s}.twin-del[data-v-37ad3127]:hover:not(:disabled){border-color:var(--hud-danger,#ff6b5c);color:var(--hud-danger,#ff6b5c)}.twin-del.armed[data-v-37ad3127]{color:#1a0d0a;background:var(--hud-danger,#ff6b5c);border-color:var(--hud-danger,#ff6b5c);width:auto;padding:0 5px}.twin-del[data-v-37ad3127]:disabled{opacity:.4;cursor:default}.twin-state[data-v-37ad3127]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-dim);border:1px solid var(--hud-line);border-radius:2px;flex:none;align-items:center;gap:5px;padding:2px 5px;font-size:10px;display:inline-flex}.twin-state.s-alarm[data-v-37ad3127]{color:var(--hud-danger);border-color:#ff6b5c80}.twin-state.s-running[data-v-37ad3127]{color:var(--hud-ok);border-color:#7fd4a066}.twin-state-dot[data-v-37ad3127]{border-radius:50%;width:5px;height:5px}.twin-tele[data-v-37ad3127]{border-top:1px dashed var(--hud-line);grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 10px;margin:0 0 2px;padding-top:6px;display:grid}.tele-item[data-v-37ad3127]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-dim);justify-content:space-between;gap:6px;min-width:0;font-size:9.5px;display:flex}.tele-item em[data-v-37ad3127]{text-overflow:ellipsis;font-style:normal;overflow:hidden}.tele-item b[data-v-37ad3127]{color:var(--hud-text);font-weight:500}.twin-daq[data-v-37ad3127]{border-top:1px dashed #35e0a04d;flex-direction:column;gap:2px;margin:0 0 2px;padding-top:6px;display:flex}.daq-item[data-v-37ad3127]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-accent,#35e0a0);justify-content:space-between;align-items:baseline;gap:6px;min-width:0;font-size:9.5px;display:flex}.daq-item em[data-v-37ad3127]{text-overflow:ellipsis;white-space:nowrap;opacity:.85;font-style:normal;overflow:hidden}.daq-item b[data-v-37ad3127]{white-space:nowrap;font-size:10.5px;font-weight:700}.daq-item b i[data-v-37ad3127]{opacity:.75;margin-left:2px;font-size:10px;font-style:normal;font-weight:500}.daq-item.alarm[data-v-37ad3127]{color:var(--hud-amber,#f6c453)}.twin-dcw[data-v-37ad3127]{border-top:1px dashed #f0a04c59;flex-direction:column;gap:6px;margin:0 0 2px;padding-top:6px;display:flex}.dcw-item[data-v-37ad3127]{flex-direction:column;gap:3px;display:flex}.dcw-head[data-v-37ad3127]{font-family:var(--font-mono);color:var(--hud-dim);justify-content:space-between;align-items:baseline;gap:6px;font-size:9.5px;display:flex}.dcw-head em[data-v-37ad3127]{text-overflow:ellipsis;white-space:nowrap;font-style:normal;overflow:hidden}.dcw-src[data-v-37ad3127]{color:var(--hud-amber,#f6c453);border:1px solid #f0a04c80;border-radius:2px;margin-left:4px;padding:0 3px;font-size:10px;font-style:normal}.dcw-set[data-v-37ad3127]{font-variant-numeric:tabular-nums;color:var(--hud-amber,#f6c453);white-space:nowrap;font-size:12px;font-weight:700}.dcw-set i[data-v-37ad3127]{opacity:.75;margin-left:2px;font-size:10px;font-style:normal;font-weight:500}.dcw-act[data-v-37ad3127]{font-family:var(--font-mono);color:var(--hud-dim);justify-content:space-between;align-items:baseline;gap:6px;font-size:10px;display:flex}.dcw-act em[data-v-37ad3127]{letter-spacing:.08em;color:var(--hud-faint);font-size:10px;font-style:normal}.dcw-act b[data-v-37ad3127]{font-variant-numeric:tabular-nums;color:var(--hud-accent,#35e0a0);white-space:nowrap;font-size:11.5px;font-weight:700}.dcw-act b i[data-v-37ad3127]{opacity:.75;margin-left:2px;font-size:10px;font-style:normal;font-weight:500}.dcw-act-at[data-v-37ad3127]{color:var(--hud-faint);font-size:10px;font-style:normal}.dcw-win[data-v-37ad3127]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);letter-spacing:.04em;font-size:10px}.dcw-win span[data-v-37ad3127]{border-bottom:1px dotted var(--hud-line);padding-bottom:1px}.dcw-ctrl[data-v-37ad3127]{align-items:center;gap:4px;display:flex}.dcw-ctrl .ctrl-input[data-v-37ad3127]{flex:1;width:auto;min-width:0}.dcw-send[data-v-37ad3127]{color:var(--hud-amber,#f6c453);border-color:#f0a04c80;flex:none}.dcw-send[data-v-37ad3127]:hover:not(:disabled){color:var(--hud-amber,#f6c453);border-color:var(--hud-amber,#f6c453);background:#f0a04c1f}.dcw-err[data-v-37ad3127]{font-family:var(--font-mono);color:var(--hud-danger,#ff6b5c);font-size:10px}.ctrl-btn[data-v-37ad3127]{letter-spacing:.06em;font-size:10px;font-weight:600;font-family:var(--font-mono);color:var(--hud-text);border:1px solid var(--hud-line);cursor:pointer;background:0 0;border-radius:2px;padding:3px 7px;transition:border-color .14s,color .14s,background .14s}.ctrl-btn[data-v-37ad3127]:hover:not(:disabled){border-color:var(--hud-accent);color:var(--hud-accent)}.ctrl-btn[data-v-37ad3127]:disabled{opacity:.45;cursor:default}.ctrl-input[data-v-37ad3127]{width:48px;font-family:var(--font-mono);border:1px solid var(--hud-line);background:var(--hud-input);color:var(--hud-text);font-variant-numeric:tabular-nums;border-radius:2px;padding:3px 6px;font-size:10px}.ctrl-input[data-v-37ad3127]:focus{border-color:var(--hud-accent);outline:none}.twin-err[data-v-37ad3127]{color:var(--hud-danger);padding:0 10px 8px;font-size:9.5px}.town-view[data-v-3e78e101]{--hud-bg:#070b13;--hud-panel:#0d1420;--hud-panel-2:#111a2b;--hud-panel-raised:#152034;--hud-panel-hover:#16233a;--hud-line:#1d2a42;--hud-line-soft:#16202f;--hud-line-hi:#2c4568;--hud-input:#0a111d;--hud-text:#e8eef8;--hud-dim:#8fa0b5;--hud-faint:#5f6e84;--hud-accent:#35e0a0;--hud-accent-dim:#1f9e6e;--hud-cyan:#41c8f4;--hud-amber:#f6c453;--hud-ok:#35e0a0;--hud-danger:#ff6b6b;--hud-shadow:0 16px 40px #0000008c;--hud-ease:cubic-bezier(.22, .68, .36, 1);--hud-r-sm:8px;--hud-r-md:10px;--hud-r-lg:12px;background:var(--hud-bg);height:100%;min-height:0;color:var(--hud-text);font-family:var(--font-body);flex-direction:column;font-size:13px;display:flex}.topnav[data-v-3e78e101]{border-bottom:1px solid var(--hud-line-soft);z-index:60;background:linear-gradient(#0c1320,#0a101b);flex:none;align-items:center;gap:14px;height:50px;padding:0 16px;display:flex;position:relative}.topnav[data-v-3e78e101]:after{content:"";pointer-events:none;background:linear-gradient(90deg,#0000 4%,#35e0a059 50%,#0000 96%);height:1px;position:absolute;bottom:-1px;left:0;right:0}.brand[data-v-3e78e101]{align-items:center;gap:10px;min-width:230px;display:flex}.brand-glyph[data-v-3e78e101]{flex:none;width:26px;height:26px}.brand-name[data-v-3e78e101]{letter-spacing:.06em;font-size:14.5px;font-weight:800}.brand-name em[data-v-3e78e101]{color:var(--hud-accent);font-style:normal}.brand-sub[data-v-3e78e101]{color:var(--hud-faint);letter-spacing:.18em;margin-top:2px;font-size:10px}.nav-tabs[data-v-3e78e101]{align-items:center;gap:10px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.nav-action[data-v-3e78e101]{border-radius:var(--hud-r-sm);height:32px;color:var(--hud-text);transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease);background:0 0;border:1px solid #27395c;padding:0 14px;font-size:12px;font-weight:600}.nav-action[data-v-3e78e101]:hover{background:#14203a;border-color:#33507c}.save-chip[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.08em;border:1px solid var(--hud-line);color:var(--hud-dim);white-space:nowrap;border-radius:6px;padding:3px 9px;font-size:10px}.save-chip.s-dirty[data-v-3e78e101]{color:var(--hud-amber);border-color:#f6c45366}.save-chip.s-saving[data-v-3e78e101]{color:var(--hud-dim)}.save-chip.s-saved[data-v-3e78e101]{color:var(--hud-accent);border-color:#35e0a066}.save-chip.s-error[data-v-3e78e101]{color:var(--hud-danger);border-color:#ff6b6b66}.nav-right[data-v-3e78e101]{align-items:center;gap:10px;margin-left:auto;display:flex}.nav-chip[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-dim);border:1px solid var(--hud-line);font-variant-numeric:tabular-nums;border-radius:6px;padding:2px 8px;font-size:10.5px}.avatar-chip[data-v-3e78e101]{border:1px solid var(--hud-line-soft);background:#0e1626;border-radius:999px;align-items:center;gap:8px;padding:4px 10px 4px 4px;display:flex}.avatar-chip span[data-v-3e78e101]{color:var(--hud-text);font-size:12px}.town-view small[data-v-3e78e101]{font-size:11px}.avatar-fallback[data-v-3e78e101]{color:#04120c;background:linear-gradient(135deg,#1f9e6e,#41c8f4);border-radius:50%;place-items:center;width:24px;height:24px;font-size:10px;font-weight:700;display:grid}.seg[data-v-3e78e101]{border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);background:#0a111d;padding:2px;display:inline-flex}.seg button[data-v-3e78e101]{color:var(--hud-dim);transition:background .15s var(--hud-ease), color .15s var(--hud-ease);border-radius:6px;padding:4px 16px;font-size:11.5px;font-weight:600}.seg button.on[data-v-3e78e101]{background:var(--hud-accent);color:#04120c;box-shadow:0 0 12px #35e0a059}.app[data-v-3e78e101]{flex:1;grid-template-columns:clamp(212px,19vw,250px) minmax(0,1fr) clamp(284px,26vw,342px);min-height:0;display:grid}.rail[data-v-3e78e101]{background:linear-gradient(#0a101c,#080d16);flex-direction:column;gap:10px;min-height:0;padding:10px;display:flex;overflow:hidden auto}.rail-left[data-v-3e78e101]{border-right:1px solid var(--hud-line-soft)}.rail-right[data-v-3e78e101]{border-left:1px solid var(--hud-line-soft)}.rail[data-v-3e78e101]::-webkit-scrollbar{width:8px}.rail[data-v-3e78e101]::-webkit-scrollbar-thumb{background:#1c2942;border:2px solid #080d16;border-radius:4px}.rail[data-v-3e78e101]::-webkit-scrollbar-track{background:0 0}.ins-enter-active[data-v-3e78e101]{transition:opacity .2s var(--hud-ease), transform .2s var(--hud-ease)}.ins-leave-active[data-v-3e78e101]{transition:opacity .12s}.ins-enter-from[data-v-3e78e101]{opacity:0;transform:translate(12px)}.ins-leave-to[data-v-3e78e101]{opacity:0}.panel[data-v-3e78e101]{border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);background:linear-gradient(#101827,#0d1420);flex:none;padding:12px;position:relative;box-shadow:inset 0 1px #8fb0dc12,0 10px 28px #03070e73}.panel[data-v-3e78e101]:before{content:"";border-radius:var(--hud-r-lg) var(--hud-r-lg) 0 0;pointer-events:none;background:linear-gradient(#78a5dc0e,#0000);height:44px;position:absolute;inset:0 0 auto}.panel-hd[data-v-3e78e101]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.panel-hd h3[data-v-3e78e101]{letter-spacing:.02em;flex:1;margin:0;padding-left:11px;font-size:12.5px;font-weight:700;position:relative}.panel-hd h3[data-v-3e78e101]:before{content:"";background:var(--hud-accent);width:3px;height:12px;box-shadow:0 0 8px color-mix(in srgb, var(--hud-accent) 45%, transparent);border-radius:2px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.panel-tag[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-cyan);background:#41c8f41a;border:1px solid #41c8f440;border-radius:6px;padding:0 6px;font-size:9.5px;line-height:15px}.lib-embed[data-v-3e78e101]{margin:-4px 0 0}.daq-list[data-v-3e78e101],.scene-list[data-v-3e78e101]{flex-direction:column;gap:4px;display:flex}.daq-card[data-v-3e78e101]{border-radius:var(--hud-r-md);background:var(--hud-panel-2);cursor:grab;transition:transform .15s var(--hud-ease), border-color .15s var(--hud-ease), background .15s var(--hud-ease);border:1px solid #1f4a3a8c;align-items:center;gap:10px;margin-bottom:4px;padding:8px 9px;display:flex}.daq-card[data-v-3e78e101]:hover{background:#12291f;border-color:#35e0a080;transform:translateY(-1px)}.daq-card[data-v-3e78e101]:active{cursor:grabbing}.daq-ico[data-v-3e78e101]{width:34px;height:34px;color:var(--hud-accent);background:linear-gradient(160deg,#12291f,#0e1a24);border:1px solid #1f4a3aa6;border-radius:9px;flex:none;place-items:center;display:grid}.daq-svg[data-v-3e78e101]{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.daq-meta[data-v-3e78e101]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.daq-name[data-v-3e78e101]{color:var(--hud-text);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.daq-code[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint);font-size:10px}.daq-count[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-accent);background:#35e0a01a;border:1px solid #35e0a047;border-radius:6px;flex:none;padding:0 6px;font-size:10px;line-height:15px}.daq-group[data-v-3e78e101]{flex-direction:column;display:flex}.daq-card.tpl[data-v-3e78e101]{cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:0}.daq-card.tpl[data-v-3e78e101]:active{cursor:pointer}.daq-card.tpl[data-v-3e78e101]:focus-visible{outline:1px solid var(--hud-accent);outline-offset:1px}.daq-caret[data-v-3e78e101]{color:var(--hud-faint);transition:transform .15s var(--hud-ease);flex:none;font-size:10px}.daq-card.tpl.open .daq-caret[data-v-3e78e101]{transform:rotate(90deg)}.daq-card.tpl[data-v-3e78e101]:hover{transform:none}.daq-add[data-v-3e78e101]{width:18px;height:18px;color:var(--hud-faint);cursor:pointer;opacity:0;transition:opacity .15s var(--hud-ease), color .15s var(--hud-ease), border-color .15s var(--hud-ease), transform .16s cubic-bezier(.22, 1, .36, 1);background:0 0;border:1px solid #2c4568b3;border-radius:6px;flex:none;place-items:center;font-size:12px;line-height:1;display:grid}.daq-card.tpl:focus-within .daq-add[data-v-3e78e101],.daq-card.tpl:hover .daq-add[data-v-3e78e101]{opacity:1}@media (hover:none){.daq-add[data-v-3e78e101]{opacity:1}}.daq-add[data-v-3e78e101]:hover{color:var(--hud-accent);border-color:#35e0a080}.daq-add[data-v-3e78e101]:active{transform:scale(.9)}.daq-children[data-v-3e78e101]{animation:daq-tree-in-3e78e101 .16s var(--hud-ease);flex-direction:column;gap:2px;margin:2px 0 6px;padding-left:16px;display:flex}@keyframes daq-tree-in-3e78e101{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.daq-node[data-v-3e78e101]{cursor:default;transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease), transform .16s cubic-bezier(.22, 1, .36, 1);border:1px solid #0000;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.daq-node[data-v-3e78e101]:hover{background:#111b2c;border-color:#2c456899}.daq-node[draggable=true][data-v-3e78e101]{cursor:grab}.daq-node[draggable=true][data-v-3e78e101]:active{cursor:grabbing;transform:scale(.98)}.daq-node.placed[data-v-3e78e101]{cursor:pointer}.daq-node.placed[draggable=true][data-v-3e78e101]{cursor:grab}.node-dot[data-v-3e78e101]{background:var(--hud-ok);width:7px;height:7px;box-shadow:0 0 6px color-mix(in srgb, var(--hud-ok) 50%, transparent);border-radius:50%;flex:none}.node-dot.offline[data-v-3e78e101]{border:1px solid var(--hud-faint);box-shadow:none;background:0 0}.node-dot.warn[data-v-3e78e101]{background:var(--hud-amber);box-shadow:0 0 6px color-mix(in srgb, var(--hud-amber) 50%, transparent)}.node-dot.alarm[data-v-3e78e101]{background:var(--hud-danger);box-shadow:0 0 6px color-mix(in srgb, var(--hud-danger) 60%, transparent)}.daq-node .daq-name[data-v-3e78e101]{font-size:11.5px;font-weight:500}.daq-node-sub[data-v-3e78e101]{align-items:baseline;gap:7px;min-width:0;display:flex}.node-val[data-v-3e78e101]{color:var(--hud-cyan);flex:none;font-size:10px}.node-dev[data-v-3e78e101]{color:var(--hud-faint);white-space:nowrap;text-overflow:ellipsis;max-width:104px;font-size:9.5px;overflow:hidden}.daq-empty-hint[data-v-3e78e101]{color:var(--hud-faint);padding:4px 8px 6px 10px;font-size:10px}.scene-row[data-v-3e78e101]{border-radius:var(--hud-r-md);cursor:grab;transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease);border:1px solid #0000;align-items:center;gap:10px;margin-bottom:4px;padding:8px 9px;display:flex}.scene-row[data-v-3e78e101]:hover{background:#111b2c}.scene-row.active[data-v-3e78e101]{background:#35e0a00f;border-color:#35e0a059}.scene-row[data-v-3e78e101]:active{cursor:grabbing}.scene-ico[data-v-3e78e101]{background:color-mix(in srgb, var(--ch,var(--hud-accent)) 16%, #101a2c);border:1px solid color-mix(in srgb, var(--ch,var(--hud-accent)) 45%, transparent);border-radius:8px;flex:none;width:30px;height:30px}.scene-row.active .scene-ico[data-v-3e78e101]{box-shadow:0 0 10px color-mix(in srgb, var(--ch,var(--hud-accent)) 40%, transparent)}.scene-meta-wrap[data-v-3e78e101]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.scene-name[data-v-3e78e101]{color:var(--hud-text);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.scene-meta[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);font-size:10px}.scene-add[data-v-3e78e101],.scene-cur[data-v-3e78e101]{border-radius:6px;flex:none;margin-left:auto;padding:1px 7px;font-size:10px}.scene-cur[data-v-3e78e101]{color:var(--hud-accent);border:1px solid #35e0a066}.scene-add[data-v-3e78e101]{color:var(--hud-dim);border:1px solid var(--hud-line)}.scene-hint[data-v-3e78e101]{color:var(--hud-amber);padding:6px 4px 0;font-size:10px;line-height:1.5}.stage-col[data-v-3e78e101]{flex-direction:column;min-width:0;min-height:0;display:flex}.stage[data-v-3e78e101]{background:#060a11;flex:1;min-height:320px;position:relative;overflow:hidden}.stage[data-v-3e78e101]:fullscreen{border-radius:0}.town-host[data-v-3e78e101]{position:absolute;inset:0}.town-host canvas[data-v-3e78e101]{image-rendering:auto;display:block}.stage-vignette[data-v-3e78e101]{pointer-events:none;z-index:3;background:radial-gradient(120% 90% at 50% 38%,#0000 52%,#02040980 100%),linear-gradient(#080d1852,#0000 18%),repeating-linear-gradient(0deg,#ffffff03 0 1px,#0000 1px 3px);position:absolute;inset:0}.stage-top[data-v-3e78e101]{z-index:6;pointer-events:none;justify-content:space-between;align-items:flex-start;padding:14px 16px;display:flex;position:absolute;top:0;left:0;right:0}.stage-top[data-v-3e78e101]>*{pointer-events:auto}.vp-title[data-v-3e78e101]{border-radius:var(--hud-r-md);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#090e18b8;border:1px solid #1c2942;align-items:center;gap:10px;padding:8px 12px;display:flex}.vp-title h2[data-v-3e78e101]{letter-spacing:.02em;margin:0;font-size:15px;font-weight:700}.vp-id[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.04em;color:var(--hud-dim);white-space:nowrap;background:#0a111d99;border:1px solid #223050;border-radius:6px;padding:1px 8px;font-size:10px}.vp-tools[data-v-3e78e101]{align-items:center;gap:8px;display:flex}.vp-tool[data-v-3e78e101]{width:34px;height:34px;color:var(--hud-dim);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:color .15s var(--hud-ease), border-color .15s var(--hud-ease), background .15s var(--hud-ease);background:#0d1420d9;border:1px solid #223050;border-radius:50%;place-items:center;font-size:12px;font-weight:600;display:grid}.vp-tool[data-v-3e78e101]:hover{color:var(--hud-text);border-color:#33507c}.vp-tool.on[data-v-3e78e101]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent);box-shadow:0 0 12px #35e0a04d}.vp-svg[data-v-3e78e101]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.leaders[data-v-3e78e101]{z-index:7;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.angle-chip[data-v-3e78e101]{z-index:6;border-radius:var(--hud-r-sm);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--hud-dim);background:#090e18c7;border:1px solid #1c2942;align-items:center;gap:6px;padding:5px 8px;font-size:11.5px;display:flex;position:absolute;top:64px;left:16px}.angle-chip select[data-v-3e78e101]{color:var(--hud-text);cursor:pointer;background:0 0;border:0;font-size:11.5px;font-weight:600}.angle-chip select option[data-v-3e78e101]{background:#0e1626}.callout-layer[data-v-3e78e101]{z-index:7;pointer-events:none;position:absolute;inset:0;overflow:hidden}.callout[data-v-3e78e101]{opacity:0;pointer-events:none;border-radius:var(--hud-r-md);min-width:150px;box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:opacity .22s var(--hud-ease), transform .22s var(--hud-ease), border-color .15s var(--hud-ease);background:linear-gradient(#101a2bf0,#0a101cf0);border:1px solid #41c8f466;padding:9px 12px 8px;position:absolute;transform:translate(-50%,-112%)translateY(5px)}.callout.near[data-v-3e78e101]{opacity:1;pointer-events:auto;transform:translate(-50%,-112%)}.leaders g[data-v-3e78e101]{opacity:0;transition:opacity .22s var(--hud-ease)}.leaders g.near[data-v-3e78e101]{opacity:1}.callout.warn[data-v-3e78e101]{border-color:#f6c45399}.co-label[data-v-3e78e101]{color:var(--hud-dim);white-space:nowrap;align-items:center;gap:6px;font-size:10.5px;display:flex}.co-dot[data-v-3e78e101]{background:var(--hud-cyan);border-radius:50%;flex:none;width:6px;height:6px;box-shadow:0 0 8px #41c8f4e6}.callout.warn .co-dot[data-v-3e78e101]{background:var(--hud-amber);box-shadow:0 0 8px #f6c453e6}.co-val[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:-.01em;color:var(--hud-text);font-variant-numeric:tabular-nums;margin-top:2px;font-size:21px;font-weight:700}.co-val small[data-v-3e78e101]{color:var(--hud-dim);margin-left:3px;font-size:10.5px;font-weight:500}.co-range[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);margin-top:1px;font-size:9.5px}.callout.warn .co-range[data-v-3e78e101]{color:var(--hud-amber)}.kpi-strip[data-v-3e78e101]{z-index:6;pointer-events:none;flex-wrap:wrap;justify-content:center;gap:10px;padding:0 16px;display:flex;position:absolute;bottom:12px;left:0;right:0}.kpi[data-v-3e78e101]{pointer-events:auto;border-radius:var(--hud-r-md);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:border-color .2s var(--hud-ease), transform .2s var(--hud-ease), box-shadow .2s var(--hud-ease);background:linear-gradient(#141e30eb,#0c1320e6);border:1px solid #1e2c46;align-items:center;gap:10px;padding:8px 14px;display:flex;box-shadow:inset 0 1px #8fb0dc14,0 8px 20px #03070e66}.kpi[data-v-3e78e101]:hover{border-color:#2c4568;transform:translateY(-1px);box-shadow:inset 0 1px #8fb0dc1a,0 12px 26px #03070e80}.kpi-ico[data-v-3e78e101]{border-radius:8px;flex:none;place-items:center;width:30px;height:30px;font-size:12px;font-weight:700;display:grid}.kpi-ico.c1[data-v-3e78e101]{color:var(--hud-cyan);background:#41c8f41f}.kpi-ico.c2[data-v-3e78e101]{color:var(--hud-accent);background:#35e0a01f}.kpi-ico.c3[data-v-3e78e101]{color:var(--hud-amber);background:#f6c4531f}.kpi-ico.c4[data-v-3e78e101]{color:#a78bfa;background:#a78bfa24}.kpi-ico.c5[data-v-3e78e101]{color:var(--hud-danger);background:#ff6b6b1f}.kpi-svg[data-v-3e78e101]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.kpi-meta[data-v-3e78e101]{line-height:1.25}.kpi-label[data-v-3e78e101]{color:var(--hud-dim);letter-spacing:.08em;text-transform:uppercase;font-size:10px}.kpi-val[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:19px;font-weight:700}.kpi-val small[data-v-3e78e101]{color:var(--hud-faint);margin-left:2px;font-size:10px;font-weight:500}.empty-hint[data-v-3e78e101]{z-index:4;text-align:center;color:var(--hud-dim);pointer-events:none;position:absolute;top:44%;left:50%;transform:translate(-50%,-50%)}.empty-hint b[data-v-3e78e101]{color:var(--hud-text);margin-bottom:4px;font-size:14px;display:block}.empty-hint span[data-v-3e78e101]{font-size:12px}@media (prefers-reduced-motion:no-preference){.dock[data-v-3e78e101],.rail-left[data-v-3e78e101],.rail-right[data-v-3e78e101]{animation:.52s cubic-bezier(.22,.68,.36,1) backwards hud-boot-3e78e101}.rail-left[data-v-3e78e101]{animation-delay:40ms}.rail-right[data-v-3e78e101]{animation-delay:.15s}.dock[data-v-3e78e101]{animation-delay:.26s}}@keyframes hud-boot-3e78e101{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.dock[data-v-3e78e101]{border-top:1px solid var(--hud-line-soft);background:#080d16;flex:none;grid-template-columns:308px 1fr;gap:10px;padding:10px;display:grid}.dock-card[data-v-3e78e101]{border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);background:linear-gradient(#101827,#0d1420);flex-direction:column;min-height:178px;padding:12px 14px;display:flex}.dock-hd[data-v-3e78e101]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.dock-hd h3[data-v-3e78e101]{flex:none;margin:0;font-size:12.5px;font-weight:700}.dock-count[data-v-3e78e101]{letter-spacing:.08em;color:var(--hud-dim);border:1px solid var(--hud-line-soft);border-radius:6px;flex:none;padding:1px 7px;font-size:9.5px}.dock-mode[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-faint);border:1px solid var(--hud-line);border-radius:6px;margin-left:auto;padding:1px 7px;font-size:10px}.ctl-row[data-v-3e78e101]{align-items:center;gap:10px;margin-bottom:9px;display:flex}.ctl-sec[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--hud-faint);border-top:1px solid var(--hud-line-soft);margin:2px 0 7px;padding-top:7px;font-size:10px;font-weight:600}.ctl-sec[data-v-3e78e101]:first-of-type{border-top:0;margin-top:0;padding-top:0}.ctl-name[data-v-3e78e101]{color:var(--hud-dim);flex:none;width:64px;font-size:11.5px}.ctl-val[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-text);text-align:right;font-variant-numeric:tabular-nums;flex:none;width:38px;font-size:11px}.ctl-range[data-v-3e78e101]{appearance:none;background:linear-gradient(90deg, var(--hud-accent-dim) var(--fill,50%), #1d2a42 var(--fill,50%));cursor:pointer;border-radius:2px;flex:1;height:4px}.ctl-range[data-v-3e78e101]::-webkit-slider-thumb{-webkit-appearance:none;border:2.5px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#fff;border-radius:50%;box-shadow:0 1px 4px #00000080}.ctl-range[data-v-3e78e101]:hover::-webkit-slider-thumb{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a01f,0 1px 4px #00000080}.ctl-range[data-v-3e78e101]:active::-webkit-slider-thumb{transform:scale(1.05)}.bp-range[data-v-3e78e101]{accent-color:var(--hud-accent)}.snap-toggle[data-v-3e78e101]{height:22px;color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:6px;flex:1;font-size:10.5px;font-weight:600}.snap-toggle.on[data-v-3e78e101]{color:var(--hud-accent);background:#35e0a014;border-color:#35e0a066}.fps-seg[data-v-3e78e101]{flex:1;gap:4px;display:flex}.fps-seg button[data-v-3e78e101]{height:22px;font-family:var(--font-mono);color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), background .14s var(--hud-ease);border-radius:6px;flex:1;font-size:10.5px;font-weight:600}.fps-seg button[data-v-3e78e101]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.fps-seg button.on[data-v-3e78e101]{color:var(--hud-accent);background:#35e0a014;border-color:#35e0a066}.ctl-btns[data-v-3e78e101]{gap:8px;margin-top:auto;display:flex}.btn[data-v-3e78e101]{border-radius:var(--hud-r-sm);white-space:nowrap;cursor:pointer;height:32px;transition:filter .15s var(--hud-ease), background .15s var(--hud-ease), border-color .15s var(--hud-ease);background:0 0;flex:1;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.btn-primary[data-v-3e78e101]{background:var(--hud-accent-dim);color:#04120c}.btn-primary[data-v-3e78e101]:hover{background:#25b57e}.btn-ghost[data-v-3e78e101]{color:var(--hud-text);border:1px solid #27395c}.btn-ghost[data-v-3e78e101]:hover{background:#14203a;border-color:#33507c}.btn-danger[data-v-3e78e101]{color:#fff;background:#b3273a}.btn-danger[data-v-3e78e101]:hover{background:#d1304a}.btn[data-v-3e78e101]:not(:disabled):active{transform:translateY(1px)}.bind-select[data-v-3e78e101]:disabled,.btn[data-v-3e78e101]:disabled,.nav-action[data-v-3e78e101]:disabled,.obj-input[data-v-3e78e101]:disabled,.obj-mini[data-v-3e78e101]:disabled,.obj-select[data-v-3e78e101]:disabled{opacity:.38;cursor:not-allowed;filter:saturate(.4)}.btn[data-v-3e78e101]:disabled:hover,.nav-action[data-v-3e78e101]:disabled:hover{background:inherit}.trend-legend[data-v-3e78e101]{scrollbar-width:thin;scrollbar-color:#1c2942 transparent;flex-wrap:wrap;flex:auto;align-content:flex-start;gap:5px;min-width:0;max-height:47px;margin-left:6px;transition:max-height .24s cubic-bezier(.22,.68,.36,1);display:flex;overflow-y:auto}.trend-legend.expanded[data-v-3e78e101]{max-height:100px}.trend-legend[data-v-3e78e101]::-webkit-scrollbar{width:6px}.trend-legend[data-v-3e78e101]::-webkit-scrollbar-thumb{background:#1c2942;border-radius:3px}.trend-legend[data-v-3e78e101]::-webkit-scrollbar-track{background:0 0}.lg-chip[data-v-3e78e101]{color:var(--hud-dim);border:1px solid var(--hud-line-soft);cursor:pointer;transition:opacity .15s var(--hud-ease), border-color .15s var(--hud-ease), color .15s var(--hud-ease);background:#0d142099;border-radius:6px;align-items:center;gap:5px;padding:2px 8px;font-size:10.5px;display:flex}.lg-chip[data-v-3e78e101]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.lg-chip.off[data-v-3e78e101]{opacity:.32}.lg-more[data-v-3e78e101]{letter-spacing:.04em;color:var(--hud-faint);border-style:dashed;font-size:10px}.lg-more[data-v-3e78e101]:hover{color:var(--hud-accent);border-color:#35e0a066}.lg-dot[data-v-3e78e101]{border-radius:2px;width:7px;height:7px}.trend-wrap[data-v-3e78e101]{flex:1;min-height:0;position:relative}.trend-cv[data-v-3e78e101]{width:100%;height:100%;position:absolute;inset:0}.trend-empty[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);place-content:center;font-size:10.5px;display:grid;position:absolute;inset:0}.inspector[data-v-3e78e101]{animation:rise-3e78e101 .18s var(--hud-ease)}@keyframes rise-3e78e101{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.ins-chip-row[data-v-3e78e101]{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.ins-chip[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-dim);border:1px solid #26354a;border-radius:6px;padding:1.5px 7px;font-size:9.5px}.ins-chip.accent[data-v-3e78e101]{color:var(--hud-accent);border-color:#35e0a066}.sect-hd[data-v-3e78e101]{color:var(--hud-faint);letter-spacing:.16em;align-items:center;gap:6px;margin:10px 0 7px;font-size:10px;font-weight:700;display:flex}.sect-hd[data-v-3e78e101]:before{content:"";background:var(--hud-accent);opacity:.55;border-radius:1px;width:3px;height:9px}.obj-row[data-v-3e78e101]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.obj-label[data-v-3e78e101]{width:52px;color:var(--hud-dim);flex:none;font-size:10.5px}.obj-input[data-v-3e78e101],.obj-select[data-v-3e78e101]{min-width:0;color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);transition:border-color .15s var(--hud-ease);border-radius:7px;flex:1;padding:5px 8px;font-size:11.5px}.obj-input[data-v-3e78e101]:focus,.obj-select[data-v-3e78e101]:focus{border-color:var(--hud-accent);outline:none}.obj-sep[data-v-3e78e101]{background:var(--hud-line-soft);height:1px;margin:8px 0}.range-status[data-v-3e78e101]{min-width:0;color:var(--hud-faint);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:10px;overflow:hidden}.obj-mini[data-v-3e78e101]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:7px;flex:none;padding:4px 10px;font-size:10.5px;font-weight:600}.obj-mini.on[data-v-3e78e101]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.obj-mini.danger[data-v-3e78e101]{color:var(--hud-danger);width:100%;margin-top:4px}.obj-range[data-v-3e78e101]{accent-color:var(--hud-accent);flex:1}.bp-val[data-v-3e78e101]{text-align:right;width:40px;font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;flex:none;font-size:10.5px}.bp-seg[data-v-3e78e101]{gap:4px;display:flex}.seg-btn[data-v-3e78e101]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), background .14s var(--hud-ease);border-radius:7px;padding:4px 12px;font-size:10.5px;font-weight:600}.seg-btn[data-v-3e78e101]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.seg-btn.on[data-v-3e78e101]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.xz-seg[data-v-3e78e101]{gap:6px;margin-bottom:8px;display:flex}.xz-seg .seg-btn[data-v-3e78e101]{flex:1}.scale-row[data-v-3e78e101]{align-items:center;gap:8px;display:flex}.scale-max[data-v-3e78e101],.scale-min[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);font-size:10px}.scale-range[data-v-3e78e101]{accent-color:var(--hud-accent);flex:1}.scale-val[data-v-3e78e101]{text-align:center;font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;margin-bottom:4px;font-size:11px}.ins-foot[data-v-3e78e101]{gap:8px;margin-top:12px;display:flex}.ins-del[data-v-3e78e101]{color:var(--hud-danger);background:#ff6b6b1a;border:1px solid #ff6b6b66}.ins-del.armed[data-v-3e78e101]{background:var(--hud-danger);color:#fff}.ins-empty[data-v-3e78e101]{color:var(--hud-faint);text-align:center;padding:8px 0 6px;font-size:11px}.health-body[data-v-3e78e101]{align-items:center;gap:14px;display:flex}.donut-wrap[data-v-3e78e101]{flex:none;width:118px;height:118px;position:relative}.donut-wrap canvas[data-v-3e78e101]{width:118px;height:118px}.donut-center[data-v-3e78e101]{text-align:center;place-content:center;display:grid;position:absolute;inset:0}.donut-center b[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-accent);font-size:21px;font-weight:700}.donut-center span[data-v-3e78e101]{color:var(--hud-faint);font-size:9.5px}.health-legend[data-v-3e78e101]{flex-direction:column;flex:1;gap:8px;display:flex}.hl-row[data-v-3e78e101]{align-items:center;gap:7px;font-size:11.5px;display:flex}.hl-dot[data-v-3e78e101]{border-radius:50%;flex:none;width:7px;height:7px}.hl-row .n[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-text);margin-left:auto;font-size:13px;font-weight:700}.event-list[data-v-3e78e101]{flex-direction:column;flex:1;min-height:0;max-height:200px;display:flex;overflow:hidden auto}.event-row[data-v-3e78e101]{transition:background .13s var(--hud-ease);border-radius:7px;align-items:center;gap:7px;padding:4px 6px;display:flex}.event-row[data-v-3e78e101]:hover{background:#35e0a00d}.ev-time[data-v-3e78e101]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);flex:none;font-size:10px}.ev-name[data-v-3e78e101]{text-overflow:ellipsis;white-space:nowrap;max-width:70px;font-family:var(--font-mono);color:var(--hud-text);flex:none;font-size:10px;font-weight:600;overflow:hidden}.ev-text[data-v-3e78e101]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hud-dim);flex:1;font-size:10.5px;overflow:hidden}.event-empty[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);text-align:center;padding:12px;font-size:9.5px}.rail-empty[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-faint);text-align:center;flex-direction:column;align-items:center;gap:7px;padding:16px 10px 13px;font-size:9.5px;display:flex}.rail-empty .re-ico[data-v-3e78e101]{fill:none;width:19px;height:19px;stroke:var(--hud-faint);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;opacity:.85}.mm-body[data-v-3e78e101]{align-items:stretch;gap:8px;display:flex}.mm-wrap[data-v-3e78e101]{border-radius:var(--hud-r-md);background:#060b13;border:1px solid #223050;flex:1;min-height:148px;position:relative;overflow:hidden}.mini-svg[data-v-3e78e101]{cursor:crosshair;width:100%;height:100%;position:absolute;inset:0}.nav-cv[data-v-3e78e101]{cursor:crosshair;touch-action:none;width:100%;height:100%;position:absolute;inset:0}.alarm-list[data-v-3e78e101]{flex-direction:column;display:flex}.al-row[data-v-3e78e101]{border-radius:var(--hud-r-md);align-items:flex-start;gap:9px;padding:9px 8px;transition:background .15s;display:flex}.al-row[data-v-3e78e101]:hover{background:#101a2c}.al-ico[data-v-3e78e101]{border-radius:8px;flex:none;place-items:center;width:28px;height:28px;display:grid}.al-ico.crit[data-v-3e78e101]{color:var(--hud-danger);background:#ff6b6b1f}.al-ico.warn[data-v-3e78e101]{color:var(--hud-amber);background:#f6c4531f}.al-ico.info[data-v-3e78e101]{color:var(--hud-cyan);background:#41c8f41f}.al-svg[data-v-3e78e101]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.al-body[data-v-3e78e101]{flex:1;min-width:0}.al-txt[data-v-3e78e101]{color:var(--hud-text);font-size:12px;font-weight:500;line-height:1.35}.al-src[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);margin-top:2px;font-size:9.5px}.al-state[data-v-3e78e101]{cursor:pointer;background:0 0;border:1px solid;border-radius:6px;flex:none;margin-top:2px;padding:2px 7px;font-size:9.5px;font-weight:600}.al-state.s0[data-v-3e78e101]{color:var(--hud-danger);background:#ff6b6b1a;border-color:#ff6b6b66}.al-state.s1[data-v-3e78e101]{color:var(--hud-amber);background:#f6c4531a;border-color:#f6c45359}.al-state.s2[data-v-3e78e101]{color:var(--hud-dim);background:#8fa0b514;border-color:#8fa0b54d}.nav-bell-warn[data-v-3e78e101]{color:var(--hud-danger);border-color:#ff6b6b80}.mm-col[data-v-3e78e101]{flex-direction:column;gap:6px;display:flex}.mm-col .vp-tool[data-v-3e78e101]{border-radius:8px;width:30px;height:30px}.mm-meta[data-v-3e78e101]{color:var(--hud-faint);letter-spacing:.08em;text-align:center;margin-top:8px;font-size:9.5px}.rpg-lines.chat-embed[data-v-3e78e101]{border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);background:#0f172680;max-height:268px;padding:2px 0 4px}.chat-sect[data-v-3e78e101]{align-items:center;gap:8px;display:flex}.chat-sect .chat-refresh[data-v-3e78e101]{margin-left:auto}.chat-id-row[data-v-3e78e101]{align-items:center;gap:10px;margin-bottom:4px;display:flex}.chat-badge[data-v-3e78e101]{--p-acc:var(--hud-accent);width:34px;height:34px;font-family:var(--font-mono);color:var(--p-acc);background:color-mix(in srgb, var(--p-acc) 10%, transparent);border:1px solid color-mix(in srgb, var(--p-acc) 45%, transparent);border-radius:var(--hud-r-sm);flex:none;place-items:center;font-size:15px;font-weight:700;display:grid}.chat-nameplate[data-v-3e78e101]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.chat-name[data-v-3e78e101]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650;overflow:hidden}.chat-meta[data-v-3e78e101]{align-items:center;gap:6px;display:flex}.chat-state[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-dim);border:1px solid var(--hud-line);border-radius:6px;padding:1px 6px;font-size:10px}.chat-role[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.12em;border-radius:6px;padding:1px 7px;font-size:10px;font-weight:700}.chat-role.r-lead[data-v-3e78e101]{color:var(--hud-amber);background:#f6c4531a;border:1px solid #f6c45373}.chat-role.r-worker[data-v-3e78e101]{color:var(--hud-cyan);background:#41c8f41a;border:1px solid #41c8f466}.chat-state.s-busy[data-v-3e78e101]{color:var(--hud-amber);border-color:#f6c45380}.chat-state.s-stopped[data-v-3e78e101]{color:var(--hud-danger);border-color:#ff6b6b80}.chat-harness[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-faint);font-size:10px}.chat-count[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);font-size:10px}.chat-refresh[data-v-3e78e101]{width:22px;height:22px;font-family:var(--font-mono);color:var(--hud-dim);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), transform .32s var(--hud-ease);background:0 0;border-radius:6px;flex:none;font-size:11px}.chat-refresh[data-v-3e78e101]:hover{border-color:var(--hud-accent);color:var(--hud-accent)}.chat-refresh[data-v-3e78e101]:active{transform:rotate(180deg)}.rpg-lines[data-v-3e78e101]{flex-direction:column;flex:1;gap:7px;min-height:0;padding:10px 12px 12px;display:flex;overflow:hidden auto}.rpg-divider[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.2em;color:var(--hud-faint);margin:4px 0 2px;font-size:10px}.rpg-divider.live[data-v-3e78e101]{color:var(--hud-amber)}.rpg-line[data-v-3e78e101]{align-items:flex-start;gap:8px;display:flex}.rpg-time[data-v-3e78e101]{text-align:right;width:52px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);flex:none;margin-top:5px;font-size:10px}.rpg-bubble[data-v-3e78e101]{background:var(--hud-panel-2);border:1px solid var(--hud-line);border-radius:var(--hud-r-md);flex-direction:column;flex:1;gap:2px;min-width:0;padding:7px 11px;display:flex}.rpg-line.hist[data-v-3e78e101]{opacity:.62}.rpg-line.live .rpg-bubble[data-v-3e78e101]{animation:rise-3e78e101 .26s var(--hud-ease) both;border-color:var(--hud-line-hi);background:#14213a}.rpg-kind[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.14em;color:var(--hud-faint);align-self:flex-start;font-size:10px}.rpg-kind.k-artifact[data-v-3e78e101]{color:var(--hud-accent)}.rpg-kind.k-error[data-v-3e78e101]{color:var(--hud-danger)}.rpg-text[data-v-3e78e101]{color:var(--hud-text);word-break:break-word;text-wrap:pretty;font-size:13px;line-height:1.6}.rpg-line.live .rpg-text[data-v-3e78e101]{color:#edf4fa}.rpg-typing[data-v-3e78e101]{align-items:center;gap:4px;padding:5px 2px;display:flex}.ty-dot[data-v-3e78e101]{background:var(--hud-amber);width:5px;height:5px;animation:ty-bounce-3e78e101 1.15s var(--hud-ease) infinite;border-radius:50%}.ty-dot[data-v-3e78e101]:nth-child(2){animation-delay:.15s}.ty-dot[data-v-3e78e101]:nth-child(3){animation-delay:.3s}.ty-label[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-faint);margin-left:5px;font-size:10px}.rpg-note[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-dim);text-align:center;padding:14px 0;font-size:10px}.boundary-panel[data-v-3e78e101]{z-index:9;border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);width:302px;box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;background:linear-gradient(#101827f7,#0d1420f7);flex-direction:column;gap:7px;padding:12px 14px;display:flex;position:absolute;top:84px;left:16px}.bp-title[data-v-3e78e101]{border-bottom:1px solid var(--hud-line);cursor:grab;touch-action:none;align-items:center;gap:8px;padding-bottom:8px;display:flex}.bp-title[data-v-3e78e101]:active{cursor:grabbing}.bp-name[data-v-3e78e101]{color:var(--hud-text);font-size:13px;font-weight:700}.bp-sub[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.12em;color:var(--hud-faint);font-size:10px}.bp-tabs[data-v-3e78e101]{gap:4px;margin-left:auto;display:flex}.bp-tab[data-v-3e78e101]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:6px;padding:3px 10px;font-size:10px;font-weight:600}.bp-tab.on[data-v-3e78e101]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.bp-row[data-v-3e78e101]{align-items:center;gap:8px;display:flex}.bp-label[data-v-3e78e101]{width:52px;color:var(--hud-dim);flex:none;font-size:10.5px}.bp-range[data-v-3e78e101]{appearance:none;background:linear-gradient(90deg, var(--hud-accent-dim) var(--fill,50%), #1d2a42 var(--fill,50%));cursor:pointer;border-radius:2px;flex:1;height:4px}.bp-range[data-v-3e78e101]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:12px;height:12px;-webkit-transition:transform .15s var(--hud-ease);transition:transform .15s var(--hud-ease);background:#fff;border-radius:50%}.bp-range[data-v-3e78e101]:hover::-webkit-slider-thumb{transform:scale(1.15)}.bp-hint[data-v-3e78e101]{color:var(--hud-faint);font-size:10px;line-height:1.6}.bp-actions[data-v-3e78e101]{gap:6px;margin-top:4px;display:flex}.bp-btn[data-v-3e78e101]{color:var(--hud-text);border-radius:var(--hud-r-sm);cursor:pointer;background:0 0;border:1px solid #27395c;flex:1;padding:6px 10px;font-size:11px;font-weight:600}.bp-btn[data-v-3e78e101]:hover{background:#14203a;border-color:#33507c}.bp-btn.save[data-v-3e78e101]{color:#04120c;background:var(--hud-accent-dim);border-color:var(--hud-accent-dim)}.bp-btn.save[data-v-3e78e101]:hover{background:#25b57e}.bp-btn.danger[data-v-3e78e101]{color:var(--hud-danger);border-color:#ff6b6b66}.bp-btn.danger[data-v-3e78e101]:hover{background:#ff6b6b1a}.member-list[data-v-3e78e101]{flex-direction:column;gap:5px;max-height:220px;display:flex;overflow:hidden auto}.member-row[data-v-3e78e101]{background:var(--hud-panel-2);border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);align-items:center;gap:8px;padding:6px 8px;display:flex}.member-ava[data-v-3e78e101]{width:24px;height:24px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-panel-raised);border:1px solid var(--hud-line);border-radius:7px;flex:none;justify-content:center;align-items:center;font-size:10px;font-weight:700;display:inline-flex}.member-info[data-v-3e78e101]{flex-direction:column;flex:1;min-width:0;display:flex}.member-name[data-v-3e78e101]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.member-role[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-faint);font-size:10px}.member-role.r-lead[data-v-3e78e101]{color:var(--hud-amber)}.member-role.r-worker[data-v-3e78e101]{color:var(--hud-cyan)}.member-select[data-v-3e78e101]{min-width:0;color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:6px;flex:1;padding:3px 6px;font-size:10px}.drop-chip[data-v-3e78e101],.error-chip[data-v-3e78e101]{z-index:20;border-radius:var(--hud-r-md);box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);text-overflow:ellipsis;white-space:nowrap;background:#0e1626f5;border:1px solid #2a3d63;align-items:center;gap:8px;max-width:70%;padding:8px 14px;font-size:11.5px;display:flex;position:absolute;top:64px;left:50%;overflow:hidden;transform:translate(-50%)}.drop-chip[data-v-3e78e101]{color:var(--hud-accent)}.error-chip[data-v-3e78e101]{color:var(--hud-danger);border-color:#ff6b6b66}.bind-row[data-v-3e78e101]{border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);background:#0f1726;align-items:center;gap:8px;margin-bottom:6px;padding:7px 9px;display:flex}.bind-ico[data-v-3e78e101]{width:26px;height:26px;color:var(--hud-accent);background:#0d1a26;border-radius:7px;flex:none;place-items:center;display:grid}.bind-svg[data-v-3e78e101]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.bind-meta[data-v-3e78e101]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.bind-label[data-v-3e78e101]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.bind-val[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-cyan);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.bind-val b[data-v-3e78e101]{font-size:11px;font-weight:700}.bind-spark[data-v-3e78e101]{flex:none;width:56px;height:20px}.bind-x[data-v-3e78e101]{width:22px;height:22px;color:var(--hud-faint);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none}.bind-x[data-v-3e78e101]:hover{color:var(--hud-danger);background:#ff6b6b1f}.bind-add-wrap[data-v-3e78e101]{position:relative}.bind-add[data-v-3e78e101]{width:100%;height:30px;color:var(--hud-dim);border-radius:var(--hud-r-sm);cursor:pointer;background:0 0;border:1px dashed #274064;font-size:11px;transition:border-color .15s,color .15s}.bind-add[data-v-3e78e101]:hover{border-color:var(--hud-accent-dim);color:var(--hud-accent)}.bind-pop[data-v-3e78e101]{z-index:30;overscroll-behavior:contain;border-radius:var(--hud-r-md);max-height:min(46vh,420px);box-shadow:var(--hud-shadow-pop,0 16px 40px #0000008c);background:#0e1626;border:1px solid #27395c;position:absolute;bottom:calc(100% + 4px);left:0;right:0;overflow:hidden auto}.bind-pop[data-v-3e78e101]::-webkit-scrollbar{width:8px}.bind-pop[data-v-3e78e101]::-webkit-scrollbar-thumb{background:#2c4568 padding-box content-box;border:2px solid #0000;border-radius:9999px}.bind-pop[data-v-3e78e101]::-webkit-scrollbar-thumb:hover{background:#3d5a85 padding-box content-box}.bind-pop button[data-v-3e78e101]{width:100%;color:var(--hud-dim);cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;font-size:11.5px;display:flex}.bind-pop button[data-v-3e78e101]:hover{color:var(--hud-text);background:#12203a}.bind-pop .bind-svg[data-v-3e78e101]{color:var(--hud-accent)}.bind-pop button>span[data-v-3e78e101]{white-space:nowrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;overflow:hidden}.bp-group[data-v-3e78e101]{flex-direction:column;display:flex}.bp-group+.bp-group[data-v-3e78e101]{border-top:1px solid #27395c8c}.bp-tpl[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--hud-faint);padding:6px 10px 3px;font-size:10px}.bp-cur[data-v-3e78e101]{color:var(--hud-faint);white-space:nowrap;text-overflow:ellipsis;max-width:96px;margin-left:auto;font-size:9.5px;font-style:normal;overflow:hidden}.bp-empty[data-v-3e78e101]{color:var(--hud-faint);padding:10px;font-size:10.5px}.dcw-row[data-v-3e78e101]{border:1px solid var(--hud-line);border-radius:var(--hud-r-md);transition:border-color .18s var(--hud-ease), box-shadow .18s var(--hud-ease);background:linear-gradient(#111a2b,#0e1522);flex-direction:column;gap:8px;margin-bottom:7px;padding:9px 10px 10px;display:flex}.dcw-row[data-v-3e78e101]:hover{border-color:var(--hud-line-hi);box-shadow:0 6px 18px #03070e66}.dcw-top[data-v-3e78e101]{align-items:center;gap:8px;display:flex}.dcw-id[data-v-3e78e101]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.dcw-name[data-v-3e78e101]{color:var(--hud-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.dcw-tag[data-v-3e78e101]{font-style:normal;font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-amber);vertical-align:1px;background:#f6c4531a;border:1px solid #f6c45352;border-radius:4px;margin-left:5px;padding:0 5px;font-size:10px;font-weight:700;display:inline-block}.dcw-cur[data-v-3e78e101]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;flex:none;align-items:baseline;gap:3px;display:flex}.dcw-cur b[data-v-3e78e101]{color:var(--hud-cyan);text-shadow:0 0 14px #41c8f447;font-size:16px;font-weight:700}.dcw-cur i[data-v-3e78e101]{color:var(--hud-faint);font-size:9.5px;font-style:normal}.dcw-win[data-v-3e78e101]{border:1px solid var(--hud-line-soft);background:#0a111db8;border-radius:7px;align-items:center;gap:7px;padding:4px 8px;display:flex}.dcw-win em[data-v-3e78e101]{letter-spacing:.14em;color:var(--hud-faint);flex:none;font-size:10px;font-style:normal;font-weight:700}.dcw-win-num[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-dim);font-variant-numeric:tabular-nums;flex:none;font-size:9.5px}.dcw-win-track[data-v-3e78e101]{background:#1a2740;border-radius:999px;flex:1;height:4px;position:relative}.dcw-win-track[data-v-3e78e101]:before{content:"";border-radius:inherit;background:linear-gradient(90deg,#5a82af66,#5a82af24);position:absolute;inset:0}.dcw-win-track i[data-v-3e78e101]{border:2px solid var(--hud-cyan);width:9px;height:9px;transition:left .3s var(--hud-ease);background:#dfeef8;border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 8px #41c8f48c}.dcw-win.recipe em[data-v-3e78e101]{color:var(--hud-amber)}.dcw-win.recipe .dcw-win-track[data-v-3e78e101]:before{background:linear-gradient(90deg,#f6c45380,#f6c45329)}.dcw-win.recipe .dcw-win-track i[data-v-3e78e101]{border-color:var(--hud-amber);box-shadow:0 0 8px #f6c4538c}.dcw-write[data-v-3e78e101]{gap:6px;display:flex}.dcw-write input[data-v-3e78e101]{min-width:0;height:27px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);transition:border-color .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border-radius:7px;flex:1;padding:0 9px;font-size:11.5px}.dcw-write input[data-v-3e78e101]::placeholder{color:var(--hud-faint);font-size:10px}.dcw-write input[data-v-3e78e101]:focus{border-color:var(--hud-accent);outline:none;box-shadow:0 0 0 3px #35e0a021}.dcw-send[data-v-3e78e101]{height:27px;font-family:var(--font-mono);letter-spacing:.1em;color:#04120c;background:var(--hud-accent-dim);cursor:pointer;transition:background .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border:0;border-radius:7px;flex:none;padding:0 14px;font-size:10.5px;font-weight:700}.dcw-send[data-v-3e78e101]:hover:not(:disabled){background:var(--hud-accent);box-shadow:0 0 14px #35e0a059}.dcw-send[data-v-3e78e101]:disabled{opacity:.38;cursor:default}.dcw-err[data-v-3e78e101]{color:var(--hud-danger);background:#ff6b6b14;border:1px solid #ff6b6b47;border-radius:6px;padding:4px 8px;font-size:10px;display:block}.bind-select[data-v-3e78e101]:hover,.daq-ctl-cycle input[data-v-3e78e101]:hover,.daq-num[data-v-3e78e101]:hover,.obj-input[data-v-3e78e101]:hover,.obj-select[data-v-3e78e101]:hover{border-color:var(--hud-line-hi)}.bind-select[data-v-3e78e101]:focus,.daq-ctl-cycle input[data-v-3e78e101]:focus,.daq-num[data-v-3e78e101]:focus,.obj-input[data-v-3e78e101]:focus,.obj-select[data-v-3e78e101]:focus{border-color:var(--hud-accent);outline:none;box-shadow:0 0 0 3px #35e0a021}input[type=number][data-v-3e78e101]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-3e78e101]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-3e78e101]{appearance:textfield}.obj-range[data-v-3e78e101],.scale-range[data-v-3e78e101]{appearance:none;cursor:pointer;background:#1a2740;border-radius:999px;outline:none;height:4px}.obj-range[data-v-3e78e101]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#e8f6ef;border-radius:50%;box-shadow:0 0 0 3px #35e0a026,0 2px 6px #03070e80}.scale-range[data-v-3e78e101]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#e8f6ef;border-radius:50%;box-shadow:0 0 0 3px #35e0a026,0 2px 6px #03070e80}.obj-range[data-v-3e78e101]::-webkit-slider-thumb:hover{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a033,0 2px 8px #03070e8c}.scale-range[data-v-3e78e101]::-webkit-slider-thumb:hover{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a033,0 2px 8px #03070e8c}.obj-range[data-v-3e78e101]::-moz-range-thumb{border:2px solid var(--hud-accent);background:#e8f6ef;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #35e0a026}.scale-range[data-v-3e78e101]::-moz-range-thumb{border:2px solid var(--hud-accent);background:#e8f6ef;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #35e0a026}.obj-range[data-v-3e78e101]::-moz-range-track{background:#1a2740;border-radius:999px;height:4px}.scale-range[data-v-3e78e101]::-moz-range-track{background:#1a2740;border-radius:999px;height:4px}.bind-row[data-v-3e78e101]{transition:border-color .18s var(--hud-ease), box-shadow .18s var(--hud-ease)}.bind-row[data-v-3e78e101]:hover{border-color:var(--hud-line-hi);box-shadow:0 6px 18px #03070e66}.bind-add[data-v-3e78e101]:hover{background:#35e0a00d;border-style:solid}.daq-bind-bar[data-v-3e78e101]{gap:6px;display:flex}.bind-select[data-v-3e78e101]{min-width:0;height:28px;color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);transition:border-color .15s var(--hud-ease), box-shadow .15s var(--hud-ease), color .15s var(--hud-ease);flex:1;padding:0 8px;font-size:10.5px}.bind-select[data-v-3e78e101]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.bind-select[data-v-3e78e101]:focus{border-color:var(--hud-accent);color:var(--hud-text);outline:none;box-shadow:0 0 0 3px #35e0a021}.bind-add-btn[data-v-3e78e101]{color:#04120c;background:var(--hud-accent-dim);border-radius:var(--hud-r-sm);cursor:pointer;height:28px;transition:background .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border:0;flex:none;padding:0 12px;font-size:10.5px;font-weight:600}.bind-add-btn[data-v-3e78e101]:hover:not(:disabled){background:var(--hud-accent);box-shadow:0 0 14px #35e0a059}.bind-add-btn[data-v-3e78e101]:disabled{opacity:.4;cursor:default}.daq-info-row[data-v-3e78e101]{color:var(--hud-dim);justify-content:space-between;gap:8px;padding:3px 0;font-size:11px;display:flex}.daq-info-row b[data-v-3e78e101]{font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;font-weight:600}.daq-info-row b.cy[data-v-3e78e101]{color:var(--hud-cyan);font-size:13px}.daq-ctrl[data-v-3e78e101]{background:var(--hud-panel);border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;padding:8px 10px;display:flex}.daq-ctl-btn[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.05em;color:var(--hud-dim);cursor:pointer;border:1px solid var(--hud-line-hi);border-radius:var(--hud-r-sm);background:0 0;padding:4px 12px;font-size:11px}.daq-ctl-btn.on[data-v-3e78e101]{color:var(--hud-accent);border-color:#35e0a073}.daq-ctl-cycle[data-v-3e78e101]{color:var(--hud-faint);align-items:center;gap:5px;font-size:10.5px;display:inline-flex}.daq-ctl-cycle input[data-v-3e78e101],.daq-num[data-v-3e78e101]{width:64px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:6px;padding:2px 6px;font-size:11px}.daq-th-inputs[data-v-3e78e101]{color:var(--hud-faint);align-items:center;gap:4px;font-size:10px;display:inline-flex}.bind-add-btn.warn[data-v-3e78e101]:not(:disabled){color:var(--hud-amber);box-shadow:none;background:#f6c4531f}.bind-add-btn.warn[data-v-3e78e101]:hover:not(:disabled){background:#f6c45333;box-shadow:0 0 14px #f6c45340}.bind-add-btn.danger[data-v-3e78e101]:not(:disabled){color:var(--hud-danger);box-shadow:none;background:#ff6b6b1a}.bind-add-btn.danger[data-v-3e78e101]:hover:not(:disabled){background:#ff6b6b2e;box-shadow:0 0 14px #ff6b6b40}.statusbar[data-v-3e78e101]{border-top:1px solid var(--hud-line-soft);height:30px;color:var(--hud-dim);z-index:60;background:#0a101b;flex:none;align-items:center;gap:18px;padding:0 14px;font-size:11px;display:flex;position:relative}.statusbar b[data-v-3e78e101]{color:var(--hud-accent);font-weight:600}.statusbar .sb-stats[data-v-3e78e101]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:.02em;align-items:center;gap:7px;display:inline-flex}.sb-stats b[data-v-3e78e101]{color:var(--hud-text);font-weight:600}.sb-stats i[data-v-3e78e101]{color:var(--hud-line-hi);font-style:normal}.sb-dot[data-v-3e78e101]{background:var(--hud-accent);width:7px;height:7px;box-shadow:0 0 6px var(--hud-accent);vertical-align:1px;border-radius:50%;margin-right:6px;display:inline-block}.sb-dot.red[data-v-3e78e101]{background:var(--hud-danger);box-shadow:0 0 6px var(--hud-danger)}.sb-dot[data-v-3e78e101]:not(.red){animation:sb-pulse-3e78e101 2.4s var(--hud-ease) infinite}@keyframes sb-pulse-3e78e101{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){.sb-dot[data-v-3e78e101]:not(.red){animation:none}}.sb-lat[data-v-3e78e101]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;position:absolute;left:50%;transform:translate(-50%)}.statusbar .copy[data-v-3e78e101]{color:var(--hud-faint);font-family:var(--font-mono);margin-left:auto;font-size:10px}.loading-mask[data-v-3e78e101]{z-index:90;background:var(--hud-bg);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex;position:fixed;inset:0}.loading-spinner[data-v-3e78e101]{border:2.5px solid var(--hud-line);border-top-color:var(--hud-accent);border-radius:50%;width:30px;height:30px;animation:.9s linear infinite spin-3e78e101}.loading-text[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.24em;color:var(--hud-dim);font-size:11px}@keyframes spin-3e78e101{to{transform:rotate(1turn)}}@keyframes ty-bounce-3e78e101{0%,60%,to{opacity:.5;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.drag-grip[data-v-3e78e101]{cursor:grab;touch-action:none}.drag-grip[data-v-3e78e101]:active{cursor:grabbing}.drag-panel[data-v-3e78e101]{will-change:left, top}.town-view[data-v-3e78e101] ::-webkit-scrollbar{width:8px;height:8px}.town-view[data-v-3e78e101] ::-webkit-scrollbar-track{background:0 0}.town-view[data-v-3e78e101] ::-webkit-scrollbar-thumb{background:#1c2942;border:2px solid #080d16;border-radius:4px}.town-view[data-v-3e78e101] ::-webkit-scrollbar-thumb:hover{background:#2c4568}.al-state[data-v-3e78e101]:active,.bind-add[data-v-3e78e101]:active,.bind-x[data-v-3e78e101]:active,.bp-btn[data-v-3e78e101]:active,.btn[data-v-3e78e101]:active,.lg-chip[data-v-3e78e101]:active,.mini-btn[data-v-3e78e101]:active,.obj-mini[data-v-3e78e101]:active,.snap-toggle[data-v-3e78e101]:active,.vp-tool[data-v-3e78e101]:active{transform:scale(.96)}.al-state[data-v-3e78e101],.bind-add[data-v-3e78e101],.bp-btn[data-v-3e78e101],.btn[data-v-3e78e101],.lg-chip[data-v-3e78e101],.mini-btn[data-v-3e78e101],.obj-mini[data-v-3e78e101],.snap-toggle[data-v-3e78e101],.vp-tool[data-v-3e78e101]{transition-property:filter,background,border-color,color,transform,opacity;transition-duration:.15s;transition-timing-function:var(--hud-ease)}.town-view button[data-v-3e78e101]:focus-visible,.town-view input[data-v-3e78e101]:focus-visible,.town-view select[data-v-3e78e101]:focus-visible{box-shadow:0 0 0 2px var(--hud-bg), 0 0 0 4px #41c8f473;border-radius:6px;outline:none}.vp-title h2[data-v-3e78e101]{color:var(--hud-text)}@keyframes estop-pulse-3e78e101{50%{filter:brightness(1.35)}}.btn-danger.armed[data-v-3e78e101]{animation:1s ease-in-out infinite estop-pulse-3e78e101}@media (prefers-reduced-motion:reduce){.callout[data-v-3e78e101],.inspector[data-v-3e78e101],.btn-danger.armed[data-v-3e78e101],.loading-spinner[data-v-3e78e101],.rpg-line.live .rpg-bubble[data-v-3e78e101],.ty-dot[data-v-3e78e101]{animation:none}}.dock-toggle[data-v-3e78e101],.sheet-btn[data-v-3e78e101],.sheet-hd[data-v-3e78e101]{display:none}.sheet-mask[data-v-3e78e101]{z-index:69;-webkit-backdrop-filter:blur(1.5px);backdrop-filter:blur(1.5px);background:#03060c9e;position:fixed;inset:0}@media (width<=1023px){.town-view[data-v-3e78e101]{--hud-faint:#8b9bb0}.topnav[data-v-3e78e101]{flex-wrap:wrap;align-items:center;gap:6px 8px;height:auto;min-height:46px;padding:6px 10px 8px}.brand[data-v-3e78e101]{flex:auto;order:0;gap:8px;min-width:0}.brand>div[data-v-3e78e101]{min-width:0;overflow:hidden}.brand-name[data-v-3e78e101]{white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.nav-right[data-v-3e78e101]{flex:none;order:1;gap:6px;margin-left:0}.nav-tabs[data-v-3e78e101]{flex:100%;order:2;gap:8px;position:static;transform:none}.seg button[data-v-3e78e101]{padding:0 14px;font-size:13px}.nav-action[data-v-3e78e101]{height:40px;padding:0 12px;font-size:13px}.save-chip[data-v-3e78e101]{font-size:11.5px}.nav-chip[data-v-3e78e101]{padding:5px 8px;font-size:11.5px}.avatar-chip[data-v-3e78e101]{padding:3px 8px 3px 3px}.avatar-chip span[data-v-3e78e101]{font-size:13px}.avatar-fallback[data-v-3e78e101]{width:26px;height:26px;font-size:11.5px}.sheet-btn[data-v-3e78e101]{border-radius:var(--hud-r-sm);min-height:40px;color:var(--hud-dim);white-space:nowrap;background:#101a2b;border:1px solid #27395c;align-items:center;gap:6px;padding:0 10px;font-size:12.5px;font-weight:600;display:inline-flex}.sheet-btn.on[data-v-3e78e101]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent);box-shadow:0 0 12px #35e0a04d}.sheet-ico[data-v-3e78e101]{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:16px;height:16px}.app[data-v-3e78e101]{grid-template-columns:minmax(0,1fr)}.stage-col[data-v-3e78e101],.stage[data-v-3e78e101]{min-height:0}.stage-top[data-v-3e78e101]{flex-wrap:wrap;gap:8px;padding:10px 12px}.vp-title[data-v-3e78e101]{gap:8px;padding:6px 10px}.vp-title h2[data-v-3e78e101]{font-size:14px}.vp-id[data-v-3e78e101]{font-size:11.5px}.vp-tool[data-v-3e78e101]{width:40px;height:40px}.vp-svg[data-v-3e78e101]{width:17px;height:17px}.angle-chip[data-v-3e78e101]{min-height:40px;padding:4px 10px;font-size:13px;top:58px;left:12px}.angle-chip select[data-v-3e78e101]{font-size:13px}.kpi-strip[data-v-3e78e101]{overscroll-behavior-x:contain;scrollbar-width:none;flex-wrap:nowrap;justify-content:flex-start;gap:8px;padding:0 12px;bottom:10px;overflow-x:auto}.kpi-strip[data-v-3e78e101]::-webkit-scrollbar{display:none}.kpi[data-v-3e78e101]{flex:none;gap:8px;padding:6px 10px}.kpi-ico[data-v-3e78e101]{width:28px;height:28px}.kpi-label[data-v-3e78e101]{font-size:11.5px}.kpi-val[data-v-3e78e101]{font-size:13px}.kpi-val small[data-v-3e78e101]{font-size:11.5px}.rail[data-v-3e78e101]{z-index:70;overscroll-behavior:contain;border:0;border-top:1px solid var(--hud-line-hi);visibility:hidden;width:auto;max-height:min(76dvh,640px);transition:transform .26s var(--hud-ease), visibility 0s linear .26s;background:linear-gradient(#0c1420,#080d16 46%);border-radius:16px 16px 0 0;gap:8px;padding:0 10px 12px;position:fixed;inset:auto 0 0;overflow-y:auto;transform:translateY(103%);box-shadow:0 -18px 46px #0009}.rail.sheet-open[data-v-3e78e101]{visibility:visible;transition:transform .26s var(--hud-ease), visibility 0s;transform:none}.topnav.sheet-on[data-v-3e78e101]{z-index:71}.rail-left[data-v-3e78e101],.rail-right[data-v-3e78e101]{border-left:0;border-right:0}.rail .panel[data-v-3e78e101]{flex:none}.sheet-hd[data-v-3e78e101]{z-index:2;border-bottom:1px solid var(--hud-line-soft);background:linear-gradient(#0e1725,#0c1420);align-items:center;gap:8px;margin:0 -10px 2px;padding:13px 12px 9px;display:flex;position:sticky;top:0}.sheet-grip[data-v-3e78e101]{background:#2c4568;border-radius:2px;width:40px;height:3px;margin-left:-20px;position:absolute;top:6px;left:50%}.sheet-hd-t[data-v-3e78e101]{color:var(--hud-text);letter-spacing:.04em;font-size:13px;font-weight:700}.sheet-x[data-v-3e78e101]{border:1px solid var(--hud-line);width:40px;height:40px;color:var(--hud-dim);background:#101a2b;border-radius:8px;flex:none;margin-left:auto;font-size:15px}.dock[data-v-3e78e101]{padding:0;display:block}.dock-toggle[data-v-3e78e101]{border:0;border-top:1px solid var(--hud-line-soft);width:100%;min-height:44px;color:var(--hud-text);text-align:left;background:linear-gradient(#101827,#0c131f);align-items:center;gap:8px;padding:0 12px;font-size:13px;font-weight:600;display:flex}.dock-toggle-t[data-v-3e78e101]{flex:none}.dock-toggle-hint[data-v-3e78e101]{color:var(--hud-faint);letter-spacing:.08em;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.dock-caret[data-v-3e78e101]{color:var(--hud-dim);transition:transform .2s var(--hud-ease);flex:none;margin-left:auto}.dock.dock-open .dock-caret[data-v-3e78e101]{transform:rotate(180deg)}.dock .dock-card[data-v-3e78e101]{display:none}.dock.dock-open[data-v-3e78e101]{overscroll-behavior:contain;max-height:52dvh;padding:8px;overflow-y:auto}.dock.dock-open .dock-card[data-v-3e78e101]{min-height:0;margin-bottom:8px;display:flex}.dock.dock-open .dock-card[data-v-3e78e101]:last-child{margin-bottom:0}.dock-card[data-v-3e78e101]{padding:12px}.dock-hd h3[data-v-3e78e101]{font-size:13px}.dock-count[data-v-3e78e101],.dock-mode[data-v-3e78e101],.ctl-sec[data-v-3e78e101]{font-size:11.5px}.ctl-row[data-v-3e78e101]{flex-wrap:wrap;gap:6px 10px}.ctl-name[data-v-3e78e101]{width:auto;min-width:62px;font-size:13px}.ctl-val[data-v-3e78e101]{width:auto;min-width:38px;font-size:12.5px}.fps-seg[data-v-3e78e101]{flex-wrap:wrap}.fps-seg button[data-v-3e78e101]{padding:0 10px;font-size:13px}.snap-toggle[data-v-3e78e101],.lg-chip[data-v-3e78e101],.trend-empty[data-v-3e78e101]{font-size:11.5px}.statusbar[data-v-3e78e101]{flex-wrap:wrap;gap:6px 12px;height:auto;min-height:30px;padding:5px 10px;font-size:11.5px}.statusbar .copy[data-v-3e78e101]{display:none}.sb-lat[data-v-3e78e101]{margin-left:auto;position:static;transform:none}.town-view button[data-v-3e78e101]{min-height:40px}.town-view[data-v-3e78e101] :where(.panel-tag,.daq-code,.daq-count,.daq-caret,.node-val,.node-dev,.daq-empty-hint,.scene-meta,.scene-cur,.scene-add,.scene-hint,.co-label,.co-range,.lg-chip,.lg-more,.ins-chip,.sect-hd,.obj-label,.range-status,.obj-mini,.bp-val,.seg-btn,.scale-min,.scale-max,.scale-val,.ins-empty,.donut-center span,.ev-time,.ev-name,.ev-text,.event-empty,.rail-empty,.al-src,.al-state,.mm-meta,.chat-state,.chat-role,.chat-harness,.chat-count,.rpg-divider,.rpg-time,.rpg-kind,.ty-label,.rpg-note,.bp-sub,.bp-tab,.bp-label,.bp-hint,.bp-btn,.member-ava,.member-role,.member-select,.bind-label,.bind-val,.bp-tpl,.bp-cur,.bp-empty,.dcw-name,.dcw-tag,.dcw-win-num,.dcw-send,.dcw-err,.bind-select,.bind-add-btn,.daq-ctl-cycle,.daq-num,.daq-th-inputs,.approval-ttl,.approval-detail),.town-view .dock .ctl-sec[data-v-3e78e101],.town-view .dock .ctl-val[data-v-3e78e101],.town-view .dock .dock-count[data-v-3e78e101],.town-view .dock .dock-mode[data-v-3e78e101],.town-view .dock .dock-toggle-hint[data-v-3e78e101],.town-view .statusbar .copy[data-v-3e78e101]{font-size:11.5px}.town-view .dock .ctl-val[data-v-3e78e101]{font-size:12.5px}.town-view .dock-hd h3[data-v-3e78e101]{font-size:13px}.town-view .bind-val b[data-v-3e78e101]{font-size:12px}.town-view .avatar-chip span[data-v-3e78e101]{font-size:13px}.town-view .save-chip[data-v-3e78e101],.town-view .nav-chip[data-v-3e78e101],.town-view .vp-id[data-v-3e78e101]{font-size:11.5px}.town-view .loading-text[data-v-3e78e101]{font-size:12px}.town-view[data-v-3e78e101] :where(.daq-name,.scene-name,.al-txt,.ev-text,.chat-name,.co-val,.rpg-text,.daq-info-row,.daq-ctl-btn,.rail-empty,.rpg-note,.member-name,.bind-label,.dcw-cur){font-size:13px}.town-view .statusbar[data-v-3e78e101]{font-size:12px}.town-view .vd-name[data-v-3e78e101]{font-size:13px}}@media (width<=639px){.brand[data-v-3e78e101]{flex:none}.brand>div[data-v-3e78e101]{display:none}.brand-glyph[data-v-3e78e101]{width:28px;height:28px}.nav-fps[data-v-3e78e101],.nav-user span[data-v-3e78e101]{display:none}.avatar-chip[data-v-3e78e101]{padding:3px}.sheet-btn-t[data-v-3e78e101]{display:none}.sheet-btn[data-v-3e78e101]{padding:0 10px}.stage-top[data-v-3e78e101]{padding:8px 10px}.vp-tools[data-v-3e78e101]{gap:6px}.vp-tool[data-v-3e78e101]{width:40px;height:40px}.angle-chip[data-v-3e78e101]{top:54px;left:10px}.kpi-strip[data-v-3e78e101]{padding:0 10px}.dock.dock-open[data-v-3e78e101]{max-height:58dvh}}@media (prefers-reduced-motion:reduce){.rail[data-v-3e78e101],.dock-caret[data-v-3e78e101]{transition:none}}.approval-card[data-v-3e78e101]{border-radius:var(--hud-r-md);background:#f6c4530f;border:1px solid #f6c4534d;margin-bottom:7px;padding:8px 9px}.approval-detail[data-v-3e78e101]{color:var(--hud-text);font-size:11px}.approval-ttl[data-v-3e78e101]{font-family:var(--font-mono);letter-spacing:.05em;color:var(--hud-amber);margin-top:5px;font-size:9.5px}.approval-ttl.urgent[data-v-3e78e101]{color:var(--hud-danger)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.line-chip[data-v-ff580c34]{vertical-align:-1px;border-radius:3px;width:10px;height:10px;margin-right:8px;display:inline-block;box-shadow:0 0 10px}.param-chip.daqwin[data-v-ff580c34]{color:#41c8f4;border-color:#41c8f466}.adopt-card[data-v-ff580c34]{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.adopt-title[data-v-ff580c34]{color:var(--aw-dim,#8fa0b5);flex:none;padding-top:4px;font-size:12px}.adopt-list[data-v-ff580c34]{flex-wrap:wrap;gap:8px;display:flex}.adopt-chip[data-v-ff580c34]{color:#e8eef8;background:#0d1420b3;border:1px solid #3c506e80;border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;padding:4px 8px;font-size:11.5px;display:inline-flex}.page[data-v-ff580c34]{padding:4px}h1[data-v-ff580c34]{letter-spacing:-.015em;margin:2px 0 4px;font-size:30px;font-weight:400}.ledger-card[data-v-ff580c34]{margin-bottom:14px;padding:14px 18px}.ledger-head[data-v-ff580c34]{align-items:center;gap:12px;display:flex}.ledger-head b[data-v-ff580c34]{font-size:13.5px}.ledger-tri[data-v-ff580c34]{align-items:center;gap:12px;margin-top:12px;display:flex}.tri-cell[data-v-ff580c34]{background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-chip);flex-direction:column;flex:none;gap:2px;padding:8px 16px;display:flex}.tri-cell small[data-v-ff580c34]{color:var(--ink-faint);font-size:11.5px}.tri-cell b[data-v-ff580c34]{color:var(--ink);font-size:17px}.ledger-cols[data-v-ff580c34]{grid-template-columns:1fr 1fr;gap:16px;margin-top:12px;display:grid}.sec-t[data-v-ff580c34]{letter-spacing:.12em;color:var(--ink-faint);margin-bottom:6px;font-size:11.5px;font-weight:700;display:block}.ledger-list[data-v-ff580c34]{max-height:200px;color:var(--ink-soft);flex-direction:column;gap:3px;margin:0;padding:0;font-size:11.5px;list-style:none;display:flex;overflow:auto}.ledger-rec[data-v-ff580c34]{align-items:center;gap:8px;display:flex}.rec-st[data-v-ff580c34]{font-family:var(--font-mono);color:var(--ink-faint);border:1px solid var(--line-strong);border-radius:4px;flex:none;padding:0 6px;font-size:11.5px}.rec-st.open[data-v-ff580c34]{color:var(--tone-warning-dot);border-color:var(--tone-warning-dot)}.tri-cell b[data-v-ff580c34]{overflow-wrap:anywhere}.rec-st.judged[data-v-ff580c34]{color:var(--tone-warning-dot);border-color:var(--tone-warning-dot);opacity:.85}.rec-st.judged-keep[data-v-ff580c34],.rec-st.rolled-back[data-v-ff580c34]{color:var(--tone-success-dot);border-color:var(--tone-success-dot)}.sub[data-v-ff580c34]{opacity:.6;margin:0;font-size:12.5px}.mono[data-v-ff580c34]{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.dim[data-v-ff580c34]{opacity:.55}.badges[data-v-ff580c34]{gap:8px;display:flex}.badge[data-v-ff580c34]{letter-spacing:.05em;color:var(--ink-soft);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:3px 10px;font-size:11.5px}.ctrl-card[data-v-ff580c34]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px;padding:14px 18px;display:flex}.ctrl-left[data-v-ff580c34]{align-items:center;gap:14px;display:flex}.aw-pill.running[data-v-ff580c34]{background:var(--accent)}.ctrl-right[data-v-ff580c34]{align-items:center;gap:12px;display:flex}.ctrl-metrics[data-v-ff580c34]{color:var(--ink-soft);flex-wrap:wrap;align-items:center;gap:6px 8px;font-size:11.5px;display:flex}.ctrl-metrics .sep[data-v-ff580c34]{opacity:.4}.ctrl-metrics .warn[data-v-ff580c34]{color:var(--tone-warning-dot)}.add-btn[data-v-ff580c34]{padding:8px 16px;font-size:13px}.banner[data-v-ff580c34]{border-radius:var(--radius-chip);margin:0 0 12px;padding:9px 14px;font-size:12.5px}.banner.bad[data-v-ff580c34]{color:var(--tone-danger-dot);background:var(--tone-danger-bg);border:1px solid color-mix(in srgb, var(--tone-danger-dot) 40%, transparent)}.banner.good[data-v-ff580c34]{color:var(--tone-success-dot);background:var(--tone-success-bg);border:1px solid color-mix(in srgb, var(--tone-success-dot) 40%, transparent)}.table-card[data-v-ff580c34]{margin-bottom:14px;overflow-x:auto}.nodes-table[data-v-ff580c34]{border-collapse:collapse;width:100%;font-size:12.5px}.nodes-table td[data-v-ff580c34],.nodes-table th[data-v-ff580c34]{text-align:left;border-bottom:1px solid var(--divider-hair);padding:9px 12px}.nodes-table th[data-v-ff580c34]{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid var(--line-strong);font-size:11px;font-weight:600}.nodes-table td b[data-v-ff580c34]{margin-left:8px}.ch[data-v-ff580c34]{color:var(--ink-faint);margin-top:2px;font-size:11.5px;display:block}.right[data-v-ff580c34]{text-align:right}.val[data-v-ff580c34]{font-size:13px}.val small[data-v-ff580c34]{color:var(--ink-faint);margin-left:3px}.read-stale[data-v-ff580c34]{color:var(--tone-danger-dot,#e05a5a);text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.read-btn[data-v-ff580c34]{margin-left:8px}.st-pill[data-v-ff580c34]{font-family:var(--font-mono);letter-spacing:.04em;border-radius:var(--radius-pill);padding:3px 9px;font-size:11.5px;display:inline-block}.st-pill.ok[data-v-ff580c34]{color:var(--tone-success-dot);background:var(--tone-success-bg)}.st-pill.writing[data-v-ff580c34]{color:var(--ink);background:var(--hover-tint)}.st-pill.alarm[data-v-ff580c34],.st-pill.error[data-v-ff580c34]{color:var(--tone-danger-dot);background:var(--tone-danger-bg)}.st-pill.warn[data-v-ff580c34]{color:var(--tone-warning-dot);background:var(--tone-warning-bg)}.st-pill.idle[data-v-ff580c34],.st-pill.offline[data-v-ff580c34]{color:var(--tone-neutral-dot);background:var(--tone-neutral-bg)}.st-pill.paused[data-v-ff580c34]{color:var(--tone-warning-dot);background:var(--tone-warning-bg)}.ctrl-toggle[data-v-ff580c34]{cursor:pointer;color:var(--ink-faint);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-pill);align-items:center;gap:6px;padding:3px 10px;font-size:11.5px;display:inline-flex}.ctrl-toggle .ct-dot[data-v-ff580c34]{background:var(--tone-neutral-dot);border-radius:50%;width:7px;height:7px}.ctrl-toggle.on[data-v-ff580c34]{color:var(--tone-success-dot);border-color:color-mix(in srgb, var(--tone-success-dot) 45%, transparent)}.ctrl-toggle.on .ct-dot[data-v-ff580c34]{background:var(--tone-success-dot);box-shadow:0 0 6px var(--tone-success-dot)}.ctrl-toggle[data-v-ff580c34]:disabled{opacity:.55;cursor:wait}.node-paused td[data-v-ff580c34]{opacity:.6}.node-paused .write-row[data-v-ff580c34]{opacity:.5}.tpl-hint[data-v-ff580c34]{margin:0 0 10px;font-size:12px}.recipe-hd[data-v-ff580c34],.recipe-actions[data-v-ff580c34]{flex-wrap:wrap}.tpl-chips[data-v-ff580c34]{flex-wrap:wrap;gap:6px;margin-bottom:4px;display:flex}.tpl-chip[data-v-ff580c34]{color:var(--ink-soft);background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--radius-chip);flex-wrap:wrap;align-items:center;gap:6px;padding:3px 9px;font-size:11.5px;display:inline-flex}.tpl-chip small[data-v-ff580c34]{color:var(--ink-faint)}.tpl-tag[data-v-ff580c34]{color:var(--accent);border:1px solid color-mix(in srgb, var(--accent) 40%, transparent);border-radius:var(--radius-pill);padding:1px 6px;font-size:11.5px;font-style:normal}.tpl-tag.builtin[data-v-ff580c34]{color:var(--ink-faint);border-color:var(--line-strong)}.write-row[data-v-ff580c34]{align-items:center;gap:6px;display:flex}.write-inp[data-v-ff580c34]{width:92px;padding:4px 8px}.write-btn[data-v-ff580c34]{padding:5px 12px}.mini-btn[data-v-ff580c34]{margin-right:4px}.mini-btn.danger[data-v-ff580c34]{color:var(--tone-danger-dot)}.mini-btn[data-v-ff580c34]:hover{border-color:var(--accent);color:var(--accent)}.inp[data-v-ff580c34]{color:var(--ink);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:5px 9px;font-size:12.5px}.line-card[data-v-ff580c34]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px;padding:14px 18px;display:flex}.line-status[data-v-ff580c34]{align-items:center;gap:12px;min-width:260px;display:flex}.line-dot[data-v-ff580c34]{background:var(--tone-neutral-dot);width:12px;height:12px;box-shadow:0 0 0 4px color-mix(in srgb, var(--tone-neutral-dot) 20%, transparent);border-radius:50%}.line-dot.on[data-v-ff580c34]{background:var(--tone-success-dot);box-shadow:0 0 0 4px color-mix(in srgb, var(--tone-success-dot) 22%, transparent);animation:1.6s infinite linePulse-ff580c34}@keyframes linePulse-ff580c34{0%,to{box-shadow:0 0 0 3px color-mix(in srgb, var(--tone-success-dot) 25%, transparent)}50%{box-shadow:0 0 0 7px color-mix(in srgb, var(--tone-success-dot) 8%, transparent)}}.line-info b[data-v-ff580c34]{font-size:14px}.line-info small[data-v-ff580c34]{margin-top:2px;font-size:11px;display:block}.line-ctl[data-v-ff580c34]{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.ctl-sel[data-v-ff580c34]{color:var(--ink-faint);flex-direction:column;gap:4px;font-size:11px;display:flex}.ctl-sel .inp[data-v-ff580c34]{min-width:150px}.param-chip[data-v-ff580c34]{overflow-wrap:anywhere}.pill-btn.stop[data-v-ff580c34]{background:var(--tone-danger-dot);border-color:var(--tone-danger-dot)}.product-row[data-v-ff580c34]{flex-wrap:wrap;gap:8px;margin:0 0 12px;display:flex}.prod-chip[data-v-ff580c34]{cursor:pointer;color:var(--ink-soft);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-pill);align-items:center;gap:6px;padding:4px 12px;font-size:12px;display:inline-flex}.prod-chip.on[data-v-ff580c34]{color:var(--on-accent);background:var(--accent);border-color:var(--accent)}.prod-del[data-v-ff580c34]{color:var(--tone-danger-dot);font-weight:700}.query-card[data-v-ff580c34]{margin-bottom:14px;padding:14px 18px}.q-grid[data-v-ff580c34]{grid-template-columns:repeat(6,1fr);align-items:end;gap:10px;display:grid}.recipe-grid[data-v-ff580c34]{grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr))}.q-grid .f[data-v-ff580c34]{color:var(--ink-faint);font-size:11px}.q-actions[data-v-ff580c34]{justify-content:flex-end}.q-result[data-v-ff580c34]{margin-top:12px;overflow-x:auto}.cal-form[data-v-ff580c34]{grid-template-columns:2fr 1fr;align-items:end}.recipe-card[data-v-ff580c34]{margin-bottom:14px;padding:16px 18px}.recipe-hd[data-v-ff580c34]{align-items:center;gap:10px;margin-bottom:6px;display:flex}.recipe-hd h3[data-v-ff580c34]{margin:0;font-size:16px}.panel-tag[data-v-ff580c34]{color:var(--ink-soft);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:2px 8px;font-size:11.5px}.recipe-sub[data-v-ff580c34]{color:var(--ink-faint);margin:0 0 14px;font-size:12px}.recipe-grid[data-v-ff580c34]{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;display:grid}.recipe-item[data-v-ff580c34]{background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--radius-chip);padding:12px 14px}.recipe-name b[data-v-ff580c34]{font-size:13.5px}.recipe-name small[data-v-ff580c34]{margin-left:8px}.desc[data-v-ff580c34]{margin:4px 0;font-size:12px}.recipe-params[data-v-ff580c34]{flex-wrap:wrap;gap:6px;margin:8px 0;display:flex}.param-chip[data-v-ff580c34]{color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent);border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);border-radius:var(--radius-chip);padding:2px 8px;font-size:11.5px}.recipe-actions[data-v-ff580c34]{align-items:center;gap:6px;margin-top:8px;display:flex}.ver-row[data-v-ff580c34]{border:1px solid var(--divider-hair);border-radius:10px;margin-bottom:8px;padding:10px 12px}.ver-row.cur[data-v-ff580c34]{background:color-mix(in srgb, var(--accent) 6%, transparent);border-color:color-mix(in srgb, var(--accent) 30%, transparent)}.ver-head[data-v-ff580c34]{align-items:center;gap:10px;display:flex}.ver-v[data-v-ff580c34]{font-size:13px;font-weight:700}.ver-src[data-v-ff580c34]{border:1px solid var(--line-strong);border-radius:var(--radius-pill);padding:1px 8px;font-size:11.5px}.ver-src.agent[data-v-ff580c34]{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 50%, transparent)}.ver-src.user[data-v-ff580c34]{color:var(--ink-soft)}.ver-src.system[data-v-ff580c34]{color:var(--ink-faint)}.ver-src.cur[data-v-ff580c34]{color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:#0000}.ver-actor[data-v-ff580c34]{font-family:var(--font-mono);color:var(--ink-soft);font-size:12px}.ver-desc[data-v-ff580c34]{color:var(--ink);margin:6px 0 0;font-size:12px}.ver-diff[data-v-ff580c34]{color:var(--ink-faint);margin:4px 0 0;font-size:11px}.sec-label[data-v-ff580c34]{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin:14px 0 6px;font-size:11px;font-weight:600}.runs[data-v-ff580c34]{margin-top:6px}.modal-mask[data-v-ff580c34]{z-index:50;background:var(--scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal[data-v-ff580c34]{background:var(--surface-glass-strong);width:680px;max-width:94vw;max-height:88vh;-webkit-backdrop-filter:var(--aurora-blur);backdrop-filter:var(--aurora-blur);border:1px solid var(--glass-line);border-radius:var(--radius-panel);box-shadow:var(--glass-edge), var(--shadow-float);padding:22px 24px;overflow-y:auto}.m-title[data-v-ff580c34]{margin:0 0 14px;font-size:17px}.seg-row[data-v-ff580c34]{gap:8px;margin-bottom:14px;display:flex}.seg[data-v-ff580c34]{cursor:pointer;color:var(--ink-faint);background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--radius-chip);flex:1;padding:8px 0;font-size:13px}.seg.on[data-v-ff580c34]{color:var(--on-accent);background:var(--accent);border-color:var(--accent);font-weight:600}.f-grid[data-v-ff580c34]{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px;display:grid}.driver-form[data-v-ff580c34]{grid-template-columns:repeat(3,1fr)}.param-row[data-v-ff580c34]{grid-template-columns:2fr 1fr 1fr 1fr auto;align-items:end;gap:8px;margin-bottom:8px;display:grid}.param-row .f[data-v-ff580c34]{flex:1}.param-del[data-v-ff580c34]{margin-bottom:2px}.f[data-v-ff580c34]{color:var(--ink-faint);flex-direction:column;gap:4px;font-size:11.5px;display:flex}.f em[data-v-ff580c34]{margin-left:3px;font-style:normal}.hint[data-v-ff580c34]{color:var(--ink-faint);font-size:11.5px}.test-row[data-v-ff580c34]{align-items:center;gap:10px;margin:6px 0 4px;display:flex}.test-result[data-v-ff580c34]{font-family:var(--font-mono);font-size:11px}.test-result.good[data-v-ff580c34]{color:var(--tone-success-dot)}.test-result.bad[data-v-ff580c34]{color:var(--tone-danger-dot)}.m-err[data-v-ff580c34]{color:var(--tone-danger-dot);margin:8px 0 0;font-size:12px}.m-note[data-v-ff580c34]{color:var(--ink-faint);margin:8px 0 0;font-size:12px}.param-chip.stale[data-v-ff580c34]{color:var(--ink-faint);background:color-mix(in srgb, var(--ink) 5%, transparent);border-color:var(--divider-hair);text-decoration:line-through;-webkit-text-decoration-color:color-mix(in srgb, var(--ink-faint) 60%, transparent);text-decoration-color:color-mix(in srgb, var(--ink-faint) 60%, transparent)}.chip-stale-tag[data-v-ff580c34]{color:var(--tone-danger-dot);background:color-mix(in srgb, var(--tone-danger-dot) 8%, transparent);border:1px solid color-mix(in srgb, var(--tone-danger-dot) 30%, transparent);border-radius:var(--radius-chip);margin-left:5px;padding:0 5px;font-size:11.5px;font-style:normal;text-decoration:none}.row-stale[data-v-ff580c34]{color:var(--tone-danger-dot);border:1px solid color-mix(in srgb, var(--tone-danger-dot) 30%, transparent);border-radius:var(--radius-chip);flex:none;padding:1px 7px;font-size:11.5px}.m-actions[data-v-ff580c34]{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.aw-pill.outline[data-v-ff580c34]{color:var(--ink);background:var(--paper-raised);border-color:var(--line-strong)}.err[data-v-ff580c34]{color:var(--tone-danger-dot);margin-top:14px;font-size:13px}@media (prefers-reduced-motion:no-preference){.nodes-table tbody tr[data-v-ff580c34]:hover{background:var(--hover-tint)}}@media (width<=900px){.ctrl-card[data-v-ff580c34]{gap:12px;padding:12px}.ctrl-right[data-v-ff580c34]{flex-wrap:wrap;gap:8px 10px;width:100%}.ctrl-metrics[data-v-ff580c34]{width:100%}.line-card[data-v-ff580c34]{gap:12px;padding:12px}.line-status[data-v-ff580c34]{min-width:0}.line-ctl[data-v-ff580c34]{width:100%}.ctl-sel[data-v-ff580c34]{flex:140px;min-width:0}.ctl-sel .inp[data-v-ff580c34]{width:100%;min-width:0}.line-ctl .pill-btn[data-v-ff580c34]{flex:120px}.table-card[data-v-ff580c34]{-webkit-overflow-scrolling:touch;overflow-x:auto}.nodes-table[data-v-ff580c34]{min-width:1080px}.nodes-table td[data-v-ff580c34],.nodes-table th[data-v-ff580c34]{white-space:nowrap}.nodes-table tbody>tr>td[data-v-ff580c34]:first-child,.nodes-table thead>tr>th[data-v-ff580c34]:first-child{z-index:2;background:var(--paper-raised);box-shadow:1px 0 0 var(--line);position:sticky;left:0}.adopt-card[data-v-ff580c34],.ledger-card[data-v-ff580c34],.query-card[data-v-ff580c34],.recipe-card[data-v-ff580c34]{padding:12px}.ledger-cols[data-v-ff580c34]{grid-template-columns:1fr}.ledger-tri[data-v-ff580c34]{flex-wrap:wrap}.aw-pill[data-v-ff580c34],.ctrl-toggle[data-v-ff580c34],.inp[data-v-ff580c34],.mini-btn[data-v-ff580c34],.pill-btn[data-v-ff580c34],.prod-chip[data-v-ff580c34],.tpl-chip[data-v-ff580c34],.write-inp[data-v-ff580c34]{min-height:40px}.write-inp[data-v-ff580c34]{width:100%;min-width:90px}.write-row[data-v-ff580c34]{flex-wrap:wrap}.cal-form[data-v-ff580c34],.driver-form[data-v-ff580c34],.f-grid[data-v-ff580c34]{grid-template-columns:1fr}.q-grid[data-v-ff580c34]{grid-template-columns:repeat(2,minmax(0,1fr))}.param-row[data-v-ff580c34]{grid-template-columns:1fr 1fr}.modal[data-v-ff580c34]{width:calc(100vw - 20px);max-width:calc(100vw - 20px);padding:16px 14px}.seg[data-v-ff580c34]{min-height:40px;padding:10px 0}.m-actions[data-v-ff580c34]{flex-wrap:wrap}.m-actions[data-v-ff580c34]>*{flex:auto}.recipe-hd .mini-btn[data-v-ff580c34],.recipe-hd .pill-btn[data-v-ff580c34]{min-height:40px}}@media (width<=640px){h1[data-v-ff580c34]{font-size:22px}.q-grid[data-v-ff580c34]{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page[data-v-6e40dda6]{padding:4px}.back[data-v-6e40dda6]{color:var(--ink-faint);text-decoration:none}.back[data-v-6e40dda6]:hover{color:var(--accent)}.aw-page-head h1[data-v-6e40dda6]{letter-spacing:-.01em;margin:2px 0 4px;font-size:26px;font-weight:400}.mono[data-v-6e40dda6]{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.sec[data-v-6e40dda6]{letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 10px;font-size:12px;font-weight:600}.mt[data-v-6e40dda6]{margin-top:22px}.err[data-v-6e40dda6]{color:var(--tone-danger-dot);margin-top:14px;font-size:13px}.grid[data-v-6e40dda6]{grid-template-columns:minmax(260px,340px) minmax(320px,1fr) minmax(280px,380px);align-items:start;gap:14px;display:grid}@media (width<=1100px){.grid[data-v-6e40dda6]{grid-template-columns:1fr}}.pad[data-v-6e40dda6],.value-card[data-v-6e40dda6]{padding:16px 18px}.big-val[data-v-6e40dda6]{color:var(--accent);margin:8px 0 10px;font-size:40px;line-height:1.1}.big-val small[data-v-6e40dda6]{color:var(--ink-faint);margin-left:8px;font-size:15px}.live-canvas[data-v-6e40dda6]{border:1px solid var(--line);border-radius:var(--radius-chip);background:var(--paper-deep);width:100%;height:64px}.facts[data-v-6e40dda6]{flex-direction:column;gap:4px;margin:14px 0 0;display:flex}.facts div[data-v-6e40dda6]{justify-content:space-between;font-size:11.5px;display:flex}.facts dt[data-v-6e40dda6]{color:var(--ink-faint)}.facts dd[data-v-6e40dda6]{color:var(--ink);margin:0}.form-grid[data-v-6e40dda6]{flex-direction:column;gap:10px;display:flex}.field[data-v-6e40dda6]{color:var(--ink-faint);flex-direction:column;flex:1;gap:4px;font-size:12px;display:flex}.field.row[data-v-6e40dda6]{flex-direction:row;align-items:center;gap:8px}.field.row small[data-v-6e40dda6]{color:var(--ink-faint)}.field-row[data-v-6e40dda6]{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.input[data-v-6e40dda6]{width:100%;color:var(--ink);background:var(--paper-raised);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:6px 9px;font-size:12.5px}.input[data-v-6e40dda6]:disabled{opacity:.45}.grow[data-v-6e40dda6]{flex:auto}.toggle[data-v-6e40dda6]{cursor:pointer;color:var(--tone-neutral-dot);background:var(--tone-neutral-bg);border-radius:var(--radius-chip);border:0;align-self:flex-start;padding:6px 12px;font-size:12px}.toggle.on[data-v-6e40dda6]{color:var(--tone-success-dot);background:var(--tone-success-bg)}.toggle.slim[data-v-6e40dda6]{padding:6px 10px;font-size:11.5px}.bind-row[data-v-6e40dda6]{gap:8px;display:flex}.driver-grid[data-v-6e40dda6]{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.field em[data-v-6e40dda6]{color:var(--tone-danger-dot);margin-left:2px;font-style:normal}.test-row[data-v-6e40dda6]{align-items:center;gap:10px;margin-top:8px;display:flex}.test-out[data-v-6e40dda6]{font-size:11px}.test-out.ok[data-v-6e40dda6]{color:var(--tone-success-dot)}.test-out.bad[data-v-6e40dda6]{color:var(--tone-danger-dot)}.col-hist[data-v-6e40dda6]{min-width:0}.hist-hd[data-v-6e40dda6]{justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.hist-ctl[data-v-6e40dda6]{align-items:center;gap:6px;display:flex}.refresh-ctl[data-v-6e40dda6]{color:var(--ink-soft);align-items:center;gap:3px;font-size:11px;display:inline-flex}.refresh-ctl input[data-v-6e40dda6]{width:62px;color:var(--ink-soft);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:3px 6px;font-size:11px}.refresh-ctl input[data-v-6e40dda6]:focus{border-color:var(--accent);outline:none}.hist-canvas[data-v-6e40dda6]{border:1px solid var(--line);border-radius:var(--radius-chip);background:var(--paper-deep);width:100%;height:130px}.raw-table[data-v-6e40dda6]{border-collapse:collapse;width:100%;margin-top:10px;font-size:11px}.raw-table td[data-v-6e40dda6],.raw-table th[data-v-6e40dda6]{text-align:left;border-bottom:1px solid var(--divider-hair);padding:4px 6px}.raw-table th[data-v-6e40dda6]{letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint);font-weight:600}.st-pill[data-v-6e40dda6]{font-family:var(--font-mono);letter-spacing:.04em;border-radius:var(--radius-pill);padding:3px 11px;font-size:11px;display:inline-block}.st-pill.ok[data-v-6e40dda6]{color:var(--tone-success-dot);background:var(--tone-success-bg)}.st-pill.warn[data-v-6e40dda6]{color:var(--tone-warning-dot);background:var(--tone-warning-bg)}.st-pill.alarm[data-v-6e40dda6]{color:var(--tone-danger-dot);background:var(--tone-danger-bg)}.st-pill.offline[data-v-6e40dda6]{color:var(--tone-neutral-dot);background:var(--tone-neutral-bg)}.frames-tile[data-v-6e40dda6]{margin-top:14px}.frames-n[data-v-6e40dda6]{color:var(--ink-faint);margin-left:8px}.vec-svg[data-v-6e40dda6]{background:var(--tone-neutral-bg);border-radius:6px;width:100%;height:96px;margin-bottom:10px;display:block}.gal[data-v-6e40dda6]{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.gal-item[data-v-6e40dda6]{cursor:zoom-in;margin:0}.gal-item img[data-v-6e40dda6]{aspect-ratio:4/3;-o-object-fit:cover;object-fit:cover;background:var(--tone-neutral-bg);border-radius:6px;width:100%;display:block}.gal-item figcaption[data-v-6e40dda6]{color:var(--ink-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:11px;overflow:hidden}.frames-empty[data-v-6e40dda6]{color:var(--ink-faint);margin:8px 0;font-size:13px}.gal-full[data-v-6e40dda6]{z-index:60;cursor:zoom-out;background:#000000b8;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.gal-full img[data-v-6e40dda6]{border-radius:8px;max-width:92vw;max-height:92vh}
|