web-mojo 2.1.782 → 2.1.783

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 (57) hide show
  1. package/dist/admin.cjs.js +1 -1
  2. package/dist/admin.es.js +10 -10
  3. package/dist/auth.cjs.js +1 -1
  4. package/dist/auth.cjs.js.map +1 -1
  5. package/dist/auth.es.js +3 -3
  6. package/dist/auth.es.js.map +1 -1
  7. package/dist/charts.cjs.js +1 -1
  8. package/dist/charts.es.js +2 -2
  9. package/dist/chat.css +2 -0
  10. package/dist/chunks/{ChatView-DV1Oc4j0.js → ChatView-DnlFXNbs.js} +6 -6
  11. package/dist/chunks/{ChatView-DV1Oc4j0.js.map → ChatView-DnlFXNbs.js.map} +1 -1
  12. package/dist/chunks/{ChatView-DDlJeLxB.js → ChatView-DrBUQ373.js} +2 -2
  13. package/dist/chunks/{ChatView-DDlJeLxB.js.map → ChatView-DrBUQ373.js.map} +1 -1
  14. package/dist/chunks/{ContextMenu-CmJitjwf.js → ContextMenu-BnUxQSjf.js} +2 -2
  15. package/dist/chunks/{ContextMenu-CmJitjwf.js.map → ContextMenu-BnUxQSjf.js.map} +1 -1
  16. package/dist/chunks/{ContextMenu-61Bf4lAf.js → ContextMenu-b_OrhKHs.js} +2 -2
  17. package/dist/chunks/{ContextMenu-61Bf4lAf.js.map → ContextMenu-b_OrhKHs.js.map} +1 -1
  18. package/dist/chunks/{DataView-CjfrxEPP.js → DataView-DrEVJtrm.js} +2 -2
  19. package/dist/chunks/{DataView-CjfrxEPP.js.map → DataView-DrEVJtrm.js.map} +1 -1
  20. package/dist/chunks/{DataView-CocjtKYU.js → DataView-t3OBXM-2.js} +2 -2
  21. package/dist/chunks/{DataView-CocjtKYU.js.map → DataView-t3OBXM-2.js.map} +1 -1
  22. package/dist/chunks/{Dialog-5UlganLK.js → Dialog-CCLikhVB.js} +5 -5
  23. package/dist/chunks/{Dialog-5UlganLK.js.map → Dialog-CCLikhVB.js.map} +1 -1
  24. package/dist/chunks/{Dialog-D8Rrr7tV.js → Dialog-DmXdNWsq.js} +2 -2
  25. package/dist/chunks/{Dialog-D8Rrr7tV.js.map → Dialog-DmXdNWsq.js.map} +1 -1
  26. package/dist/chunks/{FormView-DN6AiUYz.js → FormView-CDR6Tkde.js} +2 -2
  27. package/dist/chunks/{FormView-DN6AiUYz.js.map → FormView-CDR6Tkde.js.map} +1 -1
  28. package/dist/chunks/{FormView-BB2_5qjl.js → FormView-DMyXiDWu.js} +2 -2
  29. package/dist/chunks/{FormView-BB2_5qjl.js.map → FormView-DMyXiDWu.js.map} +1 -1
  30. package/dist/chunks/{MetricsMiniChartWidget-BdqOafjm.js → MetricsMiniChartWidget-BmY66k1F.js} +3 -3
  31. package/dist/chunks/{MetricsMiniChartWidget-BdqOafjm.js.map → MetricsMiniChartWidget-BmY66k1F.js.map} +1 -1
  32. package/dist/chunks/{MetricsMiniChartWidget-C66PBJ9s.js → MetricsMiniChartWidget-CZ2J2Hc2.js} +2 -2
  33. package/dist/chunks/{MetricsMiniChartWidget-C66PBJ9s.js.map → MetricsMiniChartWidget-CZ2J2Hc2.js.map} +1 -1
  34. package/dist/chunks/{PDFViewer-CSz-27wi.js → PDFViewer-B6e5yweS.js} +3 -3
  35. package/dist/chunks/{PDFViewer-CSz-27wi.js.map → PDFViewer-B6e5yweS.js.map} +1 -1
  36. package/dist/chunks/{PDFViewer-C6dkznZt.js → PDFViewer-B8AW4CBc.js} +2 -2
  37. package/dist/chunks/{PDFViewer-C6dkznZt.js.map → PDFViewer-B8AW4CBc.js.map} +1 -1
  38. package/dist/chunks/{Page-DqK83eSR.js → Page-Bv3lkFL5.js} +2 -2
  39. package/dist/chunks/{Page-DqK83eSR.js.map → Page-Bv3lkFL5.js.map} +1 -1
  40. package/dist/chunks/{Page-d5ciAhS1.js → Page-DEBpjrLS.js} +2 -2
  41. package/dist/chunks/{Page-d5ciAhS1.js.map → Page-DEBpjrLS.js.map} +1 -1
  42. package/dist/chunks/{TopNav-DfRbW9yS.js → TopNav-BLY2EcD5.js} +5 -5
  43. package/dist/chunks/{TopNav-DfRbW9yS.js.map → TopNav-BLY2EcD5.js.map} +1 -1
  44. package/dist/chunks/{TopNav-DQ9GflSr.js → TopNav-DNUFKcWJ.js} +2 -2
  45. package/dist/chunks/{TopNav-DQ9GflSr.js.map → TopNav-DNUFKcWJ.js.map} +1 -1
  46. package/dist/chunks/{WebApp-DTQaFBtw.js → WebApp-AGmBnM8H.js} +13 -13
  47. package/dist/chunks/{WebApp-DTQaFBtw.js.map → WebApp-AGmBnM8H.js.map} +1 -1
  48. package/dist/chunks/{WebApp-tr4XJzcb.js → WebApp-BR_7YgWu.js} +2 -2
  49. package/dist/chunks/{WebApp-tr4XJzcb.js.map → WebApp-BR_7YgWu.js.map} +1 -1
  50. package/dist/css/web-mojo.css +1 -1
  51. package/dist/docit.cjs.js +1 -1
  52. package/dist/docit.es.js +5 -5
  53. package/dist/index.cjs.js +1 -1
  54. package/dist/index.es.js +11 -11
  55. package/dist/lightbox.cjs.js +1 -1
  56. package/dist/lightbox.es.js +4 -4
  57. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- :root{--bs-primary: #1a73e8;--bs-secondary: #5f6368;--bs-success: #34a853;--bs-info: #4285f4;--bs-warning: #fbbc05;--bs-danger: #ea4335;--bs-light: #f1f3f4;--bs-dark: #202124;--bs-primary-bg-subtle: #e8f0fe;--bs-secondary-bg-subtle: #f1f3f4;--bs-success-bg-subtle: #e6f4ea;--bs-info-bg-subtle: #e8f0fe;--bs-warning-bg-subtle: #fef7e0;--bs-danger-bg-subtle: #fce8e6;--bs-primary-border-subtle: #aecbfa;--bs-secondary-border-subtle: #dadce0;--bs-success-border-subtle: #81c995;--bs-info-border-subtle: #aecbfa;--bs-warning-border-subtle: #fad2cf;--bs-danger-border-subtle: #f28b82;--bs-primary-text-emphasis: #174ea6;--bs-secondary-text-emphasis: #3c4043;--bs-success-text-emphasis: #0d652d;--bs-info-text-emphasis: #174ea6;--bs-warning-text-emphasis: #b06000;--bs-danger-text-emphasis: #a50e0e;--bs-btn-hover-bg: #e8f0fe}:root[data-bs-theme=ocean]{--bs-primary: #0077b6;--bs-secondary: #90e0ef;--bs-success: #00b4d8;--bs-info: #48cae4;--bs-warning: #ffd166;--bs-danger: #ef476f;--bs-light: #f1faff;--bs-dark: #03045e;--bs-primary-bg-subtle: #caf0f8;--bs-secondary-bg-subtle: #e0fbfc;--bs-success-bg-subtle: #ade8f4;--bs-info-bg-subtle: #caf0f8;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #fde2e4;--bs-primary-text-emphasis: #023e8a;--bs-success-text-emphasis: #0077b6;--bs-danger-text-emphasis: #9d0208}:root[data-bs-theme=sunrise]{--bs-primary: #ff6f00;--bs-secondary: #ffb703;--bs-success: #fb8500;--bs-info: #ffb4a2;--bs-warning: #ffd166;--bs-danger: #e63946;--bs-light: #fff3e6;--bs-dark: #432818;--bs-primary-bg-subtle: #fff4e1;--bs-secondary-bg-subtle: #fff8dc;--bs-success-bg-subtle: #ffe5b4;--bs-info-bg-subtle: #ffe0d9;--bs-warning-bg-subtle: #fff7d6;--bs-danger-bg-subtle: #fddede;--bs-primary-text-emphasis: #9d4b00;--bs-success-text-emphasis: #a85d00;--bs-danger-text-emphasis: #8d0000}:root[data-bs-theme=forest]{--bs-primary: #2b9348;--bs-secondary: #95d5b2;--bs-success: #55a630;--bs-info: #76c893;--bs-warning: #ffba08;--bs-danger: #d62828;--bs-light: #f0fdf4;--bs-dark: #081c15;--bs-primary-bg-subtle: #d8f3dc;--bs-secondary-bg-subtle: #e9f5eb;--bs-success-bg-subtle: #c7f9cc;--bs-info-bg-subtle: #e9fbee;--bs-warning-bg-subtle: #fff8e1;--bs-danger-bg-subtle: #ffe5e5;--bs-primary-text-emphasis: #1a472a;--bs-success-text-emphasis: #2f5233;--bs-danger-text-emphasis: #7a1a1a}:root[data-bs-theme=midnight]{--bs-primary: #5a189a;--bs-secondary: #7b2cbf;--bs-success: #06d6a0;--bs-info: #118ab2;--bs-warning: #ffd166;--bs-danger: #ef476f;--bs-light: #f8f9fa;--bs-dark: #03071e;--bs-primary-bg-subtle: #e0d4f7;--bs-secondary-bg-subtle: #f1e4ff;--bs-success-bg-subtle: #d0fdf2;--bs-info-bg-subtle: #d0ebff;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #fbdde2;--bs-primary-text-emphasis: #240046;--bs-success-text-emphasis: #056b53;--bs-danger-text-emphasis: #9d001f}:root[data-bs-theme=corporate]{--bs-primary: #2a5d9f;--bs-secondary: #6c757d;--bs-success: #4caf50;--bs-info: #17a2b8;--bs-warning: #f0ad4e;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-bg-subtle: #e7f0fa;--bs-secondary-bg-subtle: #f1f3f5;--bs-success-bg-subtle: #eaf6ec;--bs-info-bg-subtle: #e6f7fa;--bs-warning-bg-subtle: #fff4e0;--bs-danger-bg-subtle: #fcebec;--bs-primary-border-subtle: #c2d7ed;--bs-secondary-border-subtle: #dee2e6;--bs-success-border-subtle: #c8e6c9;--bs-info-border-subtle: #bde3ea;--bs-warning-border-subtle: #ffe0b2;--bs-danger-border-subtle: #f5c2c7;--bs-primary-text-emphasis: #1d3f6e;--bs-secondary-text-emphasis: #495057;--bs-success-text-emphasis: #2e7d32;--bs-info-text-emphasis: #0d6673;--bs-warning-text-emphasis: #a46900;--bs-danger-text-emphasis: #8a1c24}:root{--mojo-primary: var(--bs-primary);--mojo-primary-rgb: var(--bs-primary-rgb);--mojo-secondary: var(--bs-secondary);--mojo-secondary-rgb: var(--bs-secondary-rgb);--mojo-success: var(--bs-success);--mojo-success-rgb: var(--bs-success-rgb);--mojo-info: var(--bs-info);--mojo-info-rgb: var(--bs-info-rgb);--mojo-warning: var(--bs-warning);--mojo-warning-rgb: var(--bs-warning-rgb);--mojo-danger: var(--bs-danger);--mojo-danger-rgb: var(--bs-danger-rgb);--mojo-light: var(--bs-light);--mojo-light-rgb: var(--bs-light-rgb);--mojo-dark: var(--bs-dark);--mojo-dark-rgb: var(--bs-dark-rgb);--mojo-body-bg: var(--bs-body-bg);--mojo-body-color: var(--bs-body-color);--mojo-emphasis-color: var(--bs-emphasis-color);--mojo-secondary-color: var(--bs-secondary-color);--mojo-tertiary-color: var(--bs-tertiary-color);--mojo-bg-primary: var(--bs-body-bg);--mojo-bg-secondary: var(--bs-secondary-bg);--mojo-bg-tertiary: var(--bs-tertiary-bg);--mojo-border-color: var(--bs-border-color);--mojo-border-color-translucent: var(--bs-border-color-translucent);--mojo-hover-bg: var(--bs-secondary-bg);--mojo-active-bg: var(--bs-primary);--mojo-focus-color: var(--bs-primary);--mojo-focus-shadow: 0 0 0 .25rem rgba(var(--bs-primary-rgb), .25);--mojo-transition-fast: .15s ease-in-out;--mojo-transition-base: .2s ease-in-out;--mojo-transition-slow: .3s ease-in-out;--mojo-border-radius-sm: var(--bs-border-radius-sm);--mojo-border-radius: var(--bs-border-radius);--mojo-border-radius-lg: var(--bs-border-radius-lg);--mojo-border-radius-xl: var(--bs-border-radius-xl);--mojo-spacer-xs: calc(var(--bs-spacer) * .25);--mojo-spacer-sm: calc(var(--bs-spacer) * .5);--mojo-spacer: var(--bs-spacer);--mojo-spacer-lg: calc(var(--bs-spacer) * 1.5);--mojo-spacer-xl: calc(var(--bs-spacer) * 3);--mojo-font-sans-serif: var(--bs-font-sans-serif);--mojo-font-monospace: var(--bs-font-monospace);--mojo-box-shadow-sm: var(--bs-box-shadow-sm);--mojo-box-shadow: var(--bs-box-shadow);--mojo-box-shadow-lg: var(--bs-box-shadow-lg);--mojo-zindex-dropdown: var(--bs-zindex-dropdown, 1000);--mojo-zindex-sticky: var(--bs-zindex-sticky, 1020);--mojo-zindex-fixed: var(--bs-zindex-fixed, 1030);--mojo-zindex-modal-backdrop: var(--bs-zindex-modal-backdrop, 1040);--mojo-zindex-offcanvas: var(--bs-zindex-offcanvas, 1045);--mojo-zindex-modal: var(--bs-zindex-modal, 1050);--mojo-zindex-popover: var(--bs-zindex-popover, 1070);--mojo-zindex-tooltip: var(--bs-zindex-tooltip, 1080)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-primary);--bs-btn-border-color: var(--bs-primary);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-primary) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-primary) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-primary) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-primary) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-primary-rgb, 13, 110, 253)}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-success);--bs-btn-border-color: var(--bs-success);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-success) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-success) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-success) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-success) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-success-rgb, 25, 135, 84)}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-danger);--bs-btn-border-color: var(--bs-danger);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-danger) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-danger) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-danger) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-danger) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-danger-rgb, 220, 53, 69)}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: var(--bs-warning);--bs-btn-border-color: var(--bs-warning);--bs-btn-hover-color: #000;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-warning) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-warning) 82%, #000 18%);--bs-btn-active-color: #000;--bs-btn-active-bg: color-mix(in srgb, var(--bs-warning) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-warning) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-warning-rgb, 255, 193, 7)}.btn-info{--bs-btn-color: #000;--bs-btn-bg: var(--bs-info);--bs-btn-border-color: var(--bs-info);--bs-btn-hover-color: #000;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-info) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-info) 82%, #000 18%);--bs-btn-active-color: #000;--bs-btn-active-bg: color-mix(in srgb, var(--bs-info) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-info) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-info-rgb, 13, 202, 240)}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-secondary);--bs-btn-border-color: var(--bs-secondary);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-secondary) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-secondary) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-secondary) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-secondary) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-secondary-rgb, 108, 117, 125)}.btn-outline-primary{--bs-btn-color: var(--bs-primary);--bs-btn-border-color: var(--bs-primary);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: var(--bs-primary);--bs-btn-hover-border-color: var(--bs-primary);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-primary) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-primary) 75%, #000 25%);--bs-btn-focus-shadow-rgb: var(--bs-primary-rgb, 13, 110, 253)}.pagination{--bs-pagination-color: var(--bs-primary);--bs-pagination-hover-color: color-mix(in srgb, var(--bs-primary) 85%, #000 15%);--bs-pagination-focus-color: var(--bs-primary);--bs-pagination-focus-box-shadow: 0 0 0 .25rem color-mix(in srgb, var(--bs-primary) 25%, transparent);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: var(--bs-primary);--bs-pagination-active-border-color: var(--bs-primary);--bs-pagination-disabled-color: var(--bs-secondary, #6c757d)}.btn-link{text-decoration:none}.btn-link:hover{text-decoration:underline;background-color:transparent;border-color:none}.badge.bg-primary{--bs-badge-color: #fff;--bs-badge-bg: var(--bs-primary)}.nav-pills{--bs-nav-pills-link-active-bg: var(--bs-primary);--bs-nav-pills-link-active-color: #fff}.nav-tabs{--bs-nav-tabs-link-hover-border-color: color-mix(in srgb, var(--bs-primary) 35%, transparent);--bs-nav-tabs-link-active-color: var(--bs-primary);--bs-nav-tabs-link-active-border-color: var(--bs-primary)}.nav-tabs .nav-link{color:var(--bs-secondary)}.nav-tabs .nav-link.active{border-top-color:#1a73e8;border-right-color:#1a73e8;border-bottom-color:transparent;border-left-color:#1a73e8}.tab-view-select-style{display:inline-flex;align-items:center;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border-top:1px solid var(--bs-border-color);border-right:1px solid var(--bs-border-color);border-left:1px solid var(--bs-border-color);border-top-left-radius:var(--bs-border-radius);border-top-right-radius:var(--bs-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tab-view-select-style:after{display:none}.tab-view-select-style:hover{border-color:var(--bs-secondary-border-subtle)}.tab-view-select-style:focus{border-color:var(--bs-primary);outline:0;box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25)}.tab-view-select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alert-primary{--bs-alert-color: var( --bs-primary-text-emphasis, color-mix(in srgb, var(--bs-primary) 35%, #000) );--bs-alert-bg: var(--bs-primary-bg-subtle, color-mix(in srgb, var(--bs-primary) 10%, #fff));--bs-alert-border-color: var( --bs-primary-border-subtle, color-mix(in srgb, var(--bs-primary) 25%, #fff) )}:root{--bs-link-color: var(--bs-primary);--bs-link-hover-color: color-mix(in srgb, var(--bs-primary) 85%, #000 15%)}.form-check{margin-top:.9rem}@keyframes mojo-fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes mojo-slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.mojo-fade-in{animation:mojo-fadeIn var(--mojo-transition-slow) ease-in-out}.mojo-slide-up{animation:mojo-slideUp .4s ease-out}.mojo-spin{animation:mojo-spin 1s linear infinite;display:inline-block}.mojo-pulse{animation:mojo-pulse 2s ease-in-out infinite}.mojo-bounce{animation:mojo-bounce .5s ease-in-out}.bi-spin{animation:mojo-spin 1s linear infinite;display:inline-block}.mojo-text-truncate-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.mojo-text-truncate-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.mojo-transition-fast{transition:all var(--mojo-transition-fast)}.mojo-transition{transition:all var(--mojo-transition-base)}.mojo-transition-slow{transition:all var(--mojo-transition-slow)}.mojo-transform-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mojo-transform-center-x{position:absolute;left:50%;transform:translate(-50%)}.mojo-transform-center-y{position:absolute;top:50%;transform:translateY(-50%)}.mojo-hover-lift:hover{transform:translateY(-2px);transition:transform var(--mojo-transition-fast)}.mojo-hover-shadow:hover{box-shadow:0 .5rem 1rem #00000026;transition:box-shadow var(--mojo-transition-fast)}.mojo-glass{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff1a;border:1px solid rgba(255,255,255,.2)}[data-bs-theme=dark] .mojo-glass{background:#0003;border:1px solid rgba(255,255,255,.1)}.mojo-loading{pointer-events:none;opacity:.6;position:relative}.mojo-loading:after{content:"";position:absolute;top:50%;left:50%;width:1rem;height:1rem;margin:-.5rem 0 0 -.5rem;border:2px solid transparent;border-top:2px solid var(--mojo-primary);border-radius:50%;animation:mojo-spin 1s linear infinite;z-index:1}.mojo-focus-ring:focus{outline:none;box-shadow:var(--mojo-focus-shadow)}.mojo-focus-ring:focus-visible{outline:2px solid var(--mojo-focus-color);outline-offset:2px}.fs-7{font-size:.75rem!important}.fs-8{font-size:.6875rem!important}.fs-9{font-size:.625rem!important}.fs-10{font-size:.5625rem!important}@media print{.mojo-print-hide{display:none!important}.mojo-print-show{display:block!important}.mojo-no-print-shadow{box-shadow:none!important}.mojo-no-print-bg{background:#fff!important;color:#000!important}}.mojo-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.mojo-skip-link{position:absolute;top:-40px;left:6px;background:var(--mojo-emphasis-color);color:var(--mojo-body-bg);padding:8px;text-decoration:none;z-index:var(--mojo-zindex-tooltip);border-radius:var(--mojo-border-radius)}.mojo-skip-link:focus{top:6px}@media (prefers-reduced-motion: reduce){.mojo-fade-in,.mojo-slide-up,.mojo-spin,.mojo-pulse,.mojo-bounce,.bi-spin,.mojo-loading:after{animation-duration:.01ms!important;animation-iteration-count:1!important}.mojo-transition-fast,.mojo-transition,.mojo-transition-slow,.mojo-hover-lift:hover,.mojo-hover-shadow:hover{transition:none!important}}@media (prefers-contrast: high){.mojo-glass{background:var(--mojo-body-bg);border:2px solid var(--mojo-border-color);-webkit-backdrop-filter:none;backdrop-filter:none}.mojo-focus-ring:focus,.mojo-focus-ring:focus-visible{outline:3px solid var(--mojo-focus-color);outline-offset:2px;box-shadow:0 0 0 .5rem rgba(var(--mojo-primary-rgb),.5)}}.mojo-app{min-height:100vh;font-family:var(--mojo-font-sans-serif);background-color:var(--mojo-body-bg);color:var(--mojo-body-color)}.mojo-app.mojo-loading{opacity:0}.mojo-app.mojo-ready{opacity:1;transition:opacity var(--mojo-transition-slow)}.mojo-component{position:relative}.mojo-component.mojo-disabled{pointer-events:none;opacity:.6}.mojo-debug *{outline:1px solid red!important}.mojo-debug *:hover{background:#ff00001a!important}.drag-over{border-color:var(--bs-primary)!important;background-color:var(--bs-primary-bg-subtle)!important;transition:all .2s ease}.drag-active{border-style:dashed!important;border-width:2px!important;box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25)!important}.drag-over.drag-active{transform:scale(1.02);box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25),0 .5rem 1rem #00000026!important}[data-bs-theme=dark] .drag-over{background-color:rgba(var(--bs-primary-rgb),.15)!important}@media (prefers-reduced-motion: reduce){.drag-over,.drag-active{transition:none!important;transform:none!important}}@media (min-width: 1px){.mojo-debug{display:none}}.mojo-debug-enabled .mojo-debug{display:block!important}.image-field-container{position:relative;display:inline-block;border-radius:.375rem;overflow:hidden}.image-drop-zone{position:relative;border-radius:.375rem;transition:all .2s ease;overflow:hidden}.image-drop-zone.droppable{border:2px dashed var(--bs-border-color)}.image-drop-zone.droppable:hover{border-color:var(--bs-primary);background-color:var(--bs-primary-bg-subtle)}.image-drop-zone.drag-over{border-color:var(--bs-primary)!important;background-color:var(--bs-primary-bg-subtle)!important;transform:scale(1.02)}.image-drop-zone.drag-active{border-color:var(--bs-success)!important;background-color:var(--bs-success-bg-subtle)!important;box-shadow:0 0 0 3px rgba(var(--bs-success-rgb),.25)}.image-field-xs{width:48px;height:48px}.image-field-sm{width:96px;height:96px}.image-field-md{width:150px;height:150px}.image-field-lg{width:200px;height:200px}.image-field-xl{width:300px;height:300px}.image-field-container img{transition:transform .2s ease}.image-field-container:hover img{transform:scale(1.05)}.image-field-container .btn{transition:opacity .2s ease}.image-field-container:not(:hover) .btn{opacity:.6}[data-bs-theme=dark] .image-drop-zone.droppable{border-color:var(--bs-border-color-translucent)}[data-bs-theme=dark] .image-drop-zone.droppable:hover{border-color:var(--bs-primary);background-color:rgba(var(--bs-primary-rgb),.1)}@media (max-width: 576px){.image-field-xl{width:250px;height:250px}.image-field-lg{width:180px;height:180px}}.image-drop-zone:focus{outline:2px solid var(--bs-primary);outline-offset:2px}@media (prefers-reduced-motion: reduce){.image-drop-zone,.image-field-container img,.image-field-container .btn{transition:none}.image-drop-zone.drag-over,.image-field-container:hover img{transform:none}}.mojo-form-group{margin-bottom:1rem}.mojo-form-group .h6{color:var(--bs-secondary);font-weight:600;margin-bottom:.75rem;padding-bottom:.25rem;border-bottom:1px solid var(--bs-border-color)}@media (max-width: 767.98px){.mojo-form-group{padding:.75rem;margin-bottom:.75rem}}.mojo-form-control{margin-bottom:1rem;position:relative}.mojo-form-control .form-label{font-weight:500;margin-bottom:.5rem;color:var(--bs-body-color)}.mojo-form-control .form-text{margin-top:.25rem;font-size:.875rem;color:var(--bs-secondary)}.mojo-form-control .invalid-feedback{margin-top:.25rem}.mojo-form-control .form-check{margin-bottom:0}.mojo-form-control .form-check .form-check-label{font-weight:400}.mojo-form-control .image-field-container{margin-top:.5rem}.mojo-form-control input[type=range]{margin-top:.5rem;margin-bottom:.5rem}@media (max-width: 767.98px){.mojo-form-control{margin-bottom:.75rem}.mojo-form-control .form-label{margin-bottom:.375rem}}.mojo-modal-context-menu-btn{color:inherit!important;border:none;background:transparent;opacity:.7;transition:opacity .15s ease-in-out}.mojo-modal-context-menu-btn:hover,.mojo-modal-context-menu-btn:focus{color:inherit!important;background:rgba(var(--bs-emphasis-color-rgb),.1);opacity:1}.mojo-modal-context-menu-btn:active{background:rgba(var(--bs-emphasis-color-rgb),.2)}.modal.modal-info .mojo-modal-context-menu-btn,.modal.modal-success .mojo-modal-context-menu-btn{color:#fff!important}.modal.modal-warning .mojo-modal-context-menu-btn{color:#000!important}.modal.modal-error .mojo-modal-context-menu-btn,.modal.modal-dark .mojo-modal-context-menu-btn,[data-bs-theme=dark] .mojo-modal-context-menu-btn{color:#fff!important}.modal-header .mojo-modal-context-menu-btn{margin-left:auto;margin-right:0}.field-status{display:inline-block;margin-left:8px}.field-status-label-inline{display:inline-block;margin-left:8px;font-size:.875rem;vertical-align:middle}.field-status-overlay{position:absolute;top:50%;right:8px;transform:translateY(-50%);z-index:10;pointer-events:none}.field-status-full-overlay{position:absolute;inset:0;background-color:rgba(var(--bs-body-bg-rgb),.9);display:flex;align-items:center;justify-content:center;z-index:20;border-radius:var(--bs-border-radius)}.field-status-full-overlay .saving-indicator,.field-status-full-overlay .success-indicator,.field-status-full-overlay .error-indicator{display:flex;align-items:center;padding:8px 12px;background-color:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius);box-shadow:0 2px 4px #0000001a}.field-status [data-status]{display:none;font-size:1rem;transition:opacity .3s ease,transform .3s ease}.field-status .spinner-border{width:1rem;height:1rem;vertical-align:middle}.field-status [data-status=saved]{color:var(--bs-success)}.field-status [data-status=error]{color:var(--bs-danger);cursor:help}@keyframes mojo-status-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes mojo-status-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@media (max-width: 576px){.field-status{margin-left:4px}.field-status [data-status]{font-size:.875rem}}@media (prefers-contrast: high){.field-status [data-status=saving]{color:#06c}.field-status [data-status=saved]{color:#060}.field-status [data-status=error]{color:#c00}}@media (prefers-reduced-motion: reduce){.field-status [data-status]{transition:none}.field-status [data-status].show,.field-status [data-status].hide{animation:none}@keyframes mojo-status-fade-in{0%,to{opacity:1;transform:scale(1)}}@keyframes mojo-status-fade-out{0%,to{opacity:0;transform:scale(1)}}}.collection-multiselect-list .hover-bg:hover{background-color:#0d6efd14}[data-bs-theme=dark] .collection-multiselect-list .hover-bg:hover{background-color:#0d6efd26}:root{--mojo-sidebar-width: 250px;--mojo-sidebar-collapsed-width: 40px;--mojo-portal-gap: 0;--mojo-portal-bg: var(--bs-body-bg);--mojo-topnav-bg: var(--bs-primary, #121620);--mojo-topnav-color: var(#fff);--mojo-portal-muted: var(--bs-secondary-color);--mojo-portal-border: var(--bs-border-color);--mojo-portal-text: var(--bs-body-color);--mojo-sidebar-dark-color: #fff;--mojo-sidebar-dark-color-hover: #5388d6;--mojo-sidebar-dark-bg: #343a40}.portal-layout{display:flex;min-height:100vh;height:100vh;background:var(--mojo-portal-bg)}#portal-sidebar{flex:0 0 var(--mojo-sidebar-width);max-width:var(--mojo-sidebar-width);inline-size:var(--mojo-sidebar-width);height:100%;overflow-y:hidden;z-index:1;transition:inline-size .3s cubic-bezier(.4,0,.2,1),max-width .3s cubic-bezier(.4,0,.2,1),flex-basis .3s cubic-bezier(.4,0,.2,1),margin-left .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1);will-change:inline-size,max-width,flex-basis,transform}.portal-container.collapse-sidebar #portal-sidebar{inline-size:var(--mojo-sidebar-collapsed-width);max-width:var(--mojo-sidebar-collapsed-width);flex-basis:var(--mojo-sidebar-collapsed-width)}.portal-container.hide-sidebar #portal-sidebar{margin-left:calc(-1 * var(--mojo-sidebar-width));border-inline-end:0}#portal-sidebar{box-shadow:4px 0 15px -4px #0003}#portal-sidebar.sidebar-shadow{box-shadow:0 14px 28px #00000040,0 10px 10px #00000038!important}.portal-body{flex:1 1 auto;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}#portal-topnav{flex:0 0 auto;border-block-end:1px solid var(--mojo-portal-border)}nav.topnav-light{background-color:var(--bs-light);border-bottom:1px solid var(--bs-border-color);--bs-navbar-color: var(--bs-body-color);--bs-navbar-hover-color: var(--bs-primary)}nav.topnav-light .topnav-sidebar-toggle,nav.topnav-light .nav-link,nav.topnav-light .btn-link{color:var(--bs-navbar-color)}nav.topnav-light .topnav-sidebar-toggle:hover,nav.topnav-light .nav-link:hover,nav.topnav-light .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-dark{background-color:var(--mojo-sidebar-dark-bg, var(--bs-dark));border-bottom:1px solid var(--bs-border-color-translucent);--bs-navbar-color: rgba(255, 255, 255, .75);--bs-navbar-hover-color: #fff;--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff}nav.topnav-dark .topnav-sidebar-toggle,nav.topnav-dark .nav-link,nav.topnav-dark .btn-link{color:var(--bs-navbar-color)}nav.topnav-dark .topnav-sidebar-toggle:hover,nav.topnav-dark .nav-link:hover,nav.topnav-dark .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-dark .btn-close{filter:invert(1) grayscale(100%) brightness(200%)}nav.topnav-clean{background-color:var(--bs-body-bg);border-bottom:1px solid var(--bs-border-color);box-shadow:var(--bs-box-shadow-sm);--bs-navbar-color: var(--bs-body-color);--bs-navbar-hover-color: var(--bs-primary)}nav.topnav-clean .topnav-sidebar-toggle,nav.topnav-clean .nav-link,nav.topnav-clean .btn-link{color:var(--bs-navbar-color)}nav.topnav-clean .topnav-sidebar-toggle:hover,nav.topnav-clean .nav-link:hover,nav.topnav-clean .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-gradient{background:linear-gradient(90deg,#2c3e50,#34495e);border-bottom:1px solid var(--bs-border-color-translucent);--bs-navbar-color: rgba(255, 255, 255, .75);--bs-navbar-hover-color: #fff;--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff}nav.topnav-gradient .topnav-sidebar-toggle,nav.topnav-gradient .nav-link,nav.topnav-gradient .btn-link{color:var(--bs-navbar-color)}nav.topnav-gradient .topnav-sidebar-toggle:hover,nav.topnav-gradient .nav-link:hover,nav.topnav-gradient .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-gradient .btn-close{filter:invert(1) grayscale(100%) brightness(200%)}nav.topnav-shadow-light{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}nav.topnav-shadow-dark{box-shadow:0 4px 6px -1px #0006,0 2px 4px -2px #0000004d}.portal-content{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:16px;height:100%}.portal-content .muted{color:var(--mojo-portal-muted)}@media (prefers-reduced-motion: reduce){#portal-sidebar{transition:none}}.page-header{background-color:var(--bs-body-bg);border-bottom:1px solid var(--bs-border-color);padding:16px}.portal-content:has([data-container=page-header]){padding:0}[data-container=page-content]{padding:16px}.page-header-content{max-width:100%}.page-header-main{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.page-header-info{display:flex;align-items:center;gap:1rem;flex:1;min-width:0}.page-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;background-color:var(--bs-primary-bg-subtle);color:var(--bs-primary);border-radius:8px}.page-title-group{flex:1;min-width:0}.page-header .page-title{font-weight:600;margin:0;line-height:1.2;color:var(--bs-heading-color)}.page-header .page-description{margin:.5rem 0 0;line-height:1.5}.page-header-sm .page-icon{width:32px;height:32px;font-size:1rem}.page-header-sm .page-title-group .page-title{font-size:1.25rem}.page-header-sm .page-title-group .page-description{font-size:.875rem}.page-header-md .page-icon{width:40px;height:40px;font-size:1.25rem}.page-header-md .page-title-group .page-title{font-size:1.5rem}.page-header-md .page-title-group .page-description{font-size:.95rem}.page-header-lg .page-icon{width:48px;height:48px;font-size:1.5rem}.page-header-lg .page-title-group .page-title{font-size:1.75rem}.page-header-lg .page-title-group .page-description{font-size:1rem}.page-header-xl .page-icon{width:56px;height:56px;font-size:1.75rem}.page-header-xl .page-title-group .page-title{font-size:2rem}.page-header-xl .page-title-group .page-description{font-size:1.1rem}.page-actions{display:flex;gap:.5rem;flex-shrink:0}.page-header-minimal{padding:.75rem 0}.page-header-minimal .page-title-group .page-title{font-size:1.5rem;font-weight:500}.page-header-breadcrumb .breadcrumb{margin-bottom:.5rem;background-color:transparent;padding:0}@media (max-width: 768px){.page-header-main{flex-direction:column;gap:1rem}.page-actions{width:100%;justify-content:flex-start}.page-header-xl .page-title-group .page-title{font-size:1.75rem}.page-header-lg .page-title-group .page-title{font-size:1.5rem}.page-header-md .page-title-group .page-title{font-size:1.25rem}.page-header-sm .page-title-group .page-title{font-size:1.1rem}}[data-bs-theme=dark] .page-header{border-bottom-color:#ffffff1a}.sidebar{display:flex;flex-direction:column;height:100%;width:100%;min-height:0;transition:all .3s cubic-bezier(.4,0,.2,1)}#portal-sidebar .sidebar{position:static;top:auto;left:auto;height:100%;width:100%;z-index:auto;transform:none}.sidebar-dark{background-color:var(--mojo-sidebar-dark-bg, --bs-dark);color:var(--bs-light);border-inline-end:1px solid var(--bs-border-color-translucent)}.sidebar-light{background-color:var(--bs-light);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color)}.sidebar-clean{background-color:var(--bs-body-bg);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color);box-shadow:var(--bs-box-shadow)}.sidebar-admin{border-left:3px solid #b14545}.sidebar-admin .sidebar-header{color:#b14545}.sidebar-light.sidebar-admin .sidebar-nav .nav-link.active{background-color:#b14545}.sidebar-light.sidebar-admin .nav-link.active.has-children{color:#b14545;background-color:var(--bs-secondary-bg);animation:none}.sidebar-global{border-left:3px solid #457bb1}.sidebar-global .sidebar-header{color:#457bb1}.sidebar-light.sidebar-global .sidebar-nav .nav-link.active{background-color:#457bb1}.sidebar-light.sidebar-global .nav-link.active.has-children{color:#457bb1;background-color:var(--bs-secondary-bg);animation:none}.sidebar-gradient{background:linear-gradient(180deg,#2c3e50,#34495e);color:var(--bs-light);border-inline-end:1px solid var(--bs-border-color-translucent)}.sidebar-clean{--mojo-sidebar-width: 220px}.sidebar-container{display:flex;flex-direction:column;height:100%;min-height:0;flex:1}.sidebar-body{flex:1;overflow-y:auto;min-height:0}.sidebar-brand{height:56px;text-align:center;padding-top:14px}.sidebar-dark .sidebar-brand{border-bottom:1px solid var(--bs-border-color-translucent)}.sidebar-light .sidebar-brand{border-bottom:1px solid var(--bs-border-color)}.sidebar-clean .sidebar-brand{border-bottom:1px solid var(--bs-border-color);background-color:var(--bs-secondary-bg)}.sidebar-gradient .sidebar-brand{border-bottom:1px solid var(--bs-border-color-translucent)}.sidebar-brand.clickable{cursor:pointer;transition:background-color .2s ease}.sidebar-brand.clickable:hover{background-color:#ffffff1a}.sidebar-toggle{position:absolute;width:30px;height:30px;font-size:.875rem;background:none;top:.75rem;right:5px;border:none;border-radius:var(--bs-border-radius);color:var(--bs-body-color);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.4,0,.2,1),transform .15s ease-out;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10}.sidebar-toggle:hover{background:var(--bs-secondary-bg);transform:scale(1.1);box-shadow:0 4px 12px #00000026}.sidebar-toggle:active{transform:scale(.95);transition-duration:.1s}.sidebar-toggle .toggle-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.sidebar-toggle .bi-chevron-left{display:block}.sidebar-toggle .bi-chevron-right,.portal-container.collapse-sidebar .sidebar-toggle .bi-chevron-left{display:none}.portal-container.collapse-sidebar .sidebar-toggle .bi-chevron-right{display:block}.portal-container.hide-sidebar .sidebar-toggle{opacity:0;visibility:hidden;pointer-events:none}.sidebar-dark .sidebar-toggle,.sidebar-gradient .sidebar-toggle{background:var(--bs-border-color-translucent);color:var(--bs-secondary-color);border-color:var(--bs-border-color-translucent)}.sidebar-dark .sidebar-toggle:hover,.sidebar-gradient .sidebar-toggle:hover{background:var(--bs-secondary-bg);color:var(--bs-light)}.sidebar-light .sidebar-toggle{background:var(--bs-secondary-bg);color:var(--bs-body-color);border-color:var(--bs-border-color)}.sidebar-light .sidebar-toggle:hover{background:var(--bs-tertiary-bg);color:var(--bs-emphasis-color)}.sidebar-clean .sidebar-toggle{background:var(--bs-light);color:var(--bs-primary);border-color:var(--bs-primary-border-subtle);box-shadow:var(--bs-box-shadow-sm)}.sidebar-clean .sidebar-toggle:hover{background:var(--bs-primary);color:#fff;box-shadow:0 4px 12px rgba(var(--bs-primary-rgb),.3)}.sidebar-toggle .toggle-icon{transform:rotate(0)}.topnav-sidebar-toggle{background:none!important;border:none!important;color:#ffffffe6;padding:.5rem;border-radius:.375rem;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.topnav-sidebar-toggle:hover{background:none!important;color:var(--bs-light);transform:scale(1.1)}.topnav-sidebar-toggle:focus{outline:none;box-shadow:none}.topnav-sidebar-toggle .toggle-chevron{font-size:1.1rem;transition:transform .3s cubic-bezier(.4,0,.2,1);transform:rotate(180deg)}.portal-container.collapse-sidebar .topnav-sidebar-toggle .toggle-chevron,.portal-container.hide-sidebar .topnav-sidebar-toggle .toggle-chevron{transform:rotate(0)}.navbar-dark .topnav-sidebar-toggle{color:#ccc}.navbar-dark .topnav-sidebar-toggle:hover{color:#fff;background:none!important}.navbar-light .topnav-sidebar-toggle{color:var(--bs-navbar-light-color)}.navbar-light .topnav-sidebar-toggle:hover{color:var(--bs-navbar-light-hover-color);background:var(--bs-secondary-bg)!important}@keyframes sidebar-toggle-pulse{0%{box-shadow:0 0 rgba(var(--bs-primary-rgb),.4)}70%{box-shadow:0 0 0 8px rgba(var(--bs-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--bs-primary-rgb),0)}}.sidebar-toggle.pulse{animation:sidebar-toggle-pulse 2s infinite}.sidebar-toggle:focus{outline:none;box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25)}.sidebar-toggle:focus-visible{outline:2px solid var(--bs-primary);outline-offset:2px}[data-bs-theme=dark] .sidebar-toggle{background:#ffffff1a;color:var(--bs-light);border-color:#ffffff26}[data-bs-theme=dark] .sidebar-toggle:hover{background:#fff3;color:var(--bs-white);box-shadow:0 4px 12px #ffffff1a}[data-bs-theme=dark] .sidebar-clean .sidebar-toggle{background:var(--bs-primary);color:#fff;border-color:var(--bs-primary)}[data-bs-theme=dark] .sidebar-clean .sidebar-toggle:hover{background:var(--bs-primary);filter:brightness(1.1)}.brand-content{display:flex;flex-direction:column;align-items:center}.brand-logo{max-height:32px;width:auto;margin-bottom:.5rem}.brand-subtext{font-size:.75rem}.sidebar-group-header{cursor:pointer;border-bottom:1px solid rgba(0,0,0,.1)}.sidebar-dark .sidebar-group-header{background-color:var(--bs-dark)}.sidebar-light .sidebar-group-header{background-color:#dfe5ea}.sidebar-group-header:hover{cursor:pointer;color:var(--mojo-primary);background-color:#1414641a}.sidebar-nav{display:flex;flex-direction:column;padding:.5rem 0;min-height:100%}.sidebar-nav .nav-link{display:flex;align-items:center;position:relative;padding:.75rem 1rem;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1),transform .15s ease-out;cursor:pointer;transform:translate(0);border-radius:8px 0 0 8px;margin-left:.2rem}.sidebar-nav .nav-link:hover{margin-left:.4rem!important}.sidebar-nav .nav-link i{width:20px;text-align:center;transition:transform .2s ease-out,color .2s ease-out}.sidebar-nav .nav-link:hover i{transform:scale(1.1)}.portal-container.collapse-sidebar .sidebar-nav .nav-link:hover i{transform:scale(1.2)}.sidebar-nav .collapse .nav-link{padding:.5rem 1rem;font-size:.9rem}.sidebar-nav .bi-chevron-down{transition:transform .3s}.sidebar-nav .nav-link[aria-expanded=true] .bi-chevron-down{transform:rotate(180deg)}.sidebar-dark .sidebar-nav .nav-link{color:var(--mojo-sidebar-dark-color, #fff)}.sidebar-dark .sidebar-nav .nav-link:hover{color:var(--mojo-sidebar-dark-color-hover, #5388d6);background-color:var(--bs-secondary-bg)}.sidebar-dark .sidebar-nav .nav-link.active{color:var(--bs-light);background-color:var(--bs-primary)}.sidebar-light .sidebar-nav .nav-link{color:var(--bs-body-color)}.sidebar-light .sidebar-nav .nav-link:hover{color:var(--bs-emphasis-color);background-color:var(--bs-secondary-bg)}.sidebar-light .sidebar-nav .nav-link.active{color:var(--bs-light);background-color:var(--bs-primary)}.sidebar-clean .sidebar-nav .nav-link{color:var(--bs-secondary-color)}.sidebar-clean .sidebar-nav .nav-link:hover{color:var(--bs-body-color);background-color:var(--bs-secondary-bg)}.sidebar-clean .sidebar-nav .nav-link.active{color:var(--bs-primary);background-color:var(--bs-primary-bg-subtle);font-weight:500}.sidebar-gradient .sidebar-nav .nav-link{color:var(--bs-light)}.sidebar-gradient .sidebar-nav .nav-link:hover{color:var(--bs-white);background-color:#ffffff1a}.sidebar-gradient .sidebar-nav .nav-link.active{color:var(--bs-white);background-color:var(--bs-primary)}.sidebar-nav .nav-link.has-children{border-top-left-radius:0;border-bottom-left-radius:0}.sidebar-nav .nav-link.has-children:hover{transform:none}.sidebar-nav .nav-link.has-children.collapsed{border-left:none}.sidebar-light .nav-link.active.has-children,.sidebar-clean .nav-link.active.has-children{color:var(--bs-body-color);background-color:var(--bs-secondary-bg);animation:none}.sidebar-dark .nav-link.active.has-children,.sidebar-gradient .nav-link.active.has-children{color:var(--bs-light);background-color:#0003;animation:none}.nav-text{flex:1;white-space:nowrap;transition:opacity .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1),margin .3s cubic-bezier(.4,0,.2,1)}.nav-arrow{transition:transform .2s ease,opacity .3s cubic-bezier(.4,0,.2,1),margin .3s cubic-bezier(.4,0,.2,1);margin-left:auto}.nav-link[aria-expanded=true] .nav-arrow{transform:rotate(180deg)}.portal-container.collapse-sidebar .nav-text,.portal-container.collapse-sidebar .sidebar-collapse-hide{opacity:0;width:0;margin-right:0;overflow:hidden}.portal-container.collapse-sidebar .collapsed-hidden{opacity:0;width:0;overflow:hidden;display:none}.portal-container.collapse-sidebar .sidebar-nav .nav-link{justify-content:center;padding-left:.5rem;padding-right:.5rem;transition:all .3s cubic-bezier(.4,0,.2,1)}.portal-container.collapse-sidebar .sidebar-nav .nav-link i{margin-right:0!important}.portal-container.collapse-sidebar .nav-submenu{display:none!important}.portal-container.collapse-sidebar .sidebar-header{text-align:center;overflow:hidden}.portal-container.collapse-sidebar .nav-arrow{opacity:0;margin-left:0}.portal-container.collapse-sidebar .sidebar .nav-link{position:relative;overflow:visible;width:var(--mojo-sidebar-collapsed-width, 48px)}@keyframes tooltip-slide-in{0%{opacity:0;visibility:hidden;transform:translateY(-50%) translate(-10px) scale(.9)}to{opacity:1;visibility:visible;transform:translateY(-50%) translate(0) scale(1)}}@keyframes tooltip-arrow-slide-in{0%{opacity:0;transform:translateY(-50%) translate(-3px)}to{opacity:1;transform:translateY(-50%) translate(0)}}[data-bs-theme=dark] .portal-container.collapse-sidebar .sidebar .nav-link:hover:after{background:var(--bs-light);color:var(--bs-dark)}[data-bs-theme=dark] .portal-container.collapse-sidebar .sidebar .nav-link:hover:before{border-right-color:var(--bs-light)}.portal-container.mobile-layout .nav-link:hover:after,.portal-container.mobile-layout .nav-link:hover:before{display:none!important}.portal-container.collapse-sidebar .sidebar .nav-link:hover{background-color:rgba(var(--bs-primary-rgb),.1);border-radius:var(--mojo-border-radius);transform:translate(0) scale(1.05);box-shadow:0 2px 8px #0000001a}.portal-container.collapse-sidebar .sidebar-light .nav-link:hover{background-color:rgba(var(--bs-primary-rgb),.08);box-shadow:0 2px 8px rgba(var(--bs-primary-rgb),.2)}.portal-container.collapse-sidebar .sidebar-dark .nav-link:hover{background-color:#ffffff1a;box-shadow:0 2px 8px #ffffff1a}.portal-container.collapse-sidebar .sidebar-clean .nav-link:hover{background-color:var(--bs-light);box-shadow:0 2px 8px rgba(var(--bs-primary-rgb),.15)}.nav-submenu .nav-link{padding-left:2.5rem;font-size:.9rem}.nav-submenu{margin-left:1.8rem}.sidebar-dark .nav-submenu,.sidebar-gradient .nav-submenu{border-left:4px solid rgba(255,255,255,.2)}.sidebar-light .nav-submenu{border-left:4px solid #cdcdcd}.sidebar-clean .nav-submenu{border-left:4px solid var(--bs-border-color)}.nav-divider{margin:.75rem 0;padding:0 1rem}.nav-divider-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.25rem 0;display:block}.sidebar-dark .nav-divider-label,.sidebar-gradient .nav-divider-label{color:var(--bs-secondary-color);border-bottom:1px solid var(--bs-border-color-translucent)}.sidebar-light .nav-divider-label{color:var(--bs-secondary-color);border-bottom:1px solid var(--bs-border-color)}.sidebar-clean .nav-divider-label{color:var(--bs-secondary-color);border-bottom:1px solid var(--bs-border-color);margin:0 .5rem}.nav-divider-item{margin:.25rem 0;padding:0;list-style:none}.nav-divider-line{margin:0 1rem;border:0;border-top:1px solid;opacity:.25}.sidebar-dark .nav-divider-line,.sidebar-gradient .nav-divider-line,.sidebar-light .nav-divider-line{border-color:var(--bs-secondary-color)}.sidebar-clean .nav-divider-line{border-color:var(--bs-border-color);margin:0 1.5rem}.nav-spacer-item{flex:1;list-style:none}.nav-section{margin-bottom:.5rem}.nav-section-header{padding:.5rem 1rem;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.nav-section-header.collapsible{cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:color .2s ease}.sidebar-dark .nav-section-header,.sidebar-gradient .nav-section-header{color:var(--bs-secondary-color)}.sidebar-dark .nav-section-header.collapsible:hover,.sidebar-gradient .nav-section-header.collapsible:hover{color:var(--bs-light)}.sidebar-light .nav-section-header{color:var(--bs-secondary-color)}.sidebar-light .nav-section-header.collapsible:hover{color:var(--bs-body-color)}.sidebar-clean .nav-section-header{color:var(--bs-secondary-color);margin:0 .5rem}.sidebar-clean .nav-section-header.collapsible:hover{color:var(--bs-body-color)}.nav-section-items{padding-left:0}.sidebar-nav .badge{font-size:.7rem;padding:.25rem .5rem}.sidebar-footer{flex-shrink:0;margin-top:auto}.footer-content{padding:1rem;font-size:.85rem}.sidebar-dark .sidebar-footer,.sidebar-gradient .sidebar-footer{border-top:1px solid var(--bs-border-color-translucent)}.sidebar-dark .footer-content,.sidebar-gradient .footer-content{color:var(--bs-secondary-color)}.sidebar-light .sidebar-footer{border-top:1px solid var(--bs-border-color)}.sidebar-light .footer-content{color:var(--bs-secondary-color)}.sidebar-clean .sidebar-footer{border-top:1px solid var(--bs-border-color);background-color:var(--bs-secondary-bg)}.sidebar-clean .footer-content{color:var(--bs-secondary-color)}.config-switcher{position:absolute;top:8px;right:8px}.config-menu{position:absolute;inset:0;background-color:rgba(var(--bs-dark-rgb),.95);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1050;padding:1rem}.config-menu-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--bs-border-color-translucent)}.config-menu-body{display:flex;flex-direction:column;gap:.5rem}.config-option{padding:.75rem;border:1px solid var(--bs-border-color-translucent);border-radius:var(--bs-border-radius);background-color:var(--bs-secondary-bg);cursor:pointer;transition:all .2s ease}.config-option:hover{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color)}.config-option.active{background-color:var(--bs-primary-bg-subtle);border-color:var(--bs-primary)}.config-name{font-weight:500;color:var(--bs-body-color)}.group-selector-container{padding:.75rem}.group-selector-wrapper{position:relative;width:100%}.group-selector{position:relative}.group-selector.disabled{opacity:.6;pointer-events:none}.group-selector .input-group-text{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color);color:var(--bs-secondary-color)}.group-selector .form-control{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color);color:var(--bs-body-color)}.group-selector .form-control:focus{background-color:var(--bs-tertiary-bg);border-color:var(--bs-primary);color:var(--bs-body-color);box-shadow:0 0 0 .2rem rgba(var(--bs-primary-rgb),.25)}.group-selector .form-control::placeholder{color:var(--bs-secondary-color)}.group-selector .dropdown-toggle{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color);color:var(--bs-secondary-color)}.group-selector .dropdown-toggle:hover,.group-selector .dropdown-toggle:focus{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color);color:var(--bs-body-color)}.dropdown-arrow{transition:transform .2s ease}.group-selector .dropdown-toggle[aria-expanded=true] .dropdown-arrow{transform:rotate(180deg)}.group-dropdown{position:absolute;top:100%;left:0;right:0;background-color:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-top:none;border-radius:0 0 var(--bs-border-radius) var(--bs-border-radius);max-height:400px;overflow-y:auto;z-index:1050;box-shadow:var(--bs-box-shadow-lg);opacity:0;transform:translateY(-10px);transition:opacity .2s ease,transform .2s ease;display:none}.group-dropdown.show{display:block;opacity:1;transform:translateY(0)}.group-dropdown .dropdown-header{padding:.75rem 1rem;background-color:var(--bs-secondary-bg);border-bottom:1px solid var(--bs-border-color);color:var(--bs-secondary-color);font-size:.875rem}.group-results{max-height:300px;overflow-y:auto}.group-item{padding:0;border-bottom:1px solid var(--bs-border-color-translucent);cursor:pointer;transition:background-color .2s ease}.group-item:hover,.group-item.focused{background-color:var(--bs-secondary-bg)}.group-item.selected{background-color:var(--bs-primary-bg-subtle);border-left:3px solid var(--bs-primary)}.group-item.selected:hover{background-color:var(--bs-primary-bg-subtle)}.group-content{padding:.75rem 1rem;display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.group-main{flex:1;min-width:0}.group-meta{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}.group-name{display:flex;align-items:center;flex-wrap:wrap;gap:.25rem;margin-bottom:.25rem}.group-hierarchy{color:var(--bs-secondary-color);font-size:.85rem;font-weight:400}.group-name-text{color:var(--bs-body-color);font-weight:500}.group-type{font-size:.7rem;padding:.25rem .5rem}.group-description{color:var(--bs-secondary-color);font-size:.85rem;line-height:1.3;margin-top:.25rem}.group-item mark{background-color:var(--bs-warning-bg-subtle);color:var(--bs-body-color);padding:0;border-radius:var(--bs-border-radius-sm)}.group-member-count{display:flex;align-items:center;color:var(--bs-secondary-color);font-size:.8rem}.group-status{display:flex;align-items:center}.status-indicator{width:8px;height:8px;border-radius:50%;display:inline-block}.status-indicator.status-active{background-color:var(--bs-success)}.status-indicator.status-inactive{background-color:var(--bs-secondary)}.status-indicator.status-archived{background-color:var(--bs-danger)}.status-indicator.status-pending{background-color:var(--bs-warning)}.group-dropdown .dropdown-item-text{color:var(--bs-secondary-color);padding:1rem}.group-dropdown .dropdown-divider{border-top:1px solid var(--bs-border-color);margin:.5rem 0}.selected-group-display{animation:fadeInUp .3s ease}.selected-group-card{background-color:var(--bs-primary-bg-subtle);border:1px solid var(--bs-primary-border-subtle);border-radius:var(--bs-border-radius);padding:.75rem}.selected-group-icon{flex-shrink:0}.selected-group-info{min-width:0}.selected-group-name{color:var(--bs-body-color);margin-bottom:.25rem}.selected-group-desc{color:var(--bs-secondary-color);line-height:1.3}.selected-group-actions{flex-shrink:0}.group-dropdown::-webkit-scrollbar,.group-results::-webkit-scrollbar{width:6px}.group-dropdown::-webkit-scrollbar-track,.group-results::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}.group-dropdown::-webkit-scrollbar-thumb,.group-results::-webkit-scrollbar-thumb{background:var(--bs-border-color);border-radius:var(--bs-border-radius-sm)}.group-dropdown::-webkit-scrollbar-thumb:hover,.group-results::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}.context-menu-view.header-menu{margin-top:-.6rem}.context-menu-view.header-menu-absolute{top:1rem;right:1rem}.portal-container.mobile-layout #portal-sidebar{position:fixed!important;inset:0;width:100vw;height:100vh;z-index:var(--mojo-zindex-modal);transform:translate(0);transition:transform .35s cubic-bezier(.4,0,.2,1);box-shadow:0 0 20px #0000004d}.portal-container.mobile-layout #portal-sidebar .sidebar{height:100vh;width:100%}.portal-container.mobile-layout #portal-sidebar .sidebar-container{height:100%}.portal-container.mobile-layout.hide-sidebar #portal-sidebar{transform:translate(-100%);box-shadow:0 0 20px #0000}.portal-container.mobile-layout #portal-sidebar,.portal-container.mobile-layout.collapse-sidebar #portal-sidebar{inline-size:100vw!important;max-width:100vw!important;flex-basis:100vw!important}.portal-container.mobile-layout .nav-text,.portal-container.mobile-layout.collapse-sidebar .nav-text{opacity:1!important;width:auto!important;overflow:visible!important}.portal-container.mobile-layout .nav-arrow,.portal-container.mobile-layout.collapse-sidebar .nav-arrow{opacity:1!important}.portal-container.mobile-layout .sidebar-nav .nav-link,.portal-container.mobile-layout.collapse-sidebar .sidebar-nav .nav-link{justify-content:flex-start!important;padding:1rem!important;font-size:1rem}.portal-container.mobile-layout .nav-submenu,.portal-container.mobile-layout.collapse-sidebar .nav-submenu{display:block!important}.portal-container.mobile-layout .sidebar-toggle{display:none}.portal-container.mobile-layout .group-selector-container,.portal-container.mobile-layout .config-menu{padding:.5rem}.portal-container.mobile-layout .selected-group-card{padding:1rem}.portal-container.mobile-layout .group-dropdown{max-height:300px;left:-5px;right:-5px;border-radius:.5rem;border:1px solid #495057;box-shadow:0 1rem 3rem #0000004d}.portal-container.mobile-layout .group-content{padding:1rem .75rem;flex-direction:column;align-items:stretch;gap:.5rem}.portal-container.mobile-layout .group-meta{flex-direction:row;justify-content:space-between;align-items:center}.portal-sidebar-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#00000080;z-index:calc(var(--mojo-zindex-modal) - 1);opacity:0;visibility:hidden;transition:opacity .35s cubic-bezier(.4,0,.2,1),visibility .35s cubic-bezier(.4,0,.2,1),backdrop-filter .35s cubic-bezier(.4,0,.2,1);-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}.portal-container.mobile-layout:not(.hide-sidebar) .portal-sidebar-backdrop{opacity:1;visibility:visible;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.portal-container #portal-sidebar,.sidebar-nav .nav-link,.nav-text,.nav-arrow,.sidebar-header,.sidebar-footer,.sidebar-header .fs-5{transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sidebar-nav .nav-item:nth-child(1) .nav-link{transition-delay:0ms}.sidebar-nav .nav-item:nth-child(2) .nav-link{transition-delay:20ms}.sidebar-nav .nav-item:nth-child(3) .nav-link{transition-delay:40ms}.sidebar-nav .nav-item:nth-child(4) .nav-link{transition-delay:60ms}.sidebar-nav .nav-item:nth-child(5) .nav-link{transition-delay:80ms}.sidebar-nav .nav-item:nth-child(6) .nav-link{transition-delay:.1s}.sidebar-nav .nav-item:nth-child(7) .nav-link{transition-delay:.12s}.sidebar-nav .nav-item:nth-child(8) .nav-link{transition-delay:.14s}[data-bs-theme=dark] .group-dropdown{background-color:var(--bs-body-bg);border-color:var(--bs-border-color)}[data-bs-theme=dark] .config-menu{background-color:rgba(var(--bs-dark-rgb),.95)}[data-bs-theme=dark] .config-option{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color)}[data-bs-theme=dark] .group-selector .form-control{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color);color:var(--bs-body-color)}[data-bs-theme=dark] .group-selector .input-group-text{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color);color:var(--bs-secondary-color)}[data-bs-theme=dark] .group-item:hover,[data-bs-theme=dark] .group-item.focused{background-color:var(--bs-secondary-bg)}[data-bs-theme=dark] .selected-group-card{background-color:var(--bs-primary-bg-subtle);border-color:var(--bs-primary-border-subtle)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.group-item:focus{outline:2px solid #0d6efd;outline-offset:-2px}@media (prefers-contrast: high){.group-dropdown{border-width:2px;border-color:#fff}.group-item.selected{border-left-width:4px}.status-indicator{border:1px solid #fff}}@media (prefers-reduced-motion: reduce){.group-dropdown,.dropdown-arrow{transition:none}.selected-group-display{animation:none}.portal-container #portal-sidebar,.sidebar-nav .nav-link,.nav-text,.nav-arrow,.sidebar-header,.sidebar-footer,.sidebar-header .fs-5{transition:none!important;animation:none!important}.sidebar-nav .nav-link i{transition:none!important}.sidebar-nav .nav-link:hover,.portal-container.collapse-sidebar .sidebar .nav-link:hover{transform:none!important;box-shadow:none!important}.portal-sidebar-backdrop{transition:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}.sidebar-nav .nav-item:nth-child(n) .nav-link{transition-delay:0ms!important}.portal-container:not(.collapse-sidebar) #portal-sidebar{animation:none!important}.sidebar-nav .nav-link.active{animation:none!important}.nav-link[data-bs-toggle=collapse] .bi-chevron-down{transition:none!important}.nav-link[aria-expanded=true] .bi-chevron-down{transform:rotate(180deg)!important}.portal-container.collapse-sidebar .sidebar .nav-link:hover:after,[data-bs-theme=dark] .portal-container.collapse-sidebar .sidebar .nav-link:hover:after,.portal-container.collapse-sidebar .sidebar .nav-link:hover:before{animation:none!important;transition:none!important;opacity:1!important;visibility:visible!important;transform:translateY(-50%) translate(0)!important}.sidebar-toggle,.sidebar-toggle .toggle-icon{transition:none!important;animation:none!important}.sidebar-toggle:hover{transform:none!important}}.mojo-sidebar-force-open .portal-container{--mojo-sidebar-width: 250px !important}.mojo-sidebar-force-open #portal-sidebar{inline-size:var(--mojo-sidebar-width)!important;max-width:var(--mojo-sidebar-width)!important;flex-basis:var(--mojo-sidebar-width)!important}.mojo-sidebar-force-collapsed .portal-container{--mojo-sidebar-width: var(--mojo-sidebar-collapsed-width) !important}.mojo-sidebar-force-collapsed #portal-sidebar{inline-size:var(--mojo-sidebar-collapsed-width)!important;max-width:var(--mojo-sidebar-collapsed-width)!important;flex-basis:var(--mojo-sidebar-collapsed-width)!important}.mojo-sidebar-force-hidden #portal-sidebar{inline-size:0!important;max-width:0!important;flex-basis:0!important;overflow:hidden!important}.mojo-sidebar-no-transition #portal-sidebar,.mojo-sidebar-no-transition .sidebar-nav .nav-link,.mojo-sidebar-no-transition .nav-text,.mojo-sidebar-no-transition .nav-arrow{transition:none!important}.portal-container.sidebar-opening #portal-sidebar{transition-duration:.35s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.portal-container.sidebar-closing #portal-sidebar{transition-duration:.25s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.portal-container:not(.collapse-sidebar) #portal-sidebar{animation:sidebar-expand .4s cubic-bezier(.34,1.56,.64,1)}@keyframes sidebar-expand{0%{transform:scale(.98) translate(-2px);opacity:.9}60%{transform:scale(1.01) translate(1px)}to{transform:scale(1) translate(0);opacity:1}}@keyframes nav-pulse{0%{box-shadow:0 0 rgba(var(--bs-primary-rgb),.4)}70%{box-shadow:0 0 0 6px rgba(var(--bs-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--bs-primary-rgb),0)}}.sidebar-nav .nav-link.active{animation:nav-pulse 2s infinite}.nav-link[data-bs-toggle=collapse] .bi-chevron-down{transition:transform .25s cubic-bezier(.4,0,.2,1)}.nav-link[aria-expanded=true] .bi-chevron-down{transform:rotate(180deg) scale(1.1)}.mojo-sidebar-theme-auto .sidebar{background-color:var(--bs-body-bg);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link{color:var(--bs-body-color)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link:hover{background-color:var(--bs-secondary-bg)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link.active{background-color:var(--bs-primary);color:var(--bs-white)}.mojo-sidebar-collapsed .nav-text,.mojo-sidebar-collapsed .nav-arrow{opacity:0;width:0;overflow:hidden}.mojo-sidebar-collapsed .sidebar-nav .nav-link{justify-content:center;padding-left:.5rem;padding-right:.5rem}.mojo-sidebar-collapsed .nav-submenu{display:none!important}.mojo-portal-fixed .portal-layout{position:fixed;inset:0;z-index:var(--mojo-zindex-fixed)}.mojo-portal-sticky-sidebar #portal-sidebar{position:sticky;top:0;height:100vh}.mojo-portal-content-padded .portal-content{padding:var(--mojo-spacer-lg)}.mojo-portal-content-flush .portal-content,.mobile-layout .portal-content{padding:0}.mojo-sidebar-slide #portal-sidebar{transition:transform var(--mojo-transition-base) ease-in-out}.mojo-sidebar-fade #portal-sidebar{transition:opacity var(--mojo-transition-base) ease-in-out}.mojo-sidebar-scale #portal-sidebar{transition:transform var(--mojo-transition-base) cubic-bezier(.34,1.56,.64,1)}.js-sidebar-transitioning *{pointer-events:none}.js-sidebar-ready{transition:all var(--mojo-transition-base)}@media (prefers-color-scheme: dark){.mojo-sidebar-theme-auto .sidebar{background-color:var(--bs-dark);color:var(--bs-light);border-right:1px solid var(--bs-gray-800)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link{color:var(--bs-gray-300)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link:hover{background-color:#ffffff1a;color:var(--bs-white)}}.mojo-sidebar-collapsed .nav-link:focus-visible{outline:2px solid var(--bs-primary);outline-offset:-2px;z-index:1}.mojo-skip-to-content{position:absolute;top:-40px;left:6px;background:var(--bs-primary);color:#fff;padding:8px;text-decoration:none;z-index:var(--mojo-zindex-tooltip);border-radius:var(--mojo-border-radius);font-size:.875rem}.mojo-skip-to-content:focus{top:6px}.portal-container.mobile-layout:not(.hide-sidebar){overflow:hidden}.portal-container.mobile-layout:not(.hide-sidebar) .portal-body{pointer-events:none}.group-selection-sidebar{background:#fff;border-right:1px solid var(--bs-border-color)}.group-selection-sidebar .form-control-sm{font-size:.875rem}.group-item{cursor:pointer;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05);position:relative}.group-item:last-child{border-bottom:none}.group-item:hover{background-color:#f8f9fa!important;border-left:3px solid var(--bs-primary)}.group-item:active{background-color:#e9ecef!important;transform:translate(1px)}.group-item .bi-chevron-right{opacity:0;transition:opacity .2s ease}.group-item:hover .bi-chevron-right{opacity:1}.group-header{margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid rgba(0,0,0,.1)}.group-header .cursor-pointer{cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease}.group-header .cursor-pointer:hover{background-color:#f8f9fa!important}.group-header .bi-chevron-down{transition:transform .2s ease}.group-header .cursor-pointer:hover .bi-chevron-down{transform:rotate(180deg)}.sidebar-dark .group-selection-sidebar{background:#2c3e50;border-right-color:#34495e}.sidebar-dark .group-item{border-bottom-color:#ffffff0d}.sidebar-dark .group-item:hover{background-color:#34495e!important}.sidebar-dark .group-item:active{background-color:#3d566e!important}.sidebar-dark .group-header{border-bottom-color:#ffffff1a}.sidebar-dark .group-header .cursor-pointer:hover{background-color:#34495e!important}.sidebar-dark .text-muted{color:#a9d0f6bf!important}.group-selection-sidebar .spinner-border-sm{width:1rem;height:1rem}.group-selection-sidebar .text-center{color:var(--bs-secondary)}.group-selection-sidebar .form-control:focus{border-color:var(--bs-primary);box-shadow:0 0 0 .2rem rgba(var(--bs-primary-rgb),.25)}.group-selection-sidebar .bi-inbox,.group-selection-sidebar .bi-search{color:var(--bs-secondary)}.group-selection-sidebar .bg-light{background-color:#00000005!important}.sidebar-dark .group-selection-sidebar .bg-light{background-color:#ffffff05!important}.group-selection-sidebar .text-decoration-none:hover{color:var(--bs-primary)!important}.simple-search-view{background-color:var(--bs-body-bg);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color);box-shadow:var(--bs-box-shadow)}.modal-body .simple-search-view>div:first-child{position:sticky;top:0;z-index:10;background-color:var(--bs-body-bg)}[data-bs-theme=dark] .modal-body .simple-search-view>div:first-child{background-color:var(--bs-body-bg)}.collapse-sidebar .simple-search-view{background-color:var(--mojo-topnav-bg)!important}.collapse-sidebar .simple-search-view>*{display:none!important}.simple-search-item{cursor:pointer;transition:background-color .15s ease-in-out,transform .15s ease-in-out;border-radius:.25rem}.simple-search-item:hover{background-color:#0000320d;transform:translateY(-1px)}[data-bs-theme=dark] .simple-search-item:hover{background-color:#ffffff1a}.simple-search-exit-btn{width:20px;height:20px;margin-top:-5px}.simple-search-clear-btn{width:24px;height:24px;border-radius:50%}.navbar-nav .nav-item button[data-action=show-selector]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:250px;display:inline-flex;align-items:center}.navbar-nav .nav-item button[data-action=show-selector] .group-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 768px){.navbar-nav .nav-item button[data-action=show-selector]{max-width:150px}}.timeline{position:relative;padding-left:2rem}.timeline:before{content:"";position:absolute;left:.75rem;top:0;bottom:0;width:2px;background-color:#dee2e6}.timeline-item{position:relative;margin-bottom:1.5rem}.timeline-marker{position:absolute;left:-2rem;top:.125rem;width:1.5rem;height:1.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;color:#fff;border:2px solid white;box-shadow:0 2px 4px #0000001a}.timeline-marker-info{background-color:#0dcaf0}.timeline-marker-primary{background-color:#0d6efd}.timeline-marker-success{background-color:#198754}.timeline-marker-danger{background-color:#dc3545}.timeline-marker-warning{background-color:#ffc107;color:#000}.timeline-marker-secondary{background-color:#6c757d}.timeline-content{background-color:#f8f9fa;padding:1rem;border-radius:.375rem;border:1px solid #dee2e6}.job-status-indicator{display:inline-flex;align-items:center;gap:.5rem}.job-health-indicator{width:12px;height:12px;border-radius:50%;display:inline-block}.health-healthy{background-color:#198754}.health-warning{background-color:#ffc107}.health-critical{background-color:#dc3545}.health-unknown{background-color:#6c757d}.job-stats-header .card{transition:transform .2s ease,box-shadow .2s ease}.job-stats-header .card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026!important}.job-health-header .health-indicator{animation:pulse 2s infinite}@keyframes pulse{0%{opacity:1}50%{opacity:.7}to{opacity:1}}.logs-container{background-color:#1e1e1e!important;color:#d4d4d4!important}.logs-container .text-info{color:#9cdcfe!important}.logs-container .text-warning{color:#dcdcaa!important}.logs-container .text-danger{color:#f14c4c!important}.logs-container .text-success{color:#4ec9b0!important}.job-details-view pre code{font-size:.875rem;line-height:1.4}@media (max-width: 768px){.timeline{padding-left:1.5rem}.timeline-marker{left:-1.75rem;width:1.25rem;height:1.25rem;font-size:.625rem}.timeline-content{padding:.75rem}}.channel-status-badge{font-size:.75rem;padding:.25rem .5rem}.runner-utilization{height:4px;background-color:#e9ecef;border-radius:2px;overflow:hidden}.runner-utilization-fill{height:100%;transition:width .3s ease}.runner-utilization-low{background-color:#198754}.runner-utilization-medium{background-color:#ffc107}.runner-utilization-high{background-color:#fd7e14}.runner-utilization-critical{background-color:#dc3545}.mojo-select-cell,.mojo-select-all-cell{background-color:transparent;cursor:pointer;transition:background-color .2s ease;text-align:center;vertical-align:middle;width:40px;height:40px;display:flex;align-items:center;justify-content:center}.mojo-select-cell.selected,.mojo-select-all-cell.selected{background-color:transparent}.mojo-checkbox{height:20px;width:20px;border-radius:6px;border:2px solid var(--bs-border-color);background-color:var(--bs-body-bg);display:flex;align-items:center;justify-content:center;transition:all .2s ease}.mojo-checkbok:focused,.mojo-checkbok:hover{box-shadow:0 0 0 .25rem #3874ff40}.mojo-select-cell:hover .mojo-checkbox{box-shadow:0 0 0 .25rem #3874ff40}.mojo-select-cell.selected .mojo-checkbox,.mojo-select-all-cell.selected .mojo-checkbox{color:#fff;background-color:var(--bs-primary);border-color:var(--bs-primary)}.mojo-checkbox i{font-size:1rem;opacity:0;transition:opacity .2s ease}.mojo-select-cell.selected .mojo-checkbox i,.mojo-select-all-cell.selected .mojo-checkbox i{opacity:1}.mojo-select-all-cell.indeterminate .mojo-checkbox{border-color:var(--bs-primary);background-color:var(--bs-primary)}.mojo-select-all-cell.indeterminate .mojo-checkbox i{opacity:1;color:#fff}.table-page-container{position:relative}.mojo-table-wrapper{padding:1rem}.mojo-table-loading{position:absolute;top:0;left:0;right:0;background-color:var(--bs-body-bg);opacity:.8;height:100%}.table-page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:1rem;margin-bottom:1.5rem}.table-container{position:relative;transition:opacity .3s ease}.table-container.is-loading{opacity:.7;pointer-events:none}.table-status-bar.table-status-top{border-top:none;border-bottom:1px solid var(--bs-border-color);padding-top:0;padding-bottom:.75rem;margin-bottom:1rem}.status-info{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.table-loading-overlay{position:absolute;inset:0;background:var(--bs-body-bg);opacity:.9;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.loading-content{padding:2rem;text-align:center}.loading-message{margin-top:1rem;color:var(--bs-secondary-color);font-size:.95rem}.loading-indicator{display:inline-flex;align-items:center;gap:.5rem}.error-indicator{animation:mojo-pulse 2s ease-in-out infinite;display:inline-flex;align-items:center;gap:.25rem}.table-actions-bottom{border-bottom:none;border-top:1px solid var(--bs-border-color);padding-top:1rem;padding-bottom:0;margin-top:1rem;margin-bottom:0}.batch-actions-panel{position:sticky;bottom:10px;box-shadow:0 1rem 3rem #0006;background-color:var(--bs-body-bg);height:60px;z-index:20;margin:0 8px}div.batch-select-count{font-size:1.5rem!important;background-color:var(--bs-primary);color:var(--bs-white);min-width:50px;text-align:center;height:60px;line-height:60px}div.batch-select-title{font-size:1.5rem!important;line-height:60px;height:60px}div.batch-select-action{cursor:pointer;color:var(--bs-primary-text-emphasis);transition:color .2s ease}div.batch-select-action:hover{color:var(--bs-primary)}div.batch-select-end{border-radius:0 4px 4px 0;background-color:var(--bs-primary);height:60px;width:10px}.batch-actions-panel-top{border-left:4px solid var(--bs-primary);border-color:var(--bs-info-border-subtle);margin:0!important;padding:.4rem;animation:slideDown .3s ease-out}.batch-actions-panel-top .batch-select-count{font-weight:700;color:var(--bs-primary);font-size:1.1rem}.batch-actions-panel-top button{transition:transform .2s ease,box-shadow .2s ease}.batch-actions-panel-top button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.btn-refresh:not(:disabled):hover .bi-arrow-clockwise{animation:mojo-spin .5s ease-in-out}.btn-add:not(:disabled):hover{transform:translateY(-1px);box-shadow:0 .25rem .5rem #0000001a}.btn-export:not(:disabled):hover .bi-download,.btn-import:not(:disabled):hover .bi-upload{animation:mojo-bounce .5s ease-in-out}.collection-select-view{position:relative}.collection-select-view .form-control.is-invalid{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath d='m5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.collection-select-view .dropdown-item:has(.spinner-border){justify-content:center;align-items:center;min-height:3rem}.collection-select-view .dropdown-item:focus-visible{outline:2px solid var(--bs-primary);outline-offset:-2px}.collection-select-view .dropdown-menu::-webkit-scrollbar{width:6px}.collection-select-view .dropdown-menu::-webkit-scrollbar-track{background:var(--bs-secondary-bg);border-radius:var(--bs-border-radius-sm)}.collection-select-view .dropdown-menu::-webkit-scrollbar-thumb{background:var(--bs-border-color);border-radius:var(--bs-border-radius-sm)}.collection-select-view .dropdown-menu::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary)}.collection-select-view .btn[data-action=clear-selection]{width:1.5rem;height:1.5rem;padding:0;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--bs-secondary);transition:color .15s ease-in-out}.collection-select-view .btn[data-action=clear-selection]:hover{color:var(--bs-danger)}.collection-select-view .btn[data-action=clear-selection]:focus{box-shadow:none;outline:2px solid var(--bs-primary);outline-offset:2px}.collection-select-view .btn[data-action=clear-selection] i{font-size:1rem}.collection-select-view .form-control.pe-5{padding-right:2.5rem!important}.text-truncate-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.data-view-item .data-view-label{font-size:.6rem}.table-container::-webkit-scrollbar{height:8px;width:8px}.table-container::-webkit-scrollbar-track{background:var(--bs-secondary-bg);border-radius:var(--bs-border-radius-sm)}.table-container::-webkit-scrollbar-thumb{background:var(--bs-border-color);border-radius:var(--bs-border-radius-sm)}.table-container::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}@keyframes mojo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes mojo-pulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes mojo-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@media (max-width: 768px){.table-page-header{padding-bottom:.75rem;margin-bottom:1rem}.batch-actions-panel-top{padding:.75rem!important}.batch-actions-panel-top .d-flex{flex-direction:column;gap:.75rem}.batch-actions-panel-top .batch-select-count{font-size:1rem}.page-title{font-size:1.5rem}.page-description{font-size:.9rem}.table-status-bar{padding:.5rem .75rem}.status-info{flex-direction:column;align-items:flex-start;gap:.5rem}.collection-select-view .dropdown-menu{max-height:200px}.collection-select-view .dropdown-item{padding:.75rem 1rem;font-size:1rem}}@media (max-width: 576px){.table-container{overflow-x:auto}.page-title{font-size:1.25rem}.loading-content{padding:1rem}.batch-actions-panel-top button{font-size:.875rem;padding:.25rem .5rem}.batch-actions-panel-top .btn-group{flex-wrap:wrap}}[data-bs-theme=dark] .table-loading-overlay{background:var(--bs-dark);opacity:.9}[data-bs-theme=dark] .batch-actions-panel{background-color:var(--bs-dark)}[data-bs-theme=dark] .batch-actions-panel-top{background-color:#0d6efd1a;border-color:#0d6efd4d}[data-bs-theme=dark] .collection-select-view .dropdown-menu::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}[data-bs-theme=dark] .collection-select-view .dropdown-menu::-webkit-scrollbar-thumb{background:var(--bs-border-color)}[data-bs-theme=dark] .collection-select-view .dropdown-menu::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}[data-bs-theme=dark] .collection-select-view .btn[data-action=clear-selection]{color:var(--bs-secondary)}[data-bs-theme=dark] .collection-select-view .btn[data-action=clear-selection]:hover{color:var(--bs-danger)}[data-bs-theme=dark] .collection-select-view .btn[data-action=clear-selection]:focus{outline-color:var(--bs-primary)}[data-bs-theme=dark] .table-container::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}[data-bs-theme=dark] .table-container::-webkit-scrollbar-thumb{background:var(--bs-border-color)}[data-bs-theme=dark] .table-container::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}.table-fullscreen{position:fixed!important;inset:0!important;width:100vw!important;height:100vh!important;z-index:9999!important;background:var(--bs-body-bg)!important;padding:1rem!important;overflow:auto!important}.table-fullscreen .mojo-table-wrapper{height:100%;display:flex;flex-direction:column;padding:0}.table-fullscreen .table-container{flex:1;overflow:auto;margin-bottom:1rem}.table-fullscreen .table{margin-bottom:0}.table-fullscreen .table-status-bar{flex-shrink:0;margin-top:auto;border-top:1px solid var(--bs-border-color);padding-top:1rem;background:var(--bs-body-bg)}.btn-fullscreen{transition:transform .2s ease,box-shadow .2s ease}.btn-fullscreen:hover{transform:scale(1.05)}.table-fullscreen .btn-fullscreen{background-color:var(--bs-primary);color:var(--bs-white);border-color:var(--bs-primary)}.table-fullscreen .btn-fullscreen:hover{background-color:var(--bs-primary);border-color:var(--bs-primary);opacity:.9}.table-fullscreen .table-container::-webkit-scrollbar{width:12px;height:12px}.table-fullscreen .table-container::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}.table-fullscreen .table-container::-webkit-scrollbar-thumb{background:var(--bs-secondary);border-radius:6px}.table-fullscreen .table-container::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}[data-bs-theme=dark] .table-fullscreen{background:var(--bs-dark)!important}[data-bs-theme=dark] .table-fullscreen .table-status-bar{background:var(--bs-dark)}.table-totals-row{background-color:var(--bs-light);border-top:2px solid var(--bs-primary);font-weight:500}.table-footer-label{color:var(--bs-emphasis-color);font-weight:600}.table-footer-total{color:var(--bs-primary);font-weight:600;text-align:right}[data-bs-theme=dark] .table-totals-row{background-color:var(--bs-dark);border-top-color:var(--bs-primary)}[data-bs-theme=dark] .table-footer-label{color:var(--bs-light)}[data-bs-theme=dark] .table-footer-total{color:var(--bs-primary)}.editable-cell{cursor:pointer;position:relative}.editable-cell:hover{background-color:#0d6efd0d}.editable-cell.editing{background-color:#0d6efd1a}.cell-editor{width:100%;max-width:100%}.cell-editor .form-control,.cell-editor .form-select{flex:1;min-width:0}.cell-editor .btn{white-space:nowrap;flex-shrink:0;min-width:auto;width:2rem;height:2rem;padding:0;display:flex;align-items:center;justify-content:center}.cell-editor .form-check{margin-bottom:0}.cell-editor .form-control:focus,.cell-editor .form-select:focus{border-color:#0d6efd;box-shadow:0 0 0 .25rem #0d6efd40}.cell-editor .d-flex.gap-1>*{flex-shrink:0}.cell-editor .form-switch .form-check-input{margin-left:0}.editable-cell .cell-content{padding:2px 4px;border-radius:3px;transition:background-color .15s ease-in-out}.editable-cell:hover .cell-content{background-color:#0d6efd1a}.editable-cell:after{content:"";position:absolute;top:4px;right:4px;width:0;height:0;border-left:4px solid transparent;border-top:4px solid rgba(108,117,125,.3);opacity:0;transition:opacity .15s ease-in-out}.editable-cell:hover:after{opacity:1}.cell-editor.saving{opacity:.7;pointer-events:none}.cell-editor.saving .btn{disabled:true}.cell-editor.saving-error{border-left:3px solid var(--bs-danger);background-color:#dc35451a}.cell-editor.saving-error .form-control,.cell-editor.saving-error .form-select{border-color:var(--bs-danger)}[data-bs-theme=dark] .editable-cell:hover{background-color:#0d6efd1a}[data-bs-theme=dark] .editable-cell.editing,[data-bs-theme=dark] .editable-cell:hover .cell-content{background-color:#0d6efd26}[data-bs-theme=dark] .editable-cell:after{border-top-color:#ffffff4d}@media (prefers-contrast: high){.collection-select-view .dropdown-item.active{background-color:var(--bs-emphasis-color);color:var(--bs-body-bg)}.mojo-checkbox{border-width:2px}}@media (prefers-reduced-motion: reduce){.table-container,.mojo-checkbox,.batch-select-action,.batch-actions-panel-top,.batch-actions-panel-top button{transition:none}@keyframes slideDown{0%,to{opacity:1;transform:none}}.btn-refresh:not(:disabled):hover .bi-arrow-clockwise,.btn-export:not(:disabled):hover .bi-download,.btn-import:not(:disabled):hover .bi-upload{animation:none}}.toast-service-success{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(25, 135, 84, .3);color:var(--bs-body-color);border-left:4px solid rgba(25,135,84,.8)}.toast-service-error{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(220, 53, 69, .3);color:var(--bs-body-color);border-left:4px solid rgba(220,53,69,.8)}.toast-service-warning{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(255, 193, 7, .3);color:var(--bs-body-color);border-left:4px solid rgba(255,193,7,.9)}.toast-service-info{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(13, 110, 253, .3);color:var(--bs-body-color);border-left:4px solid rgba(13,110,253,.8)}.toast-service-plain{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(0, 0, 0, .08);color:var(--bs-body-color)}.toast-service-icon{width:20px;height:20px;flex-shrink:0}.toast-service-success .toast-service-icon{color:#198754e6}.toast-service-error .toast-service-icon{color:#dc3545e6}.toast-service-warning .toast-service-icon{color:#ffc107}.toast-service-info .toast-service-icon{color:#0d6efde6}.toast-service-plain .toast-service-icon{color:#6c757dcc}.toast-service-close{filter:none;opacity:.6}.toast-service-close:hover{opacity:1}.toast-container{max-width:400px}.toast{transition:all .3s ease-in-out}.toast.showing{opacity:0;transform:translate(100%)}.toast.show{opacity:1;transform:translate(0)}.toast.hide{opacity:0;transform:translate(100%)}@media (max-width: 576px){.toast-container{max-width:calc(100vw - 20px);left:10px!important;right:10px!important;transform:none!important}.toast-container.position-fixed.top-0.start-50.translate-middle-x,.toast-container.position-fixed.bottom-0.start-50.translate-middle-x{left:10px!important;right:10px!important;transform:none!important;width:calc(100% - 20px)}}.toast-header{padding:.5rem .75rem;border-bottom:1px solid rgba(0,0,0,.1)}.toast-service-success .toast-header,.toast-service-error .toast-header,.toast-service-info .toast-header,.toast-service-warning .toast-header{border-bottom-color:#0000000f}.toast-body{padding:.75rem;word-wrap:break-word}.toast-body .toast-message{line-height:1.4}.toast-container .toast+.toast{margin-top:.5rem}@media (prefers-color-scheme: dark){.toast-service-plain{--bs-toast-bg: rgba(33, 37, 41, .95);--bs-toast-border-color: rgba(255, 255, 255, .1);color:var(--bs-body-color)}}.toast-progress{position:absolute;bottom:0;left:0;height:3px;background-color:#ffffff4d;border-radius:0 0 .375rem .375rem;transition:width linear}.toast-actions{padding:.25rem .75rem .75rem;display:flex;gap:.5rem}.toast-actions .btn{font-size:.875rem;padding:.25rem .75rem}.chat-view{display:flex;flex-direction:column;height:100%}.chat-container{display:flex;flex-direction:column;height:100%;width:100%;border:1px solid #dee2e6;border-radius:8px;overflow:hidden;background:#fff}.chat-messages{flex:1;overflow-y:auto;overflow-x:hidden;padding:20px;background:#fff}.chat-input-wrapper{flex-shrink:0}.chat-theme-compact .message-item{display:flex;padding:12px;border-bottom:1px solid #f1f3f5;transition:background-color .15s ease}.chat-theme-compact .message-item:hover{background:#f8f9fa}.chat-theme-compact .message-item:last-child{border-bottom:none}.chat-theme-compact .message-avatar{width:36px;height:36px;border-radius:50%;background:#6c757d;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:600;margin-right:12px;flex-shrink:0;overflow:hidden}.chat-theme-compact .message-content{flex:1;min-width:0}.chat-theme-compact .message-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;gap:8px}.chat-theme-compact .message-author{font-weight:600;font-size:.9rem;color:#212529}.chat-theme-compact .message-time{font-size:.75rem;color:#6c757d;white-space:nowrap}.chat-theme-compact .message-text{font-size:.9rem;color:#212529;line-height:1.5;word-wrap:break-word}.chat-theme-compact .chat-message-system{background:#f8f9fa;border-left:3px solid #0d6efd;margin:8px 0;padding:8px 12px}.chat-theme-bubbles .chat-message{margin-bottom:12px}.chat-theme-bubbles .message-bubble-wrapper{display:flex;flex-direction:column;max-width:70%}.chat-theme-bubbles .message-left .message-bubble-wrapper{align-items:flex-start}.chat-theme-bubbles .message-right .message-bubble-wrapper{align-items:flex-end;margin-left:auto}.chat-theme-bubbles .message-meta{font-size:.75rem;color:#6c757d;margin-bottom:4px;padding:0 4px}.chat-theme-bubbles .message-right .message-meta{text-align:right}.chat-theme-bubbles .message-bubble{padding:10px 14px;border-radius:18px;word-wrap:break-word;max-width:100%}.chat-theme-bubbles .message-left .message-bubble{background:#e9ecef;color:#212529}.chat-theme-bubbles .message-right .message-bubble{background:#0d6efd;color:#fff}.chat-theme-bubbles .message-text{font-size:.9rem;line-height:1.5}.chat-theme-bubbles .chat-message-system{max-width:100%;margin:16px auto}.chat-input-view{border-top:1px solid #dee2e6;background:#f8f9fa;width:100%}.chat-input-container{padding:15px;position:relative;width:100%}.chat-input-container.drag-over{background:#e7f3ff;border-color:#0d6efd}.chat-input-container.drag-active:before{content:"Drop files here";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:1.2rem;color:#0d6efd;font-weight:600;pointer-events:none;z-index:10}.chat-input-wrapper{position:relative;display:flex;align-items:flex-end;gap:8px}.chat-input{flex:1;border:1px solid #ced4da;border-radius:20px;padding:10px 15px;resize:none;max-height:150px;font-size:.9rem;transition:border-color .15s ease}.chat-input:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 .2rem #0d6efd40}.chat-send-btn{width:40px;height:40px;border-radius:50%;padding:0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.chat-send-btn i{font-size:1rem}.chat-input-footer{margin-top:8px;font-size:.85rem}.chat-input-attachments{margin-bottom:10px}.attachment-preview{display:inline-flex;align-items:center;gap:8px;background:#e9ecef;padding:8px 12px;border-radius:8px;margin-right:8px;margin-bottom:8px;font-size:.85rem}.attachment-preview.upload-complete{background:#d1e7dd}.attachment-preview.upload-error{background:#f8d7da}.attachment-info{display:flex;align-items:center;gap:6px}.attachment-name{font-weight:500;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-size{color:#6c757d;font-size:.75rem}.attachment-progress{min-width:100px}.attachment-remove{padding:0;margin:0;line-height:1}.message-text .file-attachment,[data-container=attachments] .file-attachment{display:inline-block;margin-top:8px;padding:8px 12px;background:#0000000d;border:1px solid rgba(0,0,0,.1);border-radius:8px;font-size:.85rem;transition:background-color .15s ease}.message-text .file-attachment:hover,[data-container=attachments] .file-attachment:hover{background:#0000001a}.message-text .file-attachment i,[data-container=attachments] .file-attachment i{margin-right:6px}.chat-theme-bubbles .message-right .file-attachment{background:#fff3;border-color:#ffffff4d;color:#fff}.chat-message-system{text-align:center;padding:8px 12px;margin:12px 0}.chat-messages::-webkit-scrollbar{width:8px}.chat-messages::-webkit-scrollbar-track{background:#f1f3f5}.chat-messages::-webkit-scrollbar-thumb{background:#adb5bd;border-radius:4px}.chat-messages::-webkit-scrollbar-thumb:hover{background:#6c757d}@media (max-width: 768px){.chat-theme-bubbles .message-bubble-wrapper{max-width:85%}.chat-theme-compact .message-avatar{width:32px;height:32px;font-size:.75rem}.attachment-name{max-width:150px}}.badge-sm{font-size:.7rem;padding:2px 6px}/**
1
+ :root{--bs-primary: #1a73e8;--bs-secondary: #5f6368;--bs-success: #34a853;--bs-info: #4285f4;--bs-warning: #fbbc05;--bs-danger: #ea4335;--bs-light: #f1f3f4;--bs-dark: #202124;--bs-primary-bg-subtle: #e8f0fe;--bs-secondary-bg-subtle: #f1f3f4;--bs-success-bg-subtle: #e6f4ea;--bs-info-bg-subtle: #e8f0fe;--bs-warning-bg-subtle: #fef7e0;--bs-danger-bg-subtle: #fce8e6;--bs-primary-border-subtle: #aecbfa;--bs-secondary-border-subtle: #dadce0;--bs-success-border-subtle: #81c995;--bs-info-border-subtle: #aecbfa;--bs-warning-border-subtle: #fad2cf;--bs-danger-border-subtle: #f28b82;--bs-primary-text-emphasis: #174ea6;--bs-secondary-text-emphasis: #3c4043;--bs-success-text-emphasis: #0d652d;--bs-info-text-emphasis: #174ea6;--bs-warning-text-emphasis: #b06000;--bs-danger-text-emphasis: #a50e0e;--bs-btn-hover-bg: #e8f0fe}:root[data-bs-theme=ocean]{--bs-primary: #0077b6;--bs-secondary: #90e0ef;--bs-success: #00b4d8;--bs-info: #48cae4;--bs-warning: #ffd166;--bs-danger: #ef476f;--bs-light: #f1faff;--bs-dark: #03045e;--bs-primary-bg-subtle: #caf0f8;--bs-secondary-bg-subtle: #e0fbfc;--bs-success-bg-subtle: #ade8f4;--bs-info-bg-subtle: #caf0f8;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #fde2e4;--bs-primary-text-emphasis: #023e8a;--bs-success-text-emphasis: #0077b6;--bs-danger-text-emphasis: #9d0208}:root[data-bs-theme=sunrise]{--bs-primary: #ff6f00;--bs-secondary: #ffb703;--bs-success: #fb8500;--bs-info: #ffb4a2;--bs-warning: #ffd166;--bs-danger: #e63946;--bs-light: #fff3e6;--bs-dark: #432818;--bs-primary-bg-subtle: #fff4e1;--bs-secondary-bg-subtle: #fff8dc;--bs-success-bg-subtle: #ffe5b4;--bs-info-bg-subtle: #ffe0d9;--bs-warning-bg-subtle: #fff7d6;--bs-danger-bg-subtle: #fddede;--bs-primary-text-emphasis: #9d4b00;--bs-success-text-emphasis: #a85d00;--bs-danger-text-emphasis: #8d0000}:root[data-bs-theme=forest]{--bs-primary: #2b9348;--bs-secondary: #95d5b2;--bs-success: #55a630;--bs-info: #76c893;--bs-warning: #ffba08;--bs-danger: #d62828;--bs-light: #f0fdf4;--bs-dark: #081c15;--bs-primary-bg-subtle: #d8f3dc;--bs-secondary-bg-subtle: #e9f5eb;--bs-success-bg-subtle: #c7f9cc;--bs-info-bg-subtle: #e9fbee;--bs-warning-bg-subtle: #fff8e1;--bs-danger-bg-subtle: #ffe5e5;--bs-primary-text-emphasis: #1a472a;--bs-success-text-emphasis: #2f5233;--bs-danger-text-emphasis: #7a1a1a}:root[data-bs-theme=midnight]{--bs-primary: #5a189a;--bs-secondary: #7b2cbf;--bs-success: #06d6a0;--bs-info: #118ab2;--bs-warning: #ffd166;--bs-danger: #ef476f;--bs-light: #f8f9fa;--bs-dark: #03071e;--bs-primary-bg-subtle: #e0d4f7;--bs-secondary-bg-subtle: #f1e4ff;--bs-success-bg-subtle: #d0fdf2;--bs-info-bg-subtle: #d0ebff;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #fbdde2;--bs-primary-text-emphasis: #240046;--bs-success-text-emphasis: #056b53;--bs-danger-text-emphasis: #9d001f}:root[data-bs-theme=corporate]{--bs-primary: #2a5d9f;--bs-secondary: #6c757d;--bs-success: #4caf50;--bs-info: #17a2b8;--bs-warning: #f0ad4e;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-bg-subtle: #e7f0fa;--bs-secondary-bg-subtle: #f1f3f5;--bs-success-bg-subtle: #eaf6ec;--bs-info-bg-subtle: #e6f7fa;--bs-warning-bg-subtle: #fff4e0;--bs-danger-bg-subtle: #fcebec;--bs-primary-border-subtle: #c2d7ed;--bs-secondary-border-subtle: #dee2e6;--bs-success-border-subtle: #c8e6c9;--bs-info-border-subtle: #bde3ea;--bs-warning-border-subtle: #ffe0b2;--bs-danger-border-subtle: #f5c2c7;--bs-primary-text-emphasis: #1d3f6e;--bs-secondary-text-emphasis: #495057;--bs-success-text-emphasis: #2e7d32;--bs-info-text-emphasis: #0d6673;--bs-warning-text-emphasis: #a46900;--bs-danger-text-emphasis: #8a1c24}:root{--mojo-primary: var(--bs-primary);--mojo-primary-rgb: var(--bs-primary-rgb);--mojo-secondary: var(--bs-secondary);--mojo-secondary-rgb: var(--bs-secondary-rgb);--mojo-success: var(--bs-success);--mojo-success-rgb: var(--bs-success-rgb);--mojo-info: var(--bs-info);--mojo-info-rgb: var(--bs-info-rgb);--mojo-warning: var(--bs-warning);--mojo-warning-rgb: var(--bs-warning-rgb);--mojo-danger: var(--bs-danger);--mojo-danger-rgb: var(--bs-danger-rgb);--mojo-light: var(--bs-light);--mojo-light-rgb: var(--bs-light-rgb);--mojo-dark: var(--bs-dark);--mojo-dark-rgb: var(--bs-dark-rgb);--mojo-body-bg: var(--bs-body-bg);--mojo-body-color: var(--bs-body-color);--mojo-emphasis-color: var(--bs-emphasis-color);--mojo-secondary-color: var(--bs-secondary-color);--mojo-tertiary-color: var(--bs-tertiary-color);--mojo-bg-primary: var(--bs-body-bg);--mojo-bg-secondary: var(--bs-secondary-bg);--mojo-bg-tertiary: var(--bs-tertiary-bg);--mojo-border-color: var(--bs-border-color);--mojo-border-color-translucent: var(--bs-border-color-translucent);--mojo-hover-bg: var(--bs-secondary-bg);--mojo-active-bg: var(--bs-primary);--mojo-focus-color: var(--bs-primary);--mojo-focus-shadow: 0 0 0 .25rem rgba(var(--bs-primary-rgb), .25);--mojo-transition-fast: .15s ease-in-out;--mojo-transition-base: .2s ease-in-out;--mojo-transition-slow: .3s ease-in-out;--mojo-border-radius-sm: var(--bs-border-radius-sm);--mojo-border-radius: var(--bs-border-radius);--mojo-border-radius-lg: var(--bs-border-radius-lg);--mojo-border-radius-xl: var(--bs-border-radius-xl);--mojo-spacer-xs: calc(var(--bs-spacer) * .25);--mojo-spacer-sm: calc(var(--bs-spacer) * .5);--mojo-spacer: var(--bs-spacer);--mojo-spacer-lg: calc(var(--bs-spacer) * 1.5);--mojo-spacer-xl: calc(var(--bs-spacer) * 3);--mojo-font-sans-serif: var(--bs-font-sans-serif);--mojo-font-monospace: var(--bs-font-monospace);--mojo-box-shadow-sm: var(--bs-box-shadow-sm);--mojo-box-shadow: var(--bs-box-shadow);--mojo-box-shadow-lg: var(--bs-box-shadow-lg);--mojo-zindex-dropdown: var(--bs-zindex-dropdown, 1000);--mojo-zindex-sticky: var(--bs-zindex-sticky, 1020);--mojo-zindex-fixed: var(--bs-zindex-fixed, 1030);--mojo-zindex-modal-backdrop: var(--bs-zindex-modal-backdrop, 1040);--mojo-zindex-offcanvas: var(--bs-zindex-offcanvas, 1045);--mojo-zindex-modal: var(--bs-zindex-modal, 1050);--mojo-zindex-popover: var(--bs-zindex-popover, 1070);--mojo-zindex-tooltip: var(--bs-zindex-tooltip, 1080)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-primary);--bs-btn-border-color: var(--bs-primary);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-primary) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-primary) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-primary) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-primary) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-primary-rgb, 13, 110, 253)}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-success);--bs-btn-border-color: var(--bs-success);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-success) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-success) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-success) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-success) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-success-rgb, 25, 135, 84)}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-danger);--bs-btn-border-color: var(--bs-danger);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-danger) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-danger) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-danger) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-danger) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-danger-rgb, 220, 53, 69)}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: var(--bs-warning);--bs-btn-border-color: var(--bs-warning);--bs-btn-hover-color: #000;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-warning) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-warning) 82%, #000 18%);--bs-btn-active-color: #000;--bs-btn-active-bg: color-mix(in srgb, var(--bs-warning) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-warning) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-warning-rgb, 255, 193, 7)}.btn-info{--bs-btn-color: #000;--bs-btn-bg: var(--bs-info);--bs-btn-border-color: var(--bs-info);--bs-btn-hover-color: #000;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-info) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-info) 82%, #000 18%);--bs-btn-active-color: #000;--bs-btn-active-bg: color-mix(in srgb, var(--bs-info) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-info) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-info-rgb, 13, 202, 240)}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: var(--bs-secondary);--bs-btn-border-color: var(--bs-secondary);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: color-mix(in srgb, var(--bs-secondary) 88%, #000 12%);--bs-btn-hover-border-color: color-mix(in srgb, var(--bs-secondary) 82%, #000 18%);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-secondary) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-secondary) 72%, #000 28%);--bs-btn-focus-shadow-rgb: var(--bs-secondary-rgb, 108, 117, 125)}.btn-outline-primary{--bs-btn-color: var(--bs-primary);--bs-btn-border-color: var(--bs-primary);--bs-btn-hover-color: #fff;--bs-btn-hover-bg: var(--bs-primary);--bs-btn-hover-border-color: var(--bs-primary);--bs-btn-active-color: #fff;--bs-btn-active-bg: color-mix(in srgb, var(--bs-primary) 75%, #000 25%);--bs-btn-active-border-color: color-mix(in srgb, var(--bs-primary) 75%, #000 25%);--bs-btn-focus-shadow-rgb: var(--bs-primary-rgb, 13, 110, 253)}.pagination{--bs-pagination-color: var(--bs-primary);--bs-pagination-hover-color: color-mix(in srgb, var(--bs-primary) 85%, #000 15%);--bs-pagination-focus-color: var(--bs-primary);--bs-pagination-focus-box-shadow: 0 0 0 .25rem color-mix(in srgb, var(--bs-primary) 25%, transparent);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: var(--bs-primary);--bs-pagination-active-border-color: var(--bs-primary);--bs-pagination-disabled-color: var(--bs-secondary, #6c757d)}.btn-link{text-decoration:none}.btn-link:hover{text-decoration:underline;background-color:transparent;border-color:none}.badge.bg-primary{--bs-badge-color: #fff;--bs-badge-bg: var(--bs-primary)}.nav-pills{--bs-nav-pills-link-active-bg: var(--bs-primary);--bs-nav-pills-link-active-color: #fff}.nav-tabs{--bs-nav-tabs-link-hover-border-color: color-mix(in srgb, var(--bs-primary) 35%, transparent);--bs-nav-tabs-link-active-color: var(--bs-primary);--bs-nav-tabs-link-active-border-color: var(--bs-primary)}.nav-tabs .nav-link{color:var(--bs-secondary)}.nav-tabs .nav-link.active{border-top-color:#1a73e8;border-right-color:#1a73e8;border-bottom-color:transparent;border-left-color:#1a73e8}.tab-view-select-style{display:inline-flex;align-items:center;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border-top:1px solid var(--bs-border-color);border-right:1px solid var(--bs-border-color);border-left:1px solid var(--bs-border-color);border-top-left-radius:var(--bs-border-radius);border-top-right-radius:var(--bs-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tab-view-select-style:after{display:none}.tab-view-select-style:hover{border-color:var(--bs-secondary-border-subtle)}.tab-view-select-style:focus{border-color:var(--bs-primary);outline:0;box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25)}.tab-view-select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alert-primary{--bs-alert-color: var( --bs-primary-text-emphasis, color-mix(in srgb, var(--bs-primary) 35%, #000) );--bs-alert-bg: var(--bs-primary-bg-subtle, color-mix(in srgb, var(--bs-primary) 10%, #fff));--bs-alert-border-color: var( --bs-primary-border-subtle, color-mix(in srgb, var(--bs-primary) 25%, #fff) )}:root{--bs-link-color: var(--bs-primary);--bs-link-hover-color: color-mix(in srgb, var(--bs-primary) 85%, #000 15%)}.form-check{margin-top:.9rem}@keyframes mojo-fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes mojo-slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.mojo-fade-in{animation:mojo-fadeIn var(--mojo-transition-slow) ease-in-out}.mojo-slide-up{animation:mojo-slideUp .4s ease-out}.mojo-spin{animation:mojo-spin 1s linear infinite;display:inline-block}.mojo-pulse{animation:mojo-pulse 2s ease-in-out infinite}.mojo-bounce{animation:mojo-bounce .5s ease-in-out}.bi-spin{animation:mojo-spin 1s linear infinite;display:inline-block}.mojo-text-truncate-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.mojo-text-truncate-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.mojo-transition-fast{transition:all var(--mojo-transition-fast)}.mojo-transition{transition:all var(--mojo-transition-base)}.mojo-transition-slow{transition:all var(--mojo-transition-slow)}.mojo-transform-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mojo-transform-center-x{position:absolute;left:50%;transform:translate(-50%)}.mojo-transform-center-y{position:absolute;top:50%;transform:translateY(-50%)}.mojo-hover-lift:hover{transform:translateY(-2px);transition:transform var(--mojo-transition-fast)}.mojo-hover-shadow:hover{box-shadow:0 .5rem 1rem #00000026;transition:box-shadow var(--mojo-transition-fast)}.mojo-glass{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff1a;border:1px solid rgba(255,255,255,.2)}[data-bs-theme=dark] .mojo-glass{background:#0003;border:1px solid rgba(255,255,255,.1)}.mojo-loading{pointer-events:none;opacity:.6;position:relative}.mojo-loading:after{content:"";position:absolute;top:50%;left:50%;width:1rem;height:1rem;margin:-.5rem 0 0 -.5rem;border:2px solid transparent;border-top:2px solid var(--mojo-primary);border-radius:50%;animation:mojo-spin 1s linear infinite;z-index:1}.mojo-focus-ring:focus{outline:none;box-shadow:var(--mojo-focus-shadow)}.mojo-focus-ring:focus-visible{outline:2px solid var(--mojo-focus-color);outline-offset:2px}.fs-7{font-size:.75rem!important}.fs-8{font-size:.6875rem!important}.fs-9{font-size:.625rem!important}.fs-10{font-size:.5625rem!important}@media print{.mojo-print-hide{display:none!important}.mojo-print-show{display:block!important}.mojo-no-print-shadow{box-shadow:none!important}.mojo-no-print-bg{background:#fff!important;color:#000!important}}.mojo-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.mojo-skip-link{position:absolute;top:-40px;left:6px;background:var(--mojo-emphasis-color);color:var(--mojo-body-bg);padding:8px;text-decoration:none;z-index:var(--mojo-zindex-tooltip);border-radius:var(--mojo-border-radius)}.mojo-skip-link:focus{top:6px}@media (prefers-reduced-motion: reduce){.mojo-fade-in,.mojo-slide-up,.mojo-spin,.mojo-pulse,.mojo-bounce,.bi-spin,.mojo-loading:after{animation-duration:.01ms!important;animation-iteration-count:1!important}.mojo-transition-fast,.mojo-transition,.mojo-transition-slow,.mojo-hover-lift:hover,.mojo-hover-shadow:hover{transition:none!important}}@media (prefers-contrast: high){.mojo-glass{background:var(--mojo-body-bg);border:2px solid var(--mojo-border-color);-webkit-backdrop-filter:none;backdrop-filter:none}.mojo-focus-ring:focus,.mojo-focus-ring:focus-visible{outline:3px solid var(--mojo-focus-color);outline-offset:2px;box-shadow:0 0 0 .5rem rgba(var(--mojo-primary-rgb),.5)}}.mojo-app{min-height:100vh;font-family:var(--mojo-font-sans-serif);background-color:var(--mojo-body-bg);color:var(--mojo-body-color)}.mojo-app.mojo-loading{opacity:0}.mojo-app.mojo-ready{opacity:1;transition:opacity var(--mojo-transition-slow)}.mojo-component{position:relative}.mojo-component.mojo-disabled{pointer-events:none;opacity:.6}.mojo-debug *{outline:1px solid red!important}.mojo-debug *:hover{background:#ff00001a!important}.drag-over{border-color:var(--bs-primary)!important;background-color:var(--bs-primary-bg-subtle)!important;transition:all .2s ease}.drag-active{border-style:dashed!important;border-width:2px!important;box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25)!important}.drag-over.drag-active{transform:scale(1.02);box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25),0 .5rem 1rem #00000026!important}[data-bs-theme=dark] .drag-over{background-color:rgba(var(--bs-primary-rgb),.15)!important}@media (prefers-reduced-motion: reduce){.drag-over,.drag-active{transition:none!important;transform:none!important}}@media (min-width: 1px){.mojo-debug{display:none}}.mojo-debug-enabled .mojo-debug{display:block!important}.image-field-container{position:relative;display:inline-block;border-radius:.375rem;overflow:hidden}.image-drop-zone{position:relative;border-radius:.375rem;transition:all .2s ease;overflow:hidden}.image-drop-zone.droppable{border:2px dashed var(--bs-border-color)}.image-drop-zone.droppable:hover{border-color:var(--bs-primary);background-color:var(--bs-primary-bg-subtle)}.image-drop-zone.drag-over{border-color:var(--bs-primary)!important;background-color:var(--bs-primary-bg-subtle)!important;transform:scale(1.02)}.image-drop-zone.drag-active{border-color:var(--bs-success)!important;background-color:var(--bs-success-bg-subtle)!important;box-shadow:0 0 0 3px rgba(var(--bs-success-rgb),.25)}.image-field-xs{width:48px;height:48px}.image-field-sm{width:96px;height:96px}.image-field-md{width:150px;height:150px}.image-field-lg{width:200px;height:200px}.image-field-xl{width:300px;height:300px}.image-field-container img{transition:transform .2s ease}.image-field-container:hover img{transform:scale(1.05)}.image-field-container .btn{transition:opacity .2s ease}.image-field-container:not(:hover) .btn{opacity:.6}[data-bs-theme=dark] .image-drop-zone.droppable{border-color:var(--bs-border-color-translucent)}[data-bs-theme=dark] .image-drop-zone.droppable:hover{border-color:var(--bs-primary);background-color:rgba(var(--bs-primary-rgb),.1)}@media (max-width: 576px){.image-field-xl{width:250px;height:250px}.image-field-lg{width:180px;height:180px}}.image-drop-zone:focus{outline:2px solid var(--bs-primary);outline-offset:2px}@media (prefers-reduced-motion: reduce){.image-drop-zone,.image-field-container img,.image-field-container .btn{transition:none}.image-drop-zone.drag-over,.image-field-container:hover img{transform:none}}.mojo-form-group{margin-bottom:1rem}.mojo-form-group .h6{color:var(--bs-secondary);font-weight:600;margin-bottom:.75rem;padding-bottom:.25rem;border-bottom:1px solid var(--bs-border-color)}@media (max-width: 767.98px){.mojo-form-group{padding:.75rem;margin-bottom:.75rem}}.mojo-form-control{margin-bottom:1rem;position:relative}.mojo-form-control .form-label{font-weight:500;margin-bottom:.5rem;color:var(--bs-body-color)}.mojo-form-control .form-text{margin-top:.25rem;font-size:.875rem;color:var(--bs-secondary)}.mojo-form-control .invalid-feedback{margin-top:.25rem}.mojo-form-control .form-check{margin-bottom:0}.mojo-form-control .form-check .form-check-label{font-weight:400}.mojo-form-control .image-field-container{margin-top:.5rem}.mojo-form-control input[type=range]{margin-top:.5rem;margin-bottom:.5rem}@media (max-width: 767.98px){.mojo-form-control{margin-bottom:.75rem}.mojo-form-control .form-label{margin-bottom:.375rem}}.mojo-modal-context-menu-btn{color:inherit!important;border:none;background:transparent;opacity:.7;transition:opacity .15s ease-in-out}.mojo-modal-context-menu-btn:hover,.mojo-modal-context-menu-btn:focus{color:inherit!important;background:rgba(var(--bs-emphasis-color-rgb),.1);opacity:1}.mojo-modal-context-menu-btn:active{background:rgba(var(--bs-emphasis-color-rgb),.2)}.modal.modal-info .mojo-modal-context-menu-btn,.modal.modal-success .mojo-modal-context-menu-btn{color:#fff!important}.modal.modal-warning .mojo-modal-context-menu-btn{color:#000!important}.modal.modal-error .mojo-modal-context-menu-btn,.modal.modal-dark .mojo-modal-context-menu-btn,[data-bs-theme=dark] .mojo-modal-context-menu-btn{color:#fff!important}.modal-header .mojo-modal-context-menu-btn{margin-left:auto;margin-right:0}.field-status{display:inline-block;margin-left:8px}.field-status-label-inline{display:inline-block;margin-left:8px;font-size:.875rem;vertical-align:middle}.field-status-overlay{position:absolute;top:50%;right:8px;transform:translateY(-50%);z-index:10;pointer-events:none}.field-status-full-overlay{position:absolute;inset:0;background-color:rgba(var(--bs-body-bg-rgb),.9);display:flex;align-items:center;justify-content:center;z-index:20;border-radius:var(--bs-border-radius)}.field-status-full-overlay .saving-indicator,.field-status-full-overlay .success-indicator,.field-status-full-overlay .error-indicator{display:flex;align-items:center;padding:8px 12px;background-color:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius);box-shadow:0 2px 4px #0000001a}.field-status [data-status]{display:none;font-size:1rem;transition:opacity .3s ease,transform .3s ease}.field-status .spinner-border{width:1rem;height:1rem;vertical-align:middle}.field-status [data-status=saved]{color:var(--bs-success)}.field-status [data-status=error]{color:var(--bs-danger);cursor:help}@keyframes mojo-status-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes mojo-status-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@media (max-width: 576px){.field-status{margin-left:4px}.field-status [data-status]{font-size:.875rem}}@media (prefers-contrast: high){.field-status [data-status=saving]{color:#06c}.field-status [data-status=saved]{color:#060}.field-status [data-status=error]{color:#c00}}@media (prefers-reduced-motion: reduce){.field-status [data-status]{transition:none}.field-status [data-status].show,.field-status [data-status].hide{animation:none}@keyframes mojo-status-fade-in{0%,to{opacity:1;transform:scale(1)}}@keyframes mojo-status-fade-out{0%,to{opacity:0;transform:scale(1)}}}.collection-multiselect-list .hover-bg:hover{background-color:#0d6efd14}[data-bs-theme=dark] .collection-multiselect-list .hover-bg:hover{background-color:#0d6efd26}:root{--mojo-sidebar-width: 250px;--mojo-sidebar-collapsed-width: 40px;--mojo-portal-gap: 0;--mojo-portal-bg: var(--bs-body-bg);--mojo-topnav-bg: var(--bs-primary, #121620);--mojo-topnav-color: var(#fff);--mojo-portal-muted: var(--bs-secondary-color);--mojo-portal-border: var(--bs-border-color);--mojo-portal-text: var(--bs-body-color);--mojo-sidebar-dark-color: #fff;--mojo-sidebar-dark-color-hover: #5388d6;--mojo-sidebar-dark-bg: #343a40}.portal-layout{display:flex;min-height:100vh;height:100vh;background:var(--mojo-portal-bg)}#portal-sidebar{flex:0 0 var(--mojo-sidebar-width);max-width:var(--mojo-sidebar-width);inline-size:var(--mojo-sidebar-width);height:100%;overflow-y:hidden;z-index:1;transition:inline-size .3s cubic-bezier(.4,0,.2,1),max-width .3s cubic-bezier(.4,0,.2,1),flex-basis .3s cubic-bezier(.4,0,.2,1),margin-left .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1);will-change:inline-size,max-width,flex-basis,transform}.portal-container.collapse-sidebar #portal-sidebar{inline-size:var(--mojo-sidebar-collapsed-width);max-width:var(--mojo-sidebar-collapsed-width);flex-basis:var(--mojo-sidebar-collapsed-width)}.portal-container.hide-sidebar #portal-sidebar{margin-left:calc(-1 * var(--mojo-sidebar-width));border-inline-end:0}#portal-sidebar{box-shadow:4px 0 15px -4px #0003}#portal-sidebar.sidebar-shadow{box-shadow:0 14px 28px #00000040,0 10px 10px #00000038!important}.portal-body{flex:1 1 auto;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}#portal-topnav{flex:0 0 auto;border-block-end:1px solid var(--mojo-portal-border)}nav.topnav-light{background-color:var(--bs-light);border-bottom:1px solid var(--bs-border-color);--bs-navbar-color: var(--bs-body-color);--bs-navbar-hover-color: var(--bs-primary)}nav.topnav-light .topnav-sidebar-toggle,nav.topnav-light .nav-link,nav.topnav-light .btn-link{color:var(--bs-navbar-color)}nav.topnav-light .topnav-sidebar-toggle:hover,nav.topnav-light .nav-link:hover,nav.topnav-light .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-dark{background-color:var(--mojo-sidebar-dark-bg, var(--bs-dark));border-bottom:1px solid var(--bs-border-color-translucent);--bs-navbar-color: rgba(255, 255, 255, .75);--bs-navbar-hover-color: #fff;--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff}nav.topnav-dark .topnav-sidebar-toggle,nav.topnav-dark .nav-link,nav.topnav-dark .btn-link{color:var(--bs-navbar-color)}nav.topnav-dark .topnav-sidebar-toggle:hover,nav.topnav-dark .nav-link:hover,nav.topnav-dark .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-dark .btn-close{filter:invert(1) grayscale(100%) brightness(200%)}nav.topnav-clean{background-color:var(--bs-body-bg);border-bottom:1px solid var(--bs-border-color);box-shadow:var(--bs-box-shadow-sm);--bs-navbar-color: var(--bs-body-color);--bs-navbar-hover-color: var(--bs-primary)}nav.topnav-clean .topnav-sidebar-toggle,nav.topnav-clean .nav-link,nav.topnav-clean .btn-link{color:var(--bs-navbar-color)}nav.topnav-clean .topnav-sidebar-toggle:hover,nav.topnav-clean .nav-link:hover,nav.topnav-clean .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-gradient{background:linear-gradient(90deg,#2c3e50,#34495e);border-bottom:1px solid var(--bs-border-color-translucent);--bs-navbar-color: rgba(255, 255, 255, .75);--bs-navbar-hover-color: #fff;--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff}nav.topnav-gradient .topnav-sidebar-toggle,nav.topnav-gradient .nav-link,nav.topnav-gradient .btn-link{color:var(--bs-navbar-color)}nav.topnav-gradient .topnav-sidebar-toggle:hover,nav.topnav-gradient .nav-link:hover,nav.topnav-gradient .btn-link:hover{color:var(--bs-navbar-hover-color)}nav.topnav-gradient .btn-close{filter:invert(1) grayscale(100%) brightness(200%)}nav.topnav-shadow-light{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}nav.topnav-shadow-dark{box-shadow:0 4px 6px -1px #0006,0 2px 4px -2px #0000004d}.portal-content{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:16px;height:100%}.portal-content .muted{color:var(--mojo-portal-muted)}@media (prefers-reduced-motion: reduce){#portal-sidebar{transition:none}}.page-header{background-color:var(--bs-body-bg);border-bottom:1px solid var(--bs-border-color);padding:16px}.portal-content:has([data-container=page-header]){padding:0}[data-container=page-content]{padding:16px}.page-header-content{max-width:100%}.page-header-main{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.page-header-info{display:flex;align-items:center;gap:1rem;flex:1;min-width:0}.page-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;background-color:var(--bs-primary-bg-subtle);color:var(--bs-primary);border-radius:8px}.page-title-group{flex:1;min-width:0}.page-header .page-title{font-weight:600;margin:0;line-height:1.2;color:var(--bs-heading-color)}.page-header .page-description{margin:.5rem 0 0;line-height:1.5}.page-header-sm .page-icon{width:32px;height:32px;font-size:1rem}.page-header-sm .page-title-group .page-title{font-size:1.25rem}.page-header-sm .page-title-group .page-description{font-size:.875rem}.page-header-md .page-icon{width:40px;height:40px;font-size:1.25rem}.page-header-md .page-title-group .page-title{font-size:1.5rem}.page-header-md .page-title-group .page-description{font-size:.95rem}.page-header-lg .page-icon{width:48px;height:48px;font-size:1.5rem}.page-header-lg .page-title-group .page-title{font-size:1.75rem}.page-header-lg .page-title-group .page-description{font-size:1rem}.page-header-xl .page-icon{width:56px;height:56px;font-size:1.75rem}.page-header-xl .page-title-group .page-title{font-size:2rem}.page-header-xl .page-title-group .page-description{font-size:1.1rem}.page-actions{display:flex;gap:.5rem;flex-shrink:0}.page-header-minimal{padding:.75rem 0}.page-header-minimal .page-title-group .page-title{font-size:1.5rem;font-weight:500}.page-header-breadcrumb .breadcrumb{margin-bottom:.5rem;background-color:transparent;padding:0}@media (max-width: 768px){.page-header-main{flex-direction:column;gap:1rem}.page-actions{width:100%;justify-content:flex-start}.page-header-xl .page-title-group .page-title{font-size:1.75rem}.page-header-lg .page-title-group .page-title{font-size:1.5rem}.page-header-md .page-title-group .page-title{font-size:1.25rem}.page-header-sm .page-title-group .page-title{font-size:1.1rem}}[data-bs-theme=dark] .page-header{border-bottom-color:#ffffff1a}.sidebar{display:flex;flex-direction:column;height:100%;width:100%;min-height:0;transition:all .3s cubic-bezier(.4,0,.2,1)}#portal-sidebar .sidebar{position:static;top:auto;left:auto;height:100%;width:100%;z-index:auto;transform:none}.sidebar-dark{background-color:var(--mojo-sidebar-dark-bg, --bs-dark);color:var(--bs-light);border-inline-end:1px solid var(--bs-border-color-translucent)}.sidebar-light{background-color:var(--bs-light);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color)}.sidebar-clean{background-color:var(--bs-body-bg);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color);box-shadow:var(--bs-box-shadow)}.sidebar-admin{border-left:3px solid #b14545}.sidebar-admin .sidebar-header{color:#b14545}.sidebar-light.sidebar-admin .sidebar-nav .nav-link.active{background-color:#b14545}.sidebar-light.sidebar-admin .nav-link.active.has-children{color:#b14545;background-color:var(--bs-secondary-bg);animation:none}.sidebar-global{border-left:3px solid #457bb1}.sidebar-global .sidebar-header{color:#457bb1}.sidebar-light.sidebar-global .sidebar-nav .nav-link.active{background-color:#457bb1}.sidebar-light.sidebar-global .nav-link.active.has-children{color:#457bb1;background-color:var(--bs-secondary-bg);animation:none}.sidebar-gradient{background:linear-gradient(180deg,#2c3e50,#34495e);color:var(--bs-light);border-inline-end:1px solid var(--bs-border-color-translucent)}.sidebar-clean{--mojo-sidebar-width: 220px}.sidebar-container{display:flex;flex-direction:column;height:100%;min-height:0;flex:1}.sidebar-body{flex:1;overflow-y:auto;min-height:0}.sidebar-brand{height:56px;text-align:center;padding-top:14px}.sidebar-dark .sidebar-brand{border-bottom:1px solid var(--bs-border-color-translucent)}.sidebar-light .sidebar-brand{border-bottom:1px solid var(--bs-border-color)}.sidebar-clean .sidebar-brand{border-bottom:1px solid var(--bs-border-color);background-color:var(--bs-secondary-bg)}.sidebar-gradient .sidebar-brand{border-bottom:1px solid var(--bs-border-color-translucent)}.sidebar-brand.clickable{cursor:pointer;transition:background-color .2s ease}.sidebar-brand.clickable:hover{background-color:#ffffff1a}.sidebar-toggle{position:absolute;width:30px;height:30px;font-size:.875rem;background:none;top:.75rem;right:5px;border:none;border-radius:var(--bs-border-radius);color:var(--bs-body-color);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.4,0,.2,1),transform .15s ease-out;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10}.sidebar-toggle:hover{background:var(--bs-secondary-bg);transform:scale(1.1);box-shadow:0 4px 12px #00000026}.sidebar-toggle:active{transform:scale(.95);transition-duration:.1s}.sidebar-toggle .toggle-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.sidebar-toggle .bi-chevron-left{display:block}.sidebar-toggle .bi-chevron-right,.portal-container.collapse-sidebar .sidebar-toggle .bi-chevron-left{display:none}.portal-container.collapse-sidebar .sidebar-toggle .bi-chevron-right{display:block}.portal-container.hide-sidebar .sidebar-toggle{opacity:0;visibility:hidden;pointer-events:none}.sidebar-dark .sidebar-toggle,.sidebar-gradient .sidebar-toggle{background:var(--bs-border-color-translucent);color:var(--bs-secondary-color);border-color:var(--bs-border-color-translucent)}.sidebar-dark .sidebar-toggle:hover,.sidebar-gradient .sidebar-toggle:hover{background:var(--bs-secondary-bg);color:var(--bs-light)}.sidebar-light .sidebar-toggle{background:var(--bs-secondary-bg);color:var(--bs-body-color);border-color:var(--bs-border-color)}.sidebar-light .sidebar-toggle:hover{background:var(--bs-tertiary-bg);color:var(--bs-emphasis-color)}.sidebar-clean .sidebar-toggle{background:var(--bs-light);color:var(--bs-primary);border-color:var(--bs-primary-border-subtle);box-shadow:var(--bs-box-shadow-sm)}.sidebar-clean .sidebar-toggle:hover{background:var(--bs-primary);color:#fff;box-shadow:0 4px 12px rgba(var(--bs-primary-rgb),.3)}.sidebar-toggle .toggle-icon{transform:rotate(0)}.topnav-sidebar-toggle{background:none!important;border:none!important;color:#ffffffe6;padding:.5rem;border-radius:.375rem;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.topnav-sidebar-toggle:hover{background:none!important;color:var(--bs-light);transform:scale(1.1)}.topnav-sidebar-toggle:focus{outline:none;box-shadow:none}.topnav-sidebar-toggle .toggle-chevron{font-size:1.1rem;transition:transform .3s cubic-bezier(.4,0,.2,1);transform:rotate(180deg)}.portal-container.collapse-sidebar .topnav-sidebar-toggle .toggle-chevron,.portal-container.hide-sidebar .topnav-sidebar-toggle .toggle-chevron{transform:rotate(0)}.navbar-dark .topnav-sidebar-toggle{color:#ccc}.navbar-dark .topnav-sidebar-toggle:hover{color:#fff;background:none!important}.navbar-light .topnav-sidebar-toggle{color:var(--bs-navbar-light-color)}.navbar-light .topnav-sidebar-toggle:hover{color:var(--bs-navbar-light-hover-color);background:var(--bs-secondary-bg)!important}@keyframes sidebar-toggle-pulse{0%{box-shadow:0 0 rgba(var(--bs-primary-rgb),.4)}70%{box-shadow:0 0 0 8px rgba(var(--bs-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--bs-primary-rgb),0)}}.sidebar-toggle.pulse{animation:sidebar-toggle-pulse 2s infinite}.sidebar-toggle:focus{outline:none;box-shadow:0 0 0 .25rem rgba(var(--bs-primary-rgb),.25)}.sidebar-toggle:focus-visible{outline:2px solid var(--bs-primary);outline-offset:2px}[data-bs-theme=dark] .sidebar-toggle{background:#ffffff1a;color:var(--bs-light);border-color:#ffffff26}[data-bs-theme=dark] .sidebar-toggle:hover{background:#fff3;color:var(--bs-white);box-shadow:0 4px 12px #ffffff1a}[data-bs-theme=dark] .sidebar-clean .sidebar-toggle{background:var(--bs-primary);color:#fff;border-color:var(--bs-primary)}[data-bs-theme=dark] .sidebar-clean .sidebar-toggle:hover{background:var(--bs-primary);filter:brightness(1.1)}.brand-content{display:flex;flex-direction:column;align-items:center}.brand-logo{max-height:32px;width:auto;margin-bottom:.5rem}.brand-subtext{font-size:.75rem}.sidebar-group-header{cursor:pointer;border-bottom:1px solid rgba(0,0,0,.1)}.sidebar-dark .sidebar-group-header{background-color:var(--bs-dark)}.sidebar-light .sidebar-group-header{background-color:#dfe5ea}.sidebar-group-header:hover{cursor:pointer;color:var(--mojo-primary);background-color:#1414641a}.sidebar-nav{display:flex;flex-direction:column;padding:.5rem 0;min-height:100%}.sidebar-nav .nav-link{display:flex;align-items:center;position:relative;padding:.75rem 1rem;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1),transform .15s ease-out;cursor:pointer;transform:translate(0);border-radius:8px 0 0 8px;margin-left:.2rem}.sidebar-nav .nav-link:hover{margin-left:.4rem!important}.sidebar-nav .nav-link i{width:20px;text-align:center;transition:transform .2s ease-out,color .2s ease-out}.sidebar-nav .nav-link:hover i{transform:scale(1.1)}.portal-container.collapse-sidebar .sidebar-nav .nav-link:hover i{transform:scale(1.2)}.sidebar-nav .collapse .nav-link{padding:.5rem 1rem;font-size:.9rem}.sidebar-nav .bi-chevron-down{transition:transform .3s}.sidebar-nav .nav-link[aria-expanded=true] .bi-chevron-down{transform:rotate(180deg)}.sidebar-dark .sidebar-nav .nav-link{color:var(--mojo-sidebar-dark-color, #fff)}.sidebar-dark .sidebar-nav .nav-link:hover{color:var(--mojo-sidebar-dark-color-hover, #5388d6);background-color:var(--bs-secondary-bg)}.sidebar-dark .sidebar-nav .nav-link.active{color:var(--bs-light);background-color:var(--bs-primary)}.sidebar-light .sidebar-nav .nav-link{color:var(--bs-body-color)}.sidebar-light .sidebar-nav .nav-link:hover{color:var(--bs-emphasis-color);background-color:var(--bs-secondary-bg)}.sidebar-light .sidebar-nav .nav-link.active{color:var(--bs-light);background-color:var(--bs-primary)}.sidebar-clean .sidebar-nav .nav-link{color:var(--bs-secondary-color)}.sidebar-clean .sidebar-nav .nav-link:hover{color:var(--bs-body-color);background-color:var(--bs-secondary-bg)}.sidebar-clean .sidebar-nav .nav-link.active{color:var(--bs-primary);background-color:var(--bs-primary-bg-subtle);font-weight:500}.sidebar-gradient .sidebar-nav .nav-link{color:var(--bs-light)}.sidebar-gradient .sidebar-nav .nav-link:hover{color:var(--bs-white);background-color:#ffffff1a}.sidebar-gradient .sidebar-nav .nav-link.active{color:var(--bs-white);background-color:var(--bs-primary)}.sidebar-nav .nav-link.has-children{border-top-left-radius:0;border-bottom-left-radius:0}.sidebar-nav .nav-link.has-children:hover{transform:none}.sidebar-nav .nav-link.has-children.collapsed{border-left:none}.sidebar-light .nav-link.active.has-children,.sidebar-clean .nav-link.active.has-children{color:var(--bs-body-color);background-color:var(--bs-secondary-bg);animation:none}.sidebar-dark .nav-link.active.has-children,.sidebar-gradient .nav-link.active.has-children{color:var(--bs-light);background-color:#0003;animation:none}.nav-text{flex:1;white-space:nowrap;transition:opacity .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1),margin .3s cubic-bezier(.4,0,.2,1)}.nav-arrow{transition:transform .2s ease,opacity .3s cubic-bezier(.4,0,.2,1),margin .3s cubic-bezier(.4,0,.2,1);margin-left:auto}.nav-link[aria-expanded=true] .nav-arrow{transform:rotate(180deg)}.portal-container.collapse-sidebar .nav-text,.portal-container.collapse-sidebar .sidebar-collapse-hide{opacity:0;width:0;margin-right:0;overflow:hidden}.portal-container.collapse-sidebar .collapsed-hidden{opacity:0;width:0;overflow:hidden;display:none}.portal-container.collapse-sidebar .sidebar-nav .nav-link{justify-content:center;padding-left:.5rem;padding-right:.5rem;transition:all .3s cubic-bezier(.4,0,.2,1)}.portal-container.collapse-sidebar .sidebar-nav .nav-link i{margin-right:0!important}.portal-container.collapse-sidebar .nav-submenu{display:none!important}.portal-container.collapse-sidebar .sidebar-header{text-align:center;overflow:hidden}.portal-container.collapse-sidebar .nav-arrow{opacity:0;margin-left:0}.portal-container.collapse-sidebar .sidebar .nav-link{position:relative;overflow:visible;width:var(--mojo-sidebar-collapsed-width, 48px)}@keyframes tooltip-slide-in{0%{opacity:0;visibility:hidden;transform:translateY(-50%) translate(-10px) scale(.9)}to{opacity:1;visibility:visible;transform:translateY(-50%) translate(0) scale(1)}}@keyframes tooltip-arrow-slide-in{0%{opacity:0;transform:translateY(-50%) translate(-3px)}to{opacity:1;transform:translateY(-50%) translate(0)}}[data-bs-theme=dark] .portal-container.collapse-sidebar .sidebar .nav-link:hover:after{background:var(--bs-light);color:var(--bs-dark)}[data-bs-theme=dark] .portal-container.collapse-sidebar .sidebar .nav-link:hover:before{border-right-color:var(--bs-light)}.portal-container.mobile-layout .nav-link:hover:after,.portal-container.mobile-layout .nav-link:hover:before{display:none!important}.portal-container.collapse-sidebar .sidebar .nav-link:hover{background-color:rgba(var(--bs-primary-rgb),.1);border-radius:var(--mojo-border-radius);transform:translate(0) scale(1.05);box-shadow:0 2px 8px #0000001a}.portal-container.collapse-sidebar .sidebar-light .nav-link:hover{background-color:rgba(var(--bs-primary-rgb),.08);box-shadow:0 2px 8px rgba(var(--bs-primary-rgb),.2)}.portal-container.collapse-sidebar .sidebar-dark .nav-link:hover{background-color:#ffffff1a;box-shadow:0 2px 8px #ffffff1a}.portal-container.collapse-sidebar .sidebar-clean .nav-link:hover{background-color:var(--bs-light);box-shadow:0 2px 8px rgba(var(--bs-primary-rgb),.15)}.nav-submenu .nav-link{padding-left:2.5rem;font-size:.9rem}.nav-submenu{margin-left:1.8rem}.sidebar-dark .nav-submenu,.sidebar-gradient .nav-submenu{border-left:4px solid rgba(255,255,255,.2)}.sidebar-light .nav-submenu{border-left:4px solid #cdcdcd}.sidebar-clean .nav-submenu{border-left:4px solid var(--bs-border-color)}.nav-divider{margin:.75rem 0;padding:0 1rem}.nav-divider-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.25rem 0;display:block}.sidebar-dark .nav-divider-label,.sidebar-gradient .nav-divider-label{color:var(--bs-secondary-color);border-bottom:1px solid var(--bs-border-color-translucent)}.sidebar-light .nav-divider-label{color:var(--bs-secondary-color);border-bottom:1px solid var(--bs-border-color)}.sidebar-clean .nav-divider-label{color:var(--bs-secondary-color);border-bottom:1px solid var(--bs-border-color);margin:0 .5rem}.nav-divider-item{margin:.25rem 0;padding:0;list-style:none}.nav-divider-line{margin:0 1rem;border:0;border-top:1px solid;opacity:.25}.sidebar-dark .nav-divider-line,.sidebar-gradient .nav-divider-line,.sidebar-light .nav-divider-line{border-color:var(--bs-secondary-color)}.sidebar-clean .nav-divider-line{border-color:var(--bs-border-color);margin:0 1.5rem}.nav-spacer-item{flex:1;list-style:none}.nav-section{margin-bottom:.5rem}.nav-section-header{padding:.5rem 1rem;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.nav-section-header.collapsible{cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:color .2s ease}.sidebar-dark .nav-section-header,.sidebar-gradient .nav-section-header{color:var(--bs-secondary-color)}.sidebar-dark .nav-section-header.collapsible:hover,.sidebar-gradient .nav-section-header.collapsible:hover{color:var(--bs-light)}.sidebar-light .nav-section-header{color:var(--bs-secondary-color)}.sidebar-light .nav-section-header.collapsible:hover{color:var(--bs-body-color)}.sidebar-clean .nav-section-header{color:var(--bs-secondary-color);margin:0 .5rem}.sidebar-clean .nav-section-header.collapsible:hover{color:var(--bs-body-color)}.nav-section-items{padding-left:0}.sidebar-nav .badge{font-size:.7rem;padding:.25rem .5rem}.sidebar-footer{flex-shrink:0;margin-top:auto}.footer-content{padding:1rem;font-size:.85rem}.sidebar-dark .sidebar-footer,.sidebar-gradient .sidebar-footer{border-top:1px solid var(--bs-border-color-translucent)}.sidebar-dark .footer-content,.sidebar-gradient .footer-content{color:var(--bs-secondary-color)}.sidebar-light .sidebar-footer{border-top:1px solid var(--bs-border-color)}.sidebar-light .footer-content{color:var(--bs-secondary-color)}.sidebar-clean .sidebar-footer{border-top:1px solid var(--bs-border-color);background-color:var(--bs-secondary-bg)}.sidebar-clean .footer-content{color:var(--bs-secondary-color)}.config-switcher{position:absolute;top:8px;right:8px}.config-menu{position:absolute;inset:0;background-color:rgba(var(--bs-dark-rgb),.95);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1050;padding:1rem}.config-menu-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--bs-border-color-translucent)}.config-menu-body{display:flex;flex-direction:column;gap:.5rem}.config-option{padding:.75rem;border:1px solid var(--bs-border-color-translucent);border-radius:var(--bs-border-radius);background-color:var(--bs-secondary-bg);cursor:pointer;transition:all .2s ease}.config-option:hover{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color)}.config-option.active{background-color:var(--bs-primary-bg-subtle);border-color:var(--bs-primary)}.config-name{font-weight:500;color:var(--bs-body-color)}.group-selector-container{padding:.75rem}.group-selector-wrapper{position:relative;width:100%}.group-selector{position:relative}.group-selector.disabled{opacity:.6;pointer-events:none}.group-selector .input-group-text{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color);color:var(--bs-secondary-color)}.group-selector .form-control{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color);color:var(--bs-body-color)}.group-selector .form-control:focus{background-color:var(--bs-tertiary-bg);border-color:var(--bs-primary);color:var(--bs-body-color);box-shadow:0 0 0 .2rem rgba(var(--bs-primary-rgb),.25)}.group-selector .form-control::placeholder{color:var(--bs-secondary-color)}.group-selector .dropdown-toggle{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color);color:var(--bs-secondary-color)}.group-selector .dropdown-toggle:hover,.group-selector .dropdown-toggle:focus{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color);color:var(--bs-body-color)}.dropdown-arrow{transition:transform .2s ease}.group-selector .dropdown-toggle[aria-expanded=true] .dropdown-arrow{transform:rotate(180deg)}.group-dropdown{position:absolute;top:100%;left:0;right:0;background-color:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-top:none;border-radius:0 0 var(--bs-border-radius) var(--bs-border-radius);max-height:400px;overflow-y:auto;z-index:1050;box-shadow:var(--bs-box-shadow-lg);opacity:0;transform:translateY(-10px);transition:opacity .2s ease,transform .2s ease;display:none}.group-dropdown.show{display:block;opacity:1;transform:translateY(0)}.group-dropdown .dropdown-header{padding:.75rem 1rem;background-color:var(--bs-secondary-bg);border-bottom:1px solid var(--bs-border-color);color:var(--bs-secondary-color);font-size:.875rem}.group-results{max-height:300px;overflow-y:auto}.group-item{padding:0;border-bottom:1px solid var(--bs-border-color-translucent);cursor:pointer;transition:background-color .2s ease}.group-item:hover,.group-item.focused{background-color:var(--bs-secondary-bg)}.group-item.selected{background-color:var(--bs-primary-bg-subtle);border-left:3px solid var(--bs-primary)}.group-item.selected:hover{background-color:var(--bs-primary-bg-subtle)}.group-content{padding:.75rem 1rem;display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.group-main{flex:1;min-width:0}.group-meta{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}.group-name{display:flex;align-items:center;flex-wrap:wrap;gap:.25rem;margin-bottom:.25rem}.group-hierarchy{color:var(--bs-secondary-color);font-size:.85rem;font-weight:400}.group-name-text{color:var(--bs-body-color);font-weight:500}.group-type{font-size:.7rem;padding:.25rem .5rem}.group-description{color:var(--bs-secondary-color);font-size:.85rem;line-height:1.3;margin-top:.25rem}.group-item mark{background-color:var(--bs-warning-bg-subtle);color:var(--bs-body-color);padding:0;border-radius:var(--bs-border-radius-sm)}.group-member-count{display:flex;align-items:center;color:var(--bs-secondary-color);font-size:.8rem}.group-status{display:flex;align-items:center}.status-indicator{width:8px;height:8px;border-radius:50%;display:inline-block}.status-indicator.status-active{background-color:var(--bs-success)}.status-indicator.status-inactive{background-color:var(--bs-secondary)}.status-indicator.status-archived{background-color:var(--bs-danger)}.status-indicator.status-pending{background-color:var(--bs-warning)}.group-dropdown .dropdown-item-text{color:var(--bs-secondary-color);padding:1rem}.group-dropdown .dropdown-divider{border-top:1px solid var(--bs-border-color);margin:.5rem 0}.selected-group-display{animation:fadeInUp .3s ease}.selected-group-card{background-color:var(--bs-primary-bg-subtle);border:1px solid var(--bs-primary-border-subtle);border-radius:var(--bs-border-radius);padding:.75rem}.selected-group-icon{flex-shrink:0}.selected-group-info{min-width:0}.selected-group-name{color:var(--bs-body-color);margin-bottom:.25rem}.selected-group-desc{color:var(--bs-secondary-color);line-height:1.3}.selected-group-actions{flex-shrink:0}.group-dropdown::-webkit-scrollbar,.group-results::-webkit-scrollbar{width:6px}.group-dropdown::-webkit-scrollbar-track,.group-results::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}.group-dropdown::-webkit-scrollbar-thumb,.group-results::-webkit-scrollbar-thumb{background:var(--bs-border-color);border-radius:var(--bs-border-radius-sm)}.group-dropdown::-webkit-scrollbar-thumb:hover,.group-results::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}.context-menu-view.header-menu{margin-top:-.6rem}.context-menu-view.header-menu-absolute{top:1rem;right:1rem}.portal-container.mobile-layout #portal-sidebar{position:fixed!important;inset:0;width:100vw;height:100vh;z-index:var(--mojo-zindex-modal);transform:translate(0);transition:transform .35s cubic-bezier(.4,0,.2,1);box-shadow:0 0 20px #0000004d}.portal-container.mobile-layout #portal-sidebar .sidebar{height:100vh;width:100%}.portal-container.mobile-layout #portal-sidebar .sidebar-container{height:100%}.portal-container.mobile-layout.hide-sidebar #portal-sidebar{transform:translate(-100%);box-shadow:0 0 20px #0000}.portal-container.mobile-layout #portal-sidebar,.portal-container.mobile-layout.collapse-sidebar #portal-sidebar{inline-size:100vw!important;max-width:100vw!important;flex-basis:100vw!important}.portal-container.mobile-layout .nav-text,.portal-container.mobile-layout.collapse-sidebar .nav-text{opacity:1!important;width:auto!important;overflow:visible!important}.portal-container.mobile-layout .nav-arrow,.portal-container.mobile-layout.collapse-sidebar .nav-arrow{opacity:1!important}.portal-container.mobile-layout .sidebar-nav .nav-link,.portal-container.mobile-layout.collapse-sidebar .sidebar-nav .nav-link{justify-content:flex-start!important;padding:1rem!important;font-size:1rem}.portal-container.mobile-layout .nav-submenu,.portal-container.mobile-layout.collapse-sidebar .nav-submenu{display:block!important}.portal-container.mobile-layout .sidebar-toggle{display:none}.portal-container.mobile-layout .group-selector-container,.portal-container.mobile-layout .config-menu{padding:.5rem}.portal-container.mobile-layout .selected-group-card{padding:1rem}.portal-container.mobile-layout .group-dropdown{max-height:300px;left:-5px;right:-5px;border-radius:.5rem;border:1px solid #495057;box-shadow:0 1rem 3rem #0000004d}.portal-container.mobile-layout .group-content{padding:1rem .75rem;flex-direction:column;align-items:stretch;gap:.5rem}.portal-container.mobile-layout .group-meta{flex-direction:row;justify-content:space-between;align-items:center}.portal-sidebar-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#00000080;z-index:calc(var(--mojo-zindex-modal) - 1);opacity:0;visibility:hidden;transition:opacity .35s cubic-bezier(.4,0,.2,1),visibility .35s cubic-bezier(.4,0,.2,1),backdrop-filter .35s cubic-bezier(.4,0,.2,1);-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}.portal-container.mobile-layout:not(.hide-sidebar) .portal-sidebar-backdrop{opacity:1;visibility:visible;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.portal-container #portal-sidebar,.sidebar-nav .nav-link,.nav-text,.nav-arrow,.sidebar-header,.sidebar-footer,.sidebar-header .fs-5{transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sidebar-nav .nav-item:nth-child(1) .nav-link{transition-delay:0ms}.sidebar-nav .nav-item:nth-child(2) .nav-link{transition-delay:20ms}.sidebar-nav .nav-item:nth-child(3) .nav-link{transition-delay:40ms}.sidebar-nav .nav-item:nth-child(4) .nav-link{transition-delay:60ms}.sidebar-nav .nav-item:nth-child(5) .nav-link{transition-delay:80ms}.sidebar-nav .nav-item:nth-child(6) .nav-link{transition-delay:.1s}.sidebar-nav .nav-item:nth-child(7) .nav-link{transition-delay:.12s}.sidebar-nav .nav-item:nth-child(8) .nav-link{transition-delay:.14s}[data-bs-theme=dark] .group-dropdown{background-color:var(--bs-body-bg);border-color:var(--bs-border-color)}[data-bs-theme=dark] .config-menu{background-color:rgba(var(--bs-dark-rgb),.95)}[data-bs-theme=dark] .config-option{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color)}[data-bs-theme=dark] .group-selector .form-control{background-color:var(--bs-tertiary-bg);border-color:var(--bs-border-color);color:var(--bs-body-color)}[data-bs-theme=dark] .group-selector .input-group-text{background-color:var(--bs-secondary-bg);border-color:var(--bs-border-color);color:var(--bs-secondary-color)}[data-bs-theme=dark] .group-item:hover,[data-bs-theme=dark] .group-item.focused{background-color:var(--bs-secondary-bg)}[data-bs-theme=dark] .selected-group-card{background-color:var(--bs-primary-bg-subtle);border-color:var(--bs-primary-border-subtle)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.group-item:focus{outline:2px solid #0d6efd;outline-offset:-2px}@media (prefers-contrast: high){.group-dropdown{border-width:2px;border-color:#fff}.group-item.selected{border-left-width:4px}.status-indicator{border:1px solid #fff}}@media (prefers-reduced-motion: reduce){.group-dropdown,.dropdown-arrow{transition:none}.selected-group-display{animation:none}.portal-container #portal-sidebar,.sidebar-nav .nav-link,.nav-text,.nav-arrow,.sidebar-header,.sidebar-footer,.sidebar-header .fs-5{transition:none!important;animation:none!important}.sidebar-nav .nav-link i{transition:none!important}.sidebar-nav .nav-link:hover,.portal-container.collapse-sidebar .sidebar .nav-link:hover{transform:none!important;box-shadow:none!important}.portal-sidebar-backdrop{transition:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}.sidebar-nav .nav-item:nth-child(n) .nav-link{transition-delay:0ms!important}.portal-container:not(.collapse-sidebar) #portal-sidebar{animation:none!important}.sidebar-nav .nav-link.active{animation:none!important}.nav-link[data-bs-toggle=collapse] .bi-chevron-down{transition:none!important}.nav-link[aria-expanded=true] .bi-chevron-down{transform:rotate(180deg)!important}.portal-container.collapse-sidebar .sidebar .nav-link:hover:after,[data-bs-theme=dark] .portal-container.collapse-sidebar .sidebar .nav-link:hover:after,.portal-container.collapse-sidebar .sidebar .nav-link:hover:before{animation:none!important;transition:none!important;opacity:1!important;visibility:visible!important;transform:translateY(-50%) translate(0)!important}.sidebar-toggle,.sidebar-toggle .toggle-icon{transition:none!important;animation:none!important}.sidebar-toggle:hover{transform:none!important}}.mojo-sidebar-force-open .portal-container{--mojo-sidebar-width: 250px !important}.mojo-sidebar-force-open #portal-sidebar{inline-size:var(--mojo-sidebar-width)!important;max-width:var(--mojo-sidebar-width)!important;flex-basis:var(--mojo-sidebar-width)!important}.mojo-sidebar-force-collapsed .portal-container{--mojo-sidebar-width: var(--mojo-sidebar-collapsed-width) !important}.mojo-sidebar-force-collapsed #portal-sidebar{inline-size:var(--mojo-sidebar-collapsed-width)!important;max-width:var(--mojo-sidebar-collapsed-width)!important;flex-basis:var(--mojo-sidebar-collapsed-width)!important}.mojo-sidebar-force-hidden #portal-sidebar{inline-size:0!important;max-width:0!important;flex-basis:0!important;overflow:hidden!important}.mojo-sidebar-no-transition #portal-sidebar,.mojo-sidebar-no-transition .sidebar-nav .nav-link,.mojo-sidebar-no-transition .nav-text,.mojo-sidebar-no-transition .nav-arrow{transition:none!important}.portal-container.sidebar-opening #portal-sidebar{transition-duration:.35s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.portal-container.sidebar-closing #portal-sidebar{transition-duration:.25s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.portal-container:not(.collapse-sidebar) #portal-sidebar{animation:sidebar-expand .4s cubic-bezier(.34,1.56,.64,1)}@keyframes sidebar-expand{0%{transform:scale(.98) translate(-2px);opacity:.9}60%{transform:scale(1.01) translate(1px)}to{transform:scale(1) translate(0);opacity:1}}@keyframes nav-pulse{0%{box-shadow:0 0 rgba(var(--bs-primary-rgb),.4)}70%{box-shadow:0 0 0 6px rgba(var(--bs-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--bs-primary-rgb),0)}}.sidebar-nav .nav-link.active{animation:nav-pulse 2s infinite}.nav-link[data-bs-toggle=collapse] .bi-chevron-down{transition:transform .25s cubic-bezier(.4,0,.2,1)}.nav-link[aria-expanded=true] .bi-chevron-down{transform:rotate(180deg) scale(1.1)}.mojo-sidebar-theme-auto .sidebar{background-color:var(--bs-body-bg);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link{color:var(--bs-body-color)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link:hover{background-color:var(--bs-secondary-bg)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link.active{background-color:var(--bs-primary);color:var(--bs-white)}.mojo-sidebar-collapsed .nav-text,.mojo-sidebar-collapsed .nav-arrow{opacity:0;width:0;overflow:hidden}.mojo-sidebar-collapsed .sidebar-nav .nav-link{justify-content:center;padding-left:.5rem;padding-right:.5rem}.mojo-sidebar-collapsed .nav-submenu{display:none!important}.mojo-portal-fixed .portal-layout{position:fixed;inset:0;z-index:var(--mojo-zindex-fixed)}.mojo-portal-sticky-sidebar #portal-sidebar{position:sticky;top:0;height:100vh}.mojo-portal-content-padded .portal-content{padding:var(--mojo-spacer-lg)}.mojo-portal-content-flush .portal-content,.mobile-layout .portal-content{padding:0}.mojo-sidebar-slide #portal-sidebar{transition:transform var(--mojo-transition-base) ease-in-out}.mojo-sidebar-fade #portal-sidebar{transition:opacity var(--mojo-transition-base) ease-in-out}.mojo-sidebar-scale #portal-sidebar{transition:transform var(--mojo-transition-base) cubic-bezier(.34,1.56,.64,1)}.js-sidebar-transitioning *{pointer-events:none}.js-sidebar-ready{transition:all var(--mojo-transition-base)}@media (prefers-color-scheme: dark){.mojo-sidebar-theme-auto .sidebar{background-color:var(--bs-dark);color:var(--bs-light);border-right:1px solid var(--bs-gray-800)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link{color:var(--bs-gray-300)}.mojo-sidebar-theme-auto .sidebar-nav .nav-link:hover{background-color:#ffffff1a;color:var(--bs-white)}}.mojo-sidebar-collapsed .nav-link:focus-visible{outline:2px solid var(--bs-primary);outline-offset:-2px;z-index:1}.mojo-skip-to-content{position:absolute;top:-40px;left:6px;background:var(--bs-primary);color:#fff;padding:8px;text-decoration:none;z-index:var(--mojo-zindex-tooltip);border-radius:var(--mojo-border-radius);font-size:.875rem}.mojo-skip-to-content:focus{top:6px}.portal-container.mobile-layout:not(.hide-sidebar){overflow:hidden}.portal-container.mobile-layout:not(.hide-sidebar) .portal-body{pointer-events:none}.group-selection-sidebar{background:#fff;border-right:1px solid var(--bs-border-color)}.group-selection-sidebar .form-control-sm{font-size:.875rem}.group-item{cursor:pointer;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05);position:relative}.group-item:last-child{border-bottom:none}.group-item:hover{background-color:#f8f9fa!important;border-left:3px solid var(--bs-primary)}.group-item:active{background-color:#e9ecef!important;transform:translate(1px)}.group-item .bi-chevron-right{opacity:0;transition:opacity .2s ease}.group-item:hover .bi-chevron-right{opacity:1}.group-header{margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid rgba(0,0,0,.1)}.group-header .cursor-pointer{cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease}.group-header .cursor-pointer:hover{background-color:#f8f9fa!important}.group-header .bi-chevron-down{transition:transform .2s ease}.group-header .cursor-pointer:hover .bi-chevron-down{transform:rotate(180deg)}.sidebar-dark .group-selection-sidebar{background:#2c3e50;border-right-color:#34495e}.sidebar-dark .group-item{border-bottom-color:#ffffff0d}.sidebar-dark .group-item:hover{background-color:#34495e!important}.sidebar-dark .group-item:active{background-color:#3d566e!important}.sidebar-dark .group-header{border-bottom-color:#ffffff1a}.sidebar-dark .group-header .cursor-pointer:hover{background-color:#34495e!important}.sidebar-dark .text-muted{color:#a9d0f6bf!important}.group-selection-sidebar .spinner-border-sm{width:1rem;height:1rem}.group-selection-sidebar .text-center{color:var(--bs-secondary)}.group-selection-sidebar .form-control:focus{border-color:var(--bs-primary);box-shadow:0 0 0 .2rem rgba(var(--bs-primary-rgb),.25)}.group-selection-sidebar .bi-inbox,.group-selection-sidebar .bi-search{color:var(--bs-secondary)}.group-selection-sidebar .bg-light{background-color:#00000005!important}.sidebar-dark .group-selection-sidebar .bg-light{background-color:#ffffff05!important}.group-selection-sidebar .text-decoration-none:hover{color:var(--bs-primary)!important}.simple-search-view{background-color:var(--bs-body-bg);color:var(--bs-body-color);border-right:1px solid var(--bs-border-color);box-shadow:var(--bs-box-shadow)}.modal-body .simple-search-view>div:first-child{position:sticky;top:0;z-index:10;background-color:var(--bs-body-bg)}[data-bs-theme=dark] .modal-body .simple-search-view>div:first-child{background-color:var(--bs-body-bg)}.collapse-sidebar .simple-search-view{background-color:var(--mojo-topnav-bg)!important}.collapse-sidebar .simple-search-view>*{display:none!important}.simple-search-item{cursor:pointer;transition:background-color .15s ease-in-out,transform .15s ease-in-out;border-radius:.25rem}.simple-search-item:hover{background-color:#0000320d;transform:translateY(-1px)}[data-bs-theme=dark] .simple-search-item:hover{background-color:#ffffff1a}.simple-search-exit-btn{width:20px;height:20px;margin-top:-5px}.simple-search-clear-btn{width:24px;height:24px;border-radius:50%}.navbar-nav .nav-item button[data-action=show-selector]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:250px;display:inline-flex;align-items:center}.navbar-nav .nav-item button[data-action=show-selector] .group-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 768px){.navbar-nav .nav-item button[data-action=show-selector]{max-width:150px}}.timeline{position:relative;padding-left:2rem}.timeline:before{content:"";position:absolute;left:.75rem;top:0;bottom:0;width:2px;background-color:#dee2e6}.timeline-item{position:relative;margin-bottom:1.5rem}.timeline-marker{position:absolute;left:-2rem;top:.125rem;width:1.5rem;height:1.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;color:#fff;border:2px solid white;box-shadow:0 2px 4px #0000001a}.timeline-marker-info{background-color:#0dcaf0}.timeline-marker-primary{background-color:#0d6efd}.timeline-marker-success{background-color:#198754}.timeline-marker-danger{background-color:#dc3545}.timeline-marker-warning{background-color:#ffc107;color:#000}.timeline-marker-secondary{background-color:#6c757d}.timeline-content{background-color:#f8f9fa;padding:1rem;border-radius:.375rem;border:1px solid #dee2e6}.job-status-indicator{display:inline-flex;align-items:center;gap:.5rem}.job-health-indicator{width:12px;height:12px;border-radius:50%;display:inline-block}.health-healthy{background-color:#198754}.health-warning{background-color:#ffc107}.health-critical{background-color:#dc3545}.health-unknown{background-color:#6c757d}.job-stats-header .card{transition:transform .2s ease,box-shadow .2s ease}.job-stats-header .card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026!important}.job-health-header .health-indicator{animation:pulse 2s infinite}@keyframes pulse{0%{opacity:1}50%{opacity:.7}to{opacity:1}}.logs-container{background-color:#1e1e1e!important;color:#d4d4d4!important}.logs-container .text-info{color:#9cdcfe!important}.logs-container .text-warning{color:#dcdcaa!important}.logs-container .text-danger{color:#f14c4c!important}.logs-container .text-success{color:#4ec9b0!important}.job-details-view pre code{font-size:.875rem;line-height:1.4}@media (max-width: 768px){.timeline{padding-left:1.5rem}.timeline-marker{left:-1.75rem;width:1.25rem;height:1.25rem;font-size:.625rem}.timeline-content{padding:.75rem}}.channel-status-badge{font-size:.75rem;padding:.25rem .5rem}.runner-utilization{height:4px;background-color:#e9ecef;border-radius:2px;overflow:hidden}.runner-utilization-fill{height:100%;transition:width .3s ease}.runner-utilization-low{background-color:#198754}.runner-utilization-medium{background-color:#ffc107}.runner-utilization-high{background-color:#fd7e14}.runner-utilization-critical{background-color:#dc3545}.mojo-select-cell,.mojo-select-all-cell{background-color:transparent;cursor:pointer;transition:background-color .2s ease;text-align:center;vertical-align:middle;width:40px;height:40px;display:flex;align-items:center;justify-content:center}.mojo-select-cell.selected,.mojo-select-all-cell.selected{background-color:transparent}.mojo-checkbox{height:20px;width:20px;border-radius:6px;border:2px solid var(--bs-border-color);background-color:var(--bs-body-bg);display:flex;align-items:center;justify-content:center;transition:all .2s ease}.mojo-checkbok:focused,.mojo-checkbok:hover{box-shadow:0 0 0 .25rem #3874ff40}.mojo-select-cell:hover .mojo-checkbox{box-shadow:0 0 0 .25rem #3874ff40}.mojo-select-cell.selected .mojo-checkbox,.mojo-select-all-cell.selected .mojo-checkbox{color:#fff;background-color:var(--bs-primary);border-color:var(--bs-primary)}.mojo-checkbox i{font-size:1rem;opacity:0;transition:opacity .2s ease}.mojo-select-cell.selected .mojo-checkbox i,.mojo-select-all-cell.selected .mojo-checkbox i{opacity:1}.mojo-select-all-cell.indeterminate .mojo-checkbox{border-color:var(--bs-primary);background-color:var(--bs-primary)}.mojo-select-all-cell.indeterminate .mojo-checkbox i{opacity:1;color:#fff}.table-page-container{position:relative}.mojo-table-wrapper{padding:1rem}.mojo-table-loading{position:absolute;top:0;left:0;right:0;background-color:var(--bs-body-bg);opacity:.8;height:100%}.table-page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:1rem;margin-bottom:1.5rem}.table-container{position:relative;transition:opacity .3s ease}.table-container.is-loading{opacity:.7;pointer-events:none}.table-status-bar.table-status-top{border-top:none;border-bottom:1px solid var(--bs-border-color);padding-top:0;padding-bottom:.75rem;margin-bottom:1rem}.status-info{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.table-loading-overlay{position:absolute;inset:0;background:var(--bs-body-bg);opacity:.9;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.loading-content{padding:2rem;text-align:center}.loading-message{margin-top:1rem;color:var(--bs-secondary-color);font-size:.95rem}.loading-indicator{display:inline-flex;align-items:center;gap:.5rem}.error-indicator{animation:mojo-pulse 2s ease-in-out infinite;display:inline-flex;align-items:center;gap:.25rem}.table-actions-bottom{border-bottom:none;border-top:1px solid var(--bs-border-color);padding-top:1rem;padding-bottom:0;margin-top:1rem;margin-bottom:0}.batch-actions-panel{position:sticky;bottom:10px;box-shadow:0 1rem 3rem #0006;background-color:var(--bs-body-bg);height:60px;z-index:20;margin:0 8px}div.batch-select-count{font-size:1.5rem!important;background-color:var(--bs-primary);color:var(--bs-white);min-width:50px;text-align:center;height:60px;line-height:60px}div.batch-select-title{font-size:1.5rem!important;line-height:60px;height:60px}div.batch-select-action{cursor:pointer;color:var(--bs-primary-text-emphasis);transition:color .2s ease}div.batch-select-action:hover{color:var(--bs-primary)}div.batch-select-end{border-radius:0 4px 4px 0;background-color:var(--bs-primary);height:60px;width:10px}.batch-actions-panel-top{border-left:4px solid var(--bs-primary);border-color:var(--bs-info-border-subtle);margin:0!important;padding:.4rem;animation:slideDown .3s ease-out}.batch-actions-panel-top .batch-select-count{font-weight:700;color:var(--bs-primary);font-size:1.1rem}.batch-actions-panel-top button{transition:transform .2s ease,box-shadow .2s ease}.batch-actions-panel-top button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.btn-refresh:not(:disabled):hover .bi-arrow-clockwise{animation:mojo-spin .5s ease-in-out}.btn-add:not(:disabled):hover{transform:translateY(-1px);box-shadow:0 .25rem .5rem #0000001a}.btn-export:not(:disabled):hover .bi-download,.btn-import:not(:disabled):hover .bi-upload{animation:mojo-bounce .5s ease-in-out}.collection-select-view{position:relative}.collection-select-view .form-control.is-invalid{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath d='m5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.collection-select-view .dropdown-item:has(.spinner-border){justify-content:center;align-items:center;min-height:3rem}.collection-select-view .dropdown-item:focus-visible{outline:2px solid var(--bs-primary);outline-offset:-2px}.collection-select-view .dropdown-menu::-webkit-scrollbar{width:6px}.collection-select-view .dropdown-menu::-webkit-scrollbar-track{background:var(--bs-secondary-bg);border-radius:var(--bs-border-radius-sm)}.collection-select-view .dropdown-menu::-webkit-scrollbar-thumb{background:var(--bs-border-color);border-radius:var(--bs-border-radius-sm)}.collection-select-view .dropdown-menu::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary)}.collection-select-view .btn[data-action=clear-selection]{width:1.5rem;height:1.5rem;padding:0;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--bs-secondary);transition:color .15s ease-in-out}.collection-select-view .btn[data-action=clear-selection]:hover{color:var(--bs-danger)}.collection-select-view .btn[data-action=clear-selection]:focus{box-shadow:none;outline:2px solid var(--bs-primary);outline-offset:2px}.collection-select-view .btn[data-action=clear-selection] i{font-size:1rem}.collection-select-view .form-control.pe-5{padding-right:2.5rem!important}.text-truncate-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.data-view-item .data-view-label{font-size:.6rem}.table-container::-webkit-scrollbar{height:8px;width:8px}.table-container::-webkit-scrollbar-track{background:var(--bs-secondary-bg);border-radius:var(--bs-border-radius-sm)}.table-container::-webkit-scrollbar-thumb{background:var(--bs-border-color);border-radius:var(--bs-border-radius-sm)}.table-container::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}@keyframes mojo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes mojo-pulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes mojo-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@media (max-width: 768px){.table-page-header{padding-bottom:.75rem;margin-bottom:1rem}.batch-actions-panel-top{padding:.75rem!important}.batch-actions-panel-top .d-flex{flex-direction:column;gap:.75rem}.batch-actions-panel-top .batch-select-count{font-size:1rem}.page-title{font-size:1.5rem}.page-description{font-size:.9rem}.table-status-bar{padding:.5rem .75rem}.status-info{flex-direction:column;align-items:flex-start;gap:.5rem}.collection-select-view .dropdown-menu{max-height:200px}.collection-select-view .dropdown-item{padding:.75rem 1rem;font-size:1rem}}@media (max-width: 576px){.table-container{overflow-x:auto}.page-title{font-size:1.25rem}.loading-content{padding:1rem}.batch-actions-panel-top button{font-size:.875rem;padding:.25rem .5rem}.batch-actions-panel-top .btn-group{flex-wrap:wrap}}[data-bs-theme=dark] .table-loading-overlay{background:var(--bs-dark);opacity:.9}[data-bs-theme=dark] .batch-actions-panel{background-color:var(--bs-dark)}[data-bs-theme=dark] .batch-actions-panel-top{background-color:#0d6efd1a;border-color:#0d6efd4d}[data-bs-theme=dark] .collection-select-view .dropdown-menu::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}[data-bs-theme=dark] .collection-select-view .dropdown-menu::-webkit-scrollbar-thumb{background:var(--bs-border-color)}[data-bs-theme=dark] .collection-select-view .dropdown-menu::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}[data-bs-theme=dark] .collection-select-view .btn[data-action=clear-selection]{color:var(--bs-secondary)}[data-bs-theme=dark] .collection-select-view .btn[data-action=clear-selection]:hover{color:var(--bs-danger)}[data-bs-theme=dark] .collection-select-view .btn[data-action=clear-selection]:focus{outline-color:var(--bs-primary)}[data-bs-theme=dark] .table-container::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}[data-bs-theme=dark] .table-container::-webkit-scrollbar-thumb{background:var(--bs-border-color)}[data-bs-theme=dark] .table-container::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}.table-fullscreen{position:fixed!important;inset:0!important;width:100vw!important;height:100vh!important;z-index:9999!important;background:var(--bs-body-bg)!important;padding:1rem!important;overflow:auto!important}.table-fullscreen .mojo-table-wrapper{height:100%;display:flex;flex-direction:column;padding:0}.table-fullscreen .table-container{flex:1;overflow:auto;margin-bottom:1rem}.table-fullscreen .table{margin-bottom:0}.table-fullscreen .table-status-bar{flex-shrink:0;margin-top:auto;border-top:1px solid var(--bs-border-color);padding-top:1rem;background:var(--bs-body-bg)}.btn-fullscreen{transition:transform .2s ease,box-shadow .2s ease}.btn-fullscreen:hover{transform:scale(1.05)}.table-fullscreen .btn-fullscreen{background-color:var(--bs-primary);color:var(--bs-white);border-color:var(--bs-primary)}.table-fullscreen .btn-fullscreen:hover{background-color:var(--bs-primary);border-color:var(--bs-primary);opacity:.9}.table-fullscreen .table-container::-webkit-scrollbar{width:12px;height:12px}.table-fullscreen .table-container::-webkit-scrollbar-track{background:var(--bs-secondary-bg)}.table-fullscreen .table-container::-webkit-scrollbar-thumb{background:var(--bs-secondary);border-radius:6px}.table-fullscreen .table-container::-webkit-scrollbar-thumb:hover{background:var(--bs-secondary-color)}[data-bs-theme=dark] .table-fullscreen{background:var(--bs-dark)!important}[data-bs-theme=dark] .table-fullscreen .table-status-bar{background:var(--bs-dark)}.table-totals-row{background-color:var(--bs-light);border-top:2px solid var(--bs-primary);font-weight:500}.table-footer-label{color:var(--bs-emphasis-color);font-weight:600}.table-footer-total{color:var(--bs-primary);font-weight:600;text-align:right}[data-bs-theme=dark] .table-totals-row{background-color:var(--bs-dark);border-top-color:var(--bs-primary)}[data-bs-theme=dark] .table-footer-label{color:var(--bs-light)}[data-bs-theme=dark] .table-footer-total{color:var(--bs-primary)}.editable-cell{cursor:pointer;position:relative}.editable-cell:hover{background-color:#0d6efd0d}.editable-cell.editing{background-color:#0d6efd1a}.cell-editor{width:100%;max-width:100%}.cell-editor .form-control,.cell-editor .form-select{flex:1;min-width:0}.cell-editor .btn{white-space:nowrap;flex-shrink:0;min-width:auto;width:2rem;height:2rem;padding:0;display:flex;align-items:center;justify-content:center}.cell-editor .form-check{margin-bottom:0}.cell-editor .form-control:focus,.cell-editor .form-select:focus{border-color:#0d6efd;box-shadow:0 0 0 .25rem #0d6efd40}.cell-editor .d-flex.gap-1>*{flex-shrink:0}.cell-editor .form-switch .form-check-input{margin-left:0}.editable-cell .cell-content{padding:2px 4px;border-radius:3px;transition:background-color .15s ease-in-out}.editable-cell:hover .cell-content{background-color:#0d6efd1a}.editable-cell:after{content:"";position:absolute;top:4px;right:4px;width:0;height:0;border-left:4px solid transparent;border-top:4px solid rgba(108,117,125,.3);opacity:0;transition:opacity .15s ease-in-out}.editable-cell:hover:after{opacity:1}.cell-editor.saving{opacity:.7;pointer-events:none}.cell-editor.saving .btn{disabled:true}.cell-editor.saving-error{border-left:3px solid var(--bs-danger);background-color:#dc35451a}.cell-editor.saving-error .form-control,.cell-editor.saving-error .form-select{border-color:var(--bs-danger)}[data-bs-theme=dark] .editable-cell:hover{background-color:#0d6efd1a}[data-bs-theme=dark] .editable-cell.editing,[data-bs-theme=dark] .editable-cell:hover .cell-content{background-color:#0d6efd26}[data-bs-theme=dark] .editable-cell:after{border-top-color:#ffffff4d}@media (prefers-contrast: high){.collection-select-view .dropdown-item.active{background-color:var(--bs-emphasis-color);color:var(--bs-body-bg)}.mojo-checkbox{border-width:2px}}@media (prefers-reduced-motion: reduce){.table-container,.mojo-checkbox,.batch-select-action,.batch-actions-panel-top,.batch-actions-panel-top button{transition:none}@keyframes slideDown{0%,to{opacity:1;transform:none}}.btn-refresh:not(:disabled):hover .bi-arrow-clockwise,.btn-export:not(:disabled):hover .bi-download,.btn-import:not(:disabled):hover .bi-upload{animation:none}}.toast-service-success{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(25, 135, 84, .3);color:var(--bs-body-color);border-left:4px solid rgba(25,135,84,.8)}.toast-service-error{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(220, 53, 69, .3);color:var(--bs-body-color);border-left:4px solid rgba(220,53,69,.8)}.toast-service-warning{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(255, 193, 7, .3);color:var(--bs-body-color);border-left:4px solid rgba(255,193,7,.9)}.toast-service-info{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(13, 110, 253, .3);color:var(--bs-body-color);border-left:4px solid rgba(13,110,253,.8)}.toast-service-plain{--bs-toast-bg: rgba(248, 249, 250, .98);--bs-toast-border-color: rgba(0, 0, 0, .08);color:var(--bs-body-color)}.toast-service-icon{width:20px;height:20px;flex-shrink:0}.toast-service-success .toast-service-icon{color:#198754e6}.toast-service-error .toast-service-icon{color:#dc3545e6}.toast-service-warning .toast-service-icon{color:#ffc107}.toast-service-info .toast-service-icon{color:#0d6efde6}.toast-service-plain .toast-service-icon{color:#6c757dcc}.toast-service-close{filter:none;opacity:.6}.toast-service-close:hover{opacity:1}.toast-container{max-width:400px}.toast{transition:all .3s ease-in-out}.toast.showing{opacity:0;transform:translate(100%)}.toast.show{opacity:1;transform:translate(0)}.toast.hide{opacity:0;transform:translate(100%)}@media (max-width: 576px){.toast-container{max-width:calc(100vw - 20px);left:10px!important;right:10px!important;transform:none!important}.toast-container.position-fixed.top-0.start-50.translate-middle-x,.toast-container.position-fixed.bottom-0.start-50.translate-middle-x{left:10px!important;right:10px!important;transform:none!important;width:calc(100% - 20px)}}.toast-header{padding:.5rem .75rem;border-bottom:1px solid rgba(0,0,0,.1)}.toast-service-success .toast-header,.toast-service-error .toast-header,.toast-service-info .toast-header,.toast-service-warning .toast-header{border-bottom-color:#0000000f}.toast-body{padding:.75rem;word-wrap:break-word}.toast-body .toast-message{line-height:1.4}.toast-container .toast+.toast{margin-top:.5rem}@media (prefers-color-scheme: dark){.toast-service-plain{--bs-toast-bg: rgba(33, 37, 41, .95);--bs-toast-border-color: rgba(255, 255, 255, .1);color:var(--bs-body-color)}}.toast-progress{position:absolute;bottom:0;left:0;height:3px;background-color:#ffffff4d;border-radius:0 0 .375rem .375rem;transition:width linear}.toast-actions{padding:.25rem .75rem .75rem;display:flex;gap:.5rem}.toast-actions .btn{font-size:.875rem;padding:.25rem .75rem}.chat-view{display:flex;flex-direction:column;height:100%}.chat-container{display:flex;flex-direction:column;height:100%;width:100%;border:1px solid #dee2e6;border-radius:8px;overflow:hidden;background:#fff}.chat-messages{flex:1;overflow-y:auto;overflow-x:hidden;padding:20px;background:#fff}.chat-input-wrapper{flex-shrink:0}.chat-theme-compact .message-item{display:flex;padding:12px;border-bottom:1px solid #f1f3f5;transition:background-color .15s ease}.chat-theme-compact .message-item:hover{background:#f8f9fa}.chat-theme-compact .message-item:last-child{border-bottom:none}.chat-theme-compact .message-avatar{width:36px;height:36px;border-radius:50%;background:#6c757d;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:600;margin-right:12px;flex-shrink:0;overflow:hidden}.chat-theme-compact .message-content{flex:1;min-width:0}.chat-theme-compact .message-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;gap:8px}.chat-theme-compact .message-author{font-weight:600;font-size:.9rem;color:#212529}.chat-theme-compact .message-time{font-size:.75rem;color:#6c757d;white-space:nowrap}.chat-theme-compact .message-text{font-size:.9rem;color:#212529;line-height:1.5;word-wrap:break-word;white-space:pre-wrap}.chat-theme-compact .chat-message-system{background:#f8f9fa;border-left:3px solid #0d6efd;margin:8px 0;padding:8px 12px}.chat-theme-bubbles .chat-message{margin-bottom:12px}.chat-theme-bubbles .message-bubble-wrapper{display:flex;flex-direction:column;max-width:70%}.chat-theme-bubbles .message-left .message-bubble-wrapper{align-items:flex-start}.chat-theme-bubbles .message-right .message-bubble-wrapper{align-items:flex-end;margin-left:auto}.chat-theme-bubbles .message-meta{font-size:.75rem;color:#6c757d;margin-bottom:4px;padding:0 4px}.chat-theme-bubbles .message-right .message-meta{text-align:right}.chat-theme-bubbles .message-bubble{padding:10px 14px;border-radius:18px;word-wrap:break-word;max-width:100%}.chat-theme-bubbles .message-left .message-bubble{background:#e9ecef;color:#212529}.chat-theme-bubbles .message-right .message-bubble{background:#0d6efd;color:#fff}.chat-theme-bubbles .message-text{font-size:.9rem;line-height:1.5;white-space:pre-wrap}.chat-theme-bubbles .chat-message-system{max-width:100%;margin:16px auto}.chat-input-view{border-top:1px solid #dee2e6;background:#f8f9fa;width:100%}.chat-input-container{padding:15px;position:relative;width:100%}.chat-input-container.drag-over{background:#e7f3ff;border-color:#0d6efd}.chat-input-container.drag-active:before{content:"Drop files here";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:1.2rem;color:#0d6efd;font-weight:600;pointer-events:none;z-index:10}.chat-input-wrapper{position:relative;display:flex;align-items:flex-end;gap:8px}.chat-input{flex:1;border:1px solid #ced4da;border-radius:20px;padding:10px 15px;resize:none;max-height:150px;font-size:.9rem;transition:border-color .15s ease}.chat-input:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 .2rem #0d6efd40}.chat-send-btn{width:40px;height:40px;border-radius:50%;padding:0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.chat-send-btn i{font-size:1rem}.chat-input-footer{margin-top:8px;font-size:.85rem}.chat-input-attachments{margin-bottom:10px}.attachment-preview{display:inline-flex;align-items:center;gap:8px;background:#e9ecef;padding:8px 12px;border-radius:8px;margin-right:8px;margin-bottom:8px;font-size:.85rem}.attachment-preview.upload-complete{background:#d1e7dd}.attachment-preview.upload-error{background:#f8d7da}.attachment-info{display:flex;align-items:center;gap:6px}.attachment-name{font-weight:500;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-size{color:#6c757d;font-size:.75rem}.attachment-progress{min-width:100px}.attachment-remove{padding:0;margin:0;line-height:1}.message-text .file-attachment,[data-container=attachments] .file-attachment{display:inline-block;margin-top:8px;padding:8px 12px;background:#0000000d;border:1px solid rgba(0,0,0,.1);border-radius:8px;font-size:.85rem;transition:background-color .15s ease}.message-text .file-attachment:hover,[data-container=attachments] .file-attachment:hover{background:#0000001a}.message-text .file-attachment i,[data-container=attachments] .file-attachment i{margin-right:6px}.chat-theme-bubbles .message-right .file-attachment{background:#fff3;border-color:#ffffff4d;color:#fff}.chat-message-system{text-align:center;padding:8px 12px;margin:12px 0}.chat-messages::-webkit-scrollbar{width:8px}.chat-messages::-webkit-scrollbar-track{background:#f1f3f5}.chat-messages::-webkit-scrollbar-thumb{background:#adb5bd;border-radius:4px}.chat-messages::-webkit-scrollbar-thumb:hover{background:#6c757d}@media (max-width: 768px){.chat-theme-bubbles .message-bubble-wrapper{max-width:85%}.chat-theme-compact .message-avatar{width:32px;height:32px;font-size:.75rem}.attachment-name{max-width:150px}}.badge-sm{font-size:.7rem;padding:2px 6px}/**
2
2
  * MOJO Authentication System CSS
3
3
  * Complete styling for MOJO Framework authentication pages
4
4
  *
package/dist/docit.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./chunks/WebApp-tr4XJzcb.js"),e=require("./chunks/TopNav-DQ9GflSr.js"),o=require("./chunks/Page-d5ciAhS1.js"),i=require("./chunks/ContextMenu-CmJitjwf.js"),s=require("./chunks/TokenManager-CJBYcVqs.js");class DocNavSidebar extends t.View{constructor(t={}){super({className:"docit-sidebar-nav",tagName:"nav",...t}),this.singleBookMode=t.singleBookMode||!1,this.books=t.books,this.docPages=t.docPages,this.activeUser=t.activeUser,this.currentBook=null,this.currentDocPage=null}async onInit(){await super.onInit(),this.getApp().events.on("page:show",this._onPageShow.bind(this))}async _onPageShow({query:t}){const e=t.doc_book,o=t.doc_page,i=this.getApp();if(e){const t=this.books.findWhere({slug:e});!t||this.currentBook&&this.currentBook.id===t.id||(await i.setActiveBook(t),this.currentBook=i.currentBook)}else this.currentBook&&(await i.setActiveBook(null),this.currentBook=null);this.currentDocPage=o?this.docPages.findWhere({slug:o}):null,this.render()}getTemplate(){return'\n <div class="docit-nav-body pt-3">\n {{#currentBook}}\n {{#docPages.models}}\n <a href="#" class="docit-page-link {{#isActive}}active{{/isActive}}"\n data-action="select-page" data-page-slug="{{slug}}">\n <i class="{{#metadata.icon}}{{metadata.icon}}{{/metadata.icon}}{{^metadata.icon}}bi bi-file-earmark-text{{/metadata.icon}} me-2"></i>\n <span>{{title|capitalize}}</span>\n </a>\n {{/docPages.models}}\n {{^docPages.models}}\n <div class="docit-nav-empty"><p>No pages in this book.</p></div>\n {{/docPages.models}}\n {{/currentBook}}\n {{^currentBook}}\n {{#books.models}}\n <a href="#" class="docit-book-item" data-action="select-book" data-book-slug="{{slug}}">\n <i class="bi bi-book me-2"></i>\n <span class="book-title">{{title}}</span>\n <span class="badge bg-secondary ms-auto">{{page_count}}</span>\n </a>\n {{/books.models}}\n {{/currentBook}}\n </div>\n {{#currentBook}}\n <div class="docit-nav-footer">\n {{#canEdit}}\n <button class="btn btn-link w-100 mb-2" data-action="create-page">\n <i class="bi bi-plus-circle me-2"></i>\n Create New Page\n </button>\n {{/canEdit}}\n <button class="btn btn-link w-100" data-action="back-to-books">\n <i class="bi bi-arrow-left me-2"></i>\n Back to Books\n </button>\n </div>\n {{/currentBook}}\n {{^currentBook}}\n {{#canEdit}}\n <div class="docit-nav-footer">\n <button class="btn btn-link w-100" data-action="create-book">\n <i class="bi bi-plus-circle me-2"></i>\n Create New Book\n </button>\n </div>\n {{/canEdit}}\n {{/currentBook}}\n '}async onBeforeRender(){await super.onBeforeRender(),this.canEdit=this.getApp().canEdit(),this.docPages&&this.currentDocPage&&this.docPages.forEach(t=>{t.isActive=t.id===this.currentDocPage.id})}async onActionSelectBook(t,e){t.preventDefault();const o=e.dataset.bookSlug,i=this.books.findWhere({slug:o});if(i){await this.getApp().setActiveBook(i);const t=this.docPages.at(0),e={doc_book:i.get("slug")};t&&(e.doc_page=t.get("slug")),this.getApp().showPage("docs",e,{})}}onActionSelectPage(t,e){t.preventDefault();const o=e.dataset.pageSlug;this.currentBook&&o&&this.getApp().showPage("docs",{doc_book:this.currentBook.get("slug"),doc_page:o},{})}async onActionBackToBooks(t,e){t.preventDefault(),await this.getApp().setActiveBook(null),this.getApp().showPage("home")}async onActionCreateBook(){await this.getApp().createNewBook()}async onActionCreatePage(){this.currentBook&&await this.getApp().createNewPage(this.currentBook)}setBooks(t){this.books=t,this.render()}setDocPages(t){this.docPages=t,this.render()}setCurrentBook(t){this.currentBook=t,this.render(),this.getApp().topnav&&(t?this.getApp().topnav.setBrand(t.get("title")):this.getApp().topnav.setBrand("Documentation"))}setUser(t){this.activeUser=t,this.render()}}class DocHomePage extends o.Page{constructor(t={}){super({pageName:"home",title:"Documentation",className:"docit-home-page",...t})}async getTemplate(){return'\n <div class="docit-empty-state vh-100 d-flex flex-column align-items-center justify-content-center">\n <i class="bi bi-collection" style="font-size: 4rem;"></i>\n <h3 class="mt-4">Welcome to the Documentation Portal</h3>\n <p class="text-muted">Please select a book from the sidebar to get started.</p>\n </div>\n '}}class DocitBook extends i.Model{static endpoint="/api/docit/book";buildUrl(t=null){return this.get("slug")&&!this.id?`/api/docit/book/slug/${this.get("slug")}`:this.id?`/api/docit/book/${this.id}`:this.endpoint}}class DocitBookList extends i.Collection{constructor(t={}){super({ModelClass:DocitBook,endpoint:"/api/docit/book",...t})}parse(t){return t.data&&t.data.status?(this.meta={...this.meta,total:t.data.count||0,graph:t.data.graph},t.data.data||[]):super.parse(t)}}class DocitPage extends i.Model{static endpoint="/api/docit/page";buildUrl(t=null){return this.get("slug")&&!this.id?`/api/docit/page/slug/${this.get("slug")}`:this.id?`/api/docit/page/${this.id}`:this.endpoint}}class DocitPageList extends i.Collection{constructor(t={}){super({ModelClass:DocitPage,endpoint:"/api/docit/page",...t})}parse(t){return t.data&&t.data.status?(this.meta={...this.meta,total:t.data.count||0,graph:t.data.graph,book:t.data.book},t.data.data||[]):super.parse(t)}}class DocPage extends o.Page{constructor(t={}){super({pageName:"docs",title:"Documentation",className:"docit-page",...t}),this.bookModel=null,this.model=null}async onInit(){await super.onInit(),this.pageContextMenu=new i.ContextMenu({config:this.getPageContextMenuConfig(),containerId:"page-context-menu"}),this.addChild(this.pageContextMenu)}getPageContextMenuConfig(){return{icon:"bi-three-dots",buttonClass:"btn btn-outline-secondary btn-sm",items:[{label:"View History",action:"view-history",icon:"bi-clock-history"},{type:"divider"},{label:"Edit Page Content",action:"edit-page",icon:"bi-pencil"},{label:"Edit Page Info",action:"edit-page-info",icon:"bi-list-ol"},{type:"divider"},{label:"Edit Book Info",action:"edit-book",icon:"bi-book"},{type:"divider"},{label:"Delete Page",action:"delete-page",icon:"bi-trash",danger:!0}]}}async getTemplate(){return'\n <div class="docit-page-container position-relative">\n {{#loading}}\n <div class="docit-loading">\n <div class="spinner-border" role="status">\n <span class="visually-hidden">Loading...</span>\n </div>\n </div>\n {{/loading}}\n\n {{^loading}}\n {{#model|bool}}\n <div class="docit-page-toolbar">\n <div class="row">\n <div class="col d-flex justify-content-end">\n <div data-container="page-context-menu"></div>\n </div>\n </div>\n </div>\n <article class="docit-page-content">\n {{{model.html}}}\n </article>\n\n <nav class="docit-page-nav">\n {{#prevPage}}\n <a href="#" class="docit-nav-prev" data-action="navigate-to-page" data-page-slug="{{slug}}">\n <i class="bi bi-arrow-left"></i>\n <div>\n <small>Previous</small>\n <span>{{title}}</span>\n </div>\n </a>\n {{/prevPage}}\n {{^prevPage}}\n <div></div>\n {{/prevPage}}\n\n {{#nextPage}}\n <a href="#" class="docit-nav-next" data-action="navigate-to-page" data-page-slug="{{slug}}">\n <div>\n <small>Next</small>\n <span>{{title}}</span>\n </div>\n <i class="bi bi-arrow-right"></i>\n </a>\n {{/nextPage}}\n\n <div class="my-3">\n <span class="text-muted">Last updated: {{model.modified|datetime}}</span>\n </div>\n </nav>\n {{/model|bool}}\n\n {{^model|bool}}\n <div class="docit-empty-state">\n <i class="bi bi-file-earmark-text"></i>\n <h3>Select a page</h3>\n <p>Choose a page from the sidebar to view its content.</p>\n </div>\n {{/model|bool}}\n {{/loading}}\n </div>\n '}async onParams(t={},e={}){await super.onParams(t,e),this.loading=!0,await this.render();const o=this.getApp(),i=o.bookSlug||e.doc_book,s=e.doc_page;if(i)try{if(i){if(!o.currentBook||o.currentBook.get("slug")!==i){const t=new DocitBook({slug:i});await t.fetch(),await o.setActiveBook(t)}if(this.bookModel=o.currentBook,s)this.model=new DocitPage({slug:s}),await this.model.fetch({graph:"html"});else{const t=o.docPages.at(0);t?(this.model=new DocitPage({id:t.id}),await this.model.fetch({graph:"html"})):this.model=null}}else this.bookModel=null,this.model=null;this.canEdit=o.canEdit(),this.setupNavigation()}catch(a){console.error("Failed to load page:",a),this.showError("Failed to load documentation page"),this.model=null}finally{this.loading=!1,await this.render(),o.events.emit("docit:page-rendered",{book:this.bookModel,page:this.model})}else setTimeout(()=>{o.showPage("home")},100)}setupNavigation(){if(!this.model)return this.prevPage=null,void(this.nextPage=null);const t=this.getApp().docPages.models,e=t.findIndex(t=>t.id===this.model.id);this.prevPage=e>0?{slug:t[e-1].get("slug"),title:t[e-1].get("title")}:null,this.nextPage=e<t.length-1?{slug:t[e+1].get("slug"),title:t[e+1].get("title")}:null}async onActionNavigateToPage(t,e){t.preventDefault();const o=e.dataset.pageSlug;o&&this.getApp().showPage("docs",{},{doc_book:this.bookModel.get("slug"),doc_page:o})}async onActionEditPage(t,e){t.preventDefault(),this.model&&this.getApp().showPage("edit",{id:this.model.id,doc_book:this.bookModel.get("slug"),doc_page:this.model.get("slug")},{})}async onActionViewHistory(t,e){this.showInfo("Revision history coming soon.")}async onActionEditPageInfo(t,e){this.model&&this.getApp().showModelForm({model:this.model,fields:[{label:"Title",name:"title",type:"text"},{label:"Order Priority",name:"order_priority"},{label:"Slug",name:"slug"}]})}async onActionEditBook(t,e){if(this.model){const t=this.getApp().sidebar.currentBook;if(!t)return;this.getApp().showModelForm({model:t,fields:[{label:"Title",name:"title",type:"text"},{label:"Order Priority",name:"order_priority"},{label:"Slug",name:"slug"},{label:"Is Active",name:"is_active",type:"switch"}]})}}async onActionDeletePage(t,e){if(this.model&&await this.getApp().showConfirm({title:"Delete Page",body:`Are you sure you want to delete "${this.model.get("title")}"?`,confirmText:"Delete",confirmClass:"btn-danger"})){await this.model.destroy(),this.showSuccess("Page deleted."),await this.getApp().setActiveBook(this.bookModel);const t=this.getApp().docPages.at(0);t?this.getApp().showPage("docs",{},{doc_book:this.bookModel.get("slug"),doc_page:t.get("slug")}):this.getApp().showPage("docs",{},{doc_book:this.bookModel.get("slug")})}}async onAfterRender(){await super.onAfterRender(),"undefined"!=typeof Prism&&this.model&&Prism.highlightAll()}}class DocEditPage extends o.Page{constructor(t={}){super({pageName:"edit",title:"Edit Page",className:"docit-edit-page",...t}),this.model=null,this.editor=null,this.isDirty=!1}async getTemplate(){return'\n <div class="docit-edit-container vh-100">\n {{#loading}}\n <div class="docit-loading"><div class="spinner-border"></div></div>\n {{/loading}}\n\n {{^loading}}{{#model}}\n <header class="docit-edit-header">\n <div class="docit-edit-title-row">\n <h2>Editing: {{model.title}}</h2>\n <div class="docit-edit-actions">\n <button class="btn btn-outline-secondary" data-action="cancel-edit">Cancel</button>\n <button class="btn btn-success" data-action="save-page">\n <i class="bi bi-check-lg"></i> Save Changes\n </button>\n </div>\n </div>\n </header>\n <div class="docit-edit-body flex-grow-1">\n <div id="editor"></div>\n </div>\n {{/model}}\n {{^model}}\n <div class="docit-error-state">\n <h3>Page Not Found</h3>\n <p>The page you\'re trying to edit could not be found.</p>\n <button class="btn btn-primary" data-action="go-back">Go Back</button>\n </div>\n {{/model}}{{/loading}}\n </div>\n '}async onParams(t={},e={}){await super.onParams(t,e);let o=null;e.id?o=new DocitPage({id:e.id}):e.doc_page&&(o=new DocitPage({slug:e.doc_page})),this.model=o,this.model&&await this.model.fetch({graph:"detail"})}initEditor(){!this.editor&&this.element.querySelector("#editor")&&(this.editor=new toastui.Editor({el:this.element.querySelector("#editor"),height:"100%",initialEditType:"markdown",previewStyle:"tab",initialValue:this.model.get("content")||""}),this.editor.on("change",()=>{this.isDirty=!0}))}async onActionSavePage(){if(this.model&&this.editor){this.saving=!0,this.getApp().showLoading("saving...");try{const t=this.editor.getMarkdown();await this.model.save({content:t}),this.isDirty=!1,this.getApp().toast.success("Page saved successfully."),this.getApp().showPage("docs",this.query)}catch(t){console.error("Failed to save page:",t),this.getApp().toast.error("Failed to save page.")}finally{this.saving=!1,this.getApp().hideLoading()}}}async onActionCancelEdit(){this.getApp().showPage("docs",this.query)}onActionGoBack(){this.getApp().showPage("docs")}async onBeforeRender(){await super.onBeforeRender(),this.editor&&(this.editor.destroy(),this.editor=null)}async onAfterRender(){await super.onAfterRender(),this.model&&this.initEditor()}async onBeforeDestroy(){this.editor?.destroy(),await super.onBeforeDestroy()}}class DocItApp extends t.WebApp{constructor(t={}){super({name:t.title||"DocIt Portal",version:t.version||"1.0.0",debug:t.debug||!1,container:t.container||"#app",defaultRoute:"home",basePath:t.basePath||"",...t}),this.bookSlug=t.bookSlug||null,this.showBookNav=void 0!==t.showBookNav?t.showBookNav:!this.bookSlug,this.theme=t.theme||"light",this.editPermissions=t.permissions?.edit||["manage_docit"],this.sidebarConfig={showSearch:!0,defaultCollapsed:!1,...t.sidebar},this.books=new DocitBookList,this.books.params.sort="-order_priority",this.docPages=new DocitPageList,this.docPages.params.sort="-order_priority",this.toast=new i.ToastService,this.currentBook=null,this.sidebar=null,this.isDocItReady=!1,this.tokenManager=new s.TokenManager,this.activeUser=null}async start(){try{this.setupDocItLayout(),await this.setupTopNav(),await this.setupSidebar(),await this.checkAuthStatus(),this.registerDocItPages(),await super.start(),await this.loadInitialData(),this.isDocItReady=!0,this.events.emit("docit:ready",{app:this})}catch(t){throw console.error("Failed to start DocIt:",t),this.showError("Failed to initialize documentation portal"),t}}setupDocItLayout(){const t="string"==typeof this.container?document.querySelector(this.container):this.container;if(!t)throw new Error(`Container not found: ${this.container}`);t.classList.add("docit-app",`docit-theme-${this.theme}`),t.innerHTML='\n <div class="docit-app-layout">\n <div id="topnav-container"></div>\n <div class="docit-body-layout">\n <div class="docit-sidebar" id="docit-sidebar"></div>\n <div class="docit-main">\n <div class="docit-content" id="page-container"></div>\n </div>\n </div>\n </div>\n ',this.pageContainer="#page-container"}async setupTopNav(){this.topnav=new e.TopNav({containerId:"topnav-container",brand:this.name,theme:"navbar navbar-expand-lg bg-dark navbar-dark",showSidebarToggle:!1,displayMode:"brand",rightItems:[{id:"login",icon:"bi-box-arrow-in-right",href:"/examples/auth/",label:"Login"}],userMenu:{label:"User",icon:"bi-person-circle",items:[{label:"Profile",icon:"bi-person",action:"profile"},{divider:!0},{label:"Logout",icon:"bi-box-arrow-right",action:"logout"}]}}),await this.topnav.render()}onActionToggleSidebar(){document.querySelector(".docit-layout").classList.toggle("sidebar-collapsed")}async setupSidebar(){this.sidebar=new DocNavSidebar({containerId:"docit-sidebar",app:this,singleBookMode:!!this.bookSlug,showBookNav:this.showBookNav,books:this.books,docPages:this.docPages,activeUser:this.activeUser,...this.sidebarConfig}),await this.sidebar.render()}registerDocItPages(){this.registerPage("home",DocHomePage,{route:"/",permissions:null}),this.registerPage("docs",DocPage,{route:"/docs",permissions:null}),this.registerPage("edit",DocEditPage,{route:"/edit",permissions:this.editPermissions})}async loadInitialData(){try{if(this.bookSlug){const t=new DocitBook({slug:this.bookSlug});if(await t.fetch(),!t.id)throw new Error(`Book with slug '${this.bookSlug}' not found.`);this.books.add(t),await this.setActiveBook(t)}else await this.books.fetch({graph:"list"}),this.sidebar.render()}catch(t){console.error("Failed to load initial data:",t),this.showError("Failed to load documentation")}}async setActiveBook(t){this.currentBook&&t&&this.currentBook.id===t.id||(this.currentBook=t,this.docPages.reset(),t&&await this.docPages.fetch({book:t.get("id"),graph:"list"}),this.sidebar.setCurrentBook(t),this.sidebar.setDocPages(this.docPages),this.events.emit("docit:book-changed",{book:t}))}async saveDocPageContent(t,e){const o=this.docPages.get(t)||new DocitPage({id:t});o.set("content",e);const i=await o.save();if(!i.success||!i.data.status)throw new Error("Failed to save doc page");return o}canEdit(){const t=this.activeUser;return!!t&&this.editPermissions.some(e=>!!t.hasPermission&&t.hasPermission(e))}async checkAuthStatus(){try{const t=this.tokenManager.getTokenInstance();if(!t||!t.isValid())return void this.events.emit("auth:unauthorized",{app:this});if(t.isExpired())return void this.events.emit("auth:expired",{app:this});this.tokenManager.startAutoRefresh(this),this.rest.setAuthToken(t.token);const e=new i.User({id:t.getUserId()});await e.fetch(),this.setActiveUser(e)}catch(t){console.error("Failed to check auth status:",t),this.events.emit("auth:error",{error:t,app:this})}}setActiveUser(t){return this.activeUser=t,this.sidebar&&this.sidebar.setUser(t),this.topnav&&(this.topnav.setUser(t),this.tonnav.render()),this.events.emit("user:changed",{user:t,app:this}),this}clearActiveUser(){return this.activeUser=null,this.tokenManager.clearTokens(),this.rest.clearAuth(),this.sidebar&&this.sidebar.setUser(null),this.events.emit("user:cleared",{app:this}),this}async logout(){this.clearActiveUser(),this.books.reset(),this.docPages.reset(),this.currentBook=null,this.events.emit("auth:logout",{app:this}),window.location.reload()}async createNewBook(){const t=await this.showModelForm({title:"Create New Book",model:new DocitBook,fields:[{name:"title",label:"Title",required:!0},{name:"slug",label:"Slug",required:!0,helpText:"A URL-friendly identifier."}]});t&&t.success&&(this.books.add(t.data),this.sidebar.render(),this.showSuccess("Book created successfully."))}async createNewPage(t){if(!t)return;const e=await this.showForm({title:"Create New Page",fields:[{name:"title",label:"Title",required:!0},{name:"slug",label:"Slug",required:!0,helpText:"A URL-friendly identifier."}]});e&&e.slug&&(e.book=t.id);const o=new DocitPage,i=await o.save(e);i&&i.success&&(this.docPages.add(o),this.sidebar.render(),this.showPage("edit",{id:o.id,doc_book:t.get("slug"),doc_page:o.get("slug")},{}))}static create(t={}){return new DocItApp(t)}static createForBook(t,e={}){return new DocItApp({...e,bookSlug:t,showBookNav:!1})}}exports.BUILD_TIME=t.BUILD_TIME,exports.VERSION=t.VERSION,exports.VERSION_INFO=t.VERSION_INFO,exports.VERSION_MAJOR=t.VERSION_MAJOR,exports.VERSION_MINOR=t.VERSION_MINOR,exports.VERSION_REVISION=t.VERSION_REVISION,exports.WebApp=t.WebApp,exports.DocEditPage=DocEditPage,exports.DocHomePage=DocHomePage,exports.DocItApp=DocItApp,exports.DocNavSidebar=DocNavSidebar,exports.DocPage=DocPage,exports.DocitBook=DocitBook,exports.DocitBookList=DocitBookList,exports.DocitPage=DocitPage,exports.DocitPageList=DocitPageList;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./chunks/WebApp-BR_7YgWu.js"),e=require("./chunks/TopNav-DNUFKcWJ.js"),o=require("./chunks/Page-DEBpjrLS.js"),i=require("./chunks/ContextMenu-BnUxQSjf.js"),s=require("./chunks/TokenManager-CJBYcVqs.js");class DocNavSidebar extends t.View{constructor(t={}){super({className:"docit-sidebar-nav",tagName:"nav",...t}),this.singleBookMode=t.singleBookMode||!1,this.books=t.books,this.docPages=t.docPages,this.activeUser=t.activeUser,this.currentBook=null,this.currentDocPage=null}async onInit(){await super.onInit(),this.getApp().events.on("page:show",this._onPageShow.bind(this))}async _onPageShow({query:t}){const e=t.doc_book,o=t.doc_page,i=this.getApp();if(e){const t=this.books.findWhere({slug:e});!t||this.currentBook&&this.currentBook.id===t.id||(await i.setActiveBook(t),this.currentBook=i.currentBook)}else this.currentBook&&(await i.setActiveBook(null),this.currentBook=null);this.currentDocPage=o?this.docPages.findWhere({slug:o}):null,this.render()}getTemplate(){return'\n <div class="docit-nav-body pt-3">\n {{#currentBook}}\n {{#docPages.models}}\n <a href="#" class="docit-page-link {{#isActive}}active{{/isActive}}"\n data-action="select-page" data-page-slug="{{slug}}">\n <i class="{{#metadata.icon}}{{metadata.icon}}{{/metadata.icon}}{{^metadata.icon}}bi bi-file-earmark-text{{/metadata.icon}} me-2"></i>\n <span>{{title|capitalize}}</span>\n </a>\n {{/docPages.models}}\n {{^docPages.models}}\n <div class="docit-nav-empty"><p>No pages in this book.</p></div>\n {{/docPages.models}}\n {{/currentBook}}\n {{^currentBook}}\n {{#books.models}}\n <a href="#" class="docit-book-item" data-action="select-book" data-book-slug="{{slug}}">\n <i class="bi bi-book me-2"></i>\n <span class="book-title">{{title}}</span>\n <span class="badge bg-secondary ms-auto">{{page_count}}</span>\n </a>\n {{/books.models}}\n {{/currentBook}}\n </div>\n {{#currentBook}}\n <div class="docit-nav-footer">\n {{#canEdit}}\n <button class="btn btn-link w-100 mb-2" data-action="create-page">\n <i class="bi bi-plus-circle me-2"></i>\n Create New Page\n </button>\n {{/canEdit}}\n <button class="btn btn-link w-100" data-action="back-to-books">\n <i class="bi bi-arrow-left me-2"></i>\n Back to Books\n </button>\n </div>\n {{/currentBook}}\n {{^currentBook}}\n {{#canEdit}}\n <div class="docit-nav-footer">\n <button class="btn btn-link w-100" data-action="create-book">\n <i class="bi bi-plus-circle me-2"></i>\n Create New Book\n </button>\n </div>\n {{/canEdit}}\n {{/currentBook}}\n '}async onBeforeRender(){await super.onBeforeRender(),this.canEdit=this.getApp().canEdit(),this.docPages&&this.currentDocPage&&this.docPages.forEach(t=>{t.isActive=t.id===this.currentDocPage.id})}async onActionSelectBook(t,e){t.preventDefault();const o=e.dataset.bookSlug,i=this.books.findWhere({slug:o});if(i){await this.getApp().setActiveBook(i);const t=this.docPages.at(0),e={doc_book:i.get("slug")};t&&(e.doc_page=t.get("slug")),this.getApp().showPage("docs",e,{})}}onActionSelectPage(t,e){t.preventDefault();const o=e.dataset.pageSlug;this.currentBook&&o&&this.getApp().showPage("docs",{doc_book:this.currentBook.get("slug"),doc_page:o},{})}async onActionBackToBooks(t,e){t.preventDefault(),await this.getApp().setActiveBook(null),this.getApp().showPage("home")}async onActionCreateBook(){await this.getApp().createNewBook()}async onActionCreatePage(){this.currentBook&&await this.getApp().createNewPage(this.currentBook)}setBooks(t){this.books=t,this.render()}setDocPages(t){this.docPages=t,this.render()}setCurrentBook(t){this.currentBook=t,this.render(),this.getApp().topnav&&(t?this.getApp().topnav.setBrand(t.get("title")):this.getApp().topnav.setBrand("Documentation"))}setUser(t){this.activeUser=t,this.render()}}class DocHomePage extends o.Page{constructor(t={}){super({pageName:"home",title:"Documentation",className:"docit-home-page",...t})}async getTemplate(){return'\n <div class="docit-empty-state vh-100 d-flex flex-column align-items-center justify-content-center">\n <i class="bi bi-collection" style="font-size: 4rem;"></i>\n <h3 class="mt-4">Welcome to the Documentation Portal</h3>\n <p class="text-muted">Please select a book from the sidebar to get started.</p>\n </div>\n '}}class DocitBook extends i.Model{static endpoint="/api/docit/book";buildUrl(t=null){return this.get("slug")&&!this.id?`/api/docit/book/slug/${this.get("slug")}`:this.id?`/api/docit/book/${this.id}`:this.endpoint}}class DocitBookList extends i.Collection{constructor(t={}){super({ModelClass:DocitBook,endpoint:"/api/docit/book",...t})}parse(t){return t.data&&t.data.status?(this.meta={...this.meta,total:t.data.count||0,graph:t.data.graph},t.data.data||[]):super.parse(t)}}class DocitPage extends i.Model{static endpoint="/api/docit/page";buildUrl(t=null){return this.get("slug")&&!this.id?`/api/docit/page/slug/${this.get("slug")}`:this.id?`/api/docit/page/${this.id}`:this.endpoint}}class DocitPageList extends i.Collection{constructor(t={}){super({ModelClass:DocitPage,endpoint:"/api/docit/page",...t})}parse(t){return t.data&&t.data.status?(this.meta={...this.meta,total:t.data.count||0,graph:t.data.graph,book:t.data.book},t.data.data||[]):super.parse(t)}}class DocPage extends o.Page{constructor(t={}){super({pageName:"docs",title:"Documentation",className:"docit-page",...t}),this.bookModel=null,this.model=null}async onInit(){await super.onInit(),this.pageContextMenu=new i.ContextMenu({config:this.getPageContextMenuConfig(),containerId:"page-context-menu"}),this.addChild(this.pageContextMenu)}getPageContextMenuConfig(){return{icon:"bi-three-dots",buttonClass:"btn btn-outline-secondary btn-sm",items:[{label:"View History",action:"view-history",icon:"bi-clock-history"},{type:"divider"},{label:"Edit Page Content",action:"edit-page",icon:"bi-pencil"},{label:"Edit Page Info",action:"edit-page-info",icon:"bi-list-ol"},{type:"divider"},{label:"Edit Book Info",action:"edit-book",icon:"bi-book"},{type:"divider"},{label:"Delete Page",action:"delete-page",icon:"bi-trash",danger:!0}]}}async getTemplate(){return'\n <div class="docit-page-container position-relative">\n {{#loading}}\n <div class="docit-loading">\n <div class="spinner-border" role="status">\n <span class="visually-hidden">Loading...</span>\n </div>\n </div>\n {{/loading}}\n\n {{^loading}}\n {{#model|bool}}\n <div class="docit-page-toolbar">\n <div class="row">\n <div class="col d-flex justify-content-end">\n <div data-container="page-context-menu"></div>\n </div>\n </div>\n </div>\n <article class="docit-page-content">\n {{{model.html}}}\n </article>\n\n <nav class="docit-page-nav">\n {{#prevPage}}\n <a href="#" class="docit-nav-prev" data-action="navigate-to-page" data-page-slug="{{slug}}">\n <i class="bi bi-arrow-left"></i>\n <div>\n <small>Previous</small>\n <span>{{title}}</span>\n </div>\n </a>\n {{/prevPage}}\n {{^prevPage}}\n <div></div>\n {{/prevPage}}\n\n {{#nextPage}}\n <a href="#" class="docit-nav-next" data-action="navigate-to-page" data-page-slug="{{slug}}">\n <div>\n <small>Next</small>\n <span>{{title}}</span>\n </div>\n <i class="bi bi-arrow-right"></i>\n </a>\n {{/nextPage}}\n\n <div class="my-3">\n <span class="text-muted">Last updated: {{model.modified|datetime}}</span>\n </div>\n </nav>\n {{/model|bool}}\n\n {{^model|bool}}\n <div class="docit-empty-state">\n <i class="bi bi-file-earmark-text"></i>\n <h3>Select a page</h3>\n <p>Choose a page from the sidebar to view its content.</p>\n </div>\n {{/model|bool}}\n {{/loading}}\n </div>\n '}async onParams(t={},e={}){await super.onParams(t,e),this.loading=!0,await this.render();const o=this.getApp(),i=o.bookSlug||e.doc_book,s=e.doc_page;if(i)try{if(i){if(!o.currentBook||o.currentBook.get("slug")!==i){const t=new DocitBook({slug:i});await t.fetch(),await o.setActiveBook(t)}if(this.bookModel=o.currentBook,s)this.model=new DocitPage({slug:s}),await this.model.fetch({graph:"html"});else{const t=o.docPages.at(0);t?(this.model=new DocitPage({id:t.id}),await this.model.fetch({graph:"html"})):this.model=null}}else this.bookModel=null,this.model=null;this.canEdit=o.canEdit(),this.setupNavigation()}catch(a){console.error("Failed to load page:",a),this.showError("Failed to load documentation page"),this.model=null}finally{this.loading=!1,await this.render(),o.events.emit("docit:page-rendered",{book:this.bookModel,page:this.model})}else setTimeout(()=>{o.showPage("home")},100)}setupNavigation(){if(!this.model)return this.prevPage=null,void(this.nextPage=null);const t=this.getApp().docPages.models,e=t.findIndex(t=>t.id===this.model.id);this.prevPage=e>0?{slug:t[e-1].get("slug"),title:t[e-1].get("title")}:null,this.nextPage=e<t.length-1?{slug:t[e+1].get("slug"),title:t[e+1].get("title")}:null}async onActionNavigateToPage(t,e){t.preventDefault();const o=e.dataset.pageSlug;o&&this.getApp().showPage("docs",{},{doc_book:this.bookModel.get("slug"),doc_page:o})}async onActionEditPage(t,e){t.preventDefault(),this.model&&this.getApp().showPage("edit",{id:this.model.id,doc_book:this.bookModel.get("slug"),doc_page:this.model.get("slug")},{})}async onActionViewHistory(t,e){this.showInfo("Revision history coming soon.")}async onActionEditPageInfo(t,e){this.model&&this.getApp().showModelForm({model:this.model,fields:[{label:"Title",name:"title",type:"text"},{label:"Order Priority",name:"order_priority"},{label:"Slug",name:"slug"}]})}async onActionEditBook(t,e){if(this.model){const t=this.getApp().sidebar.currentBook;if(!t)return;this.getApp().showModelForm({model:t,fields:[{label:"Title",name:"title",type:"text"},{label:"Order Priority",name:"order_priority"},{label:"Slug",name:"slug"},{label:"Is Active",name:"is_active",type:"switch"}]})}}async onActionDeletePage(t,e){if(this.model&&await this.getApp().showConfirm({title:"Delete Page",body:`Are you sure you want to delete "${this.model.get("title")}"?`,confirmText:"Delete",confirmClass:"btn-danger"})){await this.model.destroy(),this.showSuccess("Page deleted."),await this.getApp().setActiveBook(this.bookModel);const t=this.getApp().docPages.at(0);t?this.getApp().showPage("docs",{},{doc_book:this.bookModel.get("slug"),doc_page:t.get("slug")}):this.getApp().showPage("docs",{},{doc_book:this.bookModel.get("slug")})}}async onAfterRender(){await super.onAfterRender(),"undefined"!=typeof Prism&&this.model&&Prism.highlightAll()}}class DocEditPage extends o.Page{constructor(t={}){super({pageName:"edit",title:"Edit Page",className:"docit-edit-page",...t}),this.model=null,this.editor=null,this.isDirty=!1}async getTemplate(){return'\n <div class="docit-edit-container vh-100">\n {{#loading}}\n <div class="docit-loading"><div class="spinner-border"></div></div>\n {{/loading}}\n\n {{^loading}}{{#model}}\n <header class="docit-edit-header">\n <div class="docit-edit-title-row">\n <h2>Editing: {{model.title}}</h2>\n <div class="docit-edit-actions">\n <button class="btn btn-outline-secondary" data-action="cancel-edit">Cancel</button>\n <button class="btn btn-success" data-action="save-page">\n <i class="bi bi-check-lg"></i> Save Changes\n </button>\n </div>\n </div>\n </header>\n <div class="docit-edit-body flex-grow-1">\n <div id="editor"></div>\n </div>\n {{/model}}\n {{^model}}\n <div class="docit-error-state">\n <h3>Page Not Found</h3>\n <p>The page you\'re trying to edit could not be found.</p>\n <button class="btn btn-primary" data-action="go-back">Go Back</button>\n </div>\n {{/model}}{{/loading}}\n </div>\n '}async onParams(t={},e={}){await super.onParams(t,e);let o=null;e.id?o=new DocitPage({id:e.id}):e.doc_page&&(o=new DocitPage({slug:e.doc_page})),this.model=o,this.model&&await this.model.fetch({graph:"detail"})}initEditor(){!this.editor&&this.element.querySelector("#editor")&&(this.editor=new toastui.Editor({el:this.element.querySelector("#editor"),height:"100%",initialEditType:"markdown",previewStyle:"tab",initialValue:this.model.get("content")||""}),this.editor.on("change",()=>{this.isDirty=!0}))}async onActionSavePage(){if(this.model&&this.editor){this.saving=!0,this.getApp().showLoading("saving...");try{const t=this.editor.getMarkdown();await this.model.save({content:t}),this.isDirty=!1,this.getApp().toast.success("Page saved successfully."),this.getApp().showPage("docs",this.query)}catch(t){console.error("Failed to save page:",t),this.getApp().toast.error("Failed to save page.")}finally{this.saving=!1,this.getApp().hideLoading()}}}async onActionCancelEdit(){this.getApp().showPage("docs",this.query)}onActionGoBack(){this.getApp().showPage("docs")}async onBeforeRender(){await super.onBeforeRender(),this.editor&&(this.editor.destroy(),this.editor=null)}async onAfterRender(){await super.onAfterRender(),this.model&&this.initEditor()}async onBeforeDestroy(){this.editor?.destroy(),await super.onBeforeDestroy()}}class DocItApp extends t.WebApp{constructor(t={}){super({name:t.title||"DocIt Portal",version:t.version||"1.0.0",debug:t.debug||!1,container:t.container||"#app",defaultRoute:"home",basePath:t.basePath||"",...t}),this.bookSlug=t.bookSlug||null,this.showBookNav=void 0!==t.showBookNav?t.showBookNav:!this.bookSlug,this.theme=t.theme||"light",this.editPermissions=t.permissions?.edit||["manage_docit"],this.sidebarConfig={showSearch:!0,defaultCollapsed:!1,...t.sidebar},this.books=new DocitBookList,this.books.params.sort="-order_priority",this.docPages=new DocitPageList,this.docPages.params.sort="-order_priority",this.toast=new i.ToastService,this.currentBook=null,this.sidebar=null,this.isDocItReady=!1,this.tokenManager=new s.TokenManager,this.activeUser=null}async start(){try{this.setupDocItLayout(),await this.setupTopNav(),await this.setupSidebar(),await this.checkAuthStatus(),this.registerDocItPages(),await super.start(),await this.loadInitialData(),this.isDocItReady=!0,this.events.emit("docit:ready",{app:this})}catch(t){throw console.error("Failed to start DocIt:",t),this.showError("Failed to initialize documentation portal"),t}}setupDocItLayout(){const t="string"==typeof this.container?document.querySelector(this.container):this.container;if(!t)throw new Error(`Container not found: ${this.container}`);t.classList.add("docit-app",`docit-theme-${this.theme}`),t.innerHTML='\n <div class="docit-app-layout">\n <div id="topnav-container"></div>\n <div class="docit-body-layout">\n <div class="docit-sidebar" id="docit-sidebar"></div>\n <div class="docit-main">\n <div class="docit-content" id="page-container"></div>\n </div>\n </div>\n </div>\n ',this.pageContainer="#page-container"}async setupTopNav(){this.topnav=new e.TopNav({containerId:"topnav-container",brand:this.name,theme:"navbar navbar-expand-lg bg-dark navbar-dark",showSidebarToggle:!1,displayMode:"brand",rightItems:[{id:"login",icon:"bi-box-arrow-in-right",href:"/examples/auth/",label:"Login"}],userMenu:{label:"User",icon:"bi-person-circle",items:[{label:"Profile",icon:"bi-person",action:"profile"},{divider:!0},{label:"Logout",icon:"bi-box-arrow-right",action:"logout"}]}}),await this.topnav.render()}onActionToggleSidebar(){document.querySelector(".docit-layout").classList.toggle("sidebar-collapsed")}async setupSidebar(){this.sidebar=new DocNavSidebar({containerId:"docit-sidebar",app:this,singleBookMode:!!this.bookSlug,showBookNav:this.showBookNav,books:this.books,docPages:this.docPages,activeUser:this.activeUser,...this.sidebarConfig}),await this.sidebar.render()}registerDocItPages(){this.registerPage("home",DocHomePage,{route:"/",permissions:null}),this.registerPage("docs",DocPage,{route:"/docs",permissions:null}),this.registerPage("edit",DocEditPage,{route:"/edit",permissions:this.editPermissions})}async loadInitialData(){try{if(this.bookSlug){const t=new DocitBook({slug:this.bookSlug});if(await t.fetch(),!t.id)throw new Error(`Book with slug '${this.bookSlug}' not found.`);this.books.add(t),await this.setActiveBook(t)}else await this.books.fetch({graph:"list"}),this.sidebar.render()}catch(t){console.error("Failed to load initial data:",t),this.showError("Failed to load documentation")}}async setActiveBook(t){this.currentBook&&t&&this.currentBook.id===t.id||(this.currentBook=t,this.docPages.reset(),t&&await this.docPages.fetch({book:t.get("id"),graph:"list"}),this.sidebar.setCurrentBook(t),this.sidebar.setDocPages(this.docPages),this.events.emit("docit:book-changed",{book:t}))}async saveDocPageContent(t,e){const o=this.docPages.get(t)||new DocitPage({id:t});o.set("content",e);const i=await o.save();if(!i.success||!i.data.status)throw new Error("Failed to save doc page");return o}canEdit(){const t=this.activeUser;return!!t&&this.editPermissions.some(e=>!!t.hasPermission&&t.hasPermission(e))}async checkAuthStatus(){try{const t=this.tokenManager.getTokenInstance();if(!t||!t.isValid())return void this.events.emit("auth:unauthorized",{app:this});if(t.isExpired())return void this.events.emit("auth:expired",{app:this});this.tokenManager.startAutoRefresh(this),this.rest.setAuthToken(t.token);const e=new i.User({id:t.getUserId()});await e.fetch(),this.setActiveUser(e)}catch(t){console.error("Failed to check auth status:",t),this.events.emit("auth:error",{error:t,app:this})}}setActiveUser(t){return this.activeUser=t,this.sidebar&&this.sidebar.setUser(t),this.topnav&&(this.topnav.setUser(t),this.tonnav.render()),this.events.emit("user:changed",{user:t,app:this}),this}clearActiveUser(){return this.activeUser=null,this.tokenManager.clearTokens(),this.rest.clearAuth(),this.sidebar&&this.sidebar.setUser(null),this.events.emit("user:cleared",{app:this}),this}async logout(){this.clearActiveUser(),this.books.reset(),this.docPages.reset(),this.currentBook=null,this.events.emit("auth:logout",{app:this}),window.location.reload()}async createNewBook(){const t=await this.showModelForm({title:"Create New Book",model:new DocitBook,fields:[{name:"title",label:"Title",required:!0},{name:"slug",label:"Slug",required:!0,helpText:"A URL-friendly identifier."}]});t&&t.success&&(this.books.add(t.data),this.sidebar.render(),this.showSuccess("Book created successfully."))}async createNewPage(t){if(!t)return;const e=await this.showForm({title:"Create New Page",fields:[{name:"title",label:"Title",required:!0},{name:"slug",label:"Slug",required:!0,helpText:"A URL-friendly identifier."}]});e&&e.slug&&(e.book=t.id);const o=new DocitPage,i=await o.save(e);i&&i.success&&(this.docPages.add(o),this.sidebar.render(),this.showPage("edit",{id:o.id,doc_book:t.get("slug"),doc_page:o.get("slug")},{}))}static create(t={}){return new DocItApp(t)}static createForBook(t,e={}){return new DocItApp({...e,bookSlug:t,showBookNav:!1})}}exports.BUILD_TIME=t.BUILD_TIME,exports.VERSION=t.VERSION,exports.VERSION_INFO=t.VERSION_INFO,exports.VERSION_MAJOR=t.VERSION_MAJOR,exports.VERSION_MINOR=t.VERSION_MINOR,exports.VERSION_REVISION=t.VERSION_REVISION,exports.WebApp=t.WebApp,exports.DocEditPage=DocEditPage,exports.DocHomePage=DocHomePage,exports.DocItApp=DocItApp,exports.DocNavSidebar=DocNavSidebar,exports.DocPage=DocPage,exports.DocitBook=DocitBook,exports.DocitBookList=DocitBookList,exports.DocitPage=DocitPage,exports.DocitPageList=DocitPageList;
2
2
  //# sourceMappingURL=docit.cjs.js.map
package/dist/docit.es.js CHANGED
@@ -1,8 +1,8 @@
1
- import { V as View, W as WebApp } from "./chunks/WebApp-DTQaFBtw.js";
2
- import { B, b, a, c, e, f } from "./chunks/WebApp-DTQaFBtw.js";
3
- import { T as TopNav } from "./chunks/TopNav-DfRbW9yS.js";
4
- import { P as Page } from "./chunks/Page-DqK83eSR.js";
5
- import { M as Model, C as Collection, b as ContextMenu, T as ToastService, U as User } from "./chunks/ContextMenu-61Bf4lAf.js";
1
+ import { V as View, W as WebApp } from "./chunks/WebApp-AGmBnM8H.js";
2
+ import { B, b, a, c, e, f } from "./chunks/WebApp-AGmBnM8H.js";
3
+ import { T as TopNav } from "./chunks/TopNav-BLY2EcD5.js";
4
+ import { P as Page } from "./chunks/Page-Bv3lkFL5.js";
5
+ import { M as Model, C as Collection, b as ContextMenu, T as ToastService, U as User } from "./chunks/ContextMenu-b_OrhKHs.js";
6
6
  import { T as TokenManager } from "./chunks/TokenManager-CAZNcCMs.js";
7
7
  class DocNavSidebar extends View {
8
8
  constructor(options = {}) {