businesslens 0.10.0 → 0.12.0

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.
Files changed (138) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/cli.js +3 -1
  3. package/dist/viewer/200.html +1 -1
  4. package/dist/viewer/404.html +1 -1
  5. package/dist/viewer/_nuxt/1AKcmNi5.js +2 -0
  6. package/dist/viewer/_nuxt/B-mP848s.js +1 -0
  7. package/dist/viewer/_nuxt/Bit4pBdc.js +1 -0
  8. package/dist/viewer/_nuxt/BlrFlowCanvas.DQt_5hA7.css +1 -0
  9. package/dist/viewer/_nuxt/BtQ-s_jB.js +2 -0
  10. package/dist/viewer/_nuxt/Dpgwz9sb.js +1 -0
  11. package/dist/viewer/_nuxt/builds/latest.json +1 -1
  12. package/dist/viewer/_nuxt/builds/meta/5aaede1d-b2e2-4361-9046-383c78ec9ec1.json +1 -0
  13. package/dist/viewer/_nuxt/cSnpUPR8.js +1 -0
  14. package/dist/viewer/_nuxt/diagram.worker-DsHz2mkM.js +1 -0
  15. package/dist/viewer/_nuxt/entry.Cn2HYcjJ.css +1 -0
  16. package/dist/viewer/_nuxt/index.M4u1EpFn.css +1 -0
  17. package/dist/viewer/index.html +1 -1
  18. package/docs/business-rules.md +5 -5
  19. package/docs/capabilities.md +4 -4
  20. package/docs/ci.md +1 -1
  21. package/docs/cli-contribute.md +1 -1
  22. package/docs/cli-export.md +1 -1
  23. package/docs/cli-install.md +1 -1
  24. package/docs/cli-lint.md +1 -1
  25. package/docs/cli-open.md +1 -1
  26. package/docs/cli-pull.md +1 -1
  27. package/docs/cli-update.md +1 -1
  28. package/docs/cli-view.md +1 -1
  29. package/docs/cli.md +1 -1
  30. package/docs/domains.md +2 -2
  31. package/docs/entities.md +5 -5
  32. package/docs/integration.md +1 -1
  33. package/docs/interfaces.md +271 -12
  34. package/docs/journeys.md +4 -5
  35. package/docs/product-model.md +36 -22
  36. package/docs/references.md +2 -2
  37. package/docs/skill-businesslens-ideate.md +13 -7
  38. package/docs/skill-businesslens-map.md +14 -6
  39. package/docs/skill-businesslens-verify.md +14 -1
  40. package/docs/skills.md +1 -1
  41. package/docs/with-plan-mode.md +1 -1
  42. package/docs/with-sdd.md +1 -1
  43. package/layers/nuxt/report-viewer/README.md +76 -11
  44. package/layers/nuxt/report-viewer/THIRD_PARTY.md +19 -0
  45. package/layers/nuxt/report-viewer/app/assets/report-topology.css +97 -0
  46. package/layers/nuxt/report-viewer/app/assets/report-viewer.css +74 -0
  47. package/layers/nuxt/report-viewer/app/components/BlrConnections.vue +11 -162
  48. package/layers/nuxt/report-viewer/app/components/BlrDiagram.vue +152 -0
  49. package/layers/nuxt/report-viewer/app/components/BlrEntityLifecycle.vue +12 -14
  50. package/layers/nuxt/report-viewer/app/components/BlrExperienceContents.vue +20 -0
  51. package/layers/nuxt/report-viewer/app/components/BlrFilterBar.vue +73 -0
  52. package/layers/nuxt/report-viewer/app/components/BlrFlowCanvas.vue +115 -328
  53. package/layers/nuxt/report-viewer/app/components/BlrFlowNode.vue +8 -207
  54. package/layers/nuxt/report-viewer/app/components/BlrFlowNodeContent.vue +49 -0
  55. package/layers/nuxt/report-viewer/app/components/BlrFlowRoutedEdge.vue +12 -131
  56. package/layers/nuxt/report-viewer/app/components/BlrInterfaceDelivery.vue +23 -0
  57. package/layers/nuxt/report-viewer/app/components/BlrInterfaceType.vue +33 -3
  58. package/layers/nuxt/report-viewer/app/components/BlrKind.vue +10 -2
  59. package/layers/nuxt/report-viewer/app/components/BlrOverview.vue +192 -299
  60. package/layers/nuxt/report-viewer/app/components/BlrPageBlock.vue +13 -2
  61. package/layers/nuxt/report-viewer/app/components/BlrProductTopology.vue +174 -339
  62. package/layers/nuxt/report-viewer/app/components/BlrRail.vue +9 -51
  63. package/layers/nuxt/report-viewer/app/components/BlrReportShell.vue +357 -921
  64. package/layers/nuxt/report-viewer/app/components/BlrResourceBody.vue +13 -77
  65. package/layers/nuxt/report-viewer/app/components/BlrResourcePage.vue +22 -63
  66. package/layers/nuxt/report-viewer/app/components/BlrScenarios.vue +7 -2
  67. package/layers/nuxt/report-viewer/app/components/BlrTopologyBranch.vue +28 -0
  68. package/layers/nuxt/report-viewer/app/components/BlrTopologyComposition.vue +86 -0
  69. package/layers/nuxt/report-viewer/app/components/BlrTopologyMatrix.vue +72 -0
  70. package/layers/nuxt/report-viewer/app/components/BlrTopologyResource.vue +11 -0
  71. package/layers/nuxt/report-viewer/app/components/BlrTopologyTree.vue +56 -0
  72. package/layers/nuxt/report-viewer/app/components/BusinessLensReportViewer.vue +38 -5
  73. package/layers/nuxt/report-viewer/app/composables/useBlrReadingWidth.ts +11 -0
  74. package/layers/nuxt/report-viewer/app/composables/useBlrReportNavigation.ts +42 -0
  75. package/layers/nuxt/report-viewer/app/composables/useBlrTopologyScroll.ts +54 -0
  76. package/layers/nuxt/report-viewer/app/utils/diagram.ts +106 -0
  77. package/layers/nuxt/report-viewer/app/utils/diagram.worker.ts +3 -0
  78. package/layers/nuxt/report-viewer/app/utils/entityLifecycle.ts +28 -83
  79. package/layers/nuxt/report-viewer/app/utils/pageSections.ts +9 -40
  80. package/layers/nuxt/report-viewer/app/utils/productTopologyViews.ts +32 -109
  81. package/layers/nuxt/report-viewer/app/utils/reportDestinations.ts +41 -0
  82. package/layers/nuxt/report-viewer/app/utils/reportWorkspace.ts +28 -239
  83. package/layers/nuxt/report-viewer/app/utils/resourceCards.ts +9 -4
  84. package/layers/nuxt/report-viewer/app/utils/resourceConnections.ts +185 -0
  85. package/layers/nuxt/report-viewer/app/utils/resourceDocs.ts +3 -5
  86. package/layers/nuxt/report-viewer/app/utils/resourceFacets.ts +64 -16
  87. package/layers/nuxt/report-viewer/app/utils/topologyProjections.ts +221 -0
  88. package/layers/nuxt/report-viewer/app/utils/topologyRelations.ts +113 -0
  89. package/layers/nuxt/report-viewer/app/utils/topologyState.ts +73 -0
  90. package/layers/nuxt/report-viewer/app/utils/topologyTargets.ts +41 -0
  91. package/layers/nuxt/report-viewer/app/utils/topologyTree.ts +58 -0
  92. package/layers/nuxt/report-viewer/app/utils/vocabulary.generated.ts +5 -7
  93. package/layers/nuxt/report-viewer/licenses/ELK-EPL-2.0.md +263 -0
  94. package/layers/nuxt/report-viewer/licenses/diagram-design-MIT.txt +21 -0
  95. package/layers/nuxt/report-viewer/licenses/vue-flow-MIT.txt +20 -0
  96. package/layers/nuxt/report-viewer/nuxt.config.ts +17 -9
  97. package/layers/nuxt/theme/app/assets/theme.css +31 -0
  98. package/package.json +4 -12
  99. package/skills/businesslens-ideate/SKILL.md +12 -9
  100. package/skills/businesslens-ideate/references/format.md +14 -1
  101. package/skills/businesslens-ideate/references/planning-rubric.md +7 -4
  102. package/skills/businesslens-map/SKILL.md +16 -13
  103. package/skills/businesslens-map/references/format.md +14 -1
  104. package/skills/businesslens-map/references/mapping-rubric.md +3 -1
  105. package/skills/businesslens-verify/SKILL.md +15 -1
  106. package/skills/businesslens-verify/references/format.md +14 -1
  107. package/skills/businesslens-verify/references/verification-rubric.md +9 -0
  108. package/dist/viewer/_nuxt/CcApCzJy.js +0 -34
  109. package/dist/viewer/_nuxt/CeE3421Y.js +0 -1
  110. package/dist/viewer/_nuxt/CmwFmk8h.js +0 -37
  111. package/dist/viewer/_nuxt/DQ3ZnyMB.js +0 -1
  112. package/dist/viewer/_nuxt/builds/meta/a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae.json +0 -1
  113. package/dist/viewer/_nuxt/entry.DsWXLqBw.css +0 -1
  114. package/dist/viewer/_nuxt/index.BeuARo3I.css +0 -1
  115. package/dist/viewer/brand/icons/apple-touch-icon.png +0 -0
  116. package/dist/viewer/brand/icons/businesslens-app-icon.svg +0 -7
  117. package/dist/viewer/brand/icons/businesslens-maskable-icon.svg +0 -7
  118. package/dist/viewer/brand/icons/favicon-32.png +0 -0
  119. package/dist/viewer/brand/icons/favicon.ico +0 -0
  120. package/dist/viewer/brand/icons/favicon.svg +0 -7
  121. package/dist/viewer/brand/icons/icon-1024.png +0 -0
  122. package/dist/viewer/brand/icons/icon-192.png +0 -0
  123. package/dist/viewer/brand/icons/icon-512.png +0 -0
  124. package/dist/viewer/brand/icons/maskable-icon-512.png +0 -0
  125. package/dist/viewer/brand/logo/mark-dark.svg +0 -4
  126. package/dist/viewer/brand/logo/mark.svg +0 -4
  127. package/dist/viewer/brand/logo/wordmark-dark.svg +0 -173
  128. package/dist/viewer/brand/logo/wordmark.svg +0 -173
  129. package/docs/experiences.md +0 -106
  130. package/docs/screens.md +0 -171
  131. package/layers/nuxt/report-viewer/app/components/BlrFlowGroup.vue +0 -126
  132. package/layers/nuxt/report-viewer/app/components/BlrFlowLabel.vue +0 -47
  133. package/layers/nuxt/report-viewer/app/components/BlrFlowSelfEdge.vue +0 -105
  134. package/layers/nuxt/report-viewer/app/components/BlrFlowState.vue +0 -112
  135. package/layers/nuxt/report-viewer/app/utils/flowGraph.ts +0 -824
  136. package/layers/nuxt/report-viewer/app/utils/productTopologyFilters.ts +0 -92
  137. package/layers/nuxt/report-viewer/app/utils/productTopologyGraphs.ts +0 -614
  138. package/layers/nuxt/report-viewer/app/utils/productTopologyLayout.ts +0 -124
package/CHANGELOG.md CHANGED
@@ -5,6 +5,40 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.12.0] - 2026-09-10
9
+
10
+ ### Changed
11
+
12
+ - Every page of the report reads the same way: what it is and the ways out of
13
+ it, then tabs for which set you are reading, then what narrows it.
14
+ - Tabs are the report's only switch. Each named reading sits beside List in the
15
+ collection it belongs to; the Cards/Table toggle and the grouping menu are
16
+ gone.
17
+ - Filters sit beside the rows they narrow, one control per axis, on every
18
+ collection whatever its size.
19
+ - Collections group by Domain on their own, and Entities that act lead the list.
20
+ - Overview is the Product's own page, with About, Coverage and References.
21
+ - Compare delivery is now a Capability by Interface matrix.
22
+ - The documentation explains the Product Model. The report explains itself.
23
+ - Report links shared before this release open the Overview.
24
+
25
+ ### Removed
26
+
27
+ - The All resources and connections view. The rail already lists every
28
+ collection with its count, and a resource's connections are on its page.
29
+
30
+ ### Fixed
31
+
32
+ - Icons missing from the local report, including the loading indicator and the
33
+ warning shown while an edit is invalid.
34
+ - Interactive controls now show the hand cursor.
35
+
36
+ ## [0.11.0] - 2026-09-07
37
+
38
+ ### Fixed
39
+
40
+ - Generated product models omit rejected approaches and settled deliberation.
41
+
8
42
  ## [0.10.0] - 2026-09-06
9
43
 
10
44
  ### Added
@@ -711,6 +745,8 @@ Initial public launch of the repository.
711
745
  `docs/format.md`.
712
746
  - Claude plugin manifest and marketplace entry.
713
747
 
748
+ [0.12.0]: https://github.com/businesslens/pdd/compare/v0.11.0...v0.12.0
749
+ [0.11.0]: https://github.com/businesslens/pdd/compare/v0.10.0...v0.11.0
714
750
  [0.10.0]: https://github.com/businesslens/pdd/compare/v0.9.0...v0.10.0
715
751
  [0.9.0]: https://github.com/businesslens/pdd/compare/v0.8.0...v0.9.0
716
752
  [0.8.0]: https://github.com/businesslens/pdd/compare/v0.7.2...v0.8.0
package/dist/cli.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { INTERFACE_TYPES, ProductReportV13Schema, REPORT_SCHEMA_VERSION, bulletList, containsPlace, containsStructuralHeading, decisionPoints, interfaceOf, isId, isQualifiedId, operationPlaces, parseCodeTarget, parseMarkdown, parseProductReport, permissionTargetSelectsOperation, projectPortableReport, qualify, screenStates, section, supportingSections, validateBlueprintReport, validatePermissionBehavior, validateProductReport } from "./portable-DmgFo37G.js";
3
3
  import { MAX_PRODUCT_LOGO_BYTES, PRODUCT_LOGO_FILENAME, validateProductLogo } from "./logo-ByUBSRUb.js";
4
4
  import { reportDigest } from "./report-digest-BtjFf-4A.js";
5
+ import { createRequire } from "node:module";
5
6
  import { basename, dirname, extname, isAbsolute, join, relative, resolve, sep } from "node:path";
6
7
  import { Command, CommanderError, Help, InvalidArgumentError, Option } from "commander";
7
8
  import { execFileSync, spawn, spawnSync } from "node:child_process";
@@ -4431,6 +4432,7 @@ const HEALTH_PATH = "/_businesslens/health";
4431
4432
  const LOGO_PATH = "/_businesslens/logo.svg";
4432
4433
  const ASSET_PREFIX = "/_businesslens/file/";
4433
4434
  const VIEWER_ROOT = fileURLToPath(new URL("./viewer/", import.meta.url));
4435
+ const BRAND_ROOT = resolve(createRequire(import.meta.url).resolve("businesslens/package.json"), "../layers/nuxt/theme/public/brand");
4434
4436
  /** 25 MB. A product asset is a mockup or a capture, never a build output. */
4435
4437
  const MAX_ASSET_BYTES = 25 * 1024 * 1024;
4436
4438
  const CONTENT_TYPES = {
@@ -4730,7 +4732,7 @@ function requestHandler(options, store, streams, port$1) {
4730
4732
  });
4731
4733
  return;
4732
4734
  }
4733
- const file = staticFile(viewerRoot, pathname);
4735
+ const file = staticFile(viewerRoot, pathname) ?? (pathname.startsWith("/brand/") ? staticFile(BRAND_ROOT, pathname.slice(7)) : void 0);
4734
4736
  if (!file) {
4735
4737
  json(response, 404, { message: "Not found." }, head);
4736
4738
  return;
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.10.0"},app:{baseURL:"/",buildId:"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788769654318,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.Cn2HYcjJ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BtQ-s_jB.js"><script type="module" src="/_nuxt/BtQ-s_jB.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.VJcZ3YVw.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/cSnpUPR8.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B-mP848s.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.12.0"},app:{baseURL:"/",buildId:"5aaede1d-b2e2-4361-9046-383c78ec9ec1",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1789070949687,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.10.0"},app:{baseURL:"/",buildId:"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788769654318,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.Cn2HYcjJ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BtQ-s_jB.js"><script type="module" src="/_nuxt/BtQ-s_jB.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.VJcZ3YVw.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/cSnpUPR8.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B-mP848s.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.12.0"},app:{baseURL:"/",buildId:"5aaede1d-b2e2-4361-9046-383c78ec9ec1",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1789070949687,false]</script></body></html>