[{"data":1,"prerenderedAt":999},["ShallowReactive",2],{"navigation_docs_en":3,"-en-internal-authoring-visuals":317,"-en-internal-authoring-visuals-surround":994},[4,19,74],{"title":5,"path":6,"stem":7,"children":8,"page":18},"Public","\u002Fen\u002Fpublic","en\u002F1.public",[9],{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":18},"Welcome","i-lucide-sparkles","\u002Fen\u002Fpublic\u002Fwelcome","en\u002F1.public\u002F1.welcome",[15],{"title":10,"path":16,"stem":17},"\u002Fen\u002Fpublic\u002Fwelcome\u002Foverview","en\u002F1.public\u002F1.welcome\u002F1.overview",false,{"title":20,"path":21,"stem":22,"children":23,"page":18},"Cloud","\u002Fen\u002Fcloud","en\u002F2.cloud",[24,33,48],{"title":10,"icon":25,"path":26,"stem":27,"children":28,"page":18},"i-lucide-lock","\u002Fen\u002Fcloud\u002Fwelcome","en\u002F2.cloud\u002F1.welcome",[29],{"title":30,"path":31,"stem":32},"Cloud Docs","\u002Fen\u002Fcloud\u002Fwelcome\u002Foverview","en\u002F2.cloud\u002F1.welcome\u002F1.overview",{"title":34,"icon":35,"path":36,"stem":37,"children":38,"page":18},"Firmware over RDM","i-lucide-radio-tower","\u002Fen\u002Fcloud\u002Ffirmware-over-rdm","en\u002F2.cloud\u002F2.firmware-over-rdm",[39,43],{"title":40,"path":41,"stem":42,"icon":35},"Firmware Update over RDM","\u002Fen\u002Fcloud\u002Ffirmware-over-rdm\u002Foverview","en\u002F2.cloud\u002F2.firmware-over-rdm\u002F1.overview",{"title":44,"path":45,"stem":46,"icon":47},"Implementation Guide","\u002Fen\u002Fcloud\u002Ffirmware-over-rdm\u002Fimplementation-guide","en\u002F2.cloud\u002F2.firmware-over-rdm\u002F2.implementation-guide","i-lucide-list-checks",{"title":49,"icon":50,"path":51,"stem":52,"children":53,"page":18},"KLSTR.rdm","i-lucide-cable","\u002Fen\u002Fcloud\u002Fklstr-rdm","en\u002F2.cloud\u002F3.klstr-rdm",[54,59,64,69],{"title":55,"path":56,"stem":57,"icon":58},"Introduction","\u002Fen\u002Fcloud\u002Fklstr-rdm\u002Fintroduction","en\u002F2.cloud\u002F3.klstr-rdm\u002F1.introduction","i-lucide-circuit-board",{"title":60,"path":61,"stem":62,"icon":63},"Use KLSTR.dev hardware","\u002Fen\u002Fcloud\u002Fklstr-rdm\u002Fuse-klstr-dev-hardware","en\u002F2.cloud\u002F3.klstr-rdm\u002F2.use-klstr-dev-hardware","i-lucide-wrench",{"title":65,"path":66,"stem":67,"icon":68},"Special firmware","\u002Fen\u002Fcloud\u002Fklstr-rdm\u002Fspecial-firmware","en\u002F2.cloud\u002F3.klstr-rdm\u002F3.special-firmware","i-lucide-download",{"title":70,"path":71,"stem":72,"icon":73},"RDM-Compliance Testing","\u002Fen\u002Fcloud\u002Fklstr-rdm\u002Frdm-compliance-testing","en\u002F2.cloud\u002F3.klstr-rdm\u002F4.rdm-compliance-testing","i-lucide-clipboard-check",{"title":75,"path":76,"stem":77,"children":78,"page":18},"Internal","\u002Fen\u002Finternal","en\u002F3.internal",[79,250,264,278],{"title":80,"icon":81,"path":82,"stem":83,"children":84,"page":18},"Review (ex-public)","i-lucide-inbox","\u002Fen\u002Finternal\u002Freview","en\u002F3.internal\u002F0.review",[85,102,120,138,187,205],{"title":86,"icon":87,"path":88,"stem":89,"children":90,"page":18},"Getting Started","i-lucide-rocket","\u002Fen\u002Finternal\u002Freview\u002Ftutorials","en\u002F3.internal\u002F0.review\u002F1.tutorials",[91,94,98],{"title":86,"path":92,"stem":93},"\u002Fen\u002Finternal\u002Freview\u002Ftutorials\u002Fgetting-started","en\u002F3.internal\u002F0.review\u002F1.tutorials\u002F1.getting-started",{"title":95,"path":96,"stem":97},"Setup KLSTR.one","\u002Fen\u002Finternal\u002Freview\u002Ftutorials\u002Fsetup-klstr-one","en\u002F3.internal\u002F0.review\u002F1.tutorials\u002F2.setup-klstr-one",{"title":99,"path":100,"stem":101},"Setup KLSTR.nano","\u002Fen\u002Finternal\u002Freview\u002Ftutorials\u002Fsetup-klstr-nano","en\u002F3.internal\u002F0.review\u002F1.tutorials\u002F3.setup-klstr-nano",{"title":103,"icon":104,"path":105,"stem":106,"children":107,"page":18},"KLSTR.one","i-lucide-cpu","\u002Fen\u002Finternal\u002Freview\u002Fklstr-one","en\u002F3.internal\u002F0.review\u002F2.klstr-one",[108,112,116],{"title":109,"path":110,"stem":111},"KLSTR.one Overview","\u002Fen\u002Finternal\u002Freview\u002Fklstr-one\u002Foverview","en\u002F3.internal\u002F0.review\u002F2.klstr-one\u002F1.overview",{"title":113,"path":114,"stem":115},"KLSTR.one Installation","\u002Fen\u002Finternal\u002Freview\u002Fklstr-one\u002Finstallation","en\u002F3.internal\u002F0.review\u002F2.klstr-one\u002F2.installation",{"title":117,"path":118,"stem":119},"KLSTR.one Specifications","\u002Fen\u002Finternal\u002Freview\u002Fklstr-one\u002Fspecifications","en\u002F3.internal\u002F0.review\u002F2.klstr-one\u002F3.specifications",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":18},"KLSTR.nano","i-lucide-microchip","\u002Fen\u002Finternal\u002Freview\u002Fklstr-nano","en\u002F3.internal\u002F0.review\u002F4.klstr-nano",[126,130,134],{"title":127,"path":128,"stem":129},"KLSTR.nano Overview","\u002Fen\u002Finternal\u002Freview\u002Fklstr-nano\u002Foverview","en\u002F3.internal\u002F0.review\u002F4.klstr-nano\u002F1.overview",{"title":131,"path":132,"stem":133},"KLSTR.nano Installation","\u002Fen\u002Finternal\u002Freview\u002Fklstr-nano\u002Finstallation","en\u002F3.internal\u002F0.review\u002F4.klstr-nano\u002F2.installation",{"title":135,"path":136,"stem":137},"KLSTR.nano Specifications","\u002Fen\u002Finternal\u002Freview\u002Fklstr-nano\u002Fspecifications","en\u002F3.internal\u002F0.review\u002F4.klstr-nano\u002F3.specifications",{"title":139,"icon":140,"path":141,"stem":142,"children":143,"page":18},"Developer Guide","i-lucide-code","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper","en\u002F3.internal\u002F0.review\u002F5.developer",[144,147,151,155,159,175],{"title":139,"path":145,"stem":146},"\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Foverview","en\u002F3.internal\u002F0.review\u002F5.developer\u002F0.overview",{"title":148,"path":149,"stem":150},"Choosing a Module","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fchoosing-a-module","en\u002F3.internal\u002F0.review\u002F5.developer\u002F1.choosing-a-module",{"title":152,"path":153,"stem":154},"Dual-Mode Operation","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fdual-mode","en\u002F3.internal\u002F0.review\u002F5.developer\u002F2.dual-mode",{"title":156,"path":157,"stem":158},"Fleet Management","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Ffleet-management","en\u002F3.internal\u002F0.review\u002F5.developer\u002F3.fleet-management",{"title":103,"path":160,"stem":161,"children":162,"page":18},"\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-one","en\u002F3.internal\u002F0.review\u002F5.developer\u002F4.klstr-one",[163,167,171],{"title":164,"path":165,"stem":166},"KLSTR.one: Hardware Integration","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-one\u002Fhardware-integration","en\u002F3.internal\u002F0.review\u002F5.developer\u002F4.klstr-one\u002F1.hardware-integration",{"title":168,"path":169,"stem":170},"KLSTR.one: Provisioning","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-one\u002Fprovisioning","en\u002F3.internal\u002F0.review\u002F5.developer\u002F4.klstr-one\u002F2.provisioning",{"title":172,"path":173,"stem":174},"KLSTR.one: RDM Protocol","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-one\u002Frdm-protocol","en\u002F3.internal\u002F0.review\u002F5.developer\u002F4.klstr-one\u002F3.rdm-protocol",{"title":121,"path":176,"stem":177,"children":178,"page":18},"\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-nano","en\u002F3.internal\u002F0.review\u002F5.developer\u002F5.klstr-nano",[179,183],{"title":180,"path":181,"stem":182},"KLSTR.nano: Hardware Integration","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-nano\u002Fhardware-integration","en\u002F3.internal\u002F0.review\u002F5.developer\u002F5.klstr-nano\u002F1.hardware-integration",{"title":184,"path":185,"stem":186},"KLSTR.nano: Provisioning","\u002Fen\u002Finternal\u002Freview\u002Fdeveloper\u002Fklstr-nano\u002Fprovisioning","en\u002F3.internal\u002F0.review\u002F5.developer\u002F5.klstr-nano\u002F2.provisioning",{"title":188,"icon":189,"path":190,"stem":191,"children":192,"page":18},"FAQ","i-lucide-circle-help","\u002Fen\u002Finternal\u002Freview\u002Ffaq","en\u002F3.internal\u002F0.review\u002F6.faq",[193,197,201],{"title":194,"path":195,"stem":196},"General Questions","\u002Fen\u002Finternal\u002Freview\u002Ffaq\u002Fgeneral","en\u002F3.internal\u002F0.review\u002F6.faq\u002F1.general",{"title":198,"path":199,"stem":200},"Connectivity","\u002Fen\u002Finternal\u002Freview\u002Ffaq\u002Fconnectivity","en\u002F3.internal\u002F0.review\u002F6.faq\u002F2.connectivity",{"title":202,"path":203,"stem":204},"Troubleshooting","\u002Fen\u002Finternal\u002Freview\u002Ffaq\u002Ftroubleshooting","en\u002F3.internal\u002F0.review\u002F6.faq\u002F3.troubleshooting",{"title":206,"icon":207,"path":208,"stem":209,"children":210,"page":18},"Articles","i-lucide-newspaper","\u002Fen\u002Finternal\u002Freview\u002Farticles","en\u002F3.internal\u002F0.review\u002F7.articles",[211,215,219,223,227,231,235,239,243,247],{"title":212,"path":213,"stem":214},"Overview","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Foverview","en\u002F3.internal\u002F0.review\u002F7.articles\u002F0.overview",{"title":216,"path":217,"stem":218},"KLSTR Integration Guide for Fixture Manufacturers","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fintegration-guide","en\u002F3.internal\u002F0.review\u002F7.articles\u002F1.integration-guide",{"title":220,"path":221,"stem":222},"RDM Protocol Reference for KLSTR.one","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Frdm-protocol","en\u002F3.internal\u002F0.review\u002F7.articles\u002F2.rdm-protocol",{"title":224,"path":225,"stem":226},"KLSTR.one Provisioning Guide","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fklstr-one-provisioning","en\u002F3.internal\u002F0.review\u002F7.articles\u002F3.klstr-one-provisioning",{"title":228,"path":229,"stem":230},"KLSTR.one Integration Guide","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fklstr-one-plug-in-integration","en\u002F3.internal\u002F0.review\u002F7.articles\u002F4.klstr-one-plug-in-integration",{"title":232,"path":233,"stem":234},"KLSTR.nano Provisioning Guide","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fklstr-nano-provisioning","en\u002F3.internal\u002F0.review\u002F7.articles\u002F5.klstr-nano-provisioning",{"title":236,"path":237,"stem":238},"KLSTR.nano Plug-In Integration","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fklstr-nano-plug-in-integration","en\u002F3.internal\u002F0.review\u002F7.articles\u002F6.klstr-nano-plug-in-integration",{"title":240,"path":241,"stem":242},"Hello","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fhello","en\u002F3.internal\u002F0.review\u002F7.articles\u002F7.hello",{"title":244,"path":245,"stem":246},"TestNew file","\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Fiwantmd","en\u002F3.internal\u002F0.review\u002F7.articles\u002Fiwantmd",{"title":244,"path":248,"stem":249},"\u002Fen\u002Finternal\u002Freview\u002Farticles\u002Ftestnew","en\u002F3.internal\u002F0.review\u002F7.articles\u002Ftestnew",{"title":251,"icon":252,"path":253,"stem":254,"children":255,"page":18},"Admin","i-lucide-shield-check","\u002Fen\u002Finternal\u002Fadmin","en\u002F3.internal\u002F3.admin",[256,260],{"title":257,"path":258,"stem":259},"Admin Dashboard","\u002Fen\u002Finternal\u002Fadmin\u002Fdashboard","en\u002F3.internal\u002F3.admin\u002F1.dashboard",{"title":261,"path":262,"stem":263},"Internal Release Notes","\u002Fen\u002Finternal\u002Fadmin\u002Frelease-notes","en\u002F3.internal\u002F3.admin\u002F2.release-notes",{"title":265,"path":266,"stem":267,"children":268,"page":18},"Developer","\u002Fen\u002Finternal\u002Fdeveloper","en\u002F3.internal\u002F5.developer",[269],{"title":270,"path":271,"stem":272,"children":273,"page":18},"Klstr One","\u002Fen\u002Finternal\u002Fdeveloper\u002Fklstr-one","en\u002F3.internal\u002F5.developer\u002F4.klstr-one",[274],{"title":275,"path":276,"stem":277},"Internal (Partner Only)","\u002Fen\u002Finternal\u002Fdeveloper\u002Fklstr-one\u002Finternal","en\u002F3.internal\u002F5.developer\u002F4.klstr-one\u002F4.internal",{"title":279,"icon":280,"path":281,"stem":282,"children":283,"page":18},"Authoring Guide","i-lucide-pen-line","\u002Fen\u002Finternal\u002Fauthoring","en\u002F3.internal\u002F9.authoring",[284,288,293,297,302,307,312],{"title":285,"path":286,"stem":287,"icon":11},"Overview & MDC Basics","\u002Fen\u002Finternal\u002Fauthoring\u002Foverview","en\u002F3.internal\u002F9.authoring\u002F1.overview",{"title":289,"path":290,"stem":291,"icon":292},"Text & Prose","\u002Fen\u002Finternal\u002Fauthoring\u002Ftext-and-prose","en\u002F3.internal\u002F9.authoring\u002F2.text-and-prose","i-lucide-type",{"title":294,"path":295,"stem":296,"icon":140},"Code Blocks","\u002Fen\u002Finternal\u002Fauthoring\u002Fcode","en\u002F3.internal\u002F9.authoring\u002F3.code",{"title":298,"path":299,"stem":300,"icon":301},"Callouts & Cards","\u002Fen\u002Finternal\u002Fauthoring\u002Fcallouts-and-cards","en\u002F3.internal\u002F9.authoring\u002F4.callouts-and-cards","i-lucide-message-square-warning",{"title":303,"path":304,"stem":305,"icon":306},"Layout & Interactivity","\u002Fen\u002Finternal\u002Fauthoring\u002Flayout-and-interactivity","en\u002F3.internal\u002F9.authoring\u002F5.layout-and-interactivity","i-lucide-layout-panel-left",{"title":308,"path":309,"stem":310,"icon":311},"Visuals — Images, Icons & Diagrams","\u002Fen\u002Finternal\u002Fauthoring\u002Fvisuals","en\u002F3.internal\u002F9.authoring\u002F6.visuals","i-lucide-image",{"title":313,"path":314,"stem":315,"icon":316},"Design System & Configuration","\u002Fen\u002Finternal\u002Fauthoring\u002Fdesign-system","en\u002F3.internal\u002F9.authoring\u002F7.design-system","i-lucide-palette",{"id":318,"title":308,"body":319,"description":988,"extension":353,"links":989,"meta":990,"navigation":991,"path":309,"seo":992,"stem":310,"__hash__":993},"docs_en\u002Fen\u002F3.internal\u002F9.authoring\u002F6.visuals.md",{"type":320,"value":321,"toc":978},"minimark",[322,331,336,348,380,399,470,481,485,502,568,603,632,678,694,698,729,826,849,853,863,868,947,951,954,958,961,974],[323,324,325,326,330],"p",{},"A diagram or a well-placed icon does what a paragraph can't. This page covers raster\u002Fvector\nimages, icons, and live ",[327,328,329],"strong",{},"Mermaid"," diagrams.",[332,333,335],"h2",{"id":334},"images","Images",[323,337,338,339,343,344,347],{},"Drop files in ",[340,341,342],"code",{},"public\u002F"," and reference them with an ",[327,345,346],{},"unprefixed"," path (no locale). Plain\nMarkdown works, and images get click-to-zoom by default.",[349,350,355],"pre",{"className":351,"code":352,"language":353,"meta":354,"style":354},"language-md shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","![KLSTR.one front panel](\u002Fimages\u002Fklstr-one.png)\n","md","",[340,356,357],{"__ignoreMap":354},[358,359,362,366,370,373,377],"span",{"class":360,"line":361},"line",1,[358,363,365],{"class":364},"sMK4o","![",[358,367,369],{"class":368},"sfazB","KLSTR.one front panel",[358,371,372],{"class":364},"](",[358,374,376],{"class":375},"sQLHv","\u002Fimages\u002Fklstr-one.png",[358,378,379],{"class":364},")\n",[323,381,382,383,386,387,390,391,394,395,398],{},"For finer control use ",[340,384,385],{},":img"," (set ",[340,388,389],{},"width","\u002F",[340,392,393],{},"height",", or disable ",[340,396,397],{},"zoom","):",[349,400,404],{"className":401,"code":402,"language":403,"meta":354,"style":354},"language-mdc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",":img{src=\"\u002Fimages\u002Fklstr-one.png\" alt=\"KLSTR.one front panel\" width=\"480\" zoom=\"false\"}\n","mdc",[340,405,406],{"__ignoreMap":354},[358,407,408,411,415,418,422,425,428,430,432,435,437,439,441,443,446,448,450,453,455,458,460,462,465,467],{"class":360,"line":361},[358,409,410],{"class":364},":",[358,412,414],{"class":413},"swJcz","img",[358,416,417],{"class":364},"{",[358,419,421],{"class":420},"spNyl","src",[358,423,424],{"class":364},"=",[358,426,427],{"class":364},"\"",[358,429,376],{"class":368},[358,431,427],{"class":364},[358,433,434],{"class":420}," alt",[358,436,424],{"class":364},[358,438,427],{"class":364},[358,440,369],{"class":368},[358,442,427],{"class":364},[358,444,445],{"class":420}," width",[358,447,424],{"class":364},[358,449,427],{"class":364},[358,451,452],{"class":368},"480",[358,454,427],{"class":364},[358,456,457],{"class":420}," zoom",[358,459,424],{"class":364},[358,461,427],{"class":364},[358,463,464],{"class":368},"false",[358,466,427],{"class":364},[358,468,469],{"class":364},"}\n",[471,472,473,474,477,478,480],"tip",{},"Need a different image per theme? ",[340,475,476],{},":color-mode-image{light=\"\u002Fdiagram-light.svg\" dark=\"\u002Fdiagram-dark.svg\" alt=\"…\"}"," swaps automatically with the light\u002Fdark toggle. SVG illustrations in ",[340,479,342],{}," stay crisp at any size and theme.",[332,482,484],{"id":483},"file-downloads","File downloads",[323,486,487,488,490,491,496,497,410],{},"To offer a file (firmware image, PDF, archive), drop it in ",[340,489,342],{}," and link it with a\nbutton carrying ",[327,492,493],{},[340,494,495],{},"external"," and ",[327,498,499],{},[340,500,501],{},"download",[349,503,505],{"className":401,"code":504,"language":403,"meta":354,"style":354},":u-button{label=\"Download sniffer.klstr.nano\" icon=\"i-lucide-download\" to=\"\u002Ffirmware\u002Fsniffer.klstr.nano\" external download=\"sniffer.klstr.nano\"}\n",[340,506,507],{"__ignoreMap":354},[358,508,509,511,514,516,519,521,523,526,528,531,533,535,537,539,542,544,546,549,551,554,557,559,561,564,566],{"class":360,"line":361},[358,510,410],{"class":364},[358,512,513],{"class":413},"u-button",[358,515,417],{"class":364},[358,517,518],{"class":420},"label",[358,520,424],{"class":364},[358,522,427],{"class":364},[358,524,525],{"class":368},"Download sniffer.klstr.nano",[358,527,427],{"class":364},[358,529,530],{"class":420}," icon",[358,532,424],{"class":364},[358,534,427],{"class":364},[358,536,68],{"class":368},[358,538,427],{"class":364},[358,540,541],{"class":420}," to",[358,543,424],{"class":364},[358,545,427],{"class":364},[358,547,548],{"class":368},"\u002Ffirmware\u002Fsniffer.klstr.nano",[358,550,427],{"class":364},[358,552,553],{"class":420}," external",[358,555,556],{"class":420}," download",[358,558,424],{"class":364},[358,560,427],{"class":364},[358,562,563],{"class":368},"sniffer.klstr.nano",[358,565,427],{"class":364},[358,567,469],{"class":364},[569,570,571,577,578,581,582,584,585,589,590,592,593,598,599,602],"caution",{},[327,572,573,574,576],{},"Give ",[340,575,501],{}," the filename, never write it bare."," MDC turns a valueless prop into\nthe string ",[340,579,580],{},"\"true\"",", and the ",[340,583,501],{}," attribute's value ",[586,587,588],"em",{},"is"," the suggested filename, so\na bare ",[340,591,501],{}," saves the file as ",[327,594,595],{},[340,596,597],{},"true"," with no extension. Always write\n",[340,600,601],{},"download=\"the-real-filename.ext\"",".",[569,604,605,608,609,612,613,612,616,619,620,623,624,627,628,631],{},[327,606,607],{},"Never put a button inside a callout."," ",[340,610,611],{},"::note"," \u002F ",[340,614,615],{},"::tip",[340,617,618],{},"::warning"," style ",[586,621,622],{},"every\ndescendant link"," with arbitrary variants like ",[340,625,626],{},"[&_a]:text-success",". Those compile to a\ndescendant selector, which outranks the button's own ",[340,629,630],{},"text-inverted",", so the label takes\nthe callout's colour and becomes unreadable against the button fill. Put buttons in the\npage body and use plain prose for the surrounding note.",[569,633,634,667],{},[323,635,636,641,642,645,646,496,649,652,653,656,657,660,661,663,664,666],{},[327,637,638,640],{},[340,639,495],{}," is not optional, and its absence is the whole trap."," i18n rewrites every\ninternal link to include the current locale, so ",[340,643,644],{},"to=\"\u002Ffirmware\u002Fx.bin\""," renders as\n",[340,647,648],{},"href=\"\u002Fen\u002Ffirmware\u002Fx.bin\"",[327,650,651],{},"404s",". This happens to a plain Markdown link\n(",[340,654,655],{},"[text](\u002Ffirmware\u002Fx.bin)",") and to a raw ",[340,658,659],{},"\u003Ca href>"," too, because MDC routes both through\nthe same link component. ",[340,662,495],{}," makes it render a plain anchor and the path survives\nuntouched. ",[340,665,501],{}," then saves the file instead of navigating to it.",[323,668,669,670,673,674,677],{},"Images are exempt: they go through the image pipeline (",[340,671,672],{},"\u002F_ipx\u002F…","), which is why\n",[340,675,676],{},"![alt](\u002Fimages\u002Fx.png)"," needs no special treatment.",[679,680,681,686,687,690,691,693],"warning",{},[327,682,683,685],{},[340,684,342],{}," is not tiered."," Every build ships the whole folder, so a file placed there\nis reachable by URL on the ",[327,688,689],{},"public"," site as well, even when the page linking to it is\ncloud or internal only. It is unlisted, not protected. Anything that must be restricted\nneeds a real gate, not a ",[340,692,342],{}," path.",[332,695,697],{"id":696},"icons","Icons",[323,699,700,701,708,709,712,713,716,717,720,721,724,725,728],{},"Any ",[702,703,707],"a",{"href":704,"rel":705},"https:\u002F\u002Ficones.js.org",[706],"nofollow","Iconify"," icon works via ",[340,710,711],{},":icon{name=\"…\"}",". This site uses the\n",[327,714,715],{},"Lucide"," set by default (",[340,718,719],{},"i-lucide-*","); other collections work with their prefix\n(",[340,722,723],{},"i-simple-icons-gitlab",", ",[340,726,727],{},"i-logos-cloudflare",", …).",[730,731,732,608,735,608,738,608,740,743],"code-preview",{},[733,734],"icon",{"name":104},[733,736],{"name":737},"i-lucide-network",[733,739],{"name":252},[733,741],{"name":742},"i-simple-icons-cloudflare",[744,745,746],"template",{"v-slot:code":354},[349,747,749],{"className":401,"code":748,"language":403,"meta":354,"style":354},":icon{name=\"i-lucide-cpu\"} :icon{name=\"i-lucide-network\"} :icon{name=\"i-lucide-shield-check\"} :icon{name=\"i-simple-icons-cloudflare\"}\n",[340,750,751],{"__ignoreMap":354},[358,752,753,755,757,759,762,764,766,768,770,773,777,779,781,783,785,787,789,791,794,796,798,800,802,804,806,808,810,812,814,816,818,820,822,824],{"class":360,"line":361},[358,754,410],{"class":364},[358,756,733],{"class":413},[358,758,417],{"class":364},[358,760,761],{"class":420},"name",[358,763,424],{"class":364},[358,765,427],{"class":364},[358,767,104],{"class":368},[358,769,427],{"class":364},[358,771,772],{"class":364},"}",[358,774,776],{"class":775},"sTEyZ"," :icon",[358,778,417],{"class":364},[358,780,761],{"class":420},[358,782,424],{"class":364},[358,784,427],{"class":364},[358,786,737],{"class":368},[358,788,427],{"class":364},[358,790,772],{"class":364},[358,792,793],{"class":364}," :",[358,795,733],{"class":413},[358,797,417],{"class":364},[358,799,761],{"class":420},[358,801,424],{"class":364},[358,803,427],{"class":364},[358,805,252],{"class":368},[358,807,427],{"class":364},[358,809,772],{"class":364},[358,811,776],{"class":775},[358,813,417],{"class":364},[358,815,761],{"class":420},[358,817,424],{"class":364},[358,819,427],{"class":364},[358,821,742],{"class":368},[358,823,427],{"class":364},[358,825,469],{"class":364},[323,827,828,829,831,832,608,835,838,839,842,843,608,846,848],{},"The same ",[340,830,719],{}," names are what you put in ",[340,833,834],{},".navigation.yml",[340,836,837],{},"icon:"," and on ",[340,840,841],{},"::card"," \u002F\n",[340,844,845],{},"::callout",[340,847,733],{}," props.",[332,850,852],{"id":851},"mermaid-diagrams","Mermaid diagrams",[323,854,855,858,859,862],{},[340,856,857],{},"::mermaid"," renders diagrams from text — flowcharts, sequences, state machines, ER, Gantt\nand more. It follows the site's light\u002Fdark mode. Pass the definition as a YAML ",[340,860,861],{},"code: |","\nblock so Markdown leaves the arrows alone.",[864,865,867],"h3",{"id":866},"flowchart","Flowchart",[730,869,870,874],{},[871,872],"mermaid",{"code":873},"graph TD\n  A[Browser request] -->|JWT cookie| B(Worker middleware)\n  B --> C{app_role}\n  C -->|admin| D[Render internal docs]\n  C -->|other| E[302 → \u002Flogin]\n",[744,875,876],{"v-slot:code":354},[349,877,879],{"className":401,"code":878,"language":403,"meta":354,"style":354},"::mermaid\n---\ncode: |\n  graph TD\n    A[Browser request] -->|JWT cookie| B(Worker middleware)\n    B --> C{app_role}\n    C -->|admin| D[Render internal docs]\n    C -->|other| E[302 → \u002Flogin]\n---\n::\n",[340,880,881,889,895,906,912,918,924,930,936,941],{"__ignoreMap":354},[358,882,883,886],{"class":360,"line":361},[358,884,885],{"class":364},"::",[358,887,888],{"class":413},"mermaid\n",[358,890,892],{"class":360,"line":891},2,[358,893,894],{"class":775},"---\n",[358,896,898,900,902],{"class":360,"line":897},3,[358,899,340],{"class":413},[358,901,410],{"class":364},[358,903,905],{"class":904},"s7zQu"," |\n",[358,907,909],{"class":360,"line":908},4,[358,910,911],{"class":368},"  graph TD\n",[358,913,915],{"class":360,"line":914},5,[358,916,917],{"class":368},"    A[Browser request] -->|JWT cookie| B(Worker middleware)\n",[358,919,921],{"class":360,"line":920},6,[358,922,923],{"class":368},"    B --> C{app_role}\n",[358,925,927],{"class":360,"line":926},7,[358,928,929],{"class":368},"    C -->|admin| D[Render internal docs]\n",[358,931,933],{"class":360,"line":932},8,[358,934,935],{"class":368},"    C -->|other| E[302 → \u002Flogin]\n",[358,937,939],{"class":360,"line":938},9,[358,940,894],{"class":775},[358,942,944],{"class":360,"line":943},10,[358,945,946],{"class":364},"::\n",[864,948,950],{"id":949},"sequence-diagram","Sequence diagram",[871,952],{"code":953},"sequenceDiagram\n  participant U as User\n  participant W as Worker\n  participant S as Supabase\n  U->>W: GET \u002Fen\u002Finternal\u002F…\n  W->>S: verify JWT (jose)\n  S-->>W: claims { app_role }\n  W-->>U: 200 (admin) \u002F 302 (else)\n",[864,955,957],{"id":956},"architecture-graph","Architecture \u002F graph",[871,959],{"code":960},"flowchart LR\n  repo[(klstr.docs)] --> pub[public · static]\n  repo --> cloud[cloud · SSR + D1]\n  repo --> int[internal · static + Access]\n  pub --> cf1[docs.klstr.tech]\n  cloud --> cf2[docs.klstr.cloud]\n  int --> cf3[internal host]\n",[962,963,964,965,968,969,602],"note",{},"Mermaid renders ",[327,966,967],{},"client-side only"," (it needs a browser), so on the prerendered build you'll\nsee a brief \"Loading diagram…\" before it paints. Syntax reference:\n",[702,970,973],{"href":971,"rel":972},"https:\u002F\u002Fmermaid.js.org",[706],"mermaid.js.org",[975,976,977],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sQLHv, html code.shiki .sQLHv{--shiki-light:#90A4AE;--shiki-light-text-decoration:underline;--shiki-default:#EEFFFF;--shiki-default-text-decoration:underline;--shiki-dark:#BABED8;--shiki-dark-text-decoration:underline}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":354,"searchDepth":891,"depth":891,"links":979},[980,981,982,983],{"id":334,"depth":891,"text":335},{"id":483,"depth":891,"text":484},{"id":696,"depth":891,"text":697},{"id":851,"depth":891,"text":852,"children":984},[985,986,987],{"id":866,"depth":897,"text":867},{"id":949,"depth":897,"text":950},{"id":956,"depth":897,"text":957},"Images with zoom and dark-mode variants, the Iconify icon set, and Mermaid diagrams for flows, sequences and architecture.",null,{},{"icon":311},{"title":308,"description":988},"ZujR_VNXEmhqfYgc0-4ZlACcOm7l6E8mbrmgs4Mlvi8",[995,997],{"title":303,"path":304,"stem":305,"description":996,"icon":306,"children":-1},"Tabs, accordions, step-by-step guides and collapsible sections for organising dense material.",{"title":313,"path":314,"stem":315,"description":998,"icon":316,"children":-1},"Semantic colours, where colour props apply, typography, and the config files that control branding, navigation and theming.",1787149441871]