@vizejs/vite-plugin-musea 0.269.0 → 0.271.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 (34) hide show
  1. package/README.md +14 -0
  2. package/dist/gallery/assets/{MonacoEditor-D6vHGjOV.js → MonacoEditor-DMhf_fqm.js} +2 -2
  3. package/dist/gallery/assets/{cssMode-COwrxII5.js → cssMode-CrF0DU5e.js} +1 -1
  4. package/dist/gallery/assets/{editor.api2-CJZ9tF6K.js → editor.api2-C8DOVkz6.js} +1 -1
  5. package/dist/gallery/assets/{editor.main-Dt6-6pas.js → editor.main-CkA1G89l.js} +2 -2
  6. package/dist/gallery/assets/{freemarker2-Dnb1g0Jo.js → freemarker2-BO_2Ds_l.js} +1 -1
  7. package/dist/gallery/assets/{handlebars-DOmT_A6M.js → handlebars-Bcw0MhoR.js} +1 -1
  8. package/dist/gallery/assets/{html-Qempe7xt.js → html-B0dZkq95.js} +1 -1
  9. package/dist/gallery/assets/{htmlMode-CKgIR73L.js → htmlMode-DfFDTMZk.js} +1 -1
  10. package/dist/gallery/assets/index-DVSHNlTs.css +1 -0
  11. package/dist/gallery/assets/{index-Dtsku8dI.js → index-LuE0osBT.js} +4 -4
  12. package/dist/gallery/assets/{javascript-o8yJHIsv.js → javascript-Casxevk_.js} +1 -1
  13. package/dist/gallery/assets/{jsonMode-DDj5uiry.js → jsonMode-BrpIDLOb.js} +1 -1
  14. package/dist/gallery/assets/{liquid-GihPC2aI.js → liquid-BmBJ7H5X.js} +1 -1
  15. package/dist/gallery/assets/{lspLanguageFeatures-Cj9PuIZx.js → lspLanguageFeatures-CLfNwybK.js} +1 -1
  16. package/dist/gallery/assets/{mdx-B0KQLOVD.js → mdx-BZG_rPXe.js} +1 -1
  17. package/dist/gallery/assets/{monaco.contribution-BUitKtul.js → monaco.contribution-BZGuloqf.js} +2 -2
  18. package/dist/gallery/assets/{python-DaeXews5.js → python-jua_xfGg.js} +1 -1
  19. package/dist/gallery/assets/{razor-D7eowHXw.js → razor-CeK1pL1V.js} +1 -1
  20. package/dist/gallery/assets/{tsMode-DAcic1g_.js → tsMode-CedHUSbT.js} +1 -1
  21. package/dist/gallery/assets/{typescript-DZzujlOz.js → typescript-Bnz8OSWC.js} +1 -1
  22. package/dist/gallery/assets/{workers-M0x9Vvdl.js → workers-DDHNiHmb.js} +1 -1
  23. package/dist/gallery/assets/{xml-CaKMy0Ek.js → xml-B8g70rk3.js} +1 -1
  24. package/dist/gallery/assets/{yaml-Cop9p_yY.js → yaml-CirrspT2.js} +1 -1
  25. package/dist/gallery/index.html +2 -2
  26. package/dist/{gallery-DIBlUrB6.mjs → gallery-qM8Q_21C.mjs} +30 -5
  27. package/dist/gallery-qM8Q_21C.mjs.map +1 -0
  28. package/dist/index.d.mts +111 -70
  29. package/dist/index.d.mts.map +1 -1
  30. package/dist/index.mjs +149 -18
  31. package/dist/index.mjs.map +1 -1
  32. package/package.json +4 -4
  33. package/dist/gallery/assets/index-D67uewr9.css +0 -1
  34. package/dist/gallery-DIBlUrB6.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vizejs/vite-plugin-musea",
3
- "version": "0.269.0",
3
+ "version": "0.271.0",
4
4
  "description": "Vite plugin for Musea - Component gallery for Vue components",
5
5
  "keywords": [
6
6
  "component-gallery",
@@ -62,7 +62,7 @@
62
62
  "access": "public"
63
63
  },
64
64
  "dependencies": {
65
- "@vizejs/native": "0.269.0",
65
+ "@vizejs/native": "0.271.0",
66
66
  "pngjs": "7.0.0"
67
67
  },
68
68
  "devDependencies": {
@@ -71,7 +71,7 @@
71
71
  "@types/node": "25.9.2",
72
72
  "@types/pngjs": "6.0.5",
73
73
  "@vitejs/plugin-vue": "6.0.7",
74
- "@vizejs/vite-plugin": "0.269.0",
74
+ "@vizejs/vite-plugin": "0.271.0",
75
75
  "highlight.js": "11.11.1",
76
76
  "marked": "18.0.5",
77
77
  "marked-highlight": "2.2.4",
@@ -84,7 +84,7 @@
84
84
  "vue-router": "4.5.1"
85
85
  },
86
86
  "peerDependencies": {
87
- "@vizejs/vite-plugin": "0.269.0",
87
+ "@vizejs/vite-plugin": "0.271.0",
88
88
  "axe-core": "^4.7.0",
89
89
  "playwright": "^1.40.0",
90
90
  "vite": "^7.3.0 || ^8.0.0"
@@ -1 +0,0 @@
1
- .mdi-icon[data-v-7da84f28]{flex-shrink:0;width:24px;height:24px}.sidebar[data-v-8f8e7f90]{background:var(--musea-bg-secondary);overflow:hidden auto}.sidebar-section[data-v-8f8e7f90]{padding:.5rem .75rem}.sidebar-section+.sidebar-section[data-v-8f8e7f90]{padding-top:0}.sidebar-home-link[data-v-8f8e7f90]{border-radius:var(--musea-radius-sm);color:var(--musea-text-secondary);cursor:pointer;transition:all var(--musea-transition);align-items:center;gap:.625rem;padding:.5rem .75rem;font-size:.8125rem;text-decoration:none;display:flex}.sidebar-home-link[data-v-8f8e7f90]:hover{background:var(--musea-bg-tertiary);color:var(--musea-text)}.sidebar-home-link.active[data-v-8f8e7f90]{background:var(--musea-accent-subtle);color:var(--musea-accent-hover)}.category-header[data-v-8f8e7f90]{text-transform:uppercase;letter-spacing:.08em;color:var(--musea-text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:var(--musea-radius-sm);transition:background var(--musea-transition);align-items:center;gap:.5rem;padding:.625rem .75rem;font-size:.6875rem;font-weight:600;display:flex}.category-header[data-v-8f8e7f90]:hover{background:var(--musea-bg-tertiary)}.category-icon[data-v-8f8e7f90]{width:16px;height:16px;transition:transform var(--musea-transition);flex-shrink:0}.category-header--expanded .category-icon[data-v-8f8e7f90]{transform:rotate(90deg)}.category-label[data-v-8f8e7f90]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.category-count[data-v-8f8e7f90]{background:var(--musea-bg-tertiary);border-radius:4px;margin-left:auto;padding:.125rem .375rem;font-size:.625rem}.art-list[data-v-8f8e7f90]{margin:.25rem 0 0;padding:0 0 0 1rem;list-style:none}.art-item[data-v-8f8e7f90]{border-radius:var(--musea-radius-sm);cursor:pointer;color:var(--musea-text-secondary);transition:all var(--musea-transition);align-items:center;gap:.5rem;padding:.375rem .75rem .375rem 1.75rem;font-size:.8125rem;display:flex;position:relative}.art-item[data-v-8f8e7f90]:before{content:"";background:var(--musea-border);width:5px;height:5px;transition:background var(--musea-transition);border-radius:50%;position:absolute;top:50%;left:.75rem;transform:translateY(-50%)}.art-name[data-v-8f8e7f90]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.art-item[data-v-8f8e7f90]:hover{background:var(--musea-bg-tertiary);color:var(--musea-text)}.art-item[data-v-8f8e7f90]:hover:before{background:var(--musea-text-muted)}.art-item.active[data-v-8f8e7f90]{background:var(--musea-accent-subtle);color:var(--musea-accent-hover)}.art-item.active[data-v-8f8e7f90]:before{background:var(--musea-accent)}.art-variant-count[data-v-8f8e7f90]{color:var(--musea-text-muted);opacity:0;transition:opacity var(--musea-transition);margin-left:auto;font-size:.6875rem}.art-item:hover .art-variant-count[data-v-8f8e7f90]{opacity:1}.sidebar-empty[data-v-8f8e7f90]{text-align:center;color:var(--musea-text-muted);padding:2rem 1rem;font-size:.8125rem}.search-modal-overlay[data-v-86216ed5]{background:var(--musea-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;justify-content:center;align-items:flex-start;padding-top:15vh;display:flex;position:fixed;inset:0}.search-modal[data-v-86216ed5]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);width:100%;max-width:560px;box-shadow:var(--musea-shadow);border-radius:12px;overflow:hidden}.search-input-wrapper[data-v-86216ed5]{border-bottom:1px solid var(--musea-border);align-items:center;gap:.75rem;padding:1rem;display:flex}.search-icon[data-v-86216ed5]{width:20px;height:20px;color:var(--musea-text-muted);flex-shrink:0}.search-input[data-v-86216ed5]{color:var(--musea-text);background:0 0;border:none;outline:none;flex:1;font-size:1rem}.search-input[data-v-86216ed5]::placeholder{color:var(--musea-text-muted)}.search-shortcut[data-v-86216ed5]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);color:var(--musea-text-muted);border-radius:4px;padding:.25rem .5rem;font-family:inherit;font-size:.6875rem}.search-results[data-v-86216ed5]{max-height:400px;padding:.5rem;overflow-y:auto}.search-result[data-v-86216ed5]{cursor:pointer;border-radius:8px;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .1s;display:flex}.search-result[data-v-86216ed5]:hover,.search-result--selected[data-v-86216ed5]{background:var(--musea-bg-tertiary)}.result-icon[data-v-86216ed5]{text-align:center;flex-shrink:0;width:24px;font-size:1rem}.result-content[data-v-86216ed5]{flex:1;min-width:0}.result-title[data-v-86216ed5]{color:var(--musea-text);font-size:.875rem;font-weight:500}.result-variant[data-v-86216ed5]{color:var(--musea-accent)}.result-meta[data-v-86216ed5]{gap:.5rem;margin-top:.25rem;display:flex}.result-category[data-v-86216ed5]{color:var(--musea-text-muted);font-size:.75rem}.result-match-type[data-v-86216ed5]{background:var(--musea-accent-subtle);color:var(--musea-accent);text-transform:uppercase;border-radius:3px;padding:.0625rem .375rem;font-size:.625rem}.result-shortcut[data-v-86216ed5]{background:var(--musea-bg-primary);border:1px solid var(--musea-border);color:var(--musea-text-muted);opacity:0;border-radius:3px;padding:.125rem .375rem;font-family:inherit;font-size:.625rem;transition:opacity .1s}.search-result--selected .result-shortcut[data-v-86216ed5]{opacity:1}.search-history-header[data-v-86216ed5]{text-transform:uppercase;letter-spacing:.05em;color:var(--musea-text-muted);justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.6875rem;font-weight:600;display:flex}.history-clear[data-v-86216ed5]{color:var(--musea-text-muted);cursor:pointer;background:0 0;border:none;font-size:.6875rem}.history-clear[data-v-86216ed5]:hover{color:var(--musea-text)}.search-history-item[data-v-86216ed5]{color:var(--musea-text-secondary);cursor:pointer;border-radius:6px;align-items:center;gap:.75rem;padding:.625rem .75rem;font-size:.875rem;transition:background-color .1s;display:flex}.search-history-item[data-v-86216ed5]:hover{background:var(--musea-bg-tertiary);color:var(--musea-text)}.history-icon[data-v-86216ed5]{width:14px;height:14px;color:var(--musea-text-muted)}.search-empty[data-v-86216ed5],.search-hint[data-v-86216ed5]{text-align:center;color:var(--musea-text-muted);padding:2rem;font-size:.875rem}.search-footer[data-v-86216ed5]{border-top:1px solid var(--musea-border);background:var(--musea-bg-tertiary);justify-content:center;align-items:center;gap:1.5rem;padding:.75rem;display:flex}.search-footer-item[data-v-86216ed5]{color:var(--musea-text-muted);align-items:center;gap:.375rem;font-size:.6875rem;display:flex}.search-footer-item kbd[data-v-86216ed5]{background:var(--musea-bg-primary);border:1px solid var(--musea-border);text-align:center;border-radius:3px;min-width:18px;padding:.125rem .375rem;font-family:inherit;font-size:.625rem}.modal-enter-active[data-v-86216ed5],.modal-leave-active[data-v-86216ed5]{transition:all .2s}.modal-enter-from[data-v-86216ed5],.modal-leave-to[data-v-86216ed5]{opacity:0}.modal-enter-from .search-modal[data-v-86216ed5],.modal-leave-to .search-modal[data-v-86216ed5]{transform:scale(.95)translateY(-20px)}.gallery-layout[data-v-6605f879]{flex-direction:column;height:100vh;display:flex}.header[data-v-6605f879]{background:var(--musea-bg-secondary);border-bottom:1px solid var(--musea-border);height:var(--musea-header-height);z-index:100;justify-content:space-between;align-items:center;padding:0 1.5rem;display:flex;position:sticky;top:0}.header-left[data-v-6605f879]{align-items:center;gap:1.5rem;display:flex}.header-center[data-v-6605f879]{flex:1;justify-content:center;max-width:400px;display:flex}.logo[data-v-6605f879]{color:var(--musea-accent);align-items:center;gap:.5rem;font-size:1.125rem;font-weight:700;text-decoration:none;display:flex}.logo-svg[data-v-6605f879]{flex-shrink:0;width:42px;height:29px}.header-subtitle[data-v-6605f879]{color:var(--musea-text-muted);border-left:1px solid var(--musea-border);padding-left:1.5rem;font-size:.8125rem;font-weight:500}.search-trigger[data-v-6605f879]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);width:100%;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;display:flex}.search-trigger[data-v-6605f879]:hover{border-color:var(--musea-accent);color:var(--musea-text-secondary)}.search-icon[data-v-6605f879]{flex-shrink:0;width:16px;height:16px}.search-trigger span[data-v-6605f879]{text-align:left;flex:1}.search-trigger kbd[data-v-6605f879]{background:var(--musea-bg-primary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);font-size:.75rem;font-family:var(--musea-font-mono);padding:.125rem .375rem}.header-right[data-v-6605f879]{align-items:center;display:flex}.theme-toggle[data-v-6605f879]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);width:36px;height:36px;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);justify-content:center;align-items:center;display:flex}.theme-toggle[data-v-6605f879]:hover{border-color:var(--musea-accent);color:var(--musea-text)}.main[data-v-6605f879]{height:calc(100vh - var(--musea-header-height));flex:1;min-height:0;display:flex;overflow:hidden}.sidebar-wrapper[data-v-6605f879]{background:var(--musea-bg-secondary);border-right:1px solid var(--musea-border);flex-direction:column;flex:none;min-width:0;height:100%;max-height:100%;display:flex;position:relative;overflow:hidden auto}.sidebar-wrapper.collapsed[data-v-6605f879]{overflow:hidden}.sidebar-wrapper[data-v-6605f879] .sidebar{border-right:none}.sidebar-resize-handle[data-v-6605f879]{cursor:col-resize;z-index:20;touch-action:none;width:8px;height:100%;position:absolute;top:0;right:-4px}.sidebar-resize-handle[data-v-6605f879]:before{content:"";width:1px;transition:background-color var(--musea-transition);background:0 0;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.sidebar-wrapper:hover .sidebar-resize-handle[data-v-6605f879]:before,.sidebar-resize-handle[data-v-6605f879]:hover:before{background:color-mix(in srgb, var(--musea-border) 78%, transparent)}.sidebar-toggle[data-v-6605f879]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);width:24px;height:24px;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;bottom:.75rem;right:.75rem}.sidebar-wrapper.collapsed .sidebar-toggle[data-v-6605f879]{left:50%;right:auto;transform:translate(-50%)}.sidebar-toggle[data-v-6605f879]:hover{background:var(--musea-bg-elevated);color:var(--musea-text);border-color:var(--musea-text-muted)}.content[data-v-6605f879]{background:var(--musea-bg-primary);height:calc(100vh - var(--musea-header-height));flex:auto;min-width:0;overflow-y:auto}@media (width<=768px){.main[data-v-6605f879]{grid-template-columns:1fr!important}.sidebar-wrapper[data-v-6605f879],.header-subtitle[data-v-6605f879],.header-center[data-v-6605f879]{display:none}}.status-badge[data-v-525b50ab]{text-transform:uppercase;letter-spacing:.04em;border-radius:4px;align-items:center;padding:.1875rem .5rem;font-size:.625rem;font-weight:600;display:inline-flex}.status-draft[data-v-525b50ab]{color:var(--musea-warning);background:#fbbf2426}.status-ready[data-v-525b50ab]{color:var(--musea-success);background:#4ade8026}.status-deprecated[data-v-525b50ab]{color:var(--musea-error);background:#f8717126}.home[data-v-3e2ab621]{max-width:1400px;margin:0 auto;padding:2rem}.home-header[data-v-3e2ab621]{margin-bottom:3rem}.home-title[data-v-3e2ab621]{margin-bottom:.5rem;font-size:2rem;font-weight:700}.home-description[data-v-3e2ab621]{color:var(--musea-text-muted);margin-bottom:1.5rem;font-size:1rem}.home-stats[data-v-3e2ab621]{gap:2rem;display:flex}.home-stat[data-v-3e2ab621]{flex-direction:column;display:flex}.home-stat-value[data-v-3e2ab621]{color:var(--musea-accent);font-variant-numeric:tabular-nums;font-size:1.75rem;font-weight:700}.home-stat-label[data-v-3e2ab621]{color:var(--musea-text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:.75rem}.home-category[data-v-3e2ab621]{margin-bottom:2.5rem}.home-category-title[data-v-3e2ab621]{border-bottom:1px solid var(--musea-border);margin-bottom:1rem;padding-bottom:.5rem;font-size:1.125rem;font-weight:600}.home-category-grid[data-v-3e2ab621]{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem;display:grid}.home-card[data-v-3e2ab621]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-lg);cursor:pointer;transition:all var(--musea-transition);padding:1.25rem}.home-card[data-v-3e2ab621]:hover{border-color:var(--musea-text-muted);box-shadow:var(--musea-shadow);transform:translateY(-2px)}.home-card-header[data-v-3e2ab621]{justify-content:space-between;align-items:center;margin-bottom:.5rem;display:flex}.home-card-title[data-v-3e2ab621]{font-size:.9375rem;font-weight:600}.home-card-desc[data-v-3e2ab621]{color:var(--musea-text-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:.75rem;font-size:.8125rem;display:-webkit-box;overflow:hidden}.home-card-footer[data-v-3e2ab621]{justify-content:space-between;align-items:center;display:flex}.home-card-meta[data-v-3e2ab621]{color:var(--musea-text-muted);font-size:.75rem}.home-card-tags[data-v-3e2ab621]{gap:.375rem;display:flex}.home-card-tag[data-v-3e2ab621]{color:var(--musea-text-muted);background:var(--musea-bg-tertiary);border-radius:4px;padding:.125rem .375rem;font-size:.6875rem}.home-empty[data-v-3e2ab621]{text-align:center;min-height:400px;color:var(--musea-text-muted);flex-direction:column;justify-content:center;align-items:center;display:flex}.home-empty-icon[data-v-3e2ab621]{background:var(--musea-bg-secondary);border-radius:var(--musea-radius-lg);justify-content:center;align-items:center;width:80px;height:80px;margin-bottom:1.5rem;display:flex}.home-empty-icon svg[data-v-3e2ab621]{width:40px;height:40px}.home-empty h2[data-v-3e2ab621]{color:var(--musea-text);margin-bottom:.5rem;font-size:1.125rem}.home-empty code[data-v-3e2ab621]{background:var(--musea-bg-tertiary);border-radius:4px;padding:.125rem .375rem;font-size:.875rem}.source-code[data-v-339dddaa]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);margin-top:.5rem;overflow:hidden}.source-header[data-v-339dddaa]{background:var(--musea-bg-elevated);border-bottom:1px solid var(--musea-border);justify-content:space-between;align-items:center;padding:.375rem .75rem;display:flex}.source-label[data-v-339dddaa]{text-transform:uppercase;letter-spacing:.05em;color:var(--musea-text-muted);font-size:.625rem;font-weight:600}.source-copy-btn[data-v-339dddaa]{border:1px solid var(--musea-border);background:var(--musea-bg-tertiary);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);border-radius:3px;align-items:center;gap:.25rem;padding:.125rem .375rem;font-size:.625rem;display:flex}.source-copy-btn[data-v-339dddaa]:hover{color:var(--musea-text);border-color:var(--musea-text-muted)}.source-pre[data-v-339dddaa]{background:var(--musea-bg-primary);max-height:200px;margin:0;padding:.75rem;overflow-x:auto}.source-code-text[data-v-339dddaa]{color:var(--musea-text-secondary);white-space:pre;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.75rem;line-height:1.6}.variant-card[data-v-1135cc5c]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-lg);overflow:hidden}.variant-preview[data-v-1135cc5c]{aspect-ratio:16/9;background:var(--musea-bg-tertiary);box-sizing:border-box;justify-content:center;align-items:center;min-height:clamp(260px,36vw,560px);display:flex;position:relative;overflow:hidden}.variant-preview.viewport-mode[data-v-1135cc5c]{aspect-ratio:unset;min-height:260px;max-height:min(70vh,720px);overflow:auto}.variant-preview iframe[data-v-1135cc5c]{border-radius:var(--musea-radius-md);background:#fff;border:none;width:100%;max-width:100%;height:100%;max-height:100%;box-shadow:0 12px 30px #0d0d0d1f}.variant-preview.viewport-mode iframe[data-v-1135cc5c]{flex-shrink:0}.variant-info[data-v-1135cc5c]{border-top:1px solid var(--musea-border);justify-content:space-between;align-items:center;padding:1rem;display:flex}.variant-left[data-v-1135cc5c]{align-items:center;gap:.5rem;display:flex}.variant-name[data-v-1135cc5c]{font-size:.875rem;font-weight:600}.variant-badge[data-v-1135cc5c]{text-transform:uppercase;letter-spacing:.04em;background:var(--musea-accent-subtle);color:var(--musea-accent);border-radius:4px;padding:.1875rem .5rem;font-size:.625rem;font-weight:600}.variant-actions[data-v-1135cc5c]{gap:.5rem;display:flex}.variant-action-btn[data-v-1135cc5c]{background:var(--musea-bg-tertiary);border-radius:var(--musea-radius-sm);width:28px;height:28px;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);border:none;justify-content:center;align-items:center;display:flex}.variant-action-btn[data-v-1135cc5c]:hover{background:var(--musea-bg-elevated);color:var(--musea-text)}.variant-action-btn.active[data-v-1135cc5c]{color:var(--musea-accent);background:var(--musea-accent-subtle)}.variant-action-btn svg[data-v-1135cc5c]{width:14px;height:14px}.variant-toc[data-v-8f23cea7]{border-left:1px solid var(--musea-border-subtle);background:0 0;flex-direction:column;gap:.75rem;padding:0 0 0 1.125rem;display:flex}.variant-toc-header[data-v-8f23cea7]{justify-content:space-between;align-items:baseline;gap:.75rem;padding:0 .5rem 0 .25rem;display:flex}.variant-toc-eyebrow[data-v-8f23cea7]{letter-spacing:.08em;text-transform:uppercase;color:var(--musea-text-muted);font-size:.6875rem;font-weight:700}.variant-toc-count[data-v-8f23cea7]{color:var(--musea-text-muted);white-space:nowrap;font-size:.75rem;font-weight:500}.variant-toc-list[data-v-8f23cea7]{max-height:calc(100vh - var(--musea-header-height) - 4rem);flex-direction:column;gap:.25rem;padding-right:.125rem;display:flex;overflow-y:auto}.variant-toc-item[data-v-8f23cea7]{border-radius:var(--musea-radius-md);width:100%;color:var(--musea-text-muted);cursor:pointer;text-align:left;transition:background var(--musea-transition), color var(--musea-transition);background:0 0;border:none;align-items:center;gap:.75rem;padding:.6875rem .75rem .6875rem .5rem;display:flex}.variant-toc-item[data-v-8f23cea7]:hover{background:var(--musea-bg-tertiary);color:var(--musea-text)}.variant-toc-item--active[data-v-8f23cea7]{background:var(--musea-accent-subtle);color:var(--musea-text)}.variant-toc-index[data-v-8f23cea7]{font-variant-numeric:tabular-nums;min-width:1.875rem;color:inherit;flex-shrink:0;font-size:.75rem;font-weight:700}.variant-toc-body[data-v-8f23cea7]{flex-direction:column;flex:1;gap:.125rem;min-width:0;display:flex}.variant-toc-name[data-v-8f23cea7]{text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;overflow:hidden}.variant-toc-caption[data-v-8f23cea7]{color:var(--musea-text-muted);font-size:.75rem}.variant-toc-item--active .variant-toc-caption[data-v-8f23cea7]{color:var(--musea-text-secondary)}.variant-toc-badge[data-v-8f23cea7]{letter-spacing:.04em;text-transform:uppercase;background:var(--musea-accent-subtle);color:var(--musea-accent);border-radius:999px;flex-shrink:0;padding:.1875rem .4375rem;font-size:.625rem;font-weight:700}@media (width<=960px){.variant-toc[data-v-8f23cea7]{border-left:none;border-top:1px solid var(--musea-border-subtle);padding-top:.875rem;padding-left:0;position:static}.variant-toc-list[data-v-8f23cea7]{max-height:none}}.control[data-v-d2fd7fce]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-d2fd7fce]{color:var(--musea-text-secondary);font-size:.75rem;font-weight:600}.control-required[data-v-d2fd7fce]{color:var(--musea-error)}.control-input[data-v-d2fd7fce]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text);transition:border-color var(--musea-transition);outline:none;padding:.375rem .625rem;font-size:.8125rem}.control-input[data-v-d2fd7fce]:focus{border-color:var(--musea-accent)}.control-desc[data-v-d2fd7fce]{color:var(--musea-text-muted);font-size:.6875rem}.control[data-v-92d99fe2]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-92d99fe2]{color:var(--musea-text-secondary);font-size:.75rem;font-weight:600}.control-required[data-v-92d99fe2]{color:var(--musea-error)}.control-input[data-v-92d99fe2]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text);transition:border-color var(--musea-transition);outline:none;width:120px;padding:.375rem .625rem;font-size:.8125rem}.control-input[data-v-92d99fe2]:focus{border-color:var(--musea-accent)}.control-desc[data-v-92d99fe2]{color:var(--musea-text-muted);font-size:.6875rem}.control[data-v-3a008d97]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-3a008d97]{color:var(--musea-text-secondary);cursor:pointer;align-items:center;gap:.5rem;font-size:.75rem;font-weight:600;display:flex}.control-checkbox[data-v-3a008d97]{display:none}.control-toggle[data-v-3a008d97]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);width:32px;height:18px;transition:all var(--musea-transition);border-radius:9px;flex-shrink:0;position:relative}.control-toggle[data-v-3a008d97]:after{content:"";background:var(--musea-text-muted);width:12px;height:12px;transition:all var(--musea-transition);border-radius:50%;position:absolute;top:2px;left:2px}.control-toggle.active[data-v-3a008d97]{background:var(--musea-accent);border-color:var(--musea-accent)}.control-toggle.active[data-v-3a008d97]:after{background:#fff;left:16px}.control-required[data-v-3a008d97]{color:var(--musea-error)}.control-desc[data-v-3a008d97]{color:var(--musea-text-muted);margin-left:2.5rem;font-size:.6875rem}.control[data-v-cc63ff4f]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-cc63ff4f]{color:var(--musea-text-secondary);align-items:center;gap:.5rem;font-size:.75rem;font-weight:600;display:flex}.control-required[data-v-cc63ff4f]{color:var(--musea-error)}.control-value[data-v-cc63ff4f]{font-family:var(--musea-font-mono);color:var(--musea-text-muted);background:var(--musea-bg-tertiary);border-radius:4px;margin-left:auto;padding:.0625rem .375rem;font-size:.6875rem}.control-range[data-v-cc63ff4f]{appearance:none;background:var(--musea-bg-tertiary);border-radius:2px;outline:none;width:100%;height:4px}.control-range[data-v-cc63ff4f]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--musea-accent);cursor:pointer;border:2px solid var(--musea-bg-primary);border-radius:50%;width:14px;height:14px}.control-desc[data-v-cc63ff4f]{color:var(--musea-text-muted);font-size:.6875rem}.control[data-v-a46b4382]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-a46b4382]{color:var(--musea-text-secondary);font-size:.75rem;font-weight:600}.control-required[data-v-a46b4382]{color:var(--musea-error)}.control-select[data-v-a46b4382]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text);transition:border-color var(--musea-transition);cursor:pointer;outline:none;padding:.375rem .625rem;font-size:.8125rem}.control-select[data-v-a46b4382]:focus{border-color:var(--musea-accent)}.control-desc[data-v-a46b4382]{color:var(--musea-text-muted);font-size:.6875rem}.control[data-v-677e1172]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-677e1172]{color:var(--musea-text-secondary);font-size:.75rem;font-weight:600}.control-required[data-v-677e1172]{color:var(--musea-error)}.control-color-row[data-v-677e1172]{align-items:center;gap:.5rem;display:flex}.control-color[data-v-677e1172]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);cursor:pointer;background:0 0;width:32px;height:32px;padding:2px}.control-color[data-v-677e1172]::-webkit-color-swatch-wrapper{padding:0}.control-color[data-v-677e1172]::-webkit-color-swatch{border:none;border-radius:3px}.control-color-text[data-v-677e1172]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text);font-size:.8125rem;font-family:var(--musea-font-mono);transition:border-color var(--musea-transition);outline:none;flex:1;padding:.375rem .625rem}.control-color-text[data-v-677e1172]:focus{border-color:var(--musea-accent)}.control-desc[data-v-677e1172]{color:var(--musea-text-muted);font-size:.6875rem}.control[data-v-eaac90c0]{flex-direction:column;gap:.375rem;display:flex}.control-label[data-v-eaac90c0]{color:var(--musea-text-secondary);align-items:center;gap:.375rem;font-size:.75rem;font-weight:600;display:flex}.control-required[data-v-eaac90c0]{color:var(--musea-error)}.control-error-badge[data-v-eaac90c0]{color:var(--musea-error);border-radius:var(--musea-radius-sm);background:#f871711a;padding:.0625rem .375rem;font-size:.625rem;font-weight:500}.control-editor[data-v-eaac90c0]{border-radius:var(--musea-radius-sm);transition:box-shadow var(--musea-transition);overflow:hidden}.control-editor.has-error[data-v-eaac90c0]{box-shadow:0 0 0 1px var(--musea-error)}.control-desc[data-v-eaac90c0]{color:var(--musea-text-muted);font-size:.6875rem}.slot-editor[data-v-54c1edd7]{background:var(--musea-bg-secondary);border-top:1px solid var(--musea-border);flex-direction:column;height:100%;display:flex}.slot-header[data-v-54c1edd7]{background:var(--musea-bg-tertiary);border-bottom:1px solid var(--musea-border);justify-content:space-between;align-items:center;padding:.5rem;display:flex}.slot-tabs[data-v-54c1edd7]{gap:.25rem;display:flex}.slot-tab[data-v-54c1edd7]{color:var(--musea-text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;align-items:center;gap:.25rem;padding:.375rem .625rem;font-size:.75rem;transition:all .15s;display:flex}.slot-tab[data-v-54c1edd7]:hover{background:var(--musea-bg-secondary);color:var(--musea-text-secondary)}.slot-tab--active[data-v-54c1edd7]{background:var(--musea-bg-secondary);border-color:var(--musea-accent);color:var(--musea-text)}.slot-tab-icon[data-v-54c1edd7]{font-family:var(--musea-font-mono);color:var(--musea-accent)}.slot-actions[data-v-54c1edd7]{gap:.25rem;display:flex}.slot-action[data-v-54c1edd7]{border:1px solid var(--musea-border);color:var(--musea-text-muted);cursor:pointer;background:0 0;border-radius:3px;padding:.25rem .5rem;font-size:.6875rem;transition:all .15s}.slot-action[data-v-54c1edd7]:hover{background:var(--musea-bg-secondary);color:var(--musea-text)}.slot-action--danger[data-v-54c1edd7]:hover{color:#f87171;border-color:#f87171}.slot-content[data-v-54c1edd7]{flex:1;overflow:hidden}.slot-footer[data-v-54c1edd7]{background:var(--musea-bg-tertiary);border-top:1px solid var(--musea-border);padding:.375rem .75rem}.slot-hint[data-v-54c1edd7]{color:var(--musea-text-muted);font-size:.6875rem}.slot-hint code[data-v-54c1edd7]{background:var(--musea-bg-primary);font-family:var(--musea-font-mono);border-radius:2px;padding:.0625rem .25rem}.props-panel[data-v-ce4f281a]{padding:.5rem}.props-split[data-v-ce4f281a]{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.props-split-left[data-v-ce4f281a]{flex-direction:column;align-self:start;gap:1rem;display:flex;position:sticky;top:0}.props-split-right[data-v-ce4f281a]{flex-direction:column;display:flex}@media (width<=900px){.props-split[data-v-ce4f281a]{grid-template-columns:1fr}}.props-loading[data-v-ce4f281a]{min-height:200px;color:var(--musea-text-muted);justify-content:center;align-items:center;gap:.75rem;display:flex}.loading-spinner[data-v-ce4f281a]{border:2px solid var(--musea-border);border-top-color:var(--musea-accent);border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-ce4f281a}@keyframes spin-ce4f281a{to{transform:rotate(360deg)}}.props-error[data-v-ce4f281a]{color:var(--musea-error);border-radius:var(--musea-radius-md);background:#f871711a;border:1px solid #f8717133;padding:1rem;font-size:.8125rem}.props-header[data-v-ce4f281a]{justify-content:space-between;align-items:center;margin-bottom:1.25rem;display:flex}.props-title[data-v-ce4f281a]{font-size:.875rem;font-weight:600}.props-header-actions[data-v-ce4f281a]{align-items:center;gap:.5rem;display:flex}.props-mode-toggle[data-v-ce4f281a]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);display:flex;overflow:hidden}.props-mode-btn[data-v-ce4f281a]{background:var(--musea-bg-tertiary);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);border:none;padding:.25rem .625rem;font-size:.6875rem;font-weight:500}.props-mode-btn[data-v-ce4f281a]:not(:last-child){border-right:1px solid var(--musea-border)}.props-mode-btn.active[data-v-ce4f281a]{background:var(--musea-accent);color:var(--musea-accent-contrast)}.props-mode-btn[data-v-ce4f281a]:not(.active):hover{color:var(--musea-text)}.props-reset[data-v-ce4f281a],.props-save[data-v-ce4f281a]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);padding:.25rem .625rem;font-size:.75rem}.props-reset[data-v-ce4f281a]:hover,.props-save[data-v-ce4f281a]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.props-save.saved[data-v-ce4f281a]{border-color:var(--musea-accent);color:var(--musea-accent)}.props-grid[data-v-ce4f281a]{flex-direction:column;gap:1rem;display:flex}.props-group-header[data-v-ce4f281a]{text-transform:uppercase;letter-spacing:.08em;color:var(--musea-text-muted);border-bottom:1px solid var(--musea-border-subtle);margin-top:.5rem;padding-bottom:.375rem;font-size:.6875rem;font-weight:600}.props-control-row[data-v-ce4f281a]{align-items:flex-start;gap:.25rem;display:flex;position:relative}.props-control-content[data-v-ce4f281a]{flex:1;min-width:0}.props-control-custom[data-v-ce4f281a]{border-left:2px dashed var(--musea-accent);padding-left:.5rem}.props-custom-badge[data-v-ce4f281a]{text-transform:uppercase;letter-spacing:.05em;color:var(--musea-accent);white-space:nowrap;background:#e070481a;border-radius:3px;margin-top:.25rem;padding:.125rem .375rem;font-size:.5625rem;font-weight:600}.props-remove-btn[data-v-ce4f281a]{width:22px;height:22px;color:var(--musea-text-muted);cursor:pointer;opacity:0;transition:all var(--musea-transition);background:0 0;border:none;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;margin-top:.25rem;display:flex}.props-control-row:hover .props-remove-btn[data-v-ce4f281a]{opacity:1}.props-remove-btn[data-v-ce4f281a]:hover{color:var(--musea-error,#f87171);background:#f8717126}.props-add-section[data-v-ce4f281a]{margin-top:1rem}.props-add-btn[data-v-ce4f281a]{border:1px dashed var(--musea-border);border-radius:var(--musea-radius-sm);width:100%;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);background:0 0;justify-content:center;align-items:center;gap:.375rem;padding:.5rem;font-size:.75rem;display:flex}.props-add-btn[data-v-ce4f281a]:hover{border-color:var(--musea-accent);color:var(--musea-accent)}.props-add-form[data-v-ce4f281a]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg-secondary);flex-direction:column;gap:.5rem;padding:.75rem;display:flex}.props-add-input[data-v-ce4f281a]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg);color:var(--musea-text);font-size:.75rem;font-family:var(--musea-font-mono);transition:border-color var(--musea-transition);outline:none;padding:.375rem .5rem}.props-add-input[data-v-ce4f281a]:focus{border-color:var(--musea-accent)}.props-add-select[data-v-ce4f281a]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg);color:var(--musea-text);outline:none;padding:.375rem .5rem;font-size:.75rem}.props-add-actions[data-v-ce4f281a]{gap:.375rem;display:flex}.props-add-confirm[data-v-ce4f281a]{border-radius:var(--musea-radius-sm);background:var(--musea-accent);color:var(--musea-accent-contrast);cursor:pointer;transition:opacity var(--musea-transition);border:none;padding:.25rem .75rem;font-size:.75rem;font-weight:500}.props-add-confirm[data-v-ce4f281a]:hover{opacity:.85}.props-add-cancel[data-v-ce4f281a]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);background:0 0;padding:.25rem .75rem;font-size:.75rem}.props-add-cancel[data-v-ce4f281a]:hover{color:var(--musea-text);border-color:var(--musea-text-muted)}.props-code-editor[data-v-ce4f281a]{flex-direction:column;gap:.5rem;display:flex}.props-code-error[data-v-ce4f281a]{font-size:.6875rem;font-family:var(--musea-font-mono);color:var(--musea-error,#f87171);border-radius:var(--musea-radius-sm);background:#f871711a;border:1px solid #f8717133;padding:.375rem .625rem}.props-json[data-v-ce4f281a]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);margin-top:1.5rem;overflow:hidden}.props-json-header[data-v-ce4f281a]{text-transform:uppercase;letter-spacing:.08em;color:var(--musea-text-muted);background:var(--musea-bg-tertiary);border-bottom:1px solid var(--musea-border);padding:.5rem .75rem;font-size:.6875rem;font-weight:600}.props-json-code[data-v-ce4f281a]{font-family:var(--musea-font-mono);color:var(--musea-text-secondary);white-space:pre-wrap;word-break:break-all;padding:.75rem;font-size:.75rem;overflow-x:auto}.props-preview[data-v-ce4f281a]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);overflow:hidden}.props-preview-header[data-v-ce4f281a]{background:var(--musea-bg-tertiary);border-bottom:1px solid var(--musea-border);padding:.5rem .75rem}.props-preview-label[data-v-ce4f281a]{text-transform:uppercase;letter-spacing:.08em;color:var(--musea-text-muted);font-size:.6875rem;font-weight:600}.props-preview-frame[data-v-ce4f281a]{aspect-ratio:4/3;background:#fff;max-height:300px}.props-preview-frame iframe[data-v-ce4f281a]{border:none;width:100%;height:100%}.props-slot-editor[data-v-ce4f281a]{margin-top:1.25rem}.props-usage[data-v-ce4f281a]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);margin-top:1.25rem;overflow:hidden}.props-usage-header[data-v-ce4f281a]{background:var(--musea-bg-tertiary);border-bottom:1px solid var(--musea-border);text-transform:uppercase;letter-spacing:.08em;color:var(--musea-text-muted);justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.6875rem;font-weight:600;display:flex}.props-copy-btn[data-v-ce4f281a]{border:1px solid var(--musea-border);background:var(--musea-bg-tertiary);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);border-radius:3px;align-items:center;gap:.25rem;padding:.125rem .375rem;font-size:.625rem;display:flex}.props-copy-btn[data-v-ce4f281a]:hover{color:var(--musea-text);border-color:var(--musea-text-muted)}.props-usage-code[data-v-ce4f281a]{color:var(--musea-text-secondary);white-space:pre-wrap;word-break:break-all;padding:.75rem;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.75rem;overflow-x:auto}.props-empty[data-v-ce4f281a]{text-align:center;color:var(--musea-text-muted);padding:2rem;font-size:.875rem}.props-empty-hint[data-v-ce4f281a]{margin-top:.5rem;font-size:.8125rem}.props-empty code[data-v-ce4f281a]{background:var(--musea-bg-tertiary);font-family:var(--musea-font-mono);border-radius:4px;padding:.125rem .375rem}.docs-panel[data-v-69f06724]{padding:.5rem}.docs-loading[data-v-69f06724]{min-height:200px;color:var(--musea-text-muted);justify-content:center;align-items:center;gap:.75rem;display:flex}.loading-spinner[data-v-69f06724]{border:2px solid var(--musea-border);border-top-color:var(--musea-accent);border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-69f06724}@keyframes spin-69f06724{to{transform:rotate(360deg)}}.docs-error[data-v-69f06724]{color:var(--musea-error);border-radius:var(--musea-radius-md);background:#f871711a;border:1px solid #f8717133;padding:1rem;font-size:.8125rem}.docs-content[data-v-69f06724]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);overflow:hidden}.docs-markdown[data-v-69f06724]{color:var(--musea-text-secondary);padding:1.5rem;font-size:.875rem;line-height:1.7}.docs-markdown[data-v-69f06724] h1{color:var(--musea-text);border-bottom:1px solid var(--musea-border);margin-bottom:1rem;padding-bottom:.5rem;font-size:1.5rem;font-weight:700}.docs-markdown[data-v-69f06724] h2{color:var(--musea-text);margin-top:1.5rem;margin-bottom:.75rem;font-size:1.25rem;font-weight:600}.docs-markdown[data-v-69f06724] h3{color:var(--musea-text);margin-top:1.25rem;margin-bottom:.5rem;font-size:1rem;font-weight:600}.docs-markdown[data-v-69f06724] p{margin-bottom:.75rem}.docs-markdown[data-v-69f06724] ul,.docs-markdown[data-v-69f06724] ol{margin-bottom:.75rem;padding-left:1.5rem}.docs-markdown[data-v-69f06724] li{margin-bottom:.25rem}.docs-markdown[data-v-69f06724] code{background:var(--musea-bg-tertiary);border-radius:4px;padding:.125rem .375rem;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.8125rem}.docs-markdown[data-v-69f06724] pre{background:var(--musea-bg-primary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);white-space:pre;margin-bottom:1rem;padding:1rem;overflow-x:auto}.docs-markdown[data-v-69f06724] pre code{white-space:pre;tab-size:2;background:0 0;padding:0;font-size:.8125rem;line-height:1.6}.docs-markdown[data-v-69f06724] table{border-collapse:collapse;width:100%;margin-bottom:1rem}.docs-markdown[data-v-69f06724] th,.docs-markdown[data-v-69f06724] td{border:1px solid var(--musea-border);text-align:left;padding:.5rem .75rem;font-size:.8125rem}.docs-markdown[data-v-69f06724] th{background:var(--musea-bg-tertiary);color:var(--musea-text);font-weight:600}.docs-markdown[data-v-69f06724] blockquote{border-left:3px solid var(--musea-accent);color:var(--musea-text-muted);margin:.75rem 0;padding-left:1rem}.docs-markdown[data-v-69f06724] hr{border:none;border-top:1px solid var(--musea-border);margin:1.5rem 0}.docs-markdown[data-v-69f06724] a{color:var(--musea-accent);text-decoration:underline}.docs-markdown[data-v-69f06724] strong{color:var(--musea-text);font-weight:600}.docs-empty[data-v-69f06724]{text-align:center;color:var(--musea-text-muted);padding:2rem;font-size:.875rem}.a11y-badge[data-v-bc5eaa25]{border-radius:9px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 .25rem;font-size:.625rem;font-weight:700;line-height:1;display:inline-flex}.severity-running[data-v-bc5eaa25]{color:var(--musea-warning);background:#fbbf2429}.severity-passed[data-v-bc5eaa25]{color:#4ade80;background:#4ade802e}.severity-moderate[data-v-bc5eaa25]{color:var(--musea-warning);background:#fbbf2433}.severity-serious[data-v-bc5eaa25]{color:var(--musea-error);background:#f8717133}.severity-critical[data-v-bc5eaa25]{color:var(--musea-error);background:#f871714d}.a11y-panel[data-v-cdb226d7]{padding:.5rem}.a11y-iframe[data-v-cdb226d7]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.a11y-header[data-v-cdb226d7]{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.a11y-title[data-v-cdb226d7]{font-size:.875rem;font-weight:600}.a11y-run-btn[data-v-cdb226d7]{background:var(--musea-accent);border-radius:var(--musea-radius-sm);color:var(--musea-accent-contrast);cursor:pointer;transition:all var(--musea-transition);border:none;align-items:center;gap:.375rem;padding:.375rem .75rem;font-size:.75rem;font-weight:600;display:flex}.a11y-run-btn[data-v-cdb226d7]:hover:not(:disabled){background:var(--musea-accent-hover)}.a11y-run-btn[data-v-cdb226d7]:disabled{opacity:.5;cursor:not-allowed}.a11y-empty[data-v-cdb226d7]{text-align:center;color:var(--musea-text-muted);padding:2rem;font-size:.875rem}.a11y-hint[data-v-cdb226d7]{opacity:.7;margin-top:.5rem;font-size:.75rem}.a11y-running-icon[data-v-cdb226d7]{margin-bottom:.75rem}.a11y-error[data-v-cdb226d7]{border-radius:var(--musea-radius-sm);color:#f87171;background:#f871711a;border:1px solid #f8717133;padding:1rem;font-size:.8125rem}.a11y-summary[data-v-cdb226d7]{flex-wrap:wrap;gap:.75rem;margin-bottom:1rem;display:flex}.a11y-stat[data-v-cdb226d7]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);text-align:center;min-width:60px;padding:.5rem .75rem}.a11y-stat-value[data-v-cdb226d7]{font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:700;display:block}.a11y-stat-label[data-v-cdb226d7]{color:var(--musea-text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.625rem}.a11y-stat.has-issues .a11y-stat-value[data-v-cdb226d7],.a11y-stat.critical .a11y-stat-value[data-v-cdb226d7]{color:#f87171}.a11y-stat.serious .a11y-stat-value[data-v-cdb226d7]{color:#fb923c}.a11y-stat.moderate .a11y-stat-value[data-v-cdb226d7]{color:#fbbf24}.a11y-stat.minor .a11y-stat-value[data-v-cdb226d7]{color:#60a5fa}.a11y-stat.passes .a11y-stat-value[data-v-cdb226d7]{color:#4ade80}.a11y-success[data-v-cdb226d7]{border-radius:var(--musea-radius-sm);color:#4ade80;background:#4ade801a;border:1px solid #4ade8033;align-items:center;gap:.75rem;padding:1rem;font-weight:500;display:flex}.a11y-violations[data-v-cdb226d7]{flex-direction:column;gap:.5rem;display:flex}.a11y-violation[data-v-cdb226d7]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);overflow:hidden}.a11y-violation-header[data-v-cdb226d7]{cursor:pointer;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.75rem;display:flex}.a11y-violation-header[data-v-cdb226d7]:hover{background:var(--musea-bg-tertiary)}.a11y-impact[data-v-cdb226d7]{text-transform:uppercase;font-size:.625rem;font-weight:700}.a11y-rule-id[data-v-cdb226d7]{font-family:var(--musea-font-mono);color:var(--musea-text-secondary)}.a11y-node-count[data-v-cdb226d7]{color:var(--musea-text-muted);margin-left:auto}.a11y-expand-icon[data-v-cdb226d7]{color:var(--musea-text-muted)}.a11y-violation-detail[data-v-cdb226d7]{border-top:1px solid var(--musea-border);background:var(--musea-bg-tertiary);padding:.75rem}.a11y-description[data-v-cdb226d7]{color:var(--musea-text-secondary);margin-bottom:.5rem;font-size:.8125rem}.a11y-help-link[data-v-cdb226d7]{color:var(--musea-accent);align-items:center;gap:.25rem;font-size:.75rem;text-decoration:none;display:inline-flex}.a11y-help-link[data-v-cdb226d7]:hover{text-decoration:underline}.a11y-nodes[data-v-cdb226d7]{margin-top:.75rem}.a11y-node[data-v-cdb226d7]{background:var(--musea-bg-primary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);margin-top:.5rem;padding:.5rem}.a11y-node-html[data-v-cdb226d7]{font-family:var(--musea-font-mono);color:var(--musea-text-secondary);white-space:pre-wrap;word-break:break-all;margin:0;font-size:.6875rem;overflow-x:auto}.a11y-node-summary[data-v-cdb226d7]{color:var(--musea-text-muted);white-space:pre-wrap;margin-top:.375rem;font-size:.6875rem}@keyframes spin-cdb226d7{to{transform:rotate(360deg)}}.spin[data-v-cdb226d7]{animation:1s linear infinite spin-cdb226d7}.vrt-panel[data-v-d606c774]{padding:.5rem}.vrt-header[data-v-d606c774]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:1rem;display:flex}.vrt-title[data-v-d606c774]{font-size:.875rem;font-weight:600}.vrt-actions[data-v-d606c774]{align-items:center;gap:1rem;display:flex}.vrt-update-label[data-v-d606c774]{color:var(--musea-text-muted);cursor:pointer;align-items:center;gap:.375rem;font-size:.75rem;display:flex}.vrt-checkbox[data-v-d606c774]{cursor:pointer;width:14px;height:14px}.vrt-run-btn[data-v-d606c774]{background:var(--musea-accent);border-radius:var(--musea-radius-sm);color:var(--musea-accent-contrast);cursor:pointer;transition:all var(--musea-transition);border:none;align-items:center;gap:.375rem;padding:.375rem .75rem;font-size:.75rem;font-weight:600;display:flex}.vrt-run-btn[data-v-d606c774]:hover:not(:disabled){background:var(--musea-accent-hover)}.vrt-run-btn[data-v-d606c774]:disabled{opacity:.5;cursor:not-allowed}.vrt-empty[data-v-d606c774]{text-align:center;color:var(--musea-text-muted);padding:2rem;font-size:.875rem}.vrt-hint[data-v-d606c774]{opacity:.7;margin-top:.5rem;font-size:.75rem}.vrt-hint code[data-v-d606c774]{background:var(--musea-bg-tertiary);font-family:var(--musea-font-mono);border-radius:3px;padding:.125rem .375rem}.vrt-error[data-v-d606c774]{border-radius:var(--musea-radius-sm);color:#f87171;background:#f871711a;border:1px solid #f8717133;padding:1rem;font-size:.8125rem}.vrt-summary[data-v-d606c774]{flex-wrap:wrap;gap:.75rem;margin-bottom:1rem;display:flex}.vrt-artifacts[data-v-d606c774]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);gap:.625rem;margin-bottom:1rem;padding:.875rem 1rem;display:grid}.vrt-artifacts-header[data-v-d606c774]{font-size:.8125rem;font-weight:600}.vrt-artifact[data-v-d606c774]{gap:.25rem;display:grid}.vrt-artifact-label[data-v-d606c774]{letter-spacing:.05em;text-transform:uppercase;color:var(--musea-text-muted);font-size:.6875rem;font-weight:700}.vrt-artifact-path[data-v-d606c774]{background:var(--musea-bg-primary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text-secondary);font-size:.75rem;font-family:var(--musea-font-mono);white-space:pre-wrap;overflow-wrap:anywhere;padding:.5rem .625rem;display:block}.vrt-stat[data-v-d606c774]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);text-align:center;min-width:60px;padding:.5rem .75rem}.vrt-stat-value[data-v-d606c774]{font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:700;display:block}.vrt-stat-label[data-v-d606c774]{color:var(--musea-text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.625rem}.vrt-stat.passed .vrt-stat-value[data-v-d606c774]{color:#4ade80}.vrt-stat.failed .vrt-stat-value[data-v-d606c774]{color:#f87171}.vrt-stat.new .vrt-stat-value[data-v-d606c774]{color:#60a5fa}.vrt-results[data-v-d606c774]{flex-direction:column;gap:.5rem;display:flex}.vrt-variant[data-v-d606c774]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);padding:.75rem}.vrt-variant-name[data-v-d606c774]{margin-bottom:.5rem;font-size:.8125rem;font-weight:600}.vrt-viewports[data-v-d606c774]{flex-wrap:wrap;gap:.5rem;display:flex}.vrt-viewport[data-v-d606c774]{background:var(--musea-bg-tertiary);border-radius:var(--musea-radius-sm);align-items:flex-start;gap:.5rem;padding:.25rem .5rem;font-size:.75rem;display:flex}.vrt-viewport-name[data-v-d606c774]{color:var(--musea-text-secondary)}.vrt-viewport-body[data-v-d606c774]{gap:.25rem;display:grid}.vrt-status[data-v-d606c774]{font-size:.6875rem;font-weight:600}.vrt-result-path[data-v-d606c774]{color:var(--musea-text-muted);font-size:.6875rem;font-family:var(--musea-font-mono);white-space:pre-wrap;overflow-wrap:anywhere}@keyframes spin-d606c774{to{transform:rotate(360deg)}}.spin[data-v-d606c774]{animation:1s linear infinite spin-d606c774}.viewport-selector[data-v-6a15e603]{align-items:center;gap:.25rem;display:flex;position:relative}.viewport-btn[data-v-6a15e603]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg-tertiary);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);align-items:center;gap:.375rem;padding:.25rem .5rem;font-size:.6875rem;display:flex}.viewport-btn[data-v-6a15e603]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.viewport-btn.active[data-v-6a15e603]{border-color:var(--musea-accent);color:var(--musea-accent);background:var(--musea-accent-subtle)}.viewport-label[data-v-6a15e603]{white-space:nowrap}.rotate-btn[data-v-6a15e603]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg-tertiary);width:28px;height:28px;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);justify-content:center;align-items:center;display:flex}.rotate-btn[data-v-6a15e603]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.rotate-btn.active[data-v-6a15e603]{border-color:var(--musea-accent);color:var(--musea-accent)}.viewport-dropdown[data-v-6a15e603]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);box-shadow:var(--musea-shadow);z-index:50;min-width:200px;margin-top:.25rem;position:absolute;top:100%;left:0;overflow:hidden}.viewport-option[data-v-6a15e603]{width:100%;color:var(--musea-text-secondary);cursor:pointer;transition:background var(--musea-transition);text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;gap:1rem;padding:.5rem .75rem;font-size:.75rem;display:flex}.viewport-option[data-v-6a15e603]:hover{background:var(--musea-bg-tertiary)}.viewport-option.active[data-v-6a15e603]{color:var(--musea-accent);background:var(--musea-accent-subtle)}.viewport-option-size[data-v-6a15e603]{color:var(--musea-text-muted);font-size:.6875rem;font-family:var(--musea-font-mono,monospace)}.bg-picker[data-v-e427a2d6]{align-items:center;gap:.5rem;display:flex}.bg-presets[data-v-e427a2d6]{gap:.25rem;display:flex}.bg-preset-btn[data-v-e427a2d6]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg-tertiary);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);align-items:center;gap:.375rem;padding:.25rem .5rem;font-size:.6875rem;display:flex}.bg-preset-btn[data-v-e427a2d6]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.bg-preset-btn.active[data-v-e427a2d6]{border-color:var(--musea-accent);color:var(--musea-accent);background:var(--musea-accent-subtle)}.bg-preset-swatch[data-v-e427a2d6]{border:1px solid var(--musea-border);border-radius:3px;flex-shrink:0;width:14px;height:14px}.bg-preset-swatch.checkerboard[data-v-e427a2d6]{background-image:linear-gradient(45deg,#ccc 25%,#0000 25%),linear-gradient(-45deg,#ccc 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#ccc 75%),linear-gradient(-45deg,#0000 75%,#ccc 75%);background-position:0 0,0 4px,4px -4px,-4px 0;background-size:8px 8px}.bg-preset-label[data-v-e427a2d6]{white-space:nowrap}.bg-color-input[data-v-e427a2d6]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);cursor:pointer;background:0 0;width:28px;height:28px;padding:2px}.addon-toolbar[data-v-2e840e89]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:2px;flex-wrap:wrap;align-items:center;gap:.25rem;padding:.125rem .25rem;display:flex}.toolbar-group[data-v-2e840e89]{align-items:center;gap:.125rem;display:flex}.toolbar-separator[data-v-2e840e89]{background:var(--musea-border);flex-shrink:0;width:1px;height:14px}.toolbar-toggle[data-v-2e840e89]{border:1px solid var(--musea-border);background:var(--musea-bg-tertiary);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);border-radius:2px;align-items:center;gap:.25rem;padding:.125rem .25rem;font-size:.5625rem;display:flex}.toolbar-toggle[data-v-2e840e89]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.toolbar-toggle.active[data-v-2e840e89]{border-color:var(--musea-accent);color:var(--musea-accent);background:var(--musea-accent-subtle)}.toolbar-toggle svg[data-v-2e840e89]{width:10px;height:10px}.toolbar-kbd[data-v-2e840e89]{border:1px solid var(--musea-border);background:var(--musea-bg-primary);font-family:var(--musea-font-mono,monospace);color:var(--musea-text-muted);border-radius:2px;padding:0 .125rem;font-size:.5rem;line-height:1.2;display:none}@media (width>=1024px){.toolbar-kbd[data-v-2e840e89]{display:inline-block}}.actions-panel[data-v-66914be7]{flex-direction:column;height:100%;font-size:.75rem;display:flex}.actions-header[data-v-66914be7]{border-bottom:1px solid var(--musea-border-subtle);background:0 0;justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem .625rem;display:flex}.actions-header-copy[data-v-66914be7]{flex-direction:column;align-items:flex-start;gap:.1875rem;min-width:0;display:flex}.actions-header-title[data-v-66914be7]{color:var(--musea-text);font-size:.75rem;font-weight:600}.actions-header-meta[data-v-66914be7]{flex-wrap:wrap;align-items:center;gap:.5rem;min-width:0;display:flex}.actions-count[data-v-66914be7]{color:var(--musea-text-muted);font-size:.6875rem}.actions-capture-mode[data-v-66914be7]{background:var(--musea-bg-secondary);color:var(--musea-text-muted);letter-spacing:.04em;text-transform:uppercase;border-radius:999px;padding:.125rem .4375rem;font-size:.625rem;font-weight:700}.actions-capture-mode--active[data-v-66914be7]{background:var(--musea-accent-subtle);color:var(--musea-accent)}.actions-clear-btn[data-v-66914be7]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);background:0 0;padding:.125rem .375rem;font-size:.625rem}.actions-clear-btn[data-v-66914be7]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.actions-empty[data-v-66914be7]{text-align:center;color:var(--musea-text-muted);flex-direction:column;gap:.375rem;margin:auto 0;padding:1.25rem 1rem 1.5rem;font-size:.75rem;display:flex}.actions-hint[data-v-66914be7]{opacity:.7;font-size:.6875rem}.actions-note[data-v-66914be7]{color:var(--musea-text-muted);font-size:.6875rem}.actions-note code[data-v-66914be7]{font-family:var(--musea-font-mono,monospace);border-radius:var(--musea-radius-sm);background:var(--musea-bg-secondary);border:1px solid var(--musea-border-subtle);padding:.125rem .25rem;font-size:.625rem}.actions-list[data-v-66914be7]{flex:1;min-height:0;padding:.5rem;overflow-y:auto}.action-item[data-v-66914be7]{border-radius:var(--musea-radius-md);cursor:pointer;transition:background var(--musea-transition), border-color var(--musea-transition);border:1px solid #0000}.action-item+.action-item[data-v-66914be7]{margin-top:.375rem}.action-item[data-v-66914be7]:hover{background:color-mix(in srgb, var(--musea-bg-secondary) 72%, transparent);border-color:var(--musea-border-subtle)}.action-item.expanded[data-v-66914be7]{background:color-mix(in srgb, var(--musea-bg-secondary) 82%, transparent);border-color:var(--musea-border-subtle)}.action-row[data-v-66914be7]{grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;column-gap:.625rem;padding:.5rem .75rem;font-size:.6875rem;display:grid}.action-time[data-v-66914be7]{color:var(--musea-text-muted);font-family:var(--musea-font-mono,monospace);flex-shrink:0;font-size:.625rem}.action-type[data-v-66914be7]{color:#60a5fa;background:#3b82f626;border-radius:2px;flex-shrink:0;padding:.0625rem .25rem;font-size:.5625rem;font-weight:600}.action-type.vue[data-v-66914be7]{color:#34d399;background:#34d39926}.action-target[data-v-66914be7]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--musea-text-secondary);font-family:var(--musea-font-mono,monospace);font-size:.625rem;overflow:hidden}.action-expand-icon[data-v-66914be7]{width:12px;height:12px;color:var(--musea-text-muted);flex-shrink:0;margin-left:auto}.action-detail[data-v-66914be7]{padding:0 .75rem .75rem}.action-raw[data-v-66914be7]{background:var(--musea-bg-tertiary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);font-family:var(--musea-font-mono,monospace);color:var(--musea-text-secondary);white-space:pre;max-height:150px;margin:0;padding:.375rem .5rem;font-size:.5625rem;overflow:auto}.fullscreen-overlay[data-v-0114f2b3]{z-index:9999;background:var(--musea-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);justify-content:center;align-items:center;padding:2rem;animation:.15s fadeIn-0114f2b3;display:flex;position:fixed;inset:0}@keyframes fadeIn-0114f2b3{0%{opacity:0}to{opacity:1}}.fullscreen-container[data-v-0114f2b3]{border-radius:var(--musea-radius-lg);width:100%;max-width:1600px;height:100%;box-shadow:var(--musea-shadow);flex-direction:column;display:flex;overflow:hidden}.fullscreen-header[data-v-0114f2b3]{background:var(--musea-bg-secondary);border-bottom:1px solid var(--musea-border);flex-shrink:0;justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.fullscreen-title[data-v-0114f2b3]{color:var(--musea-text);font-size:.875rem;font-weight:600}.fullscreen-actions[data-v-0114f2b3]{gap:.5rem;display:flex}.fullscreen-action-btn[data-v-0114f2b3],.fullscreen-close-btn[data-v-0114f2b3]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);background:var(--musea-bg-tertiary);width:32px;height:32px;color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);justify-content:center;align-items:center;display:flex}.fullscreen-action-btn[data-v-0114f2b3]:hover,.fullscreen-close-btn[data-v-0114f2b3]:hover{background:var(--musea-bg-elevated);color:var(--musea-text)}.fullscreen-iframe[data-v-0114f2b3]{background:#fff;border:none;flex:1;width:100%}.component-view[data-v-c6e86ec7]{max-width:1400px;margin:0 auto;padding:2rem}.component-header[data-v-c6e86ec7]{margin-bottom:1.5rem}.component-title-row[data-v-c6e86ec7]{align-items:center;gap:.75rem;margin-bottom:.5rem;display:flex}.component-title[data-v-c6e86ec7]{font-size:1.5rem;font-weight:700}.component-description[data-v-c6e86ec7]{color:var(--musea-text-muted);max-width:600px;margin-bottom:.75rem;font-size:.9375rem}.component-meta[data-v-c6e86ec7]{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.meta-tag[data-v-c6e86ec7]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);color:var(--musea-text-muted);align-items:center;gap:.375rem;padding:.25rem .625rem;font-size:.75rem;display:inline-flex}.meta-tag svg[data-v-c6e86ec7]{width:12px;height:12px}.component-sticky-menu[data-v-c6e86ec7]{z-index:20;background:linear-gradient(to bottom, var(--musea-bg-primary) 0%, var(--musea-bg-primary) calc(100% - .5rem), transparent 100%);margin-bottom:1.5rem;padding-bottom:.875rem;position:sticky;top:0}.component-view[data-v-c6e86ec7] .addon-toolbar{margin-bottom:.75rem}.component-tabs[data-v-c6e86ec7]{border-bottom:1px solid var(--musea-border);background:color-mix(in srgb, var(--musea-bg-primary) 92%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);gap:.25rem;display:flex}.component-content[data-v-c6e86ec7]{min-height:0}.tab-btn[data-v-c6e86ec7]{color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:.5rem;padding:.75rem 1rem;font-size:.875rem;font-weight:500;display:flex}.tab-btn[data-v-c6e86ec7]:hover{color:var(--musea-text)}.tab-btn.active[data-v-c6e86ec7]{color:var(--musea-accent);border-bottom-color:var(--musea-accent)}.action-count-badge[data-v-c6e86ec7]{background:var(--musea-accent);min-width:18px;height:18px;color:var(--musea-accent-contrast);border-radius:9px;justify-content:center;align-items:center;padding:0 .375rem;font-size:.625rem;font-weight:700;line-height:1;display:inline-flex}.variants-view[data-v-c6e86ec7]{grid-template-columns:minmax(0,1fr) clamp(220px,24vw,280px);align-items:start;gap:2rem;display:grid}.variant-preview-area[data-v-c6e86ec7]{flex-direction:column;gap:1.5rem;min-width:0;min-height:0;display:flex}.variant-toc-column[data-v-c6e86ec7]{min-width:0;top:calc(var(--musea-header-height) + 1rem);align-self:start;position:sticky}.variant-section[data-v-c6e86ec7]{scroll-margin-top:calc(var(--musea-header-height) + 1.25rem);flex-direction:column;gap:.75rem;display:flex}.variant-section-header[data-v-c6e86ec7]{align-items:center;gap:.75rem;padding-inline:.25rem;display:flex}.variant-section-index[data-v-c6e86ec7]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);min-width:2rem;color:var(--musea-text-muted);font-variant-numeric:tabular-nums;border-radius:999px;justify-content:center;align-items:center;padding:.25rem .5rem;font-size:.75rem;font-weight:700;display:inline-flex}.variant-section-title[data-v-c6e86ec7]{font-size:1rem;font-weight:700}.variant-section-badge[data-v-c6e86ec7]{letter-spacing:.04em;text-transform:uppercase;background:var(--musea-accent-subtle);color:var(--musea-accent);border-radius:999px;padding:.25rem .5rem;font-size:.6875rem;font-weight:700}.actions-footer[data-v-c6e86ec7]{z-index:30;margin:0 -2rem -2rem;position:sticky;bottom:0}.actions-footer-shell[data-v-c6e86ec7]{border-top:1px solid var(--musea-border-subtle);background:color-mix(in srgb, var(--musea-bg-primary) 94%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.actions-footer.expanded .actions-footer-shell[data-v-c6e86ec7]{box-shadow:0 -12px 28px #12121214}.actions-footer-resizer[data-v-c6e86ec7]{cursor:ns-resize;touch-action:none;justify-content:center;align-items:center;height:1.375rem;display:flex}.actions-footer-resizer[data-v-c6e86ec7]:before{content:"";background:var(--musea-border);border-radius:999px;width:2.75rem;height:2px}.actions-footer-toggle[data-v-c6e86ec7]{width:100%;color:var(--musea-text-muted);cursor:pointer;transition:background var(--musea-transition), color var(--musea-transition);background:0 0;border:none;justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem;font-size:.75rem;font-weight:500;display:flex}.actions-footer-toggle[data-v-c6e86ec7]:hover{background:color-mix(in srgb, var(--musea-bg-secondary) 78%, transparent);color:var(--musea-text)}.actions-footer.expanded .actions-footer-toggle[data-v-c6e86ec7]{border-bottom:1px solid var(--musea-border-subtle)}.actions-footer-toggle-copy[data-v-c6e86ec7]{flex-direction:column;align-items:flex-start;gap:.1875rem;min-width:0;display:flex}.actions-footer-toggle-line[data-v-c6e86ec7]{align-items:center;gap:.625rem;min-width:0;display:flex}.actions-footer-title[data-v-c6e86ec7]{color:var(--musea-text);font-size:.8125rem;font-weight:600}.actions-footer-caption[data-v-c6e86ec7]{color:var(--musea-text-muted);font-size:.6875rem}.actions-footer-chevron[data-v-c6e86ec7]{color:var(--musea-text-muted);transition:transform var(--musea-transition);flex-shrink:0}.actions-footer.expanded .actions-footer-chevron[data-v-c6e86ec7]{transform:rotate(180deg)}.actions-footer-content[data-v-c6e86ec7]{overflow:hidden}.component-not-found[data-v-c6e86ec7]{text-align:center;min-height:400px;color:var(--musea-text-muted);flex-direction:column;justify-content:center;align-items:center;display:flex}.component-not-found h2[data-v-c6e86ec7]{color:var(--musea-text);margin-bottom:.5rem}.back-link[data-v-c6e86ec7]{color:var(--musea-accent);margin-top:1rem;text-decoration:underline}@media (width<=960px){.component-view[data-v-c6e86ec7]{padding:1.25rem}.component-sticky-menu[data-v-c6e86ec7]{padding-bottom:.75rem}.variants-view[data-v-c6e86ec7]{grid-template-columns:1fr}.variant-toc-column[data-v-c6e86ec7]{order:-1;position:static}.actions-footer[data-v-c6e86ec7]{margin:0 -1.25rem -1.25rem}.actions-footer-toggle[data-v-c6e86ec7]{padding-inline:.875rem}}.spacing-preview[data-v-15352857]{align-items:center;gap:.5rem;width:100%;display:flex}.spacing-bar[data-v-15352857]{background:var(--musea-accent);border-radius:2px;min-width:2px;height:12px;transition:width .2s}.spacing-label[data-v-15352857]{color:var(--musea-text-muted);font-size:.6875rem;font-family:var(--musea-font-mono);white-space:nowrap}.typography-preview[data-v-f4005798]{align-items:center;width:48px;height:48px;display:flex;overflow:hidden}.typography-sample[data-v-f4005798]{color:var(--musea-text);font-family:var(--musea-font-mono);white-space:nowrap;line-height:1.2}.token-card[data-v-e0bde88b]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);transition:border-color var(--musea-transition);flex-direction:column;display:flex;overflow:hidden}.token-card[data-v-e0bde88b]:hover{border-color:var(--musea-text-muted)}.token-card:hover .token-actions[data-v-e0bde88b]{opacity:1}.token-preview[data-v-e0bde88b]{justify-content:center;align-items:center;min-height:48px;padding:.75rem;display:flex}.token-preview--color[data-v-e0bde88b]{padding:0}.color-swatch[data-v-e0bde88b]{width:100%;height:64px}.preview-compact[data-v-e0bde88b]{justify-content:center;align-items:center;width:100%;height:48px;display:flex}.shadow-swatch[data-v-e0bde88b]{border-radius:var(--musea-radius-md);background:var(--musea-bg);width:48px;height:48px}.radius-swatch[data-v-e0bde88b]{border:2px solid var(--musea-accent);background:0 0;width:48px;height:48px}.generic-preview[data-v-e0bde88b]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);width:48px;height:48px;color:var(--musea-text-muted);justify-content:center;align-items:center;display:flex}.generic-value-icon[data-v-e0bde88b]{font-family:var(--musea-font-mono);font-size:1rem;font-weight:600}.token-body[data-v-e0bde88b]{flex:1;min-width:0;padding:.625rem .875rem .5rem}.token-header[data-v-e0bde88b]{align-items:center;gap:.5rem;margin-bottom:.125rem;display:flex}.token-name[data-v-e0bde88b]{font-weight:600;font-family:var(--musea-font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:.8125rem;overflow:hidden}.tier-badge[data-v-e0bde88b]{text-transform:uppercase;letter-spacing:.025em;white-space:nowrap;border-radius:9999px;flex-shrink:0;padding:.0625rem .3125rem;font-size:.5625rem;font-weight:600}.tier-badge--primitive[data-v-e0bde88b]{color:#60a5fa;background:#3b82f626}.tier-badge--semantic[data-v-e0bde88b]{color:#c084fc;background:#a855f726}.token-value[data-v-e0bde88b]{color:var(--musea-text-muted);font-family:var(--musea-font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:.6875rem;overflow:hidden}.token-reference[data-v-e0bde88b]{color:var(--musea-text-muted);font-size:.625rem;font-family:var(--musea-font-mono);text-overflow:ellipsis;white-space:nowrap;margin-top:.125rem;overflow:hidden}.ref-arrow[data-v-e0bde88b]{color:#c084fc}.ref-resolved[data-v-e0bde88b]{opacity:.7}.token-desc[data-v-e0bde88b]{color:var(--musea-text-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.25rem;font-size:.6875rem;overflow:hidden}.token-footer[data-v-e0bde88b]{border-top:1px solid var(--musea-border);justify-content:space-between;align-items:center;min-height:34px;padding:.375rem .875rem;display:flex}.footer-spacer[data-v-e0bde88b]{flex:1}.usage-badge[data-v-e0bde88b]{border:1px solid var(--musea-border);color:var(--musea-text-muted);font-size:.6875rem;font-family:var(--musea-font-mono);cursor:pointer;transition:border-color var(--musea-transition), color var(--musea-transition);white-space:nowrap;background:0 0;border-radius:9999px;flex-shrink:0;align-items:center;gap:.25rem;padding:.125rem .5rem;display:flex}.usage-badge--warn[data-v-e0bde88b]{color:#f59e0b;border-color:#f59e0b66}.usage-badge[data-v-e0bde88b]:hover{border-color:var(--musea-accent);color:var(--musea-accent)}.usage-badge--warn[data-v-e0bde88b]:hover{color:#f59e0b;border-color:#f59e0b}.token-actions[data-v-e0bde88b]{opacity:0;transition:opacity var(--musea-transition);gap:.125rem;margin-left:auto;display:flex}.action-btn[data-v-e0bde88b]{width:26px;height:26px;color:var(--musea-text-muted);border-radius:var(--musea-radius-sm,4px);cursor:pointer;transition:background var(--musea-transition), color var(--musea-transition);background:0 0;border:none;justify-content:center;align-items:center;display:flex}.action-btn[data-v-e0bde88b]:hover{background:var(--musea-border);color:var(--musea-text)}.action-btn--danger[data-v-e0bde88b]:hover{color:#ef4444;background:#ef444426}.token-category[data-v-1ac32547]{margin-bottom:2.5rem}.token-subcategory[data-v-1ac32547]{margin-top:1.5rem;margin-bottom:0;margin-left:1rem}.category-title[data-v-1ac32547]{border-bottom:1px solid var(--musea-border);margin-bottom:1rem;padding-bottom:.5rem;font-weight:600}.category-title--h2[data-v-1ac32547]{font-size:1.125rem}.category-title--h3[data-v-1ac32547]{color:var(--musea-text-secondary);border-bottom:none;padding-bottom:0;font-size:.9375rem}.category-title--h4[data-v-1ac32547],.category-title--h5[data-v-1ac32547],.category-title--h6[data-v-1ac32547]{color:var(--musea-text-muted);border-bottom:none;padding-bottom:0;font-size:.875rem}.tokens-grid[data-v-1ac32547]{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem;display:grid}.modal-overlay[data-v-7a5c43ef]{z-index:1000;background:var(--musea-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content[data-v-7a5c43ef]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-lg,12px);width:90%;max-width:480px;max-height:85vh;box-shadow:var(--musea-shadow);padding:1.5rem;overflow-y:auto}.modal-header[data-v-7a5c43ef]{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.modal-title[data-v-7a5c43ef]{font-size:1.125rem;font-weight:700}.modal-close[data-v-7a5c43ef]{width:32px;height:32px;color:var(--musea-text-muted);border-radius:var(--musea-radius-sm,4px);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:flex}.modal-close[data-v-7a5c43ef]:hover{background:var(--musea-border);color:var(--musea-text)}.modal-form[data-v-7a5c43ef]{flex-direction:column;gap:1rem;display:flex}.form-field[data-v-7a5c43ef]{flex-direction:column;gap:.375rem;display:flex}.form-label[data-v-7a5c43ef]{color:var(--musea-text-muted);font-size:.8125rem;font-weight:600}.form-input[data-v-7a5c43ef]{background:var(--musea-bg-primary,#0d0d0d);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);color:var(--musea-text);transition:border-color var(--musea-transition);outline:none;padding:.5rem .75rem;font-size:.8125rem}.form-input[data-v-7a5c43ef]:focus{border-color:var(--musea-accent)}.form-input[data-v-7a5c43ef]:disabled{opacity:.5;cursor:not-allowed}.form-select[data-v-7a5c43ef]{cursor:pointer}.form-select option[data-v-7a5c43ef]{background:var(--musea-bg-secondary);color:var(--musea-text)}.tier-radio-group[data-v-7a5c43ef]{gap:.5rem;display:flex}.tier-radio[data-v-7a5c43ef]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);cursor:pointer;transition:all var(--musea-transition);flex:1;justify-content:center;align-items:center;padding:.5rem;display:flex}.tier-radio--active[data-v-7a5c43ef]{border-color:var(--musea-accent);background:#a348281a}.tier-radio-input[data-v-7a5c43ef]{display:none}.tier-radio-label[data-v-7a5c43ef]{font-size:.8125rem;font-weight:600}.reference-list[data-v-7a5c43ef]{flex-wrap:wrap;gap:.25rem;max-height:120px;margin-top:.25rem;display:flex;overflow-y:auto}.reference-option[data-v-7a5c43ef]{font-size:.6875rem;font-family:var(--musea-font-mono);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm,4px);color:var(--musea-text-muted);cursor:pointer;transition:all var(--musea-transition);background:0 0;padding:.25rem .5rem}.reference-option[data-v-7a5c43ef]:hover{border-color:var(--musea-accent);color:var(--musea-text)}.reference-option--selected[data-v-7a5c43ef]{border-color:var(--musea-accent);color:var(--musea-text);background:#a3482826}.form-error[data-v-7a5c43ef]{color:#ef4444;border-radius:var(--musea-radius-md);background:#ef44441a;padding:.5rem;font-size:.8125rem}.modal-footer[data-v-7a5c43ef]{justify-content:flex-end;gap:.5rem;margin-top:.5rem;display:flex}.btn[data-v-7a5c43ef]{border-radius:var(--musea-radius-md);cursor:pointer;transition:all var(--musea-transition);border:none;padding:.5rem 1rem;font-size:.8125rem;font-weight:600}.btn--secondary[data-v-7a5c43ef]{background:var(--musea-border);color:var(--musea-text)}.btn--secondary[data-v-7a5c43ef]:hover{background:var(--musea-text-muted)}.btn--primary[data-v-7a5c43ef]{background:var(--musea-accent);color:var(--musea-accent-contrast)}.btn--primary[data-v-7a5c43ef]:hover{filter:brightness(1.15)}.modal-enter-active[data-v-7a5c43ef],.modal-leave-active[data-v-7a5c43ef]{transition:opacity .2s}.modal-enter-active .modal-content[data-v-7a5c43ef],.modal-leave-active .modal-content[data-v-7a5c43ef]{transition:transform .2s}.modal-enter-from[data-v-7a5c43ef],.modal-leave-to[data-v-7a5c43ef]{opacity:0}.modal-enter-from .modal-content[data-v-7a5c43ef],.modal-leave-to .modal-content[data-v-7a5c43ef]{transform:scale(.95)}.modal-overlay[data-v-1f404894]{z-index:1000;background:color-mix(in srgb, var(--musea-overlay) 84%, #000 16%);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content[data-v-1f404894]{background:var(--musea-bg-secondary);border:1px solid color-mix(in srgb, var(--musea-border) 78%, var(--musea-text) 22%);border-radius:var(--musea-radius-lg,12px);width:90%;max-width:420px;box-shadow:0 0 0 1px color-mix(in srgb, var(--musea-bg-primary) 35%, transparent), 0 24px 64px #0000003d;padding:1.5rem}.modal-title[data-v-1f404894]{margin-bottom:1rem;font-size:1.125rem;font-weight:700}.delete-message[data-v-1f404894]{color:var(--musea-text);margin-bottom:1rem;font-size:.875rem}.token-path[data-v-1f404894]{font-family:var(--musea-font-mono);background:var(--musea-border);border-radius:var(--musea-radius-sm,4px);padding:.125rem .375rem;font-size:.8125rem}.dependents-warning[data-v-1f404894]{background:color-mix(in srgb, var(--musea-warning) 16%, var(--musea-bg-secondary) 84%);border:1px solid color-mix(in srgb, var(--musea-warning) 42%, var(--musea-border) 58%);border-radius:var(--musea-radius-md);color:var(--musea-text-secondary);gap:.75rem;margin-bottom:1rem;padding:.75rem;display:flex}.dependents-warning svg[data-v-1f404894]{color:var(--musea-warning);flex-shrink:0;margin-top:.125rem}.warning-text[data-v-1f404894]{margin-bottom:.375rem;font-size:.8125rem}.dependents-list[data-v-1f404894]{margin-bottom:.375rem;padding:0;list-style:none}.dependent-item[data-v-1f404894]{margin-bottom:.125rem;font-size:.75rem}.dependent-item code[data-v-1f404894]{font-family:var(--musea-font-mono)}.warning-note[data-v-1f404894]{opacity:.8;font-size:.75rem}.modal-footer[data-v-1f404894]{justify-content:flex-end;gap:.5rem;display:flex}.btn[data-v-1f404894]{border-radius:var(--musea-radius-md);cursor:pointer;transition:all var(--musea-transition);border:none;padding:.5rem 1rem;font-size:.8125rem;font-weight:600}.btn--secondary[data-v-1f404894]{background:var(--musea-border);color:var(--musea-text)}.btn--secondary[data-v-1f404894]:hover{background:var(--musea-text-muted)}.btn--danger[data-v-1f404894]{color:#fff;background:#ef4444}.btn--danger[data-v-1f404894]:hover{background:#dc2626}.modal-enter-active[data-v-1f404894],.modal-leave-active[data-v-1f404894]{transition:opacity .2s}.modal-enter-active .modal-content[data-v-1f404894],.modal-leave-active .modal-content[data-v-1f404894]{transition:transform .2s}.modal-enter-from[data-v-1f404894],.modal-leave-to[data-v-1f404894]{opacity:0}.modal-enter-from .modal-content[data-v-1f404894],.modal-leave-to .modal-content[data-v-1f404894]{transform:scale(.95)}.modal-overlay[data-v-a36b9116]{background:color-mix(in srgb, var(--musea-overlay) 84%, #000 16%);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:1000;justify-content:center;align-items:center;padding:2rem;display:flex;position:fixed;inset:0}.modal-panel[data-v-a36b9116]{background:var(--musea-bg-secondary);border:1px solid color-mix(in srgb, var(--musea-border) 78%, var(--musea-text) 22%);border-radius:var(--musea-radius-lg,12px);width:100%;max-width:640px;max-height:80vh;box-shadow:0 0 0 1px color-mix(in srgb, var(--musea-bg-primary) 35%, transparent), 0 24px 64px #0000003d;flex-direction:column;display:flex;overflow:hidden}.modal-header[data-v-a36b9116]{border-bottom:1px solid var(--musea-border);justify-content:space-between;align-items:flex-start;padding:1.25rem 1.5rem;display:flex}.modal-title[data-v-a36b9116]{margin-bottom:.25rem;font-size:1rem;font-weight:700}.modal-subtitle[data-v-a36b9116]{color:var(--musea-text-muted);font-size:.75rem}.modal-subtitle code[data-v-a36b9116]{font-family:var(--musea-font-mono);background:var(--musea-bg-secondary);border-radius:4px;padding:.125rem .375rem}.modal-value[data-v-a36b9116]{color:var(--musea-text-muted)}.modal-close[data-v-a36b9116]{width:28px;height:28px;color:var(--musea-text-muted);border-radius:var(--musea-radius-sm,4px);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.modal-close[data-v-a36b9116]:hover{background:var(--musea-border);color:var(--musea-text)}.modal-body[data-v-a36b9116]{padding:1rem 1.5rem;overflow-y:auto}.primitive-warning[data-v-a36b9116]{background:color-mix(in srgb, var(--musea-warning) 16%, var(--musea-bg-secondary) 84%);border:1px solid color-mix(in srgb, var(--musea-warning) 42%, var(--musea-border) 58%);border-radius:var(--musea-radius-md);color:var(--musea-text-secondary);align-items:flex-start;gap:.5rem;margin-bottom:.75rem;padding:.75rem 1rem;font-size:.8125rem;line-height:1.4;display:flex}.primitive-warning svg[data-v-a36b9116]{color:var(--musea-warning);flex-shrink:0;margin-top:.125rem}.no-usage[data-v-a36b9116]{text-align:center;color:var(--musea-text-muted);padding:2rem 0}.usage-list[data-v-a36b9116]{flex-direction:column;gap:.75rem;display:flex}.usage-entry[data-v-a36b9116]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);overflow:hidden}.usage-entry-header[data-v-a36b9116]{cursor:pointer;transition:background var(--musea-transition);justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.usage-entry-header[data-v-a36b9116]:hover{background:var(--musea-bg-secondary)}.usage-entry-info[data-v-a36b9116]{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.usage-entry-title[data-v-a36b9116]{font-size:.875rem;font-weight:600}.usage-category-badge[data-v-a36b9116]{color:#60a5fa;text-transform:uppercase;background:#3b82f626;border-radius:9999px;padding:.0625rem .375rem;font-size:.625rem;font-weight:600}.usage-match-count[data-v-a36b9116]{color:var(--musea-text-muted);font-size:.75rem}.expand-icon[data-v-a36b9116]{color:var(--musea-text-muted);flex-shrink:0;transition:transform .2s}.expand-icon--open[data-v-a36b9116]{transform:rotate(180deg)}.usage-matches[data-v-a36b9116]{border-top:1px solid var(--musea-border);background:var(--musea-bg-secondary);padding:.5rem 1rem}.usage-match-line[data-v-a36b9116]{align-items:baseline;gap:.75rem;padding:.25rem 0;font-size:.75rem;display:flex}.match-line-number[data-v-a36b9116]{color:var(--musea-text-muted);font-family:var(--musea-font-mono);text-align:right;flex-shrink:0;min-width:2rem}.match-line-content[data-v-a36b9116]{font-family:var(--musea-font-mono);word-break:break-all;flex:1;min-width:0;font-size:.75rem}.match-property[data-v-a36b9116]{color:var(--musea-accent);font-size:.625rem;font-family:var(--musea-font-mono);flex-shrink:0}.usage-entry-actions[data-v-a36b9116]{border-top:1px solid var(--musea-border);gap:.5rem;padding:.5rem 1rem;display:flex}.usage-action-btn[data-v-a36b9116]{border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm,4px);color:var(--musea-text-muted);cursor:pointer;transition:border-color var(--musea-transition), color var(--musea-transition);background:0 0;padding:.25rem .75rem;font-size:.75rem;font-weight:500}.usage-action-btn[data-v-a36b9116]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.usage-action-btn--edit[data-v-a36b9116]:hover{border-color:var(--musea-accent);color:var(--musea-accent)}.modal-enter-active[data-v-a36b9116],.modal-leave-active[data-v-a36b9116]{transition:opacity .2s}.modal-enter-active .modal-panel[data-v-a36b9116],.modal-leave-active .modal-panel[data-v-a36b9116]{transition:transform .2s}.modal-enter-from[data-v-a36b9116],.modal-leave-to[data-v-a36b9116]{opacity:0}.modal-enter-from .modal-panel[data-v-a36b9116],.modal-leave-to .modal-panel[data-v-a36b9116]{transform:scale(.95)}.modal-overlay[data-v-382c46ee]{background:var(--musea-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;justify-content:center;align-items:center;padding:2rem;display:flex;position:fixed;inset:0}.modal-panel[data-v-382c46ee]{background:var(--musea-bg);border:1px solid var(--musea-border);border-radius:var(--musea-radius-lg,12px);width:100%;max-width:900px;max-height:90vh;box-shadow:var(--musea-shadow);flex-direction:column;display:flex;overflow:hidden}.modal-header[data-v-382c46ee]{border-bottom:1px solid var(--musea-border);justify-content:space-between;align-items:flex-start;padding:1.25rem 1.5rem;display:flex}.modal-title[data-v-382c46ee]{margin-bottom:.125rem;font-size:1rem;font-weight:700}.modal-subtitle[data-v-382c46ee]{color:var(--musea-text-muted);font-size:.75rem;font-family:var(--musea-font-mono)}.modal-close[data-v-382c46ee]{width:28px;height:28px;color:var(--musea-text-muted);border-radius:var(--musea-radius-sm,4px);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.modal-close[data-v-382c46ee]:hover{background:var(--musea-border);color:var(--musea-text)}.modal-body[data-v-382c46ee]{flex-direction:column;flex:1;padding:1rem 1.5rem;display:flex;overflow:hidden}.editor-loading[data-v-382c46ee]{text-align:center;color:var(--musea-text-muted);padding:3rem 0}.editor-error[data-v-382c46ee]{color:#ef4444;margin-top:.5rem;font-size:.75rem}.modal-footer[data-v-382c46ee]{border-top:1px solid var(--musea-border);justify-content:space-between;align-items:center;padding:.75rem 1.5rem;display:flex}.save-hint[data-v-382c46ee]{color:var(--musea-text-muted);font-size:.6875rem}.modal-footer-actions[data-v-382c46ee]{gap:.5rem;display:flex}.btn[data-v-382c46ee]{border-radius:var(--musea-radius-sm,4px);cursor:pointer;border:1px solid var(--musea-border);transition:all var(--musea-transition);padding:.375rem 1rem;font-size:.8125rem;font-weight:500}.btn--secondary[data-v-382c46ee]{color:var(--musea-text-muted);background:0 0}.btn--secondary[data-v-382c46ee]:hover{border-color:var(--musea-text-muted);color:var(--musea-text)}.btn--primary[data-v-382c46ee]{background:var(--musea-accent);color:var(--musea-accent-contrast);border-color:var(--musea-accent)}.btn--primary[data-v-382c46ee]:hover:not(:disabled){filter:brightness(1.15)}.btn--primary[data-v-382c46ee]:disabled{opacity:.5;cursor:not-allowed}.modal-enter-active[data-v-382c46ee],.modal-leave-active[data-v-382c46ee]{transition:opacity .2s}.modal-enter-active .modal-panel[data-v-382c46ee],.modal-leave-active .modal-panel[data-v-382c46ee]{transition:transform .2s}.modal-enter-from[data-v-382c46ee],.modal-leave-to[data-v-382c46ee]{opacity:0}.modal-enter-from .modal-panel[data-v-382c46ee],.modal-leave-to .modal-panel[data-v-382c46ee]{transform:scale(.95)}.tokens-view[data-v-3941fae0]{max-width:1400px;margin:0 auto;padding:2rem}.tokens-header[data-v-3941fae0]{margin-bottom:2rem}.tokens-header-top[data-v-3941fae0]{justify-content:space-between;align-items:flex-start;margin-bottom:1rem;display:flex}.tokens-title[data-v-3941fae0]{margin-bottom:.5rem;font-size:1.5rem;font-weight:700}.tokens-description[data-v-3941fae0]{color:var(--musea-text-muted);font-size:.9375rem}.add-token-btn[data-v-3941fae0]{background:var(--musea-accent);color:var(--musea-accent-contrast);border-radius:var(--musea-radius-md);cursor:pointer;transition:filter var(--musea-transition);white-space:nowrap;border:none;align-items:center;gap:.375rem;padding:.5rem 1rem;font-size:.8125rem;font-weight:600;display:flex}.add-token-btn[data-v-3941fae0]:hover{filter:brightness(1.15)}.tokens-toolbar[data-v-3941fae0]{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.tab-bar[data-v-3941fae0]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);gap:.25rem;padding:.25rem;display:flex}.tab-btn[data-v-3941fae0]{color:var(--musea-text-muted);border-radius:calc(var(--musea-radius-md) - 2px);cursor:pointer;transition:all var(--musea-transition);background:0 0;border:none;align-items:center;gap:.375rem;padding:.375rem .75rem;font-size:.8125rem;font-weight:500;display:flex}.tab-btn[data-v-3941fae0]:hover{color:var(--musea-text)}.tab-btn--active[data-v-3941fae0]{background:var(--musea-border);color:var(--musea-text);font-weight:600}.tab-count[data-v-3941fae0]{background:var(--musea-border);color:var(--musea-text-muted);border-radius:9999px;padding:0 .375rem;font-size:.6875rem}.tab-btn--active .tab-count[data-v-3941fae0]{background:var(--musea-text-muted);color:var(--musea-bg-secondary)}.tokens-filter[data-v-3941fae0]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);min-width:200px;max-width:400px;color:var(--musea-text);transition:border-color var(--musea-transition);outline:none;flex:1;padding:.5rem .75rem;font-size:.8125rem}.tokens-filter[data-v-3941fae0]:focus{border-color:var(--musea-accent)}.tokens-loading[data-v-3941fae0]{min-height:200px;color:var(--musea-text-muted);justify-content:center;align-items:center;gap:.75rem;display:flex}.loading-spinner[data-v-3941fae0]{border:2px solid var(--musea-border);border-top-color:var(--musea-accent);border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-3941fae0}@keyframes spin-3941fae0{to{transform:rotate(360deg)}}.tokens-empty[data-v-3941fae0]{text-align:center;min-height:300px;color:var(--musea-text-muted);flex-direction:column;justify-content:center;align-items:center;gap:1rem;display:flex}.test-summary[data-v-44c9837f]{max-width:1000px;margin:0 auto;padding:1.5rem}.summary-header[data-v-44c9837f]{margin-bottom:1.5rem}.summary-title[data-v-44c9837f]{margin-bottom:.25rem;font-size:1.25rem;font-weight:700}.summary-subtitle[data-v-44c9837f]{color:var(--musea-text-muted);font-size:.875rem}.summary-stats[data-v-44c9837f]{flex-wrap:wrap;gap:1rem;margin-bottom:1rem;display:flex}.stat[data-v-44c9837f]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-md);text-align:center;min-width:100px;padding:1rem 1.5rem}.stat-value[data-v-44c9837f]{font-variant-numeric:tabular-nums;font-size:1.75rem;font-weight:700}.stat-label[data-v-44c9837f]{color:var(--musea-text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem}.stat.total .stat-value[data-v-44c9837f]{color:var(--musea-text)}.stat.passed .stat-value[data-v-44c9837f]{color:#4ade80}.stat.failed .stat-value[data-v-44c9837f]{color:#f87171}.stat.pending .stat-value[data-v-44c9837f]{color:#7b8494}.stat.violations .stat-value[data-v-44c9837f]{color:#fb923c}.violation-breakdown[data-v-44c9837f]{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.violation-badge[data-v-44c9837f]{border-radius:var(--musea-radius-sm);padding:.25rem .5rem;font-size:.75rem;font-weight:600}.violation-badge.critical[data-v-44c9837f]{color:#f87171;background:#f8717126}.violation-badge.serious[data-v-44c9837f]{color:#fb923c;background:#fb923c26}.violation-badge.moderate[data-v-44c9837f]{color:#fbbf24;background:#fbbf2426}.violation-badge.minor[data-v-44c9837f]{color:#60a5fa;background:#60a5fa26}.summary-actions[data-v-44c9837f]{margin-bottom:1.5rem}.run-all-btn[data-v-44c9837f]{background:var(--musea-accent);border-radius:var(--musea-radius-md);color:var(--musea-accent-contrast);cursor:pointer;transition:all var(--musea-transition);border:none;align-items:center;gap:.5rem;padding:.75rem 1.5rem;font-size:.875rem;font-weight:600;display:flex}.run-all-btn[data-v-44c9837f]:hover:not(:disabled){background:var(--musea-accent-hover)}.run-all-btn[data-v-44c9837f]:disabled{opacity:.7;cursor:not-allowed}.test-list[data-v-44c9837f]{flex-direction:column;gap:.5rem;display:flex}.test-item[data-v-44c9837f]{background:var(--musea-bg-secondary);border:1px solid var(--musea-border);border-radius:var(--musea-radius-sm);transition:all var(--musea-transition);cursor:pointer;align-items:center;gap:.75rem;padding:.75rem 1rem;display:flex}.test-item[data-v-44c9837f]:hover{background:var(--musea-bg-tertiary);border-color:var(--musea-text-muted)}.test-nav-icon[data-v-44c9837f]{color:var(--musea-text-muted);opacity:0;transition:opacity var(--musea-transition);flex-shrink:0}.test-item:hover .test-nav-icon[data-v-44c9837f]{opacity:1}.test-item.running[data-v-44c9837f]{background:#fbbf240d;border-color:#fbbf24}.test-item.passed[data-v-44c9837f]{border-color:#4ade804d}.test-item.failed[data-v-44c9837f]{border-color:#f871714d}.test-status[data-v-44c9837f]{text-align:center;width:20px;font-size:1rem;font-weight:700}.test-info[data-v-44c9837f]{flex:1;min-width:0}.test-name[data-v-44c9837f]{font-size:.875rem;font-weight:500}.test-violations[data-v-44c9837f]{flex-wrap:wrap;gap:.375rem;margin-top:.375rem;display:flex}.violation-tag[data-v-44c9837f]{border-radius:var(--musea-radius-sm);font-size:.6875rem;font-family:var(--musea-font-mono);border:1px solid;padding:.125rem .375rem}.more-violations[data-v-44c9837f]{color:var(--musea-text-muted);font-size:.6875rem}.test-counts[data-v-44c9837f]{gap:.75rem;font-size:.75rem;display:flex}.count[data-v-44c9837f]{color:var(--musea-text-muted)}.count.violations[data-v-44c9837f]{color:#f87171}.count.passes[data-v-44c9837f]{color:#4ade80}.hidden-iframes[data-v-44c9837f]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute;overflow:hidden}.hidden-iframes iframe[data-v-44c9837f]{border:none;width:1280px;height:720px}@keyframes spin-44c9837f{to{transform:rotate(360deg)}}.spin[data-v-44c9837f]{animation:1s linear infinite spin-44c9837f}:root{--musea-bg-primary:#e6e2d6;--musea-bg-secondary:#ddd9cd;--musea-bg-tertiary:#d4d0c4;--musea-bg-elevated:#e6e2d6;--musea-accent:#121212;--musea-accent-hover:#2a2a2a;--musea-accent-contrast:#e6e2d6;--musea-accent-subtle:#12121214;--musea-text:#121212;--musea-text-secondary:#3a3a3a;--musea-text-muted:#6b6b6b;--musea-border:#c8c4b8;--musea-border-subtle:#d4d0c4;--musea-success:#16a34a;--musea-error:#dc2626;--musea-info:#2563eb;--musea-warning:#d97706;--musea-shadow:0 4px 24px #00000014;--musea-overlay:#12121299;--musea-radius-sm:4px;--musea-radius-md:6px;--musea-radius-lg:8px;--musea-transition:.15s ease;--musea-font-sans:"Helvetica Neue", Helvetica, Arial, sans-serif;--musea-font-mono:"JetBrains Mono", "SF Mono", "Fira Code", monospace;--musea-sidebar-width:260px;--musea-header-height:56px}[data-musea-theme=light]{--musea-bg-primary:#e6e2d6;--musea-bg-secondary:#ddd9cd;--musea-bg-tertiary:#d4d0c4;--musea-bg-elevated:#e6e2d6;--musea-accent:#121212;--musea-accent-hover:#2a2a2a;--musea-accent-contrast:#e6e2d6;--musea-accent-subtle:#12121214;--musea-text:#121212;--musea-text-secondary:#3a3a3a;--musea-text-muted:#6b6b6b;--musea-border:#c8c4b8;--musea-border-subtle:#d4d0c4;--musea-success:#16a34a;--musea-error:#dc2626;--musea-info:#2563eb;--musea-warning:#d97706;--musea-shadow:0 4px 24px #00000014;--musea-overlay:#12121299}[data-musea-theme=dark]{--musea-bg-primary:#121212;--musea-bg-secondary:#1a1a1a;--musea-bg-tertiary:#242424;--musea-bg-elevated:#2a2a2a;--musea-accent:#e6e2d6;--musea-accent-hover:#d4d0c4;--musea-accent-contrast:#121212;--musea-accent-subtle:#e6e2d61a;--musea-text:#e6e2d6;--musea-text-secondary:#c4c1b6;--musea-text-muted:#8a8880;--musea-border:#2e2e2e;--musea-border-subtle:#232323;--musea-success:#4ade80;--musea-error:#f87171;--musea-info:#60a5fa;--musea-warning:#fbbf24;--musea-shadow:0 4px 24px #0006;--musea-overlay:#000000d9}@media (prefers-color-scheme:dark){[data-musea-theme=system]{--musea-bg-primary:#121212;--musea-bg-secondary:#1a1a1a;--musea-bg-tertiary:#242424;--musea-bg-elevated:#2a2a2a;--musea-accent:#e6e2d6;--musea-accent-hover:#d4d0c4;--musea-accent-contrast:#121212;--musea-accent-subtle:#e6e2d61a;--musea-text:#e6e2d6;--musea-text-secondary:#c4c1b6;--musea-text-muted:#8a8880;--musea-border:#2e2e2e;--musea-border-subtle:#232323;--musea-success:#4ade80;--musea-error:#f87171;--musea-info:#60a5fa;--musea-warning:#fbbf24;--musea-shadow:0 4px 24px #0006;--musea-overlay:#000000d9}}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden}body{font-family:var(--musea-font-sans);background:var(--musea-bg-primary);color:var(--musea-text);-webkit-font-smoothing:antialiased;line-height:1.5}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--musea-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--musea-text-muted)}a{color:inherit;text-decoration:none}button{font-family:inherit}body.musea-actions-resizing iframe,body.musea-sidebar-resizing iframe{pointer-events:none!important}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}[data-musea-theme=light] .hljs,:root .hljs{color:#121212;background:#d4d0c4}[data-musea-theme=light] .hljs-doctag,[data-musea-theme=light] .hljs-keyword,[data-musea-theme=light] .hljs-meta .hljs-keyword,[data-musea-theme=light] .hljs-template-tag,[data-musea-theme=light] .hljs-template-variable,[data-musea-theme=light] .hljs-type,[data-musea-theme=light] .hljs-variable.language_,:root .hljs-doctag,:root .hljs-keyword,:root .hljs-meta .hljs-keyword,:root .hljs-template-tag,:root .hljs-template-variable,:root .hljs-type,:root .hljs-variable.language_{color:#73603e}[data-musea-theme=light] .hljs-title,[data-musea-theme=light] .hljs-title.class_,[data-musea-theme=light] .hljs-title.class_.inherited__,[data-musea-theme=light] .hljs-title.function_,:root .hljs-title,:root .hljs-title.class_,:root .hljs-title.class_.inherited__,:root .hljs-title.function_{color:#6b5090}[data-musea-theme=light] .hljs-attr,[data-musea-theme=light] .hljs-attribute,[data-musea-theme=light] .hljs-literal,[data-musea-theme=light] .hljs-meta,[data-musea-theme=light] .hljs-number,[data-musea-theme=light] .hljs-operator,[data-musea-theme=light] .hljs-variable,[data-musea-theme=light] .hljs-selector-attr,[data-musea-theme=light] .hljs-selector-class,[data-musea-theme=light] .hljs-selector-id,:root .hljs-attr,:root .hljs-attribute,:root .hljs-literal,:root .hljs-meta,:root .hljs-number,:root .hljs-operator,:root .hljs-variable,:root .hljs-selector-attr,:root .hljs-selector-class,:root .hljs-selector-id{color:#4a6b8a}[data-musea-theme=light] .hljs-regexp,[data-musea-theme=light] .hljs-string,[data-musea-theme=light] .hljs-meta .hljs-string,:root .hljs-regexp,:root .hljs-string,:root .hljs-meta .hljs-string{color:#486040}[data-musea-theme=light] .hljs-built_in,[data-musea-theme=light] .hljs-symbol,:root .hljs-built_in,:root .hljs-symbol{color:#8b7040}[data-musea-theme=light] .hljs-comment,[data-musea-theme=light] .hljs-code,[data-musea-theme=light] .hljs-formula,:root .hljs-comment,:root .hljs-code,:root .hljs-formula{color:#9a9590}[data-musea-theme=light] .hljs-name,[data-musea-theme=light] .hljs-quote,[data-musea-theme=light] .hljs-selector-tag,[data-musea-theme=light] .hljs-selector-pseudo,:root .hljs-name,:root .hljs-quote,:root .hljs-selector-tag,:root .hljs-selector-pseudo{color:#2d6a35}[data-musea-theme=light] .hljs-subst,:root .hljs-subst{color:#121212}[data-musea-theme=light] .hljs-section,:root .hljs-section{color:#4a6b8a;font-weight:700}[data-musea-theme=light] .hljs-bullet,:root .hljs-bullet{color:#6b5020}[data-musea-theme=light] .hljs-emphasis,:root .hljs-emphasis{color:#121212;font-style:italic}[data-musea-theme=light] .hljs-strong,:root .hljs-strong{color:#121212;font-weight:700}[data-musea-theme=light] .hljs-addition,:root .hljs-addition{color:#2d6a35;background-color:#2d6a351a}[data-musea-theme=light] .hljs-deletion,:root .hljs-deletion{color:#a04040;background-color:#a040401a}@media (prefers-color-scheme:light){[data-musea-theme=system] .hljs{color:#121212;background:#d4d0c4}[data-musea-theme=system] .hljs-doctag,[data-musea-theme=system] .hljs-keyword,[data-musea-theme=system] .hljs-meta .hljs-keyword,[data-musea-theme=system] .hljs-template-tag,[data-musea-theme=system] .hljs-template-variable,[data-musea-theme=system] .hljs-type,[data-musea-theme=system] .hljs-variable.language_{color:#73603e}[data-musea-theme=system] .hljs-title,[data-musea-theme=system] .hljs-title.class_,[data-musea-theme=system] .hljs-title.class_.inherited__,[data-musea-theme=system] .hljs-title.function_{color:#6b5090}[data-musea-theme=system] .hljs-attr,[data-musea-theme=system] .hljs-attribute,[data-musea-theme=system] .hljs-literal,[data-musea-theme=system] .hljs-meta,[data-musea-theme=system] .hljs-number,[data-musea-theme=system] .hljs-operator,[data-musea-theme=system] .hljs-variable,[data-musea-theme=system] .hljs-selector-attr,[data-musea-theme=system] .hljs-selector-class,[data-musea-theme=system] .hljs-selector-id{color:#4a6b8a}[data-musea-theme=system] .hljs-regexp,[data-musea-theme=system] .hljs-string,[data-musea-theme=system] .hljs-meta .hljs-string{color:#486040}[data-musea-theme=system] .hljs-built_in,[data-musea-theme=system] .hljs-symbol{color:#8b7040}[data-musea-theme=system] .hljs-comment,[data-musea-theme=system] .hljs-code,[data-musea-theme=system] .hljs-formula{color:#9a9590}[data-musea-theme=system] .hljs-name,[data-musea-theme=system] .hljs-quote,[data-musea-theme=system] .hljs-selector-tag,[data-musea-theme=system] .hljs-selector-pseudo{color:#2d6a35}[data-musea-theme=system] .hljs-subst{color:#121212}[data-musea-theme=system] .hljs-section{color:#4a6b8a;font-weight:700}[data-musea-theme=system] .hljs-bullet{color:#6b5020}[data-musea-theme=system] .hljs-emphasis{color:#121212;font-style:italic}[data-musea-theme=system] .hljs-strong{color:#121212;font-weight:700}[data-musea-theme=system] .hljs-addition{color:#2d6a35;background-color:#2d6a351a}[data-musea-theme=system] .hljs-deletion{color:#a04040;background-color:#a040401a}}
@@ -1 +0,0 @@
1
- {"version":3,"file":"gallery-DIBlUrB6.mjs","names":["stylesBase","stylesLayout","stylesComponents"],"sources":["../src/security.ts","../src/gallery/styles-base.css?inline","../src/gallery/styles-layout.css?inline","../src/gallery/styles-components.css?inline","../src/gallery/styles.ts","../src/gallery/template.ts","../src/gallery/index.ts"],"sourcesContent":["import { randomBytes, timingSafeEqual } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport type { IncomingMessage } from \"node:http\";\nimport path from \"node:path\";\n\nexport const DEFAULT_API_BODY_LIMIT_BYTES = 1024 * 1024;\n\nexport class HttpError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.name = \"HttpError\";\n this.status = status;\n }\n}\n\nexport function createDevSessionToken(): string {\n return randomBytes(32).toString(\"base64url\");\n}\n\nfunction realpathNearest(targetPath: string): string {\n let current = path.resolve(targetPath);\n const missingParts: string[] = [];\n\n while (true) {\n try {\n const real = fs.realpathSync.native(current);\n return missingParts.length > 0 ? path.join(real, ...missingParts.reverse()) : real;\n } catch {\n const parent = path.dirname(current);\n if (parent === current) {\n return path.resolve(targetPath);\n }\n missingParts.push(path.basename(current));\n current = parent;\n }\n }\n}\n\nfunction isResolvedPathInside(parentDir: string, candidatePath: string): boolean {\n const parent = path.resolve(parentDir);\n const candidate = path.resolve(candidatePath);\n const relative = path.relative(parent, candidate);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nexport function isPathInside(parentDir: string, candidatePath: string): boolean {\n return isResolvedPathInside(realpathNearest(parentDir), realpathNearest(candidatePath));\n}\n\nexport function isPathInsideAny(parentDirs: string[], candidatePath: string): boolean {\n const candidate = realpathNearest(candidatePath);\n return parentDirs.some((parentDir) =>\n isResolvedPathInside(realpathNearest(parentDir), candidate),\n );\n}\n\nexport function resolveInside(parentDir: string, candidatePath: string, label = \"path\"): string {\n return resolveInsideAny([parentDir], candidatePath, label);\n}\n\nexport function resolveInsideAny(\n parentDirs: string[],\n candidatePath: string,\n label = \"path\",\n): string {\n if (candidatePath.includes(\"\\0\")) {\n throw new HttpError(`${label} contains an invalid character`, 400);\n }\n\n if (parentDirs.length === 0) {\n throw new HttpError(`No allowed directories configured for ${label}`, 500);\n }\n\n const parent = path.resolve(parentDirs[0] ?? \".\");\n const resolved = path.isAbsolute(candidatePath)\n ? path.resolve(candidatePath)\n : path.resolve(parent, candidatePath);\n\n if (!isPathInsideAny(parentDirs, resolved)) {\n throw new HttpError(`${label} escapes the allowed directory`, 400);\n }\n\n return resolved;\n}\n\nexport function resolveUrlPathInside(\n parentDir: string,\n requestUrl: string,\n label = \"path\",\n): string {\n const rawPath = requestUrl.split(/[?#]/, 1)[0] || \"/\";\n let pathname = decodeUrlComponent(rawPath, label);\n\n pathname = pathname.replaceAll(\"\\\\\", \"/\");\n if (pathname.split(\"/\").includes(\"..\")) {\n throw new HttpError(`${label} must not contain parent directory segments`, 400);\n }\n\n const relativePath = `.${pathname}`;\n return resolveInside(parentDir, relativePath, label);\n}\n\nexport function decodeUrlComponent(value: string, label = \"path\"): string {\n try {\n return decodeURIComponent(value);\n } catch {\n throw new HttpError(`${label} is not valid URL encoding`, 400);\n }\n}\n\nexport function collectRequestBody(\n req: IncomingMessage,\n limit = DEFAULT_API_BODY_LIMIT_BYTES,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n let body = \"\";\n let size = 0;\n let completed = false;\n\n req.on(\"data\", (chunk: Buffer | string) => {\n if (completed) return;\n\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n size += buffer.byteLength;\n if (size > limit) {\n completed = true;\n reject(new HttpError(`Request body exceeds ${limit} bytes`, 413));\n return;\n }\n\n body += buffer.toString(\"utf-8\");\n });\n\n req.on(\"end\", () => {\n if (!completed) {\n completed = true;\n resolve(body);\n }\n });\n\n req.on(\"error\", (error) => {\n if (!completed) {\n completed = true;\n reject(error);\n }\n });\n });\n}\n\nexport function parseJsonBody<T = unknown>(body: string): T {\n try {\n return JSON.parse(body) as T;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new HttpError(\"Malformed JSON body\", 400);\n }\n throw error;\n }\n}\n\nexport function validateDevApiRequest(\n req: IncomingMessage,\n sessionToken: string,\n): HttpError | null {\n const originError = validateOrigin(req);\n if (originError) return originError;\n\n if (!isUnsafeMethod(req.method)) {\n return null;\n }\n\n if (!hasValidSessionToken(req, sessionToken)) {\n return new HttpError(\"Invalid Musea dev session token\", 403);\n }\n\n if (!isJsonRequest(req)) {\n return new HttpError(\"Content-Type must be application/json\", 415);\n }\n\n return null;\n}\n\nexport function serializeScriptValue(value: unknown): string {\n return (JSON.stringify(value) ?? \"undefined\").replace(/[<>&\\u2028\\u2029]/g, (char) => {\n switch (char) {\n case \"<\":\n return \"\\\\u003C\";\n case \">\":\n return \"\\\\u003E\";\n case \"&\":\n return \"\\\\u0026\";\n case \"\\u2028\":\n return \"\\\\u2028\";\n case \"\\u2029\":\n return \"\\\\u2029\";\n default:\n return char;\n }\n });\n}\n\nfunction isUnsafeMethod(method: string | undefined): boolean {\n return method === \"POST\" || method === \"PUT\" || method === \"PATCH\" || method === \"DELETE\";\n}\n\nfunction isJsonRequest(req: IncomingMessage): boolean {\n const contentType = getHeader(req, \"content-type\");\n return contentType?.split(\";\")[0]?.trim().toLowerCase() === \"application/json\";\n}\n\nfunction validateOrigin(req: IncomingMessage): HttpError | null {\n const secFetchSite = getHeader(req, \"sec-fetch-site\");\n if (secFetchSite === \"cross-site\") {\n return new HttpError(\"Cross-origin Musea API requests are not allowed\", 403);\n }\n\n const origin = getHeader(req, \"origin\");\n if (!origin) return null;\n\n const host = getHeader(req, \"host\");\n if (!host) {\n return new HttpError(\"Missing Host header\", 400);\n }\n\n try {\n const originUrl = new URL(origin);\n if (originUrl.host !== host) {\n return new HttpError(\"Cross-origin Musea API requests are not allowed\", 403);\n }\n } catch {\n return new HttpError(\"Invalid Origin header\", 400);\n }\n\n return null;\n}\n\nfunction hasValidSessionToken(req: IncomingMessage, expectedToken: string): boolean {\n const actualToken = getHeader(req, \"x-musea-session\");\n if (!actualToken) return false;\n\n const actual = Buffer.from(actualToken);\n const expected = Buffer.from(expectedToken);\n return actual.length === expected.length && timingSafeEqual(actual, expected);\n}\n\nfunction getHeader(req: IncomingMessage, name: string): string | undefined {\n const value = req.headers[name];\n if (Array.isArray(value)) return value[0];\n return value;\n}\n",":root {\n --musea-bg-primary: #e6e2d6;\n --musea-bg-secondary: #ddd9cd;\n --musea-bg-tertiary: #d4d0c4;\n --musea-bg-elevated: #e6e2d6;\n --musea-accent: #121212;\n --musea-accent-hover: #2a2a2a;\n --musea-accent-subtle: rgba(18, 18, 18, 0.08);\n --musea-text: #121212;\n --musea-text-secondary: #3a3a3a;\n --musea-text-muted: #6b6b6b;\n --musea-border: #c8c4b8;\n --musea-border-subtle: #d4d0c4;\n --musea-success: #16a34a;\n --musea-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);\n --musea-radius-sm: 4px;\n --musea-radius-md: 6px;\n --musea-radius-lg: 8px;\n --musea-transition: 0.15s ease;\n}\n\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n background: var(--musea-bg-primary);\n color: var(--musea-text);\n min-height: 100vh;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n}\n","/* Header */\n.header {\n background: var(--musea-bg-secondary);\n border-bottom: 1px solid var(--musea-border);\n padding: 0 1.5rem;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: sticky;\n top: 0;\n z-index: 100;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n}\n\n.logo {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 1.125rem;\n font-weight: 700;\n color: var(--musea-accent);\n text-decoration: none;\n}\n\n.logo-svg {\n width: 32px;\n height: 32px;\n flex-shrink: 0;\n}\n\n.logo-icon svg {\n width: 16px;\n height: 16px;\n color: var(--musea-text);\n}\n\n.header-subtitle {\n color: var(--musea-text-muted);\n font-size: 0.8125rem;\n font-weight: 500;\n padding-left: 1.5rem;\n border-left: 1px solid var(--musea-border);\n}\n\n.search-container {\n position: relative;\n width: 280px;\n}\n\n.search-input {\n width: 100%;\n background: var(--musea-bg-tertiary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-md);\n padding: 0.5rem 0.75rem 0.5rem 2.25rem;\n color: var(--musea-text);\n font-size: 0.8125rem;\n outline: none;\n transition:\n border-color var(--musea-transition),\n background var(--musea-transition);\n}\n\n.search-input::placeholder {\n color: var(--musea-text-muted);\n}\n\n.search-input:focus {\n border-color: var(--musea-accent);\n background: var(--musea-bg-elevated);\n}\n\n.search-icon {\n position: absolute;\n left: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n color: var(--musea-text-muted);\n pointer-events: none;\n}\n\n/* Layout */\n.main {\n display: grid;\n grid-template-columns: 260px 1fr;\n min-height: calc(100vh - 56px);\n}\n\n/* Sidebar */\n.sidebar {\n background: var(--musea-bg-secondary);\n border-right: 1px solid var(--musea-border);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.sidebar::-webkit-scrollbar {\n width: 6px;\n}\n\n.sidebar::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.sidebar::-webkit-scrollbar-thumb {\n background: var(--musea-border);\n border-radius: 3px;\n}\n\n.sidebar-section {\n padding: 0.75rem;\n}\n\n.category-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.625rem 0.75rem;\n font-size: 0.6875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--musea-text-muted);\n cursor: pointer;\n user-select: none;\n border-radius: var(--musea-radius-sm);\n transition: background var(--musea-transition);\n}\n\n.category-header:hover {\n background: var(--musea-bg-tertiary);\n}\n\n.category-icon {\n width: 16px;\n height: 16px;\n transition: transform var(--musea-transition);\n}\n\n.category-header.collapsed .category-icon {\n transform: rotate(-90deg);\n}\n\n.category-count {\n margin-left: auto;\n background: var(--musea-bg-tertiary);\n padding: 0.125rem 0.375rem;\n border-radius: 4px;\n font-size: 0.625rem;\n}\n\n.art-list {\n list-style: none;\n margin-top: 0.25rem;\n}\n\n.art-item {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n padding: 0.5rem 0.75rem 0.5rem 1.75rem;\n border-radius: var(--musea-radius-sm);\n cursor: pointer;\n font-size: 0.8125rem;\n color: var(--musea-text-secondary);\n transition: all var(--musea-transition);\n position: relative;\n}\n\n.art-item::before {\n content: \"\";\n position: absolute;\n left: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--musea-border);\n transition: background var(--musea-transition);\n}\n\n.art-item:hover {\n background: var(--musea-bg-tertiary);\n color: var(--musea-text);\n}\n\n.art-item:hover::before {\n background: var(--musea-text-muted);\n}\n\n.art-item.active {\n background: var(--musea-accent-subtle);\n color: var(--musea-accent-hover);\n}\n\n.art-item.active::before {\n background: var(--musea-accent);\n}\n\n.art-variant-count {\n margin-left: auto;\n font-size: 0.6875rem;\n color: var(--musea-text-muted);\n opacity: 0;\n transition: opacity var(--musea-transition);\n}\n\n.art-item:hover .art-variant-count {\n opacity: 1;\n}\n\n/* Content */\n.content {\n background: var(--musea-bg-primary);\n overflow-y: auto;\n}\n\n.content-inner {\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n.content-header {\n margin-bottom: 2rem;\n}\n\n.content-title {\n font-size: 1.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n}\n\n.content-description {\n color: var(--musea-text-muted);\n font-size: 0.9375rem;\n max-width: 600px;\n}\n\n.content-meta {\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-top: 1rem;\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.25rem 0.625rem;\n background: var(--musea-bg-secondary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-sm);\n font-size: 0.75rem;\n color: var(--musea-text-muted);\n}\n\n.meta-tag svg {\n width: 12px;\n height: 12px;\n}\n","/* Gallery Grid */\n.gallery {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 1.25rem;\n}\n\n/* Variant Card */\n.variant-card {\n background: var(--musea-bg-secondary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-lg);\n overflow: hidden;\n}\n\n.variant-preview {\n aspect-ratio: 16 / 7;\n background: var(--musea-bg-tertiary);\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n}\n\n.variant-preview iframe {\n width: 70%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n border: none;\n background: white;\n border-radius: var(--musea-radius-md);\n box-shadow: 0 12px 30px rgba(13, 13, 13, 0.12);\n}\n\n.variant-preview-placeholder {\n color: var(--musea-text-muted);\n font-size: 0.8125rem;\n text-align: center;\n padding: 1rem;\n}\n\n.variant-preview-code {\n font-family: \"JetBrains Mono\", \"SF Mono\", \"Fira Code\", monospace;\n font-size: 0.75rem;\n color: var(--musea-text-muted);\n background: var(--musea-bg-primary);\n padding: 1rem;\n overflow: auto;\n max-height: 100%;\n width: 100%;\n}\n\n.variant-info {\n padding: 1rem;\n border-top: 1px solid var(--musea-border);\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.variant-name {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n.variant-badge {\n font-size: 0.625rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n padding: 0.1875rem 0.5rem;\n border-radius: 4px;\n background: var(--musea-accent-subtle);\n color: var(--musea-accent);\n}\n\n.variant-actions {\n display: flex;\n gap: 0.5rem;\n}\n\n.variant-action-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: var(--musea-bg-tertiary);\n border-radius: var(--musea-radius-sm);\n color: var(--musea-text-muted);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all var(--musea-transition);\n}\n\n.variant-action-btn:hover {\n background: var(--musea-bg-elevated);\n color: var(--musea-text);\n}\n\n.variant-action-btn svg {\n width: 14px;\n height: 14px;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n padding: 2rem;\n}\n\n.empty-state-icon {\n width: 80px;\n height: 80px;\n background: var(--musea-bg-secondary);\n border-radius: var(--musea-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 1.5rem;\n}\n\n.empty-state-icon svg {\n width: 40px;\n height: 40px;\n color: var(--musea-text-muted);\n}\n\n.empty-state-title {\n font-size: 1.125rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n}\n\n.empty-state-text {\n color: var(--musea-text-muted);\n font-size: 0.875rem;\n max-width: 300px;\n}\n\n/* Loading */\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n color: var(--musea-text-muted);\n gap: 0.75rem;\n}\n\n.loading-spinner {\n width: 20px;\n height: 20px;\n border: 2px solid var(--musea-border);\n border-top-color: var(--musea-accent);\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .main {\n grid-template-columns: 1fr;\n }\n .sidebar {\n display: none;\n }\n .header-subtitle {\n display: none;\n }\n}\n","/**\n * CSS theme variables and style definitions for the Musea gallery.\n *\n * CSS is split into separate .css files and imported as text\n * via tsdown's `?inline` support.\n */\n\n// @ts-expect-error -- CSS imported as text via tsdown `?inline`\nimport stylesBase from \"./styles-base.css?inline\";\n// @ts-expect-error -- CSS imported as text via tsdown `?inline`\nimport stylesLayout from \"./styles-layout.css?inline\";\n// @ts-expect-error -- CSS imported as text via tsdown `?inline`\nimport stylesComponents from \"./styles-components.css?inline\";\n\n/**\n * Generate the full gallery CSS styles string.\n */\nexport function generateGalleryStyles(): string {\n return `${stylesBase}\\n${stylesLayout}\\n${stylesComponents}`;\n}\n","/**\n * HTML structure and inline JS generation for the Musea gallery.\n *\n * Extracted from gallery.ts to keep file sizes manageable.\n */\n\nimport { serializeScriptValue } from \"../security.js\";\n\nfunction escapeHtmlAttribute(value: string): string {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&amp;\";\n case \"<\":\n return \"&lt;\";\n case \">\":\n return \"&gt;\";\n case '\"':\n return \"&quot;\";\n case \"'\":\n return \"&#39;\";\n default:\n return char;\n }\n });\n}\n\n/**\n * Generate the gallery HTML body (header, sidebar, content, and inline script).\n */\nexport function generateGalleryBody(basePath: string): string {\n const escapedBasePath = escapeHtmlAttribute(basePath);\n\n return `\n <header class=\"header\">\n <div class=\"header-left\">\n <a href=\"${escapedBasePath}\" class=\"logo\">\n <svg class=\"logo-svg\" width=\"32\" height=\"32\" viewBox=\"0 0 200 200\" fill=\"none\">\n <g transform=\"translate(30, 25) scale(1.2)\">\n <g transform=\"translate(15, 10) skewX(-15)\">\n <path d=\"M 65 0 L 40 60 L 70 20 L 65 0 Z\" fill=\"currentColor\"/>\n <path d=\"M 20 0 L 40 60 L 53 13 L 20 0 Z\" fill=\"currentColor\"/>\n </g>\n </g>\n <g transform=\"translate(110, 120)\">\n <line x1=\"5\" y1=\"10\" x2=\"5\" y2=\"50\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n <line x1=\"60\" y1=\"10\" x2=\"60\" y2=\"50\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n <path d=\"M 0 10 L 32.5 0 L 65 10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <rect x=\"15\" y=\"18\" width=\"14\" height=\"12\" rx=\"1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" opacity=\"0.7\"/>\n <rect x=\"36\" y=\"18\" width=\"14\" height=\"12\" rx=\"1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" opacity=\"0.7\"/>\n <rect x=\"23\" y=\"35\" width=\"18\" height=\"12\" rx=\"1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" opacity=\"0.6\"/>\n </g>\n </svg>\n Musea\n </a>\n <span class=\"header-subtitle\">Component Gallery</span>\n </div>\n <div class=\"search-container\">\n <svg class=\"search-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.35-4.35\"/>\n </svg>\n <input type=\"text\" class=\"search-input\" placeholder=\"Search components...\" id=\"search\">\n </div>\n </header>\n\n <main class=\"main\">\n <aside class=\"sidebar\" id=\"sidebar\">\n <div class=\"loading\">\n <div class=\"loading-spinner\"></div>\n Loading...\n </div>\n </aside>\n <section class=\"content\" id=\"content\">\n <div class=\"empty-state\">\n <div class=\"empty-state-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M4 5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5Z\"/>\n <path d=\"M4 13a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-6Z\"/>\n <path d=\"M16 13a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-6Z\"/>\n </svg>\n </div>\n <div class=\"empty-state-title\">Select a component</div>\n <div class=\"empty-state-text\">Choose a component from the sidebar to view its variants and documentation</div>\n </div>\n </section>\n </main>`;\n}\n\n/**\n * Generate the gallery inline script (SPA logic).\n */\nexport function generateGalleryScript(basePath: string): string {\n return `\n const basePath = ${serializeScriptValue(basePath)};\n let arts = [];\n let selectedArt = null;\n let searchQuery = '';\n\n async function loadArts() {\n try {\n const res = await fetch(basePath + '/api/arts');\n arts = await res.json();\n renderSidebar();\n } catch (e) {\n console.error('Failed to load arts:', e);\n document.getElementById('sidebar').innerHTML = '<div class=\"loading\">Failed to load</div>';\n }\n }\n\n function renderSidebar() {\n const sidebar = document.getElementById('sidebar');\n const categories = {};\n\n const filtered = searchQuery\n ? arts.filter(a => a.metadata.title.toLowerCase().includes(searchQuery.toLowerCase()))\n : arts;\n\n for (const art of filtered) {\n const cat = art.metadata.category || 'Components';\n if (!categories[cat]) categories[cat] = [];\n categories[cat].push(art);\n }\n\n if (Object.keys(categories).length === 0) {\n sidebar.innerHTML = '<div class=\"sidebar-section\"><div class=\"loading\">No components found</div></div>';\n return;\n }\n\n let html = '';\n for (const [category, items] of Object.entries(categories)) {\n const escapedCategory = escapeHtml(category);\n html += '<div class=\"sidebar-section\">';\n html += '<div class=\"category-header\" data-category=\"' + escapedCategory + '\">';\n html += '<svg class=\"category-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"m9 18 6-6-6-6\"/></svg>';\n html += '<span>' + escapedCategory + '</span>';\n html += '<span class=\"category-count\">' + items.length + '</span>';\n html += '</div>';\n html += '<ul class=\"art-list\" data-category=\"' + escapedCategory + '\">';\n for (const art of items) {\n const active = selectedArt?.path === art.path ? 'active' : '';\n const variantCount = art.variants?.length || 0;\n html += '<li class=\"art-item ' + active + '\" data-path=\"' + escapeHtml(art.path) + '\">';\n html += '<span>' + escapeHtml(art.metadata.title) + '</span>';\n html += '<span class=\"art-variant-count\">' + variantCount + ' variant' + (variantCount !== 1 ? 's' : '') + '</span>';\n html += '</li>';\n }\n html += '</ul>';\n html += '</div>';\n }\n\n sidebar.innerHTML = html;\n\n sidebar.querySelectorAll('.art-item').forEach(item => {\n item.addEventListener('click', () => {\n const artPath = item.dataset.path;\n selectedArt = arts.find(a => a.path === artPath);\n renderSidebar();\n renderContent();\n });\n });\n\n sidebar.querySelectorAll('.category-header').forEach(header => {\n header.addEventListener('click', () => {\n header.classList.toggle('collapsed');\n const list = header.parentElement?.querySelector('.art-list');\n if (list) list.style.display = header.classList.contains('collapsed') ? 'none' : 'block';\n });\n });\n }\n\n function renderContent() {\n const content = document.getElementById('content');\n if (!selectedArt) {\n content.innerHTML = \\`\n <div class=\"empty-state\">\n <div class=\"empty-state-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M4 5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5Z\"/>\n <path d=\"M4 13a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-6Z\"/>\n <path d=\"M16 13a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-6Z\"/>\n </svg>\n </div>\n <div class=\"empty-state-title\">Select a component</div>\n <div class=\"empty-state-text\">Choose a component from the sidebar to view its variants</div>\n </div>\n \\`;\n return;\n }\n\n const meta = selectedArt.metadata;\n const tags = meta.tags || [];\n const variantCount = selectedArt.variants?.length || 0;\n\n let html = '<div class=\"content-inner\">';\n html += '<div class=\"content-header\">';\n html += '<h1 class=\"content-title\">' + escapeHtml(meta.title) + '</h1>';\n if (meta.description) {\n html += '<p class=\"content-description\">' + escapeHtml(meta.description) + '</p>';\n }\n html += '<div class=\"content-meta\">';\n html += '<span class=\"meta-tag\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/></svg>' + variantCount + ' variant' + (variantCount !== 1 ? 's' : '') + '</span>';\n if (meta.category) {\n html += '<span class=\"meta-tag\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"/></svg>' + escapeHtml(meta.category) + '</span>';\n }\n for (const tag of tags) {\n html += '<span class=\"meta-tag\">#' + escapeHtml(tag) + '</span>';\n }\n html += '</div>';\n html += '</div>';\n\n html += '<div class=\"gallery\">';\n for (const variant of selectedArt.variants) {\n const previewUrl = basePath + '/preview?art=' + encodeURIComponent(selectedArt.path) + '&variant=' + encodeURIComponent(variant.name);\n const escapedPreviewUrl = escapeHtml(previewUrl);\n\n html += '<div class=\"variant-card\">';\n html += '<div class=\"variant-preview\">';\n html += '<iframe src=\"' + escapedPreviewUrl + '\" loading=\"lazy\" title=\"' + escapeHtml(variant.name) + '\"></iframe>';\n html += '</div>';\n html += '<div class=\"variant-info\">';\n html += '<div>';\n html += '<span class=\"variant-name\">' + escapeHtml(variant.name) + '</span>';\n if (variant.isDefault) html += ' <span class=\"variant-badge\">Default</span>';\n html += '</div>';\n html += '<div class=\"variant-actions\">';\n html += '<button class=\"variant-action-btn\" title=\"Open in new tab\" data-preview-url=\"' + escapedPreviewUrl + '\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></svg></button>';\n html += '</div>';\n html += '</div>';\n html += '</div>';\n }\n html += '</div>';\n html += '</div>';\n\n content.innerHTML = html;\n\n content.querySelectorAll('.variant-action-btn[data-preview-url]').forEach(button => {\n button.addEventListener('click', () => {\n const previewUrl = button.dataset.previewUrl;\n if (previewUrl) window.open(previewUrl, '_blank', 'noopener');\n });\n });\n }\n\n function escapeHtml(str) {\n if (!str) return '';\n return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;');\n }\n\n // Search\n document.getElementById('search').addEventListener('input', (e) => {\n searchQuery = e.target.value;\n renderSidebar();\n });\n\n // Keyboard shortcut for search\n document.addEventListener('keydown', (e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n document.getElementById('search').focus();\n }\n });\n\n loadArts();`;\n}\n","/**\n * Gallery HTML generation for the Musea component gallery.\n *\n * Contains the inline gallery SPA template (used as a fallback when the\n * pre-built gallery is not available) and the gallery virtual module.\n */\n\nimport { generateGalleryStyles } from \"./styles.js\";\nimport { generateGalleryBody, generateGalleryScript } from \"./template.js\";\nimport { serializeScriptValue } from \"../security.js\";\n\n/**\n * Generate the inline gallery HTML page.\n */\nexport function generateGalleryHtml(\n basePath: string,\n devSessionToken: string,\n themeConfig?: { default: string; custom?: Record<string, unknown> },\n): string {\n const themeScript = themeConfig\n ? `window.__MUSEA_THEME_CONFIG__=${serializeScriptValue(themeConfig)};`\n : \"\";\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Musea - Component Gallery</title>\n <script>window.__MUSEA_BASE_PATH__=${serializeScriptValue(basePath)};window.__MUSEA_SESSION_TOKEN__=${serializeScriptValue(devSessionToken)};${themeScript}${\"<\"}/script>\n <style>${generateGalleryStyles()}\n </style>\n</head>\n<body>${generateGalleryBody(basePath)}\n\n <script type=\"module\">${generateGalleryScript(basePath)}\n </script>\n</body>\n</html>`;\n}\n\n/**\n * Generate the virtual gallery module code.\n */\nexport function generateGalleryModule(basePath: string): string {\n return `\nexport const basePath = ${serializeScriptValue(basePath)};\nexport async function loadArts() {\n const res = await fetch(basePath + '/api/arts');\n return res.json();\n}\n`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAKA,MAAa,+BAA+B,OAAO;AAEnD,IAAa,YAAb,cAA+B,MAAM;CACnC;CAEA,YAAY,SAAiB,QAAgB;EAC3C,MAAM,QAAQ;EACd,KAAK,OAAO;EACZ,KAAK,SAAS;;;AAIlB,SAAgB,wBAAgC;CAC9C,OAAO,YAAY,GAAG,CAAC,SAAS,YAAY;;AAG9C,SAAS,gBAAgB,YAA4B;CACnD,IAAI,UAAU,KAAK,QAAQ,WAAW;CACtC,MAAM,eAAyB,EAAE;CAEjC,OAAO,MACL,IAAI;EACF,MAAM,OAAO,GAAG,aAAa,OAAO,QAAQ;EAC5C,OAAO,aAAa,SAAS,IAAI,KAAK,KAAK,MAAM,GAAG,aAAa,SAAS,CAAC,GAAG;SACxE;EACN,MAAM,SAAS,KAAK,QAAQ,QAAQ;EACpC,IAAI,WAAW,SACb,OAAO,KAAK,QAAQ,WAAW;EAEjC,aAAa,KAAK,KAAK,SAAS,QAAQ,CAAC;EACzC,UAAU;;;AAKhB,SAAS,qBAAqB,WAAmB,eAAgC;CAC/E,MAAM,SAAS,KAAK,QAAQ,UAAU;CACtC,MAAM,YAAY,KAAK,QAAQ,cAAc;CAC7C,MAAM,WAAW,KAAK,SAAS,QAAQ,UAAU;CACjD,OAAO,aAAa,MAAO,CAAC,SAAS,WAAW,KAAK,IAAI,CAAC,KAAK,WAAW,SAAS;;AAOrF,SAAgB,gBAAgB,YAAsB,eAAgC;CACpF,MAAM,YAAY,gBAAgB,cAAc;CAChD,OAAO,WAAW,MAAM,cACtB,qBAAqB,gBAAgB,UAAU,EAAE,UAAU,CAC5D;;AAGH,SAAgB,cAAc,WAAmB,eAAuB,QAAQ,QAAgB;CAC9F,OAAO,iBAAiB,CAAC,UAAU,EAAE,eAAe,MAAM;;AAG5D,SAAgB,iBACd,YACA,eACA,QAAQ,QACA;CACR,IAAI,cAAc,SAAS,KAAK,EAC9B,MAAM,IAAI,UAAU,GAAG,MAAM,iCAAiC,IAAI;CAGpE,IAAI,WAAW,WAAW,GACxB,MAAM,IAAI,UAAU,yCAAyC,SAAS,IAAI;CAG5E,MAAM,SAAS,KAAK,QAAQ,WAAW,MAAM,IAAI;CACjD,MAAM,WAAW,KAAK,WAAW,cAAc,GAC3C,KAAK,QAAQ,cAAc,GAC3B,KAAK,QAAQ,QAAQ,cAAc;CAEvC,IAAI,CAAC,gBAAgB,YAAY,SAAS,EACxC,MAAM,IAAI,UAAU,GAAG,MAAM,iCAAiC,IAAI;CAGpE,OAAO;;AAGT,SAAgB,qBACd,WACA,YACA,QAAQ,QACA;CAER,IAAI,WAAW,mBADC,WAAW,MAAM,QAAQ,EAAE,CAAC,MAAM,KACP,MAAM;CAEjD,WAAW,SAAS,WAAW,MAAM,IAAI;CACzC,IAAI,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,EACpC,MAAM,IAAI,UAAU,GAAG,MAAM,8CAA8C,IAAI;CAIjF,OAAO,cAAc,WAAW,IADP,YACqB,MAAM;;AAGtD,SAAgB,mBAAmB,OAAe,QAAQ,QAAgB;CACxE,IAAI;EACF,OAAO,mBAAmB,MAAM;SAC1B;EACN,MAAM,IAAI,UAAU,GAAG,MAAM,6BAA6B,IAAI;;;AAIlE,SAAgB,mBACd,KACA,QAAQ,8BACS;CACjB,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,YAAY;EAEhB,IAAI,GAAG,SAAS,UAA2B;GACzC,IAAI,WAAW;GAEf,MAAM,SAAS,OAAO,SAAS,MAAM,GAAG,QAAQ,OAAO,KAAK,MAAM;GAClE,QAAQ,OAAO;GACf,IAAI,OAAO,OAAO;IAChB,YAAY;IACZ,OAAO,IAAI,UAAU,wBAAwB,MAAM,SAAS,IAAI,CAAC;IACjE;;GAGF,QAAQ,OAAO,SAAS,QAAQ;IAChC;EAEF,IAAI,GAAG,aAAa;GAClB,IAAI,CAAC,WAAW;IACd,YAAY;IACZ,QAAQ,KAAK;;IAEf;EAEF,IAAI,GAAG,UAAU,UAAU;GACzB,IAAI,CAAC,WAAW;IACd,YAAY;IACZ,OAAO,MAAM;;IAEf;GACF;;AAGJ,SAAgB,cAA2B,MAAiB;CAC1D,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;UAChB,OAAO;EACd,IAAI,iBAAiB,aACnB,MAAM,IAAI,UAAU,uBAAuB,IAAI;EAEjD,MAAM;;;AAIV,SAAgB,sBACd,KACA,cACkB;CAClB,MAAM,cAAc,eAAe,IAAI;CACvC,IAAI,aAAa,OAAO;CAExB,IAAI,CAAC,eAAe,IAAI,OAAO,EAC7B,OAAO;CAGT,IAAI,CAAC,qBAAqB,KAAK,aAAa,EAC1C,OAAO,IAAI,UAAU,mCAAmC,IAAI;CAG9D,IAAI,CAAC,cAAc,IAAI,EACrB,OAAO,IAAI,UAAU,yCAAyC,IAAI;CAGpE,OAAO;;AAGT,SAAgB,qBAAqB,OAAwB;CAC3D,QAAQ,KAAK,UAAU,MAAM,IAAI,aAAa,QAAQ,uBAAuB,SAAS;EACpF,QAAQ,MAAR;GACE,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,UACH,OAAO;GACT,KAAK,UACH,OAAO;GACT,SACE,OAAO;;GAEX;;AAGJ,SAAS,eAAe,QAAqC;CAC3D,OAAO,WAAW,UAAU,WAAW,SAAS,WAAW,WAAW,WAAW;;AAGnF,SAAS,cAAc,KAA+B;CAEpD,OADoB,UAAU,KAAK,eACjB,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK;;AAG9D,SAAS,eAAe,KAAwC;CAE9D,IADqB,UAAU,KAAK,iBACpB,KAAK,cACnB,OAAO,IAAI,UAAU,mDAAmD,IAAI;CAG9E,MAAM,SAAS,UAAU,KAAK,SAAS;CACvC,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,OAAO,UAAU,KAAK,OAAO;CACnC,IAAI,CAAC,MACH,OAAO,IAAI,UAAU,uBAAuB,IAAI;CAGlD,IAAI;EAEF,IAAI,IADkB,IAAI,OACb,CAAC,SAAS,MACrB,OAAO,IAAI,UAAU,mDAAmD,IAAI;SAExE;EACN,OAAO,IAAI,UAAU,yBAAyB,IAAI;;CAGpD,OAAO;;AAGT,SAAS,qBAAqB,KAAsB,eAAgC;CAClF,MAAM,cAAc,UAAU,KAAK,kBAAkB;CACrD,IAAI,CAAC,aAAa,OAAO;CAEzB,MAAM,SAAS,OAAO,KAAK,YAAY;CACvC,MAAM,WAAW,OAAO,KAAK,cAAc;CAC3C,OAAO,OAAO,WAAW,SAAS,UAAU,gBAAgB,QAAQ,SAAS;;AAG/E,SAAS,UAAU,KAAsB,MAAkC;CACzE,MAAM,QAAQ,IAAI,QAAQ;CAC1B,IAAI,MAAM,QAAQ,MAAM,EAAE,OAAO,MAAM;CACvC,OAAO;;;;AC1PT,IAAA,sBAAM;;;ACAN,IAAA,wBAAG;;;ACAH,IAAA,4BAAG;;;;;;;;;;;;ACiBH,SAAgB,wBAAgC;CAC9C,OAAO,GAAGA,oBAAW,IAAIC,sBAAa,IAAIC;;;;;;;;;ACV5C,SAAS,oBAAoB,OAAuB;CAClD,OAAO,MAAM,QAAQ,aAAa,SAAS;EACzC,QAAQ,MAAR;GACE,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,MACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,SACE,OAAO;;GAEX;;;;;AAMJ,SAAgB,oBAAoB,UAA0B;CAG5D,OAAO;;;iBAFiB,oBAAoB,SAKd,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDjC,SAAgB,sBAAsB,UAA0B;CAC9D,OAAO;uBACc,qBAAqB,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/EtD,SAAgB,oBACd,UACA,iBACA,aACQ;CACR,MAAM,cAAc,cAChB,iCAAiC,qBAAqB,YAAY,CAAC,KACnE;CACJ,OAAO;;;;;;uCAM8B,qBAAqB,SAAS,CAAC,kCAAkC,qBAAqB,gBAAgB,CAAC,GAAG,YAAA;WACtI,uBAAuB,CAAC;;;QAG3B,oBAAoB,SAAS,CAAC;;0BAEZ,sBAAsB,SAAS,CAAC;;;;;;;;AAS1D,SAAgB,sBAAsB,UAA0B;CAC9D,OAAO;0BACiB,qBAAqB,SAAS,CAAC"}